diff --git a/src/uu/mktemp/locales/en-US.ftl b/src/uu/mktemp/locales/en-US.ftl index 7f48c4940c3..13e28990439 100644 --- a/src/uu/mktemp/locales/en-US.ftl +++ b/src/uu/mktemp/locales/en-US.ftl @@ -20,6 +20,7 @@ mktemp-error-invalid-template = invalid template, { $template }; with --tmpdir, mktemp-error-too-many-templates = too many templates mktemp-error-not-found = failed to create { $template_type } via template { $template }: No such file or directory mktemp-error-failed-print = failed to print directory name +mktemp-error-failed-to-create-file-via-template = failed to create file via template '{ $path }': { $error } # Template types mktemp-template-type-directory = directory diff --git a/src/uu/mktemp/locales/fr-FR.ftl b/src/uu/mktemp/locales/fr-FR.ftl index 4bfe550a6c4..90d2291e818 100644 --- a/src/uu/mktemp/locales/fr-FR.ftl +++ b/src/uu/mktemp/locales/fr-FR.ftl @@ -20,6 +20,7 @@ mktemp-error-invalid-template = modèle invalide, { $template } ; avec --tmpdir, mktemp-error-too-many-templates = trop de modèles mktemp-error-not-found = échec de la création de { $template_type } via le modèle { $template } : Aucun fichier ou répertoire de ce type mktemp-error-failed-print = échec de l'affichage du nom de répertoire +mktemp-error-failed-to-create-file-via-template = fichier à créer à partir d'un modèle '{ $path }': { $error } # Types de modèle mktemp-template-type-directory = répertoire diff --git a/src/uu/mktemp/src/mktemp.rs b/src/uu/mktemp/src/mktemp.rs index 1f872714f09..c173fd11348 100644 --- a/src/uu/mktemp/src/mktemp.rs +++ b/src/uu/mktemp/src/mktemp.rs @@ -599,7 +599,14 @@ fn make_temp_file(dir: &Path, prefix: &str, rand: usize, suffix: &str) -> UResul let path = Path::new(dir).join(filename); Err(MkTempError::NotFound(translate!("mktemp-template-type-file"), path).into()) } - Err(e) => Err(e.into()), + Err(e) => { + let filename = format!("{prefix}{}{suffix}", "X".repeat(rand)); + let path = Path::new(dir).join(filename); + Err(uucore::error::USimpleError::new( + 1, + translate!("mktemp-error-failed-to-create-file-via-template", "path" => path.display(), "error" => uucore::error::strip_errno(&e)), + )) + } } } diff --git a/tests/by-util/test_mktemp.rs b/tests/by-util/test_mktemp.rs index 0fa2896bb6f..43c36a438d6 100644 --- a/tests/by-util/test_mktemp.rs +++ b/tests/by-util/test_mktemp.rs @@ -1209,3 +1209,15 @@ fn test_mktemp_hidden_file_single_dot() { template_name.len() ); } + +#[test] +#[cfg(unix)] +fn test_permission_denied_no_os_error() { + let scene = TestScenario::new(util_name!()); + + let result = scene.ucmd().arg("-p").arg("/").run(); + + assert!(!result.succeeded()); + + assert!(!result.stderr_str().contains("os error")); +}