/* Check the security ID. -1 is valid and means "no security
* descriptor". Anything else has to be a valid index into the WIM
* image's security descriptors table. */
- if (inode->i_security_id < -1) {
- ERROR("Dentry `%"TS"' has an invalid security ID (%d)",
- dentry_full_path(first_dentry), inode->i_security_id);
- return WIMLIB_ERR_INVALID_DENTRY;
- }
-
- if (inode->i_security_id >= 0 &&
- inode->i_security_id >= sd->num_entries)
+ if (inode->i_security_id < -1 ||
+ (inode->i_security_id >= 0 &&
+ inode->i_security_id >= sd->num_entries))
{
- ERROR("Dentry `%"TS"' has an invalid security ID (%d) "
- "(there are only %u entries in the security table)",
- dentry_full_path(first_dentry), inode->i_security_id,
- sd->num_entries);
- return WIMLIB_ERR_INVALID_DENTRY;
+ WARNING("\"%"TS"\" has an invalid security ID (%d)",
+ dentry_full_path(first_dentry), inode->i_security_id);
+ inode->i_security_id = -1;
}
/* Check that lookup table entries for all the inode's stream exist,
num_unnamed_streams++;
}
if (num_unnamed_streams > 1) {
- ERROR("Dentry `%"TS"' has multiple (%u) un-named streams",
- dentry_full_path(first_dentry), num_unnamed_streams);
- return WIMLIB_ERR_INVALID_DENTRY;
+ WARNING("\"%"TS"\" has multiple (%u) un-named streams",
+ dentry_full_path(first_dentry), num_unnamed_streams);
}
/* Files cannot have multiple DOS names, even if they have multiple
}
}
- /* Directories with multiple links have not been tested. XXX */
- if (inode->i_nlink > 1 && inode->i_attributes & FILE_ATTRIBUTE_DIRECTORY) {
- ERROR("Hard-linked directory `%"TS"' is unsupported",
- dentry_full_path(first_dentry));
- return WIMLIB_ERR_INVALID_DENTRY;
- }
-
inode->i_verified = 1;
return 0;
}
{
int ret;
WIMStruct *w = wim;
-
/* Verify the associated inode, but only one time no matter how many
* dentries it has (unless we are doing a full verification of the WIM,
* in which case we need to force the inode to be verified again.) */
if (ret)
return ret;
}
-
- /* Make sure root dentry is unnamed, while every other dentry has at
- * least a long name.
- *
- * I am assuming that dentries having only a DOS name is illegal; i.e.,
- * Windows will always combine the Win32 name and DOS name for a file
- * into a single WIM dentry, even if they are stored separately on NTFS.
- * (This seems to be the case...) */
- if (dentry_is_root(dentry)) {
- if (dentry_has_long_name(dentry) || dentry_has_short_name(dentry)) {
- ERROR("The root dentry has a nonempty name!");
- return WIMLIB_ERR_INVALID_DENTRY;
- }
- } else {
- if (!dentry_has_long_name(dentry)) {
- ERROR("Dentry `%"TS"' has no long name!",
- dentry_full_path(dentry));
- return WIMLIB_ERR_INVALID_DENTRY;
- }
- }
-
-#if 0
- /* Check timestamps */
- if (inode->i_last_access_time < inode->i_creation_time ||
- inode->i_last_write_time < inode->i_creation_time) {
- WARNING("Dentry `%"TS"' was created after it was last accessed or "
- "written to", dentry->full_path);
- }
-#endif
-
return 0;
}
struct wim_inode *inode;
imd = wim_get_current_image_metadata(w);
- image_for_each_inode(inode, imd)
+ image_for_each_inode(inode, imd) {
inode->i_verified = 0;
return for_dentry_in_tree(imd->root_dentry, verify_dentry, w);
}