diff --git a/tmc-langs-plugins/src/tmc_zip.rs b/tmc-langs-plugins/src/tmc_zip.rs index 95b49354f24..8db46a6b54e 100644 --- a/tmc-langs-plugins/src/tmc_zip.rs +++ b/tmc-langs-plugins/src/tmc_zip.rs @@ -35,12 +35,17 @@ pub fn zip_student_files( .unwrap_or_else(|| entry.path()); if entry.path().is_dir() { log::trace!("adding directory {}", path.display()); - writer - .add_directory(path_to_zip_compatible_string(path), FileOptions::default())?; + writer.add_directory( + path_to_zip_compatible_string(path), + FileOptions::default().unix_permissions(0o744), + )?; } else { let bytes = file_util::read_file(entry.path())?; log::trace!("writing file {}", path.display()); - writer.start_file(path_to_zip_compatible_string(path), FileOptions::default())?; + writer.start_file( + path_to_zip_compatible_string(path), + FileOptions::default().unix_permissions(0o744), + )?; writer .write_all(&bytes) .map_err(|e| TmcError::ZipWrite(path.to_path_buf(), e))?; diff --git a/tmc-langs/src/course_refresher.rs b/tmc-langs/src/course_refresher.rs index d52fbe5daff..b7e38bf97df 100644 --- a/tmc-langs/src/course_refresher.rs +++ b/tmc-langs/src/course_refresher.rs @@ -399,7 +399,7 @@ fn execute_zip( if entry.path().is_file() { writer.start_file( relative_path.to_string_lossy(), - zip::write::FileOptions::default(), + zip::write::FileOptions::default().unix_permissions(0o744), )?; let bytes = file_util::read_file(entry.path())?; writer.write_all(&bytes).map_err(LangsError::ZipWrite)?; @@ -407,7 +407,7 @@ fn execute_zip( // java-langs expects directories to have their own entries writer.start_file( relative_path.join("").to_string_lossy(), // java-langs expects directory entries to have a trailing slash - zip::write::FileOptions::default(), + zip::write::FileOptions::default().unix_permissions(0o744), )?; } } diff --git a/tmc-langs/src/submission_packaging.rs b/tmc-langs/src/submission_packaging.rs index 9dae38b20aa..f40586fc3cf 100644 --- a/tmc-langs/src/submission_packaging.rs +++ b/tmc-langs/src/submission_packaging.rs @@ -294,9 +294,15 @@ pub fn prepare_submission( stripped.display() ); if entry_path.is_dir() { - archive.add_directory(stripped.to_string_lossy(), FileOptions::default())?; + archive.add_directory( + stripped.to_string_lossy(), + FileOptions::default().unix_permissions(0o744), + )?; } else { - archive.start_file(stripped.to_string_lossy(), FileOptions::default())?; + archive.start_file( + stripped.to_string_lossy(), + FileOptions::default().unix_permissions(0o744), + )?; let mut file = file_util::open_file(entry_path)?; std::io::copy(&mut file, &mut archive) .map_err(|e| LangsError::TarAppend(entry_path.to_path_buf(), e))?;