From 6c45bb40036c18e8af95a3d7a03cc3f180df8a4e Mon Sep 17 00:00:00 2001 From: Sinisa Veseli <sveseli@aps.anl.gov> Date: Tue, 15 Dec 2015 16:38:40 +0000 Subject: [PATCH] fixing download permission issue --- .../dm/common/utility/ldapLinuxPlatformUtility.py | 3 --- src/python/dm/ds_web_service/api/fileRestApi.py | 6 ++++-- .../service/impl/experimentManager.py | 14 ++++++++++++++ 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/python/dm/common/utility/ldapLinuxPlatformUtility.py b/src/python/dm/common/utility/ldapLinuxPlatformUtility.py index 0c5abad0..11b2a088 100755 --- a/src/python/dm/common/utility/ldapLinuxPlatformUtility.py +++ b/src/python/dm/common/utility/ldapLinuxPlatformUtility.py @@ -196,9 +196,6 @@ class LdapLinuxPlatformUtility: raise InternalError(exception=ex) @classmethod - def createLocalGroup(cls, name): - """ Create local group if it does not exist. """ - @classmethod def createLocalGroup(cls, name): """ Create local group if it does not exist. """ logger = cls.getLogger() diff --git a/src/python/dm/ds_web_service/api/fileRestApi.py b/src/python/dm/ds_web_service/api/fileRestApi.py index 6d0c5d96..52cf596e 100755 --- a/src/python/dm/ds_web_service/api/fileRestApi.py +++ b/src/python/dm/ds_web_service/api/fileRestApi.py @@ -64,8 +64,10 @@ class FileRestApi(DsRestApi): if experimentFilePath: src = '%s/%s' % (src, experimentFilePath) dest = destDirectory - - fileTransfer = RsyncFileTransfer(src=src, dest=dest) + + rsyncPath = '/tmp/rsync.%s.%s' % (username, experimentName) + flags = '-arvlP --rsync-path="%s"' % rsyncPath + fileTransfer = RsyncFileTransfer(src=src, dest=dest, flags=flags) self.logger.info('Executing file download on behalf of %s (experiment: %s)' % (username, experimentName)) fileTransfer.execute() finally: diff --git a/src/python/dm/ds_web_service/service/impl/experimentManager.py b/src/python/dm/ds_web_service/service/impl/experimentManager.py index 108b62ff..804b031b 100755 --- a/src/python/dm/ds_web_service/service/impl/experimentManager.py +++ b/src/python/dm/ds_web_service/service/impl/experimentManager.py @@ -24,6 +24,7 @@ class ExperimentManager(Singleton): MANAGE_STORAGE_PERMISSIONS_KEY = 'managestoragepermissions' PLATFORM_UTILITY_KEY = 'platformutility' + RSYNC_SCRIPT_PERMISSIONS_MODE = 0711 FILE_PERMISSIONS_MODE = 0640 DIR_PERMISSIONS_MODE = 0750 @@ -91,6 +92,17 @@ class ExperimentManager(Singleton): experimentUsers = experiment.get('experimentUsernameList', []) self.platformUtility.setGroupUsers(experimentName, experimentUsers) + def createRsyncScript(self, username, experimentName): + fileName = '/tmp/rsync.%s.%s.' % (username, experimentName) + f = open(fileName, 'w') + f.write('#!/bin/sh\n') + f.write('exec sg %s "rsync $*"\n' % experimentName) + f.close() + OsUtility.chmodPath(fileName, fileMode=self.RSYNC_SCRIPT_PERMISSIONS_MODE) + def deleteRsyncScript(self, username, experimentName): + fileName = '/tmp/rsync.%s.%s.' % (username, experimentName) + OsUtility.removeFile(fileName) + def authorizeDownload(self, username, experimentName): experiment = self.experimentDbApi.getExperimentByName(experimentName) storageDirectory = self.updateExperimentWithStorageDataDirectory(experiment) @@ -98,6 +110,7 @@ class ExperimentManager(Singleton): self.platformUtility.addLocalUserToGroup(username, experimentName) else: raise InvalidRequest('Experiment %s has not been started.' % experimentName) + self.createRsyncScript(username, experimentName) return experiment def deauthorizeDownload(self, username, experimentName): @@ -107,6 +120,7 @@ class ExperimentManager(Singleton): self.platformUtility.deleteLocalUserFromGroup(username, experimentName) else: raise InvalidRequest('Experiment %s has not been started.' % experimentName) + self.deleteRsyncScript(username, experimentName) return experiment def createExperimentGroup(self, experiment): -- GitLab