Print correct error message in utils/mkdir-p.pl
authorAlex Yursha <alexyursha@gmail.com>
Tue, 9 Mar 2021 20:07:26 +0000 (10:07 -1000)
committerTomas Mraz <tomas@openssl.org>
Tue, 30 Mar 2021 17:13:29 +0000 (19:13 +0200)
Commit 70a56b914772e6b21cda2a5742817ae4bb7290f1 introduced a regression.

If utils/mkdir-p.pl fails to create a target dir because of insufficient file system
permissions, the subsequent test for dir existence always fails and overwrites
the system error. As a result, a user is presented with a misleading error message.

E.g. if a user tries to create a dir under /usr/local and does not have permissions
for it, the reported error message is "Cannot create directory /usr/local/lib: No such file or directory",
whereas the expected error message is "Cannot create directory /usr/local/lib: Permission denied".

This commit introduces a fix by declaring an additional local variable to cache
the original error message from mkdir. If -d check fails and overwrites the system
error, the user is still presented with the original error from mkdir.

CLA: Trivial

Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/14487)

(cherry picked from commit af2e1e9c81110ca1a156430686e2f171e80ebfa0)

util/mkdir-p.pl

index 328060243f3c5ad18f30803ce3716cc1cdfe86fe..88d8b0151f7ac1e7425bc9bf24d4459a539c9363 100755 (executable)
@@ -34,11 +34,12 @@ sub do_mkdir_p {
   }
 
   unless (mkdir($dir, 0777)) {
+    local($err) = $!;
     if (-d $dir) {
       # We raced against another instance doing the same thing.
       return;
     }
-    die "Cannot create directory $dir: $!\n";
+    die "Cannot create directory $dir: $err\n";
   }
   print "created directory `$dir'\n";
 }