From c393b9fb05f14c4f08a30e471ddc0630b063a57d Mon Sep 17 00:00:00 2001 From: Sven Sager Date: Wed, 4 Nov 2020 23:18:52 +0100 Subject: [PATCH] Fix problem with extended unix user groups PLC program got only uid and gid, but not the other group ids of user. Set gid to work directory, too. Set uid and gid to uploaded files. --- revpipyload/plcsystem.py | 10 ++++++++++ revpipyload/revpipyload.py | 8 ++++++-- setup.py | 2 +- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/revpipyload/plcsystem.py b/revpipyload/plcsystem.py index 9d66eab..ca32478 100644 --- a/revpipyload/plcsystem.py +++ b/revpipyload/plcsystem.py @@ -6,6 +6,7 @@ __license__ = "GPLv3" import os import shlex import subprocess +from pwd import getpwuid from sys import stdout as sysstdout from threading import Event, Thread from time import sleep, asctime @@ -95,6 +96,15 @@ class RevPiPlc(Thread): "set uid {0} and gid {1} for plc program".format( self.uid, self.gid) ) + + # Set user last to hold root right to do the group things + try: + name = getpwuid(self.uid).pw_name + os.initgroups(name, self.gid) + except Exception: + proginit.logger.warning( + "could not initialize the group access list with all groups" + ) os.setgid(self.gid) os.setuid(self.uid) diff --git a/revpipyload/revpipyload.py b/revpipyload/revpipyload.py index bce4e94..6f58238 100755 --- a/revpipyload/revpipyload.py +++ b/revpipyload/revpipyload.py @@ -343,9 +343,9 @@ class RevPiPyLoad: # Workdirectory owner setzen try: if self.plcworkdir_set_uid: - os.chown(self.plcworkdir, self.plcuid, -1) + os.chown(self.plcworkdir, self.plcuid, self.plcgid) else: - os.chown(self.plcworkdir, 0, -1) + os.chown(self.plcworkdir, 0, 0) except Exception: proginit.logger.warning( "could not set user id on working directory" @@ -1207,6 +1207,10 @@ class RevPiPyLoad: try: with open(filename, "wb") as fh: fh.write(gzip.decompress(filedata.data)) + if self.plcworkdir_set_uid: + os.chown(self.plcworkdir, self.plcuid, self.plcgid) + else: + os.chown(self.plcworkdir, 0, 0) return True except Exception: return False diff --git a/setup.py b/setup.py index 5d90a11..83d8f25 100644 --- a/setup.py +++ b/setup.py @@ -27,7 +27,7 @@ setup( license="LGPLv3", name="revpipyload", - version="0.9.2c", + version="0.9.2d", scripts=[ "data/revpipyload",