Browse code

properly handle mirror access times (bb#606)

git-svn: trunk@3168

Tomasz Kojm authored on 2007/08/11 23:22:17
Showing 2 changed files
... ...
@@ -1,3 +1,10 @@
1
+Sat Aug 11 15:15:55 CEST 2007 (tk)
2
+----------------------------------
3
+  * freshclam/mirman.c: properly handle mirror access times (bb#606, only
4
+			outdated installations - three versions behind the
5
+			latest one were affected by this problem)
6
+			Reported by David F. Skoll <dfs*roaringpenguin.com>
7
+
1 8
 Fri Aug 10 11:15:25 BST 2007 (njh)
2 9
 ----------------------------------
3 10
   * clamav-milter:	Bug 614
... ...
@@ -103,7 +103,7 @@ int mirman_check(uint32_t ip, struct mirdat *mdat)
103 103
 	return 0;
104 104
 
105 105
     for(i = 0; i < mdat->num; i++) {
106
-	if(mdat->mirtab[i].ip == ip) {
106
+	if(mdat->mirtab[i].atime && mdat->mirtab[i].ip == ip) {
107 107
 
108 108
 	    if(mdat->dbflevel && (mdat->dbflevel > flevel) && (mdat->dbflevel - flevel > 3))
109 109
 		if(time(NULL) - mdat->mirtab[i].atime < 4 * 3600)
... ...
@@ -139,7 +139,7 @@ int mirman_update(uint32_t ip, struct mirdat *mdat, uint8_t broken)
139 139
     }
140 140
 
141 141
     if(found) {
142
-	mdat->mirtab[i].atime = (uint32_t) time(NULL);
142
+	mdat->mirtab[i].atime = 0; /* will be updated in mirman_write() */
143 143
 	if(broken)
144 144
 	    mdat->mirtab[i].fail++;
145 145
 	else
... ...
@@ -161,7 +161,7 @@ int mirman_update(uint32_t ip, struct mirdat *mdat, uint8_t broken)
161 161
 	    return -1;
162 162
 	}
163 163
 	mdat->mirtab[mdat->num].ip = ip;
164
-	mdat->mirtab[mdat->num].atime = (uint32_t) time(NULL);
164
+	mdat->mirtab[mdat->num].atime = 0;
165 165
 	mdat->mirtab[mdat->num].succ = 0;
166 166
 	mdat->mirtab[mdat->num].fail = 0;
167 167
 	mdat->mirtab[mdat->num].ignore = 0;
... ...
@@ -200,6 +200,7 @@ void mirman_list(const struct mirdat *mdat)
200 200
 int mirman_write(const char *file, struct mirdat *mdat)
201 201
 {
202 202
 	int fd;
203
+	unsigned int i;
203 204
 
204 205
 
205 206
     if(!mdat->num)
... ...
@@ -211,6 +212,10 @@ int mirman_write(const char *file, struct mirdat *mdat)
211 211
 	return -1;
212 212
     }
213 213
 
214
+    for(i = 0; i < mdat->num; i++)
215
+	if(!mdat->mirtab[i].atime)
216
+	    mdat->mirtab[i].atime = (uint32_t) time(NULL);
217
+
214 218
     if(write(fd, mdat->mirtab, mdat->num * sizeof(struct mirdat_ip)) == -1) {
215 219
 	logg("!Can't write to %s\n", file);
216 220
 	mirman_free(mdat);