Stuart Henderson writes: > I think it only needs one not both - how about this which is a bit more > targetted too? > > @exec-update [[ $(stat -f '%u:%g' > ${LOCALSTATEDIR}/dnscrypt-proxy/public-resolvers.md 2>/dev/null) == 0:0 ]] && > chgrp -R _dnscrypt-proxy ${LOCALSTATEDIR}/dnscrypt-proxy && chmod -R ug+rwX > ${LOCALSTATEDIR}/dnscrypt-proxy || true >
Sorry for the lengthy response, but I just wanted to enumerate the possible use-cases to be thorough. sthen@'s diff has two problems. New installs forever remain owned by _dnscrypt-proxy:_dnscrypt-proxy (see case 2). If parental-control.md is used instead of public-resolvers.md, they forever remain root:wheel (see case 3). To resolve this I tweaked sthen@'s diff: - stat != 0:688 instead of stat == 0:0 - chown instead of chgrp to be more explicit since we should handle changing _dnscrypt-proxy:_dnscrypt-proxy --> root:_dnscrypt-proxy Three cases follow as tested with this fresh diff. case 1: upgrading with use of public-resolvers.md vulture$ ls -al /var/dnscrypt-proxy/ total 144 drwxr-xr-x 2 root wheel 512 Jun 16 18:10 . drwxr-xr-x 26 root wheel 512 Jun 16 18:10 .. -rw-r--r-- 1 root wheel 55606 Jun 16 18:10 public-resolvers.md -rw-r--r-- 1 root wheel 307 Jun 16 18:10 public-resolvers.md.minisig -rw-r--r-- 1 root wheel 6154 Jun 16 18:10 relays.md -rw-r--r-- 1 root wheel 297 Jun 16 18:10 relays.md.minisig vulture$ ls -al /var/dnscrypt-proxy/ total 144 drwxrwxr-x 2 root _dnscrypt-proxy 512 Jun 16 18:10 . drwxr-xr-x 26 root wheel 512 Jun 16 18:10 .. -rw-rw-r-- 1 root _dnscrypt-proxy 55606 Jun 16 18:10 public-resolvers.md -rw-rw-r-- 1 root _dnscrypt-proxy 307 Jun 16 18:10 public-resolvers.md.minisig -rw-rw-r-- 1 root _dnscrypt-proxy 6154 Jun 16 18:10 relays.md -rw-rw-r-- 1 root _dnscrypt-proxy 297 Jun 16 18:10 relays.md.minisig case 2: new installs first, rm /var/dnscrypt-proxy/* then install dnscrypt-proxy then /etc/rc.d/dnscrypt-proxy restart cache files get downloaded at runtime as: vulture$ ls -al /var/dnscrypt-proxy/ total 144 drwxrwxr-x 2 root _dnscrypt-proxy 512 Jun 16 18:13 . drwxr-xr-x 26 root wheel 512 Jun 16 18:10 .. -rw-r--r-- 1 _dnscrypt-proxy _dnscrypt-proxy 55606 Jun 16 18:13 public-resolvers.md -rw-r--r-- 1 _dnscrypt-proxy _dnscrypt-proxy 307 Jun 16 18:13 public-resolvers.md.minisig -rw-r--r-- 1 _dnscrypt-proxy _dnscrypt-proxy 6154 Jun 16 18:13 relays.md -rw-r--r-- 1 _dnscrypt-proxy _dnscrypt-proxy 297 Jun 16 18:13 relays.md.minisig once dnscrypt-proxy gets updated to 2.0.45 in the future (not 2.0.44), cache files get 664 root:_dnscrypt-proxy because @exec-update finally gets to run. vulture$ ls -al /var/dnscrypt-proxy/ total 144 drwxrwxr-x 2 root _dnscrypt-proxy 512 Jun 16 18:13 . drwxr-xr-x 26 root wheel 512 Jun 16 18:10 .. -rw-rw-r-- 1 root _dnscrypt-proxy 55606 Jun 16 18:13 public-resolvers.md -rw-rw-r-- 1 root _dnscrypt-proxy 307 Jun 16 18:13 public-resolvers.md.minisig -rw-rw-r-- 1 root _dnscrypt-proxy 6154 Jun 16 18:13 relays.md -rw-rw-r-- 1 root _dnscrypt-proxy 297 Jun 16 18:13 relays.md.minisig case 3: upgrading for users that choose not to use public-resolvers.md but their own custom file / parental-control.md (which is a subset of public-resolvers.md) The whole point of correct permissions is so that dnscrypt-proxy can periodically refresh cache files after time_delay. However, some users use a hardcoded cache file and do not want automatic updating. The only drawback is that we now force ownership of these custom files, but this may be acceptable since we handle the much more common case of using public-resolvers.md. This actually surprisingly works after upgrading even though public-resolvers.md does not exist. stat on public-resolvers is still != 0:688. 2.0.42: vulture$ ls -al /var/dnscrypt-proxy/ total 44 drwxr-xr-x 2 root wheel 512 Jun 16 18:34 . drwxr-xr-x 26 root wheel 512 Jun 16 18:33 .. -rw-r--r-- 1 root wheel 5011 Jun 16 18:34 parental-control.md -rw-r--r-- 1 root wheel 307 Jun 16 18:34 parental-control.md.minisig -rw-r--r-- 1 root wheel 6154 Jun 16 18:33 relays.md -rw-r--r-- 1 root wheel 297 Jun 16 18:33 relays.md.minisig upgrading to 2.0.44: vulture$ ls -al /var/dnscrypt-proxy/ total 44 drwxrwxr-x 2 root _dnscrypt-proxy 512 Jun 16 18:34 . drwxr-xr-x 26 root wheel 512 Jun 16 18:33 .. -rw-rw-r-- 1 root _dnscrypt-proxy 5011 Jun 16 18:34 parental-control.md -rw-rw-r-- 1 root _dnscrypt-proxy 307 Jun 16 18:34 parental-control.md.minisig -rw-rw-r-- 1 root _dnscrypt-proxy 6154 Jun 16 18:33 relays.md -rw-rw-r-- 1 root _dnscrypt-proxy 297 Jun 16 18:33 relays.md.minisig Index: Makefile =================================================================== RCS file: /cvs/ports/net/dnscrypt-proxy/Makefile,v retrieving revision 1.53 diff -u -p -u -p -r1.53 Makefile --- Makefile 6 Apr 2020 18:42:57 -0000 1.53 +++ Makefile 17 Jun 2020 06:25:51 -0000 @@ -4,7 +4,7 @@ COMMENT = flexible DNS proxy with suppor GH_ACCOUNT = jedisct1 GH_PROJECT = dnscrypt-proxy -GH_TAGNAME = 2.0.42 +GH_TAGNAME = 2.0.44 CATEGORIES = net Index: distinfo =================================================================== RCS file: /cvs/ports/net/dnscrypt-proxy/distinfo,v retrieving revision 1.29 diff -u -p -u -p -r1.29 distinfo --- distinfo 6 Apr 2020 18:42:57 -0000 1.29 +++ distinfo 17 Jun 2020 06:25:51 -0000 @@ -1,2 +1,2 @@ -SHA256 (dnscrypt-proxy-2.0.42.tar.gz) = wADKThWcZgbLNHbqnjTtZLXEbHENcMxWUfFPESXI01I= -SIZE (dnscrypt-proxy-2.0.42.tar.gz) = 2324442 +SHA256 (dnscrypt-proxy-2.0.44.tar.gz) = wsmWjwekFOlz7Fc09FmNdWo1wyvu2xgmhZDqE1V5Qjc= +SIZE (dnscrypt-proxy-2.0.44.tar.gz) = 2279842 Index: patches/patch-dnscrypt-proxy_example-dnscrypt-proxy_toml =================================================================== RCS file: /cvs/ports/net/dnscrypt-proxy/patches/patch-dnscrypt-proxy_example-dnscrypt-proxy_toml,v retrieving revision 1.13 diff -u -p -u -p -r1.13 patch-dnscrypt-proxy_example-dnscrypt-proxy_toml --- patches/patch-dnscrypt-proxy_example-dnscrypt-proxy_toml 23 Mar 2020 05:16:43 -0000 1.13 +++ patches/patch-dnscrypt-proxy_example-dnscrypt-proxy_toml 17 Jun 2020 06:25:51 -0000 @@ -12,7 +12,7 @@ Index: dnscrypt-proxy/example-dnscrypt-p ## Require servers (from static + remote sources) to satisfy specific properties -@@ -585,7 +585,7 @@ cache_neg_max_ttl = 600 +@@ -594,7 +594,7 @@ cache_neg_max_ttl = 600 [sources.'public-resolvers'] urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/public-resolvers.md', 'https://download.dnscrypt.info/resolvers-list/v2/public-resolvers.md'] @@ -21,7 +21,7 @@ Index: dnscrypt-proxy/example-dnscrypt-p minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3' prefix = '' -@@ -593,7 +593,7 @@ cache_neg_max_ttl = 600 +@@ -602,7 +602,7 @@ cache_neg_max_ttl = 600 [sources.'relays'] urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/relays.md', 'https://download.dnscrypt.info/resolvers-list/v2/relays.md'] Index: pkg/PLIST =================================================================== RCS file: /cvs/ports/net/dnscrypt-proxy/pkg/PLIST,v retrieving revision 1.2 diff -u -p -u -p -r1.2 PLIST --- pkg/PLIST 22 Dec 2019 14:12:47 -0000 1.2 +++ pkg/PLIST 17 Jun 2020 06:25:51 -0000 @@ -16,4 +16,8 @@ share/examples/dnscrypt-proxy/example-dn share/examples/dnscrypt-proxy/example-forwarding-rules.txt share/examples/dnscrypt-proxy/example-ip-blacklist.txt share/examples/dnscrypt-proxy/example-whitelist.txt +@mode 775 +@group _dnscrypt-proxy @sample ${LOCALSTATEDIR}/dnscrypt-proxy/ +@comment fix perms for upgrades since privsep downloaded cache files in 2.0.43 +@exec-update [[ $(stat -f '%u:%g' ${LOCALSTATEDIR}/dnscrypt-proxy/public-resolvers.md 2>/dev/null) != 0:688 ]] && chown -R root:_dnscrypt-proxy ${LOCALSTATEDIR}/dnscrypt-proxy && chmod -R ug+rwX ${LOCALSTATEDIR}/dnscrypt-proxy || true