b82f144c8a3db1f34a7ffb2d453515b76bb84bd7 hiram Thu May 21 19:41:57 2026 -0700 must run as umask 002 while making files to avoid write permissions by other users in our group refs #31811 diff --git src/hg/utils/otto/userRequests/ottoRequestPush.py src/hg/utils/otto/userRequests/ottoRequestPush.py index 6c63641dd58..ecc009991be 100755 --- src/hg/utils/otto/userRequests/ottoRequestPush.py +++ src/hg/utils/otto/userRequests/ottoRequestPush.py @@ -6,30 +6,33 @@ Output: dict[clade] -> sorted list of assembly identifiers, where each identifier is "_" for GenArk accessions, or the plain UCSC db name for native dbs. cron tab entry in hiram crontab: 4,26,46 * * * * ~/kent/src/hg/utils/otto/userRequests/ottoRequestPush.py """ import fcntl import os import re import subprocess import sys from collections import defaultdict +# Set umask 002 (group-writable) for this process and all subprocesses +os.umask(0o002) + scriptDir = os.path.dirname(os.path.abspath(__file__)) cladeTsv = os.path.join(scriptDir, "dbDb.name.clade.tsv") lockPath = os.path.join(scriptDir, "ottoRequestPush.lock") gcPattern = re.compile(r"^GC[AF]_") # UCSC native .over.chain.gz files get rsync'd to both hgdownload hosts. pushUser = "qateam" pushHosts = ["hgdownload1.soe.ucsc.edu", "hgdownload3.gi.ucsc.edu"] ############################################################################ def acquireSingletonLock(): """Ensure only one instance of this script runs at a time. Holds an exclusive flock on lockPath for the lifetime of the process; the kernel releases it on exit (including crash / kill -9), so no stale lock cleanup is needed. Returns the open file handle, which the