Better reaction wich -check_md5 if no MD5 array is loaded

This commit is contained in:
Thomas Schmitt 2009-08-13 20:36:21 +00:00
parent 14b101feef
commit 9a96860bad
4 changed files with 83 additions and 28 deletions

View File

@ -12474,22 +12474,31 @@ ex:;
int Xorriso_report_md5_outcome(struct XorrisO *xorriso, char *severity,
int flag)
{
if((xorriso->find_check_md5_result & 3) == 0) {
int has_md5;
has_md5= Xorriso_image_has_md5(xorriso, 0);
if (has_md5 <= 0) {
sprintf(xorriso->result_line,
"File contents and their MD5 checksums match.\n");
"There is no MD5 checksum array loaded.\n");
} else if(xorriso->find_check_md5_result & 1) {
sprintf(xorriso->result_line,
"Mismatch detected between file contents and MD5 checksums.\n");
} else if(xorriso->find_check_md5_result & 8) {
sprintf(xorriso->result_line,
"File contents and their MD5 checksums match.\n");
} else {
sprintf(xorriso->result_line,
"Not a single file with MD5 checksum was found.\n");
}
Xorriso_result(xorriso,0);
if(xorriso->find_check_md5_result & 2) {
sprintf(xorriso->result_line,
"Encountered other errors during MD5 checking.\n");
"Encountered errors other than non-match during MD5 checking.\n");
Xorriso_result(xorriso,0);
}
if(xorriso->find_check_md5_result & 4) {
if((xorriso->find_check_md5_result & 4) && has_md5) {
sprintf(xorriso->result_line,
"There were data files which had no MD5 and thus could not be checked.\n");
"There were data files which have no MD5 and thus could not be checked.\n");
Xorriso_result(xorriso,0);
}
if((xorriso->find_check_md5_result & 3) && strcmp(severity, "ALL") != 0) {
@ -13346,19 +13355,17 @@ int Xorriso_option_check_md5(struct XorrisO *xorriso,
struct FindjoB *job= NULL;
double mem_lut= 0.0;
if(!(flag&2)) {
Xorriso_pacifier_reset(xorriso, 0);
mem_lut= xorriso->last_update_time;
}
mem_pci= xorriso->pacifier_interval;
xorriso->pacifier_interval= 5.0;
ret= Xorriso_opt_args(xorriso, "-check_md5", argc, argv, *idx + 1,
&end_idx, &optc, &optv, 128);
if(ret<=0)
goto ex;
/* Interpret argv[*idx] as severity */
if(argc <= *idx) {
sprintf(xorriso->info_text,
"-check_md5: No event severity given for case of mismatch");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
ret= 0; goto ex;
}
severity= argv[*idx];
ret= Xorriso__text_to_sev(severity, &sev, 0);
@ -13366,14 +13373,24 @@ int Xorriso_option_check_md5(struct XorrisO *xorriso,
sprintf(xorriso->info_text, "-check_md5: Not a known severity name : ");
Text_shellsafe(severity, xorriso->info_text, 1);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(ret);
}
(*idx)++;
ret= Xorriso_opt_args(xorriso, "-check_md5", argc, argv, *idx,
&end_idx, &optc, &optv, 128);
if(ret<=0)
goto ex;
}
ret= Xorriso_image_has_md5(xorriso, 0);
if(ret <= 0) {
sprintf(xorriso->info_text,
"-check_md5: There is no MD5 checksum array loaded.");
if (strcmp(severity, "ALL") == 0)
severity= "WARNING";
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, severity, 0);
ret= -1; goto ex;
}
if(!(flag&2)) {
Xorriso_pacifier_reset(xorriso, 0);
mem_lut= xorriso->last_update_time;
}
mem_pci= xorriso->pacifier_interval;
xorriso->pacifier_interval= 5.0;
xorriso->find_check_md5_result= 0;
@ -13405,6 +13422,8 @@ int Xorriso_option_check_md5(struct XorrisO *xorriso,
xorriso->find_check_md5_result|= 2;
else if(ret == 0)
xorriso->find_check_md5_result|= 1;
else if(ret == 1)
xorriso->find_check_md5_result|= 8;
else if(ret == 2)
xorriso->find_check_md5_result|= 4;
}

View File

@ -1 +1 @@
#define Xorriso_timestamP "2009.08.12.202423"
#define Xorriso_timestamP "2009.08.13.203718"

View File

@ -1116,7 +1116,8 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
goto ex;
ext= isoburn_ropt_noiso1999;
if((xorriso->ino_behavior & (1 | 2)) && !(xorriso->do_aaip & (1 | 4 | 32)))
if((xorriso->ino_behavior & (1 | 2)) && !(xorriso->do_aaip & (1 | 4 | 32))
&& !(xorriso->do_md5 & 1))
ext|= isoburn_ropt_noaaip;
if(!(xorriso->do_aaip & 1))
ext|= isoburn_ropt_noacl;
@ -7606,6 +7607,8 @@ int Xorriso_findi_action(struct XorrisO *xorriso, struct FindjoB *job,
xorriso->find_check_md5_result|= 1;
else if(ret < 0)
xorriso->find_check_md5_result|= 2;
else if(ret == 1)
xorriso->find_check_md5_result|= 8;
else if(ret == 2)
xorriso->find_check_md5_result|= 4;
if(ret >= 0)
@ -8882,6 +8885,7 @@ int Xorriso_get_profile(struct XorrisO *xorriso, int *profile_number,
}
int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname,
void *node_pt, void **stream, int flag)
{
@ -8889,7 +8893,7 @@ int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname,
char eff_path[SfileadrL];
IsoNode *node= NULL;
IsoFile *filenode= NULL;
IsoStream *iso_stream= NULL;
IsoStream *iso_stream= NULL, *input_stream;
*stream= NULL;
if(flag&1) {
@ -8915,6 +8919,15 @@ int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname,
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
return(0);
}
if(flag & 2) {
/* Dig out the most original stream */
while(1) {
input_stream= iso_stream_get_input_stream(iso_stream, 0);
if(input_stream == NULL)
break;
iso_stream= input_stream;
}
}
if(!iso_stream_is_repeatable(iso_stream)) {
sprintf(xorriso->info_text,
"The data production of the file in the image is one-time only");
@ -12154,13 +12167,13 @@ int Xorriso_check_md5(struct XorrisO *xorriso, void *in_node, char *path,
}
/* Read file and compute MD5 */;
ret= Xorriso_iso_file_open(xorriso, path, (void *) node, &stream, 1);
ret= Xorriso_iso_file_open(xorriso, path, (void *) node, &stream, 1 | 2);
if(ret <= 0)
{ret= -1; goto ex;}
ret= iso_md5_start(&ctx);
if(ret < 0)
goto ex;
todo= iso_file_get_size(file);
todo= iso_stream_get_size(stream);
while(todo > 0) {
if(todo < sizeof(buffer))
wanted= todo;
@ -12279,26 +12292,46 @@ int Xorriso_check_session_md5(struct XorrisO *xorriso, char *severity,
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
return(0);
}
sprintf(xorriso->info_text, "Checking loaded session by its recorded MD5.\n");
Xorriso_info(xorriso, 0);
for(i= 0; i < 16; i++)
sprintf(md5_text + 2 * i, "%2.2x", ((unsigned char *) md5)[i]);
sprintf(xorriso->info_text,
sprintf(xorriso->result_line,
"Session MD5 %s , LBA %.f , %.f blocks\n",
md5_text, (double) start_lba, (double) end_lba - start_lba);
Xorriso_info(xorriso, 0);
Xorriso_result(xorriso,0);
ret= Xorriso_check_md5_range(xorriso, (off_t) start_lba, (off_t) end_lba,
md5, 0);
if(ret <= 0) {
sprintf(xorriso->result_line, "MD5 MISMATCH WITH DATA OF LOADED SESSION\n");
sprintf(xorriso->result_line,
"MD5 MISMATCH WITH DATA OF LOADED SESSION !\n");
Xorriso_result(xorriso,0);
if(strcmp(severity, "ALL") != 0) {
sprintf(xorriso->info_text, "Event triggered by MD5 comparison mismatch");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, severity, 0);
}
} else {
sprintf(xorriso->result_line, "md5 of session data matches recorded md5\n");
sprintf(xorriso->result_line, "Ok, session data match recorded md5.\n");
Xorriso_result(xorriso,0);
}
return(ret);
}
int Xorriso_image_has_md5(struct XorrisO *xorriso, int flag)
{
int ret;
IsoImage *image;
uint32_t start_lba, end_lba;
char md5[16];
ret= Xorriso_get_volume(xorriso, &image, 0);
if(ret<=0)
return(ret);
ret= iso_image_get_session_md5(image, &start_lba, &end_lba, md5, 0);
Xorriso_process_msg_queues(xorriso,0);
if(ret <= 0)
return(ret);
return(1);
}

View File

@ -218,6 +218,7 @@ int Xorriso_get_profile(struct XorrisO *xorriso, int *profile_number,
char profile_name[80], int flag);
/* @param flag bit0= node_pt is a valid ISO object handle, ignore pathname
bit1= dig out the most original stream for reading
*/
int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname,
void *node_pt, void **stream, int flag);
@ -327,6 +328,8 @@ int Xorriso_check_md5(struct XorrisO *xorriso, void *in_node, char *path,
int Xorriso_check_session_md5(struct XorrisO *xorriso, char *severity,
int flag);
int Xorriso_image_has_md5(struct XorrisO *xorriso, int flag);
struct CheckmediajoB {
int use_dev; /* 0= use indev , 1= use outdev , 2= use sector map*/