git-svn: trunk@3168
Tomasz Kojm authored on 2007/08/11 23:22:17... | ... |
@@ -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); |