[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