From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Stephen Gildea Newsgroups: gmane.emacs.bugs Subject: bug#50410: Tramp does not honor default file modes in make-directory Date: Sun, 05 Sep 2021 11:17:15 -0700 Message-ID: <1505932.1630865835@pental> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="37493"; mail-complaints-to="usenet@ciao.gmane.io" Cc: michael.albinus@gmx.de To: 50410@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sun Sep 05 20:18:10 2021 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mMwiY-0009YO-9P for geb-bug-gnu-emacs@m.gmane-mx.org; Sun, 05 Sep 2021 20:18:10 +0200 Original-Received: from localhost ([::1]:41866 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mMwiW-00016r-CN for geb-bug-gnu-emacs@m.gmane-mx.org; Sun, 05 Sep 2021 14:18:08 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:57032) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mMwiR-00016g-9w for bug-gnu-emacs@gnu.org; Sun, 05 Sep 2021 14:18:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:39450) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mMwiR-0002Y9-1m for bug-gnu-emacs@gnu.org; Sun, 05 Sep 2021 14:18:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mMwiQ-000277-Kq; Sun, 05 Sep 2021 14:18:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Stephen Gildea Original-Sender: "Debbugs-submit" Resent-CC: michael.albinus@gmx.de, bug-gnu-emacs@gnu.org Resent-Date: Sun, 05 Sep 2021 18:18:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 50410 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch X-Debbugs-Original-To: submit@debbugs.gnu.org X-Debbugs-Original-Xcc: michael.albinus@gmx.de Original-Received: via spool by submit@debbugs.gnu.org id=B.16308658448078 (code B ref -1); Sun, 05 Sep 2021 18:18:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 5 Sep 2021 18:17:24 +0000 Original-Received: from localhost ([127.0.0.1]:50995 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mMwho-00026E-5K for submit@debbugs.gnu.org; Sun, 05 Sep 2021 14:17:24 -0400 Original-Received: from tigger.sg.gildea.net ([99.65.78.170]:50348 helo=pental.sg.gildea.net) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mMwhm-000260-Bt for submit@debbugs.gnu.org; Sun, 05 Sep 2021 14:17:23 -0400 Original-Received: from pental (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by pental.sg.gildea.net (Postfix) with ESMTPS id ADC0C219D03 for ; Sun, 5 Sep 2021 11:17:15 -0700 (PDT) X-Mailer: MH-E 8.6+git; nmh 1.7.1; GNU Emacs 28.0.50 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:213527 Archived-At: --=-=-= Content-Type: text/plain Package: emacs Version: 28.0.50 Tags: patch X-Debbugs-CC: michael.albinus@gmx.de --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=tramp-make-directory-honor-default-file-modes.patch Content-Description: Tramp: honor default file modes in make-directory Tramp: honor default file modes in make-directory * lisp/net/tramp-sh.el: * lisp/net/tramp-adb.el: * lisp/net/tramp-sudoedit.el: * lisp/net/tramp-gvfs.el: Add support for default file modes to relevant Tramp back ends for make-directory. * test/lisp/net/tramp-tests.el (tramp-test13-make-directory-with-file-modes): New test. diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index a2bf0afbf5..e57145e8e7 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -2449,8 +2449,9 @@ tramp-sh-handle-make-directory (tramp-flush-directory-properties v (if parents "/" (file-name-directory localname))) (tramp-barf-unless-okay - v (format "%s %s" + v (format "%s -m %#o %s" (if parents "mkdir -p" "mkdir") + (default-file-modes) (tramp-shell-quote-argument localname)) "Couldn't make directory %s" dir))) diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el index 70dbfdb947..a35ac37a20 100644 --- a/lisp/net/tramp-adb.el +++ b/lisp/net/tramp-adb.el @@ -442,7 +442,9 @@ tramp-adb-handle-make-directory (make-directory par parents)))) (tramp-flush-directory-properties v localname) (unless (or (tramp-adb-send-command-and-check - v (format "mkdir %s" (tramp-shell-quote-argument localname))) + v (format "mkdir -m %#o %s" + (default-file-modes) + (tramp-shell-quote-argument localname))) (and parents (file-directory-p dir))) (tramp-error v 'file-error "Couldn't make directory %s" dir)))) diff --git a/lisp/net/tramp-sudoedit.el b/lisp/net/tramp-sudoedit.el index 5895f1d25b..051d145c2a 100644 --- a/lisp/net/tramp-sudoedit.el +++ b/lisp/net/tramp-sudoedit.el @@ -597,6 +597,7 @@ tramp-sudoedit-handle-make-directory v (if parents "/" (file-name-directory localname))) (unless (tramp-sudoedit-send-command v (if parents '("mkdir" "-p") "mkdir") + "-m" (format "%#o" (default-file-modes)) (tramp-compat-file-name-unquote localname)) (tramp-error v 'file-error "Couldn't make directory %s" dir)))) diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el index e4f54cf4c4..eb889bb4f2 100644 --- a/lisp/net/tramp-gvfs.el +++ b/lisp/net/tramp-gvfs.el @@ -1574,10 +1574,13 @@ tramp-gvfs-handle-make-directory (when (and parents (not (file-directory-p ldir))) (make-directory ldir parents)) ;; Just do it. - (unless (or (tramp-gvfs-send-command - v "gvfs-mkdir" (tramp-gvfs-url-file-name dir)) - (and parents (file-directory-p dir))) - (tramp-error v 'file-error "Couldn't make directory %s" dir)))))) + (or (let ((mkdir-succeeded + (tramp-gvfs-send-command + v "gvfs-mkdir" (tramp-gvfs-url-file-name dir)))) + (if mkdir-succeeded (set-file-modes dir (default-file-modes))) + mkdir-succeeded) + (and parents (file-directory-p dir)) + (tramp-error v 'file-error "Couldn't make directory %s" dir)))))) (defun tramp-gvfs-handle-rename-file (filename newname &optional ok-if-already-exists) diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index 9a9684dd73..249ee9e94d 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el @@ -2765,28 +2765,38 @@ tramp-test12-rename-file (ignore-errors (delete-directory source 'recursive)) (ignore-errors (delete-directory target 'recursive)))))))) -(ert-deftest tramp-test13-make-directory () - "Check `make-directory'. -This tests also `file-directory-p' and `file-accessible-directory-p'." - (skip-unless (tramp--test-enabled)) - - (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil))) +(defun tramp-test-make-directory-helper (test-default-file-modes-p) + "Helper test used by tramp-test13-make-directory* tests." + (dolist (quoted (if (and (tramp--test-expensive-test) + (not test-default-file-modes-p)) + '(nil t) + '(nil))) (let* ((tmp-name1 (tramp--test-make-temp-name nil quoted)) - (tmp-name2 (expand-file-name "foo/bar" tmp-name1))) + (tmp-name2 (expand-file-name "foo/bar" tmp-name1)) + (unusual-file-mode-1 #o740) + (unusual-file-mode-2 #o710)) (unwind-protect (progn - (make-directory tmp-name1) + (with-file-modes unusual-file-mode-1 + (make-directory tmp-name1)) (should-error (make-directory tmp-name1) :type 'file-already-exists) (should (file-directory-p tmp-name1)) (should (file-accessible-directory-p tmp-name1)) + (and test-default-file-modes-p + (should (equal (format "%#o" unusual-file-mode-1) + (format "%#o" (file-modes tmp-name1))))) (should-error (make-directory tmp-name2) :type 'file-error) - (make-directory tmp-name2 'parents) + (with-file-modes unusual-file-mode-2 + (make-directory tmp-name2 'parents)) (should (file-directory-p tmp-name2)) (should (file-accessible-directory-p tmp-name2)) + (and test-default-file-modes-p + (should (equal (format "%#o" unusual-file-mode-2) + (format "%#o" (file-modes tmp-name2))))) ;; If PARENTS is non-nil, `make-directory' shall not ;; signal an error when DIR exists already. (make-directory tmp-name2 'parents)) @@ -2794,6 +2804,21 @@ tramp-test13-make-directory ;; Cleanup. (ignore-errors (delete-directory tmp-name1 'recursive)))))) +(ert-deftest tramp-test13-make-directory () + "Check `make-directory'. +This tests also `file-directory-p' and `file-accessible-directory-p'." + (skip-unless (tramp--test-enabled)) + (tramp-test-make-directory-helper nil)) + +(ert-deftest tramp-test13-make-directory-with-file-modes () + "Check that `make-directory' honors `default-file-modes'. +This is a separate test from `tramp-test13-make-directory' because +some backends cannot pass this test. The \"smb\" backend fails +unless the SMB server supports \"posix\" extensions. +The \"adb\" backend fails on the /sdcard filesystem." + (skip-unless (tramp--test-enabled)) + (tramp-test-make-directory-helper t)) + (ert-deftest tramp-test14-delete-directory () "Check `delete-directory'." (skip-unless (tramp--test-enabled)) --=-=-=--