Commit 644d0255 authored by Jérome Perrin's avatar Jérome Perrin

process_timer:

  save and restore original security manager
  pass a wrapped user to newSecurityManager
  use finally: construct, remove some commented out LOGs and fix indentation



git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@11946 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 57aee107
...@@ -39,7 +39,10 @@ from Products.ERP5Type.Core.Folder import Folder ...@@ -39,7 +39,10 @@ from Products.ERP5Type.Core.Folder import Folder
from Products.CMFActivity.ActiveResult import ActiveResult from Products.CMFActivity.ActiveResult import ActiveResult
from Products.PythonScripts.Utility import allow_class from Products.PythonScripts.Utility import allow_class
from AccessControl import ClassSecurityInfo, Permissions from AccessControl import ClassSecurityInfo, Permissions
from AccessControl.SecurityManagement import newSecurityManager, noSecurityManager from AccessControl.SecurityManagement import newSecurityManager
from AccessControl.SecurityManagement import noSecurityManager
from AccessControl.SecurityManagement import setSecurityManager
from AccessControl.SecurityManagement import getSecurityManager
from Products.CMFCore.utils import UniqueObject, _getAuthenticatedUser, getToolByName from Products.CMFCore.utils import UniqueObject, _getAuthenticatedUser, getToolByName
from Globals import InitializeClass, DTMLFile from Globals import InitializeClass, DTMLFile
from Acquisition import aq_base from Acquisition import aq_base
...@@ -484,23 +487,22 @@ class ActivityTool (Folder, UniqueObject): ...@@ -484,23 +487,22 @@ class ActivityTool (Folder, UniqueObject):
acquired = timerservice_lock.acquire(0) acquired = timerservice_lock.acquire(0)
if not acquired: if not acquired:
return return
old_sm = getSecurityManager()
try: try:
# get owner of portal_catalog, so normally we should be able to # get owner of portal_catalog, so normally we should be able to
# have the permission to invoke all activities # have the permission to invoke all activities
user = self.portal_catalog.getOwner() user = self.portal_catalog.getWrappedOwner()
newSecurityManager(self.REQUEST, user) newSecurityManager(self.REQUEST, user)
currentNode = self.getCurrentNode() currentNode = self.getCurrentNode()
# only distribute when we are the distributingNode or if it's empty # only distribute when we are the distributingNode or if it's empty
if (self.distributingNode == self.getCurrentNode()): if (self.distributingNode == self.getCurrentNode()):
self.distribute(len(self._nodes)) self.distribute(len(self._nodes))
#LOG('CMFActivity:', INFO, 'self.distribute(node_count=%s)' %len(self._nodes))
elif not self.distributingNode: elif not self.distributingNode:
self.distribute(1) self.distribute(1)
#LOG('CMFActivity:', INFO, 'distributingNodes empty! Calling distribute(1)')
# SkinsTool uses a REQUEST cache to store skin objects, as # SkinsTool uses a REQUEST cache to store skin objects, as
# with TimerService we have the same REQUEST over multiple # with TimerService we have the same REQUEST over multiple
...@@ -514,18 +516,14 @@ class ActivityTool (Folder, UniqueObject): ...@@ -514,18 +516,14 @@ class ActivityTool (Folder, UniqueObject):
# the processing_node numbers are the indices of the elements in the node tuple +1 # the processing_node numbers are the indices of the elements in the node tuple +1
# because processing_node starts form 1 # because processing_node starts form 1
if currentNode in self._nodes: if currentNode in self._nodes:
self.tic(list(self._nodes).index(currentNode)+1) self.tic(list(self._nodes).index(currentNode)+1)
#LOG('CMFActivity:', INFO, 'self.tic(processing_node=%s)' %str(list(self._nodes).index(currentNode)+1))
elif len(self._nodes) == 0: elif len(self._nodes) == 0:
self.tic(1) self.tic(1)
#LOG('CMFActivity:', INFO, 'Node List is empty! Calling tic(1)')
except: finally:
timerservice_lock.release()
raise
else:
timerservice_lock.release() timerservice_lock.release()
setSecurityManager(old_sm)
security.declarePublic('distribute') security.declarePublic('distribute')
def distribute(self, node_count=1): def distribute(self, node_count=1):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment