mirror of https://github.com/BOINC/boinc.git
*** empty log message ***
svn path=/trunk/boinc/; revision=6300
This commit is contained in:
parent
24ebadef4c
commit
d52a600318
|
@ -7504,3 +7504,22 @@ David 7 June 2005
|
|||
lib/
|
||||
msg_log.C
|
||||
network.C,h
|
||||
|
||||
David 7 June 2005
|
||||
- FILE_INFO::verify_file(): if a file fails verification,
|
||||
set its "status" field to the appropriate error code.
|
||||
This wasn't being done, so in most cases the
|
||||
core client would verify the file over and over.
|
||||
|
||||
This was exacerbated by a bug I introduced 7 months and 3 weeks ago
|
||||
(and fixed earlier today).
|
||||
In CLIENT_STATE::update_result() I had
|
||||
|
||||
if (now - last_time < 1.0) return false;
|
||||
last_time = 0;
|
||||
|
||||
It should be "now", not zero. This caused input files to
|
||||
get checked 10 times a second, rather than once.
|
||||
|
||||
client/
|
||||
cs_files.C
|
||||
|
|
|
@ -89,7 +89,13 @@ int CLIENT_STATE::make_project_dirs() {
|
|||
// 2) if a needed file is already on disk (PERS_FILE_XFER::start_xfer())
|
||||
// 3) in checking whether a result's input files are available
|
||||
// (CLIENT_STATE::input_files_available()).
|
||||
// In this case we just check existence and size (no checksum)
|
||||
// In this case "strictI is false,
|
||||
// and we just check existence and size (no checksum)
|
||||
//
|
||||
// If a failure occurs, set the file's "status" field.
|
||||
// This will cause the app_version or workunit that used the file
|
||||
// to error out (via APP_VERSION::had_download_failure()
|
||||
// WORKUNIT::had_download_failure())
|
||||
//
|
||||
int FILE_INFO::verify_file(bool strict) {
|
||||
char cksum[64], pathname[256];
|
||||
|
@ -98,6 +104,10 @@ int FILE_INFO::verify_file(bool strict) {
|
|||
double size;
|
||||
|
||||
get_pathname(this, pathname);
|
||||
|
||||
// If the file isn't there at all, set status to FILE_NOT_PRESENT;
|
||||
// this will trigger a new download rather than erroring out
|
||||
//
|
||||
if (file_size(pathname, size)) {
|
||||
status = FILE_NOT_PRESENT;
|
||||
return ERR_FILE_MISSING;
|
||||
|
@ -111,6 +121,7 @@ int FILE_INFO::verify_file(bool strict) {
|
|||
}
|
||||
|
||||
if (nbytes && (nbytes != size) && (!log_flags.dont_check_file_sizes)) {
|
||||
status = ERR_WRONG_SIZE;
|
||||
return ERR_WRONG_SIZE;
|
||||
}
|
||||
|
||||
|
@ -121,6 +132,7 @@ int FILE_INFO::verify_file(bool strict) {
|
|||
msg_printf(project, MSG_ERROR, "Application file %s missing signature", name);
|
||||
msg_printf(project, MSG_ERROR, "This BOINC client cannot accept unsigned application files");
|
||||
error_msg = "missing signature";
|
||||
status = ERR_NO_SIGNATURE;
|
||||
return ERR_NO_SIGNATURE;
|
||||
}
|
||||
retval = verify_file2(
|
||||
|
@ -132,6 +144,7 @@ int FILE_INFO::verify_file(bool strict) {
|
|||
name
|
||||
);
|
||||
error_msg = "signature verification error";
|
||||
status = ERR_RSA_FAILED;
|
||||
return ERR_RSA_FAILED;
|
||||
}
|
||||
if (!verified) {
|
||||
|
@ -140,6 +153,7 @@ int FILE_INFO::verify_file(bool strict) {
|
|||
name
|
||||
);
|
||||
error_msg = "signature verification failed";
|
||||
status = ERR_RSA_FAILED;
|
||||
return ERR_RSA_FAILED;
|
||||
}
|
||||
} else if (strlen(md5_cksum)) {
|
||||
|
@ -150,6 +164,7 @@ int FILE_INFO::verify_file(bool strict) {
|
|||
name, retval
|
||||
);
|
||||
error_msg = "MD5 computation error";
|
||||
status = retval;
|
||||
return retval;
|
||||
}
|
||||
if (strcmp(cksum, md5_cksum)) {
|
||||
|
@ -160,6 +175,7 @@ int FILE_INFO::verify_file(bool strict) {
|
|||
"expected %s, got %s\n", md5_cksum, cksum
|
||||
);
|
||||
error_msg = "MD5 check failed";
|
||||
status = ERR_MD5_FAILED;
|
||||
return ERR_MD5_FAILED;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue