Better reaction wich -check_md5 if no MD5 array is loaded
This commit is contained in:
parent
14b101feef
commit
9a96860bad
@ -12474,22 +12474,31 @@ ex:;
|
|||||||
int Xorriso_report_md5_outcome(struct XorrisO *xorriso, char *severity,
|
int Xorriso_report_md5_outcome(struct XorrisO *xorriso, char *severity,
|
||||||
int flag)
|
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,
|
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) {
|
} else if(xorriso->find_check_md5_result & 1) {
|
||||||
sprintf(xorriso->result_line,
|
sprintf(xorriso->result_line,
|
||||||
"Mismatch detected between file contents and MD5 checksums.\n");
|
"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);
|
Xorriso_result(xorriso,0);
|
||||||
if(xorriso->find_check_md5_result & 2) {
|
if(xorriso->find_check_md5_result & 2) {
|
||||||
sprintf(xorriso->result_line,
|
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);
|
Xorriso_result(xorriso,0);
|
||||||
}
|
}
|
||||||
if(xorriso->find_check_md5_result & 4) {
|
if((xorriso->find_check_md5_result & 4) && has_md5) {
|
||||||
sprintf(xorriso->result_line,
|
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);
|
Xorriso_result(xorriso,0);
|
||||||
}
|
}
|
||||||
if((xorriso->find_check_md5_result & 3) && strcmp(severity, "ALL") != 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;
|
struct FindjoB *job= NULL;
|
||||||
double mem_lut= 0.0;
|
double mem_lut= 0.0;
|
||||||
|
|
||||||
if(!(flag&2)) {
|
ret= Xorriso_opt_args(xorriso, "-check_md5", argc, argv, *idx + 1,
|
||||||
Xorriso_pacifier_reset(xorriso, 0);
|
&end_idx, &optc, &optv, 128);
|
||||||
mem_lut= xorriso->last_update_time;
|
if(ret<=0)
|
||||||
}
|
goto ex;
|
||||||
mem_pci= xorriso->pacifier_interval;
|
|
||||||
xorriso->pacifier_interval= 5.0;
|
|
||||||
|
|
||||||
/* Interpret argv[*idx] as severity */
|
/* Interpret argv[*idx] as severity */
|
||||||
if(argc <= *idx) {
|
if(argc <= *idx) {
|
||||||
sprintf(xorriso->info_text,
|
sprintf(xorriso->info_text,
|
||||||
"-check_md5: No event severity given for case of mismatch");
|
"-check_md5: No event severity given for case of mismatch");
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
return(0);
|
ret= 0; goto ex;
|
||||||
}
|
}
|
||||||
severity= argv[*idx];
|
severity= argv[*idx];
|
||||||
ret= Xorriso__text_to_sev(severity, &sev, 0);
|
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 : ");
|
sprintf(xorriso->info_text, "-check_md5: Not a known severity name : ");
|
||||||
Text_shellsafe(severity, xorriso->info_text, 1);
|
Text_shellsafe(severity, xorriso->info_text, 1);
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
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;
|
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;
|
xorriso->find_check_md5_result= 0;
|
||||||
|
|
||||||
@ -13405,6 +13422,8 @@ int Xorriso_option_check_md5(struct XorrisO *xorriso,
|
|||||||
xorriso->find_check_md5_result|= 2;
|
xorriso->find_check_md5_result|= 2;
|
||||||
else if(ret == 0)
|
else if(ret == 0)
|
||||||
xorriso->find_check_md5_result|= 1;
|
xorriso->find_check_md5_result|= 1;
|
||||||
|
else if(ret == 1)
|
||||||
|
xorriso->find_check_md5_result|= 8;
|
||||||
else if(ret == 2)
|
else if(ret == 2)
|
||||||
xorriso->find_check_md5_result|= 4;
|
xorriso->find_check_md5_result|= 4;
|
||||||
}
|
}
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2009.08.12.202423"
|
#define Xorriso_timestamP "2009.08.13.203718"
|
||||||
|
@ -1116,7 +1116,8 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
|
|||||||
goto ex;
|
goto ex;
|
||||||
|
|
||||||
ext= isoburn_ropt_noiso1999;
|
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;
|
ext|= isoburn_ropt_noaaip;
|
||||||
if(!(xorriso->do_aaip & 1))
|
if(!(xorriso->do_aaip & 1))
|
||||||
ext|= isoburn_ropt_noacl;
|
ext|= isoburn_ropt_noacl;
|
||||||
@ -7606,6 +7607,8 @@ int Xorriso_findi_action(struct XorrisO *xorriso, struct FindjoB *job,
|
|||||||
xorriso->find_check_md5_result|= 1;
|
xorriso->find_check_md5_result|= 1;
|
||||||
else if(ret < 0)
|
else if(ret < 0)
|
||||||
xorriso->find_check_md5_result|= 2;
|
xorriso->find_check_md5_result|= 2;
|
||||||
|
else if(ret == 1)
|
||||||
|
xorriso->find_check_md5_result|= 8;
|
||||||
else if(ret == 2)
|
else if(ret == 2)
|
||||||
xorriso->find_check_md5_result|= 4;
|
xorriso->find_check_md5_result|= 4;
|
||||||
if(ret >= 0)
|
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,
|
int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname,
|
||||||
void *node_pt, void **stream, int flag)
|
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];
|
char eff_path[SfileadrL];
|
||||||
IsoNode *node= NULL;
|
IsoNode *node= NULL;
|
||||||
IsoFile *filenode= NULL;
|
IsoFile *filenode= NULL;
|
||||||
IsoStream *iso_stream= NULL;
|
IsoStream *iso_stream= NULL, *input_stream;
|
||||||
|
|
||||||
*stream= NULL;
|
*stream= NULL;
|
||||||
if(flag&1) {
|
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);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
return(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)) {
|
if(!iso_stream_is_repeatable(iso_stream)) {
|
||||||
sprintf(xorriso->info_text,
|
sprintf(xorriso->info_text,
|
||||||
"The data production of the file in the image is one-time only");
|
"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 */;
|
/* 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)
|
if(ret <= 0)
|
||||||
{ret= -1; goto ex;}
|
{ret= -1; goto ex;}
|
||||||
ret= iso_md5_start(&ctx);
|
ret= iso_md5_start(&ctx);
|
||||||
if(ret < 0)
|
if(ret < 0)
|
||||||
goto ex;
|
goto ex;
|
||||||
todo= iso_file_get_size(file);
|
todo= iso_stream_get_size(stream);
|
||||||
while(todo > 0) {
|
while(todo > 0) {
|
||||||
if(todo < sizeof(buffer))
|
if(todo < sizeof(buffer))
|
||||||
wanted= todo;
|
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);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
|
||||||
return(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++)
|
for(i= 0; i < 16; i++)
|
||||||
sprintf(md5_text + 2 * i, "%2.2x", ((unsigned char *) md5)[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",
|
"Session MD5 %s , LBA %.f , %.f blocks\n",
|
||||||
md5_text, (double) start_lba, (double) end_lba - start_lba);
|
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,
|
ret= Xorriso_check_md5_range(xorriso, (off_t) start_lba, (off_t) end_lba,
|
||||||
md5, 0);
|
md5, 0);
|
||||||
if(ret <= 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);
|
Xorriso_result(xorriso,0);
|
||||||
if(strcmp(severity, "ALL") != 0) {
|
if(strcmp(severity, "ALL") != 0) {
|
||||||
sprintf(xorriso->info_text, "Event triggered by MD5 comparison mismatch");
|
sprintf(xorriso->info_text, "Event triggered by MD5 comparison mismatch");
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, severity, 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, severity, 0);
|
||||||
}
|
}
|
||||||
} else {
|
} 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);
|
Xorriso_result(xorriso,0);
|
||||||
}
|
}
|
||||||
return(ret);
|
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);
|
||||||
|
}
|
||||||
|
@ -218,6 +218,7 @@ int Xorriso_get_profile(struct XorrisO *xorriso, int *profile_number,
|
|||||||
char profile_name[80], int flag);
|
char profile_name[80], int flag);
|
||||||
|
|
||||||
/* @param flag bit0= node_pt is a valid ISO object handle, ignore pathname
|
/* @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,
|
int Xorriso_iso_file_open(struct XorrisO *xorriso, char *pathname,
|
||||||
void *node_pt, void **stream, int flag);
|
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 Xorriso_check_session_md5(struct XorrisO *xorriso, char *severity,
|
||||||
int flag);
|
int flag);
|
||||||
|
|
||||||
|
int Xorriso_image_has_md5(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
|
||||||
struct CheckmediajoB {
|
struct CheckmediajoB {
|
||||||
int use_dev; /* 0= use indev , 1= use outdev , 2= use sector map*/
|
int use_dev; /* 0= use indev , 1= use outdev , 2= use sector map*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user