0

私のploneサイトからインターネット接続を確認したいと思います。Pythonスクリプトでpingを試しました

## Script (Python) "pwreset_action.cpy"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##title=Reset a user's password
##parameters=randomstring, userid=None, password=None, password2=None
from Products.CMFCore.utils import getToolByName
from Products.PasswordResetTool.PasswordResetTool import InvalidRequestError, ExpiredRequestError
import ping, socket



status = "success"
pw_tool = getToolByName(context, 'portal_password_reset')
try:
    pw_tool.resetPassword(userid, randomstring, password)

except ExpiredRequestError:
    status = "expired"
except InvalidRequestError:
    status = "invalid"
except RuntimeError:
    status = "invalid"

context.plone_log("TRYING TO PING")
try :



 ping.verbose_ping('www.google.com' , run=3)
   context.plone_log("PING DONE")
except socket.error, e:
    context.plone_log("PING FAILED")


return state.set(status=status)

私はこれらのエラーを受け取りました:

2012-07-20T11:37:08 INFO SignalHandler Caught signal SIGTERM
------
2012-07-20T11:37:08 INFO Z2 Shutting down fast
------
2012-07-20T11:37:08 INFO ZServer closing HTTP to new connections
------
2012-07-20T11:37:42 INFO ZServer HTTP server started at Fri Jul 20 11:37:42 2012
    Hostname: 0.0.0.0
    Port: 8080
------
2012-07-20T11:37:42 WARNING SecurityInfo Conflicting security declarations for "setText"
------
2012-07-20T11:37:42 WARNING SecurityInfo Class "ATTopic" had conflicting security declarations
------
2012-07-20T11:37:46 INFO plone.app.theming Patched Zope Management Interface to disable theming.
------
2012-07-20T11:37:48 INFO PloneFormGen Patching plone.app.portlets ColumnPortletManagerRenderer to not catch Retry exceptions
------
2012-07-20T11:37:48 INFO Zope Ready to handle requests
------
4

2 に答える 2

3

ZopeのPythonスクリプトはサンドボックス化されています(RestrictedPythonを介して、つまり、モジュールのインポートは最初に安全であると宣言する必要があります。宣言された安全リストにモジュールを追加することは、何をしているのかわからない限り、一般的に悪い考えです。

モジュールをPythonスクリプトにインポート可能として宣言するには、Pythonパッケージを作成し、それに次のコードを追加して、Zopeの起動時に実行されるようにする必要があります。

from Products.PythonScripts.Utility import allow_module

allow_module('ping')

これにより、そのモジュールからのインポートが可能になります(注意して使用してください)。

モジュールからの特定のメソッドとクラスのみを許可することをお勧めします。ModuleSecurityそのための宣言を使用します。

from AccessControl import ModuleSecurityInfo

ModuleSecurityInfo('ping').declarePublic('verbose_ping')
ModuleSecurityInfo('socket').declarePublic('error')

これは、Zope Developers Guideのセキュリティの章、特にモジュールのセキュリティアサーションに関するセクションに記載されています。

ほとんどの場合、このすべての作業を制限のないコード(通常のPythonパッケージなど)で厳しく制限されたメソッドで実行し、代わりにそのメソッドをPythonスクリプトから使用できるようにすることをお勧めします。

于 2012-07-22T10:34:09.663 に答える
1

動作しません。

昨日言われた答えのように、RestrictedPythonスクリプトに任意のPythonモジュールをインポートすることはできません。

https://stackoverflow.com/a/11568316/315168

調停Pythonモジュールを使用する必要がある場合は、そのために独自のPloneアドオンを作成し、その目的でBrowserViewを使用する必要があります。RestrictedPythonのWebブラウザを介した開発では不十分です。

http://collective-docs.readthedocs.org/en/latest/getstarted/index.html

于 2012-07-20T09:55:01.923 に答える