GNU bug report logs - #49601
[PATCH] services: transmission: Create downloads directory.

Previous Next

Package: guix-patches;

Reported by: Morgan.J.Smith <at> outlook.com

Date: Sat, 17 Jul 2021 00:35:01 UTC

Severity: normal

Tags: patch

To reply to this bug, email your comments to 49601 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#49601; Package guix-patches. (Sat, 17 Jul 2021 00:35:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Morgan.J.Smith <at> outlook.com:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Sat, 17 Jul 2021 00:35:01 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Morgan.J.Smith <at> outlook.com
To: guix-patches <at> gnu.org
Cc: Morgan Smith <Morgan.J.Smith <at> outlook.com>
Subject: [PATCH] services: transmission: Create downloads directory.
Date: Fri, 16 Jul 2021 20:28:31 -0400
From: Morgan Smith <Morgan.J.Smith <at> outlook.com>

* gnu/services/file-sharing.scm (transmission-daemon-activation): Create
downloads directory.

This fixes a bug where transmission doesn't have permission to create it's
download directory. This bug occurs when download-dir is configured to a
location where the transmission user doesn't have permission to create a directory.
---
 gnu/services/file-sharing.scm | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/gnu/services/file-sharing.scm b/gnu/services/file-sharing.scm
index 72cd6478d6..143fd3ed75 100644
--- a/gnu/services/file-sharing.scm
+++ b/gnu/services/file-sharing.scm
@@ -746,6 +746,7 @@ produces a Transmission settings file (@file{settings.json}) matching CONFIG."
 (define (transmission-daemon-activation config)
   "Return the Transmission Daemon activation GEXP for CONFIG."
   (let ((config-dir %transmission-daemon-configuration-directory)
+        (download-dir (transmission-daemon-configuration-download-dir config))
         (incomplete-dir-enabled
          (transmission-daemon-configuration-incomplete-dir-enabled? config))
         (incomplete-dir
@@ -769,7 +770,8 @@ produces a Transmission settings file (@file{settings.json}) matching CONFIG."
             (for-each (lambda (directory-specification)
                         (apply mkdir-p/perms directory-specification))
                       '(#$@(append
-                            `((,config-dir #o750))
+                            `((,config-dir #o750)
+                              (,download-dir #o755))
                             (if incomplete-dir-enabled
                                 `((,incomplete-dir #o750))
                                 '())
-- 
2.32.0





Information forwarded to guix-patches <at> gnu.org:
bug#49601; Package guix-patches. (Sat, 17 Jul 2021 11:54:01 GMT) Full text and rfc822 format available.

Message #8 received at 49601 <at> debbugs.gnu.org (full text, mbox):

From: Simon South <simon <at> simonsouth.net>
To: Morgan.J.Smith <at> outlook.com
Cc: 49601 <at> debbugs.gnu.org
Subject: Re: [bug#49601] [PATCH] services: transmission: Create downloads
 directory.
Date: Sat, 17 Jul 2021 07:52:21 -0400
Morgan.J.Smith <at> outlook.com writes:
> This fixes a bug where transmission doesn't have permission to create
> it's download directory. This bug occurs when download-dir is
> configured to a location where the transmission user doesn't have
> permission to create a directory.

Morgan,

I recall originally having the service activation create the downloads
directory, as your change makes it do, but then removing this as there
was some common case where it made service activation fail.
Unfortunately, I've forgotten what that was.

Let me see if I can duplicate that and if so, perhaps we can find a
solution that will handle both cases. At any rate:

> +                              (,download-dir #o755))

The folder permissions should be #o750, not #o755. The reasoning here is
that it ought to be possible to place limits on who can see and access
files being shared by other users.

-- 
Simon South
simon <at> simonsouth.net




Information forwarded to guix-patches <at> gnu.org:
bug#49601; Package guix-patches. (Sat, 17 Jul 2021 17:48:01 GMT) Full text and rfc822 format available.

Message #11 received at 49601 <at> debbugs.gnu.org (full text, mbox):

From: Simon South <simon <at> simonsouth.net>
To: Morgan.J.Smith <at> outlook.com
Cc: 49601 <at> debbugs.gnu.org
Subject: Re: [bug#49601] [PATCH] services: transmission: Create downloads
 directory.
Date: Sat, 17 Jul 2021 13:47:07 -0400
Simon South <simon <at> simonsouth.net> writes:
> Let me see if I can duplicate that...

I haven't been able to duplicate whatever issue it was I saw originally.
Likely it had to do with the download directory being placed on a
separate volume and thus matching a mount point already declared in the
operating-system declaration.  Probably the system test should be
expanded to check this kind of configuration works but a quick test on
my end shows that at least for existing setups, it is not a problem.

Morgan, just a few pieces of feedback then:

> This fixes a bug where transmission doesn't have permission to create
> it's download directory. This bug occurs when download-dir is

"it's" should be "its" (no apostrophe) here, the possessive form.

> +                              (,download-dir #o755))

Again, the permissions here should be "#o750".

Finally, I recommend updating the system test (in
gnu/tests/file-sharing.scm) to verify the download directory is created
correctly, now that this functionality has been added.  I've included a
patch below that does this for you.  To verify this works, apply the
patch and run the test suite with

    make check-system TESTS="transmission-daemon"

The Guix manual has more information[0].

Otherwise, looks good to me.  Thanks for submitting this patch.

[0] https://guix.gnu.org/en/manual/en/html_node/Running-the-Test-Suite.html

-- 
Simon South
simon <at> simonsouth.net


diff --git a/gnu/tests/file-sharing.scm b/gnu/tests/file-sharing.scm
index 9a8ee6a593..d27a206c4f 100644
--- a/gnu/tests/file-sharing.scm
+++ b/gnu/tests/file-sharing.scm
@@ -34,6 +34,8 @@
 (define %transmission-daemon-group "transmission")
 
 (define %transmission-daemon-config-dir "/var/lib/transmission-daemon")
+(define %transmission-daemon-download-dir
+  (string-append %transmission-daemon-config-dir "/downloads"))
 (define %transmission-daemon-watch-dir
   (string-append %transmission-daemon-config-dir "/watch"))
 (define %transmission-daemon-incomplete-dir
@@ -110,8 +112,9 @@
                 #t)
              marionette))
 
-          ;; Make sure Transmission Daemon's configuration directory has been
-          ;; created with the correct ownership and permissions.
+          ;; Make sure Transmission Daemon's configuration and download
+          ;; directories have been created with the correct ownership and
+          ;; permissions.
           (test-assert "configuration directory exists"
             (marionette-eval
              '(eq? (stat:type (stat #$%transmission-daemon-config-dir))
@@ -132,6 +135,26 @@
                     #o750)
              marionette))
 
+          (test-assert "download directory exists"
+            (marionette-eval
+             '(eq? (stat:type (stat #$%transmission-daemon-download-dir))
+                   'directory)
+             marionette))
+          (test-assert "download directory has correct ownership"
+            (marionette-eval
+             '(let ((download-dir (stat #$%transmission-daemon-download-dir))
+                    (transmission-user (getpwnam #$%transmission-daemon-user)))
+                (and (eqv? (stat:uid download-dir)
+                           (passwd:uid transmission-user))
+                     (eqv? (stat:gid download-dir)
+                           (passwd:gid transmission-user))))
+             marionette))
+          (test-assert "download directory has expected permissions"
+            (marionette-eval
+             '(eqv? (stat:perms (stat #$%transmission-daemon-download-dir))
+                    #o750)
+             marionette))
+
           ;; Make sure the incomplete-downloads and watch directories have been
           ;; created with the correct ownership and permissions.
           (test-assert "incomplete-downloads directory exists"




Information forwarded to guix-patches <at> gnu.org:
bug#49601; Package guix-patches. (Mon, 19 Jul 2021 12:15:01 GMT) Full text and rfc822 format available.

Message #14 received at 49601 <at> debbugs.gnu.org (full text, mbox):

From: Efraim Flashner <efraim <at> flashner.co.il>
To: Simon South <simon <at> simonsouth.net>
Cc: Morgan.J.Smith <at> outlook.com, 49601 <at> debbugs.gnu.org
Subject: Re: [bug#49601] [PATCH] services: transmission: Create downloads
 directory.
Date: Mon, 19 Jul 2021 15:13:04 +0300
[Message part 1 (text/plain, inline)]
On Sat, Jul 17, 2021 at 07:52:21AM -0400, Simon South wrote:
> Morgan.J.Smith <at> outlook.com writes:
> > This fixes a bug where transmission doesn't have permission to create
> > it's download directory. This bug occurs when download-dir is
> > configured to a location where the transmission user doesn't have
> > permission to create a directory.
> 
> Morgan,
> 
> I recall originally having the service activation create the downloads
> directory, as your change makes it do, but then removing this as there
> was some common case where it made service activation fail.
> Unfortunately, I've forgotten what that was.
> 
> Let me see if I can duplicate that and if so, perhaps we can find a
> solution that will handle both cases. At any rate:
> 
> > +                              (,download-dir #o755))
> 
> The folder permissions should be #o750, not #o755. The reasoning here is
> that it ought to be possible to place limits on who can see and access
> files being shared by other users.
> 

It's possible it was mkdir vs mkdir-p

(ins)scheme@(guile-user)> (mkdir "tmp")
(ins)scheme@(guile-user)> (mkdir "tmp")
ice-9/boot-9.scm:1685:16: In procedure raise-exception:
In procedure mkdir: File exists

Entering a new prompt.  Type `,bt' for a backtrace or `,q' to continue.
(ins)scheme@(guile-user) [1]> ,q
(ins)scheme@(guile-user)> (use-modules (guix build utils))
(ins)scheme@(guile-user)> (mkdir-p "tmp")
$1 = #t


-- 
Efraim Flashner   <efraim <at> flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted
[signature.asc (application/pgp-signature, inline)]

Information forwarded to guix-patches <at> gnu.org:
bug#49601; Package guix-patches. (Wed, 21 Jul 2021 13:15:02 GMT) Full text and rfc822 format available.

Message #17 received at 49601 <at> debbugs.gnu.org (full text, mbox):

From: Simon South <simon <at> simonsouth.net>
To: Efraim Flashner <efraim <at> flashner.co.il>
Cc: Morgan.J.Smith <at> outlook.com, 49601 <at> debbugs.gnu.org
Subject: Re: [bug#49601] [PATCH] services: transmission: Create downloads
 directory.
Date: Wed, 21 Jul 2021 09:14:26 -0400
Efraim Flashner <efraim <at> flashner.co.il> writes:
> It's possible it was mkdir vs mkdir-p

Yes, or perhaps I hadn't yet added the code that sets the ownership and
permissions on the directory.

Morgan, I hope you'll submit a revised patch so others can review.

-- 
Simon South
simon <at> simonsouth.net




This bug report was last modified 2 years and 278 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.