New no_md5 value 2 for API call iso_read_opts_set_no_md5()
This commit is contained in:
parent
b6be8457f7
commit
f2f780115b
@ -72,7 +72,7 @@ struct iso_read_opts
|
|||||||
unsigned int nojoliet : 1; /*< Do not read Joliet extensions */
|
unsigned int nojoliet : 1; /*< Do not read Joliet extensions */
|
||||||
unsigned int noiso1999 : 1; /*< Do not read ISO 9660:1999 enhanced tree */
|
unsigned int noiso1999 : 1; /*< Do not read ISO 9660:1999 enhanced tree */
|
||||||
unsigned int noaaip : 1; /* Do not read AAIP extension for xattr and ACL */
|
unsigned int noaaip : 1; /* Do not read AAIP extension for xattr and ACL */
|
||||||
unsigned int nomd5 : 1; /* Do not read MD5 array */
|
unsigned int nomd5 : 2; /* Do not read MD5 array */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hand out new inode numbers and overwrite eventually read PX inode
|
* Hand out new inode numbers and overwrite eventually read PX inode
|
||||||
@ -267,7 +267,7 @@ typedef struct
|
|||||||
int aaip_load;
|
int aaip_load;
|
||||||
|
|
||||||
/** Whether the MD5 array shall be read if available.
|
/** Whether the MD5 array shall be read if available.
|
||||||
* 1 = yes , 0 = no
|
* 2 = yes, but do not check tags , 1 = yes , 0 = no
|
||||||
*/
|
*/
|
||||||
int md5_load;
|
int md5_load;
|
||||||
|
|
||||||
@ -2418,6 +2418,10 @@ int iso_src_check_sb_tree(IsoDataSource *src, uint32_t start_lba, int flag)
|
|||||||
ret = iso_util_eval_md5_tag(block, desired, start_lba + i,
|
ret = iso_util_eval_md5_tag(block, desired, start_lba + i,
|
||||||
ctx, start_lba, &tag_type, &next_tag, 0);
|
ctx, start_lba, &tag_type, &next_tag, 0);
|
||||||
iso_md5_compute(ctx, block, 2048);
|
iso_md5_compute(ctx, block, 2048);
|
||||||
|
if (ret == ISO_MD5_TAG_COPIED) { /* growing without emulated TOC */
|
||||||
|
ret = 2;
|
||||||
|
goto ex;
|
||||||
|
}
|
||||||
if (ret == ISO_MD5_AREA_CORRUPTED || ret == ISO_MD5_TAG_MISMATCH)
|
if (ret == ISO_MD5_AREA_CORRUPTED || ret == ISO_MD5_TAG_MISMATCH)
|
||||||
ret = ISO_SB_TREE_CORRUPTED;
|
ret = ISO_SB_TREE_CORRUPTED;
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
@ -2504,7 +2508,12 @@ int iso_image_filesystem_new(IsoDataSource *src, struct iso_read_opts *opts,
|
|||||||
data->dir_mode = opts->dir_mode & ~S_IFMT;
|
data->dir_mode = opts->dir_mode & ~S_IFMT;
|
||||||
data->msgid = msgid;
|
data->msgid = msgid;
|
||||||
data->aaip_load = !opts->noaaip;
|
data->aaip_load = !opts->noaaip;
|
||||||
data->md5_load = !opts->nomd5;
|
if (opts->nomd5 == 0)
|
||||||
|
data->md5_load = 1;
|
||||||
|
else if (opts->nomd5 == 2)
|
||||||
|
data->md5_load = 2;
|
||||||
|
else
|
||||||
|
data->md5_load = 0;
|
||||||
data->aaip_version = -1;
|
data->aaip_version = -1;
|
||||||
data->make_new_ino = opts->make_new_ino;
|
data->make_new_ino = opts->make_new_ino;
|
||||||
data->num_bootimgs = 0;
|
data->num_bootimgs = 0;
|
||||||
@ -2532,7 +2541,7 @@ int iso_image_filesystem_new(IsoDataSource *src, struct iso_read_opts *opts,
|
|||||||
ifs->free = ifs_fs_free;
|
ifs->free = ifs_fs_free;
|
||||||
|
|
||||||
/* read Volume Descriptors and ensure it is a valid image */
|
/* read Volume Descriptors and ensure it is a valid image */
|
||||||
if (data->md5_load) {
|
if (data->md5_load == 1) {
|
||||||
/* From opts->block on : check for superblock and tree tags */;
|
/* From opts->block on : check for superblock and tree tags */;
|
||||||
ret = iso_src_check_sb_tree(src, opts->block, 0);
|
ret = iso_src_check_sb_tree(src, opts->block, 0);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
@ -3688,7 +3697,7 @@ int iso_read_opts_set_no_md5(IsoReadOpts *opts, int no_md5)
|
|||||||
if (opts == NULL) {
|
if (opts == NULL) {
|
||||||
return ISO_NULL_POINTER;
|
return ISO_NULL_POINTER;
|
||||||
}
|
}
|
||||||
opts->nomd5 = no_md5 ? 1 : 0;
|
opts->nomd5 = no_md5 == 2 ? 2 : no_md5 == 1 ? 1 : 0;
|
||||||
return ISO_SUCCESS;
|
return ISO_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2337,8 +2337,10 @@ int iso_read_opts_set_no_aaip(IsoReadOpts *opts, int noaaip);
|
|||||||
* @param opts
|
* @param opts
|
||||||
* The option set to be manipulated
|
* The option set to be manipulated
|
||||||
* @param no_md5
|
* @param no_md5
|
||||||
|
* 0 = Read MD5 array if available, refuse on non-matching MD5 tags
|
||||||
* 1 = Do not read MD5 checksum array
|
* 1 = Do not read MD5 checksum array
|
||||||
* 0 = Read Md% array if available
|
* 2 = Read MD5 array, but do not check MD5 tags
|
||||||
|
* @since 1.0.4
|
||||||
* All other values are reserved.
|
* All other values are reserved.
|
||||||
*
|
*
|
||||||
* @since 0.6.22
|
* @since 0.6.22
|
||||||
@ -6814,6 +6816,9 @@ int iso_md5_match(char first_md5[16], char second_md5[16]);
|
|||||||
(FAILURE, HIGH, -375) */
|
(FAILURE, HIGH, -375) */
|
||||||
#define ISO_XINFO_NO_CLONE 0xE830FE89
|
#define ISO_XINFO_NO_CLONE 0xE830FE89
|
||||||
|
|
||||||
|
/** Found copied superblock checksum tag (WARNING, HIGH, -376) */
|
||||||
|
#define ISO_MD5_TAG_COPIED 0xD030FE88
|
||||||
|
|
||||||
|
|
||||||
/* Internal developer note:
|
/* Internal developer note:
|
||||||
Place new error codes directly above this comment.
|
Place new error codes directly above this comment.
|
||||||
|
@ -453,6 +453,8 @@ const char *iso_error_to_msg(int errcode)
|
|||||||
return "Data file input stream object offers no cloning method";
|
return "Data file input stream object offers no cloning method";
|
||||||
case ISO_XINFO_NO_CLONE:
|
case ISO_XINFO_NO_CLONE:
|
||||||
return "Extended information class offers no cloning method";
|
return "Extended information class offers no cloning method";
|
||||||
|
case ISO_MD5_TAG_COPIED:
|
||||||
|
return "Found copied superblock checksum tag";
|
||||||
default:
|
default:
|
||||||
return "Unknown error";
|
return "Unknown error";
|
||||||
}
|
}
|
||||||
|
@ -1841,6 +1841,20 @@ unexpected_type:;
|
|||||||
ret = 0;
|
ret = 0;
|
||||||
goto ex;
|
goto ex;
|
||||||
} else if (pos != lba) {
|
} else if (pos != lba) {
|
||||||
|
if (*tag_type == 2) { /* Superblock tag */
|
||||||
|
if (lba < 32) {
|
||||||
|
/* Check whether this is a copied superblock */
|
||||||
|
range_start -= (off_t) pos - (off_t) lba;
|
||||||
|
if (range_start != ctx_start_lba) {
|
||||||
|
|
||||||
|
/* >>> check for matching MD5 ? */;
|
||||||
|
|
||||||
|
ret = ISO_MD5_TAG_MISPLACED;
|
||||||
|
} else
|
||||||
|
ret = ISO_MD5_TAG_COPIED;
|
||||||
|
goto ex;
|
||||||
|
}
|
||||||
|
}
|
||||||
ret = ISO_MD5_TAG_MISPLACED;
|
ret = ISO_MD5_TAG_MISPLACED;
|
||||||
goto ex;
|
goto ex;
|
||||||
} else if (range_start != ctx_start_lba) {
|
} else if (range_start != ctx_start_lba) {
|
||||||
|
Loading…
Reference in New Issue
Block a user