mirror of
https://github.com/naruxde/revpipyload.git
synced 2025-11-08 15:13:52 +01:00
Set configured owner of files and directories after plc program upload
If 'plcworkdir_set_uid' is set to 1, all uploaded files and new created directories in plc work dir will set to configured owner and group.
This commit is contained in:
@@ -1194,23 +1194,31 @@ class RevPiPyLoad:
|
|||||||
# Windowszeichen prüfen
|
# Windowszeichen prüfen
|
||||||
filename = filename.replace("\\", "/")
|
filename = filename.replace("\\", "/")
|
||||||
|
|
||||||
# Absoluten Pfad prüfen
|
# Build absolut path, join will return last element, if absolute
|
||||||
dirname = os.path.join(self.plcworkdir, os.path.dirname(filename))
|
dirname = os.path.join(self.plcworkdir, os.path.dirname(filename))
|
||||||
if self.plcworkdir not in os.path.abspath(dirname):
|
if self.plcworkdir not in os.path.abspath(dirname):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# Ordner erzeugen
|
set_uid = self.plcuid if self.plcworkdir_set_uid else 0
|
||||||
|
set_gid = self.plcgid if self.plcworkdir_set_uid else 0
|
||||||
|
|
||||||
|
# Set permissions only to newly created directories
|
||||||
if not os.path.exists(dirname):
|
if not os.path.exists(dirname):
|
||||||
|
lst_subdir = dirname.lstrip(self.plcworkdir).split("/")
|
||||||
|
for i in range(len(lst_subdir)):
|
||||||
|
dir_part = os.path.join(self.plcworkdir, *lst_subdir[:i + 1])
|
||||||
|
if os.path.exists(dir_part):
|
||||||
|
# Do not change owner of existing directorys
|
||||||
|
continue
|
||||||
|
|
||||||
os.makedirs(dirname)
|
os.makedirs(dirname)
|
||||||
|
os.chown(dir_part, set_uid, set_gid)
|
||||||
|
|
||||||
# Datei erzeugen
|
# Datei erzeugen
|
||||||
try:
|
try:
|
||||||
with open(filename, "wb") as fh:
|
with open(filename, "wb") as fh:
|
||||||
fh.write(gzip.decompress(filedata.data))
|
fh.write(gzip.decompress(filedata.data))
|
||||||
if self.plcworkdir_set_uid:
|
os.chown(filename, set_uid, set_gid)
|
||||||
os.chown(self.plcworkdir, self.plcuid, self.plcgid)
|
|
||||||
else:
|
|
||||||
os.chown(self.plcworkdir, 0, 0)
|
|
||||||
return True
|
return True
|
||||||
except Exception:
|
except Exception:
|
||||||
return False
|
return False
|
||||||
|
|||||||
Reference in New Issue
Block a user