From b3fea37119b90bdf544e798a48a7ae6b54871c51 Mon Sep 17 00:00:00 2001 From: Devel Date: Mon, 10 Aug 2026 20:22:23 +0300 Subject: [PATCH 1/8] mktemp: strip permission denied system error code --- src/uu/mktemp/locales/en-US.ftl | 1 + src/uu/mktemp/locales/fr-FR.ftl | 1 + src/uu/mktemp/src/mktemp.rs | 9 ++++++++- tests/by-util/test_mktemp.rs | 10 ++++++++++ 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/uu/mktemp/locales/en-US.ftl b/src/uu/mktemp/locales/en-US.ftl index 7f48c4940c3..8e68f467935 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 = file 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..53dd8ad9507 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..e1866faaa02 100644 --- a/tests/by-util/test_mktemp.rs +++ b/tests/by-util/test_mktemp.rs @@ -1209,3 +1209,13 @@ fn test_mktemp_hidden_file_single_dot() { template_name.len() ); } + +#[test] +#[cfg(unix)] +fn test_permission_denied() { + let scene = TestScenario::new(util_name!()); + + scene.ucmd().arg("-p").arg("/").fails().stderr_is( + "mktemp: failed to create file via template '/tmp.XXXXXXXXXX': Permission denied\n", + ); +} From e8cf1baaa26d2f4d21a5cfd36ebe377a8f68ffe6 Mon Sep 17 00:00:00 2001 From: Devel Date: Mon, 10 Aug 2026 20:26:25 +0300 Subject: [PATCH 2/8] non-capital f in french locale --- src/uu/mktemp/locales/fr-FR.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/uu/mktemp/locales/fr-FR.ftl b/src/uu/mktemp/locales/fr-FR.ftl index 53dd8ad9507..037a5143479 100644 --- a/src/uu/mktemp/locales/fr-FR.ftl +++ b/src/uu/mktemp/locales/fr-FR.ftl @@ -20,7 +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} +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 From bb4e3cff646b95f408a11215fe2d38956add5525 Mon Sep 17 00:00:00 2001 From: Devel Date: Mon, 10 Aug 2026 21:02:08 +0300 Subject: [PATCH 3/8] omitted dollar sign in english locale --- src/uu/mktemp/locales/en-US.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/uu/mktemp/locales/en-US.ftl b/src/uu/mktemp/locales/en-US.ftl index 8e68f467935..9014efd1e3e 100644 --- a/src/uu/mktemp/locales/en-US.ftl +++ b/src/uu/mktemp/locales/en-US.ftl @@ -20,7 +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 = file to create file via template { $path }: {error} +mktemp-error-failed-to-create-file-via-template = file to create file via template { $path }: { $error } # Template types mktemp-template-type-directory = directory From 3c0438847754bc26db70005b0e1549df4be2d9b4 Mon Sep 17 00:00:00 2001 From: Devel Date: Mon, 10 Aug 2026 21:02:26 +0300 Subject: [PATCH 4/8] omitted dollar sign in french locale --- src/uu/mktemp/locales/fr-FR.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/uu/mktemp/locales/fr-FR.ftl b/src/uu/mktemp/locales/fr-FR.ftl index 037a5143479..64dace3b6e8 100644 --- a/src/uu/mktemp/locales/fr-FR.ftl +++ b/src/uu/mktemp/locales/fr-FR.ftl @@ -20,7 +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} +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 From f309dc53d84104ae2ded61ef4ccae55f84ff8060 Mon Sep 17 00:00:00 2001 From: Devel Date: Mon, 10 Aug 2026 21:55:03 +0300 Subject: [PATCH 5/8] typo in localization --- src/uu/mktemp/locales/en-US.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/uu/mktemp/locales/en-US.ftl b/src/uu/mktemp/locales/en-US.ftl index 9014efd1e3e..a7030e822cf 100644 --- a/src/uu/mktemp/locales/en-US.ftl +++ b/src/uu/mktemp/locales/en-US.ftl @@ -20,7 +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 = file to create file via template { $path }: { $error } +mktemp-error-failed-to-create-file-via-template = failed to create file via template { $path }: { $error } # Template types mktemp-template-type-directory = directory From 8523cf735096ee2423af6ad40c453de8e97cb3c8 Mon Sep 17 00:00:00 2001 From: Devel Date: Mon, 10 Aug 2026 21:56:12 +0300 Subject: [PATCH 6/8] quotes around path in english localization --- src/uu/mktemp/locales/en-US.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/uu/mktemp/locales/en-US.ftl b/src/uu/mktemp/locales/en-US.ftl index a7030e822cf..13e28990439 100644 --- a/src/uu/mktemp/locales/en-US.ftl +++ b/src/uu/mktemp/locales/en-US.ftl @@ -20,7 +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 } +mktemp-error-failed-to-create-file-via-template = failed to create file via template '{ $path }': { $error } # Template types mktemp-template-type-directory = directory From 577248b58d301b4cd7ed3874e68b173efe750c0d Mon Sep 17 00:00:00 2001 From: Devel Date: Mon, 10 Aug 2026 21:57:10 +0300 Subject: [PATCH 7/8] quotes around path in french locale --- src/uu/mktemp/locales/fr-FR.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/uu/mktemp/locales/fr-FR.ftl b/src/uu/mktemp/locales/fr-FR.ftl index 64dace3b6e8..90d2291e818 100644 --- a/src/uu/mktemp/locales/fr-FR.ftl +++ b/src/uu/mktemp/locales/fr-FR.ftl @@ -20,7 +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 } +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 From 32d48f7bbf29bb42b2cb94c72cc7051bef159d29 Mon Sep 17 00:00:00 2001 From: Devel Date: Mon, 10 Aug 2026 22:47:27 +0300 Subject: [PATCH 8/8] check if test_permission_denied_no_os_error doesn't contain os error --- tests/by-util/test_mktemp.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/by-util/test_mktemp.rs b/tests/by-util/test_mktemp.rs index e1866faaa02..43c36a438d6 100644 --- a/tests/by-util/test_mktemp.rs +++ b/tests/by-util/test_mktemp.rs @@ -1212,10 +1212,12 @@ fn test_mktemp_hidden_file_single_dot() { #[test] #[cfg(unix)] -fn test_permission_denied() { +fn test_permission_denied_no_os_error() { let scene = TestScenario::new(util_name!()); - scene.ucmd().arg("-p").arg("/").fails().stderr_is( - "mktemp: failed to create file via template '/tmp.XXXXXXXXXX': Permission denied\n", - ); + let result = scene.ucmd().arg("-p").arg("/").run(); + + assert!(!result.succeeded()); + + assert!(!result.stderr_str().contains("os error")); }