[Pkg-clamav-commits] [SCM] Debian repository for ClamAV branch, debian/unstable, updated. debian/0.95+dfsg-1-6156-g094ec9b

Tomasz Kojm tkojm at clamav.net
Sun Apr 4 01:08:59 UTC 2010


The following commit has been merged in the debian/unstable branch:
commit 284e1ee4baff33c3adb0ef28f712211f57d10d1c
Author: Tomasz Kojm <tkojm at clamav.net>
Date:   Tue Nov 3 22:54:10 2009 +0100

    libclamav, freshclam: fix handling of dbs when both daily.cvd and daily.cld
    are present in the db directory and ScriptedUpdates are turned off (bb#1739)

diff --git a/ChangeLog b/ChangeLog
index ee80dee..c08af01 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Tue Nov  3 22:50:30 CET 2009 (tk)
+---------------------------------
+ * libclamav, freshclam: fix handling of dbs when both daily.cvd and daily.cld
+			 are present in the db directory and ScriptedUpdates
+			 are turned off (bb#1739)
+
 Tue Nov  3 15:18:14 CET 2009 )tk)
 ---------------------------------
  * libclamav/readdb.c: return error if lsig contains redundant subsigs
diff --git a/freshclam/manager.c b/freshclam/manager.c
index af9dad6..91cc6a2 100644
--- a/freshclam/manager.c
+++ b/freshclam/manager.c
@@ -1684,6 +1684,13 @@ static int updatedb(const char *dbname, const char *hostname, char *ip, int *sig
 	if(unlink(localname))
 	    logg("^Can't unlink the old database file %s. Please remove it manually.\n", localname);
 
+    if(!optget(opts, "ScriptedUpdates")->enabled) {
+	snprintf(localname, sizeof(localname), "%s.cld", dbname);
+	if(!access(localname, R_OK))
+	    if(unlink(localname))
+		logg("^Can't unlink the old database file %s. Please remove it manually.\n", localname);
+    }
+
     logg("%s updated (version: %d, sigs: %d, f-level: %d, builder: %s)\n", newdb, current->version, current->sigs, current->fl, current->builder);
 
     if(flevel < current->fl) {
diff --git a/libclamav/readdb.c b/libclamav/readdb.c
index 0a56fcb..68fdbc4 100644
--- a/libclamav/readdb.c
+++ b/libclamav/readdb.c
@@ -1692,7 +1692,8 @@ static int cli_loaddbdir(const char *dirname, struct cl_engine *engine, unsigned
 	} result;
 #endif
 	char *dbfile;
-	int ret = CL_EOPEN;
+	int ret = CL_EOPEN, have_cld;
+	struct cl_cvd *daily_cld, *daily_cvd;
 
 
     cli_dbgmsg("Loading databases from %s\n", dirname);
@@ -1740,8 +1741,38 @@ static int cli_loaddbdir(const char *dirname, struct cl_engine *engine, unsigned
     }
 
     sprintf(dbfile, "%s"PATHSEP"daily.cld", dirname);
-    if(access(dbfile, R_OK))
-	sprintf(dbfile, "%s"PATHSEP"daily.cvd", dirname);
+    have_cld = !access(dbfile, R_OK);
+    if(have_cld) {
+	daily_cld = cl_cvdhead(dbfile);
+	if(!daily_cld) {
+	    cli_errmsg("cli_loaddbdir(): error parsing header of %s\n", dbfile);
+	    free(dbfile);
+	    closedir(dd);
+	    return CL_EMALFDB;
+	}
+    }
+    sprintf(dbfile, "%s"PATHSEP"daily.cvd", dirname); 
+    if(!access(dbfile, R_OK)) {
+	if(have_cld) {
+	    daily_cvd = cl_cvdhead(dbfile);
+	    if(!daily_cvd) {
+		cli_errmsg("cli_loaddbdir(): error parsing header of %s\n", dbfile);
+		free(dbfile);
+		if(have_cld)
+		    cl_cvdfree(daily_cld);
+		closedir(dd);
+		return CL_EMALFDB;
+	    }
+	    if(daily_cld->version > daily_cvd->version)
+		sprintf(dbfile, "%s"PATHSEP"daily.cld", dirname);
+	    cl_cvdfree(daily_cvd);
+	}
+    } else {
+	sprintf(dbfile, "%s"PATHSEP"daily.cld", dirname);
+    }
+    if(have_cld)
+	cl_cvdfree(daily_cld);
+
     if(!access(dbfile, R_OK) && (ret = cli_load(dbfile, engine, signo, options, NULL))) {
 	free(dbfile);
 	closedir(dd);
diff --git a/shared/misc.c b/shared/misc.c
index ea0b65c..080d4ec 100644
--- a/shared/misc.c
+++ b/shared/misc.c
@@ -117,6 +117,8 @@ void print_version(const char *dbdir)
 	char *fdbdir = NULL, *path;
 	const char *pt;
 	struct cl_cvd *daily;
+	time_t db_time;
+	unsigned int db_version = 0;
 
 
     if(dbdir)
@@ -136,17 +138,32 @@ void print_version(const char *dbdir)
     }
 
     sprintf(path, "%s"PATHSEP"daily.cvd", pt);
-    if(access(path, R_OK))
-	sprintf(path, "%s"PATHSEP"daily.cld", pt);
+    if(!access(path, R_OK)) {
+	daily = cl_cvdhead(path);
+	if(daily) {
+	    db_version = daily->version;
+	    db_time = daily->stime;
+	    cl_cvdfree(daily);
+	}
+    }
+
+    sprintf(path, "%s"PATHSEP"daily.cld", pt);
+    if(!access(path, R_OK)) {
+	daily = cl_cvdhead(path);
+	if(daily) {
+	    if(daily->version > db_version) {
+		db_version = daily->version;
+		db_time = daily->stime;
+	    }
+	    cl_cvdfree(daily);
+	}
+    }
 
     if(!dbdir)
 	free(fdbdir);
 
-    if(!access(path, R_OK) && (daily = cl_cvdhead(path))) {
-	    time_t t = (time_t) daily->stime;
-
-	printf("ClamAV %s/%d/%s", get_version(), daily->version, ctime(&t));
-	cl_cvdfree(daily);
+    if(db_version) {
+	printf("ClamAV %s/%u/%s", get_version(), db_version, ctime(&db_time));
     } else {
 	printf("ClamAV %s\n",get_version());
     }

-- 
Debian repository for ClamAV



More information about the Pkg-clamav-commits mailing list