diff --git a/src/python/dm/common/utility/ldapLinuxPlatformUtility.py b/src/python/dm/common/utility/ldapLinuxPlatformUtility.py index 0c5abad090254f97ba0197d090ff57f86ac6d9b3..11b2a088afe90a1c9f8d430325b36c1d7ad11028 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 6d0c5d96683d53ea32e434ea8f61bb4f2815597e..52cf596eef2f7d795662d86159cc81539b69d7ba 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 108b62ff5d01959dafffc3962d75504dbd4ed626..804b031ba9f0dfac431f61c0bac186a9cbb0b699 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):