*** empty log message ***

svn path=/trunk/boinc/; revision=6300
This commit is contained in:
David Anderson 2005-06-07 23:12:47 +00:00
parent 24ebadef4c
commit d52a600318
2 changed files with 36 additions and 1 deletions

View File

@ -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

View File

@ -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;
}
}