m #Ec@sQdZdkZdkZdkZdklZdkZdkZdk l Z dkl Z dk l Z lZlZlZlZlZlZlZlZlZlZyeWn,ej o eiieidZnXeiieZeiieZdfdYZ d ei!fd YZ"d fd YZ#d e"fdYZ$de"fdYZ%de"fdYZ&de"fdYZ'dei!fdYZ(de"fdYZ)hZ*dfdYZ+e,a-de"fdYZ.dZ/ei0d ddfjo d Z1nd!Z2e3d"joei4ndS(#sTest Zope Guards Well, at least begin testing some of the functionality $Id: testZopeGuards.py 40440 2005-12-01 02:15:15Z tseaver $ N(sdoctest(sContainerAssertions(s Unauthorized( sguarded_getattrs get_dict_gets get_dict_pops get_list_popsget_iters guarded_mins guarded_maxs safe_builtinssguarded_enumerates guarded_sums guarded_applyitSecurityManagercBs/tZddZdZdZdZRS(NicCsg|_||_dS(N(tselftcallstreject(RR((tA/data/zmath/zope/lib/python/AccessControl/tests/testZopeGuards.pyt__init__*s cGs.|iid|f|io tndS(Ntvalidatei(RRtappendtargsRt Unauthorized(RR((RR.s  cGs.|iid|f|io tndS(Nt validateValuei(RRRRRR (RR((RR 4s  cGs|iid|f|i S(NtcheckPermission(RRRRR(RR((RR :s(t__name__t __module__RRR R (((RR(s   t GuardTestCasecBstZdZRS(NcCsVtii}tiii|}|djotii|=n|tii|<|S(N( t AccessControltSecurityManagementt get_identtkeyt _managerstgettoldtmanagertNone(RRRR((RtsetSecurityManager@s  (R R R(((RR>stMethodcBstZdZRS(NcGs ||_dS(N(RR(RR((RRMs(R R R(((RRKstTestGuardedGetattrcBs5tZdZdZdZdZdZRS(NcCs%t|_|i|i|_dS(N(RRt_TestGuardedGetattr__smRt_TestGuardedGetattr__old(R((RtsetUpSs cCs|i|idS(N(RRR(R((RttearDownWscCstd}}t||}ti|}t|i _ |i t t|||i|i i|i i2|i|ti|dS(NR(Rtobjtnametgetattrtvaluetsyst getrefcounttrctTrueRRRt assertRaisesR tguarded_getattrtassert_Rt assertEqual(RRR R"R%((Rttest_unauthorizedZs  cCs$t|d|i|iidS(Nt$test_calls_validate_for_unknown_type(R(RR)RR(R((RR,ds cCsh}t|}ti|}hdd<dt<}|t|(RDRCRR*(RRC((Rttest_pop_defaultscCsct}|i|}thdt(RR(R((Rt__repr__s(R R RRR(((RR~vs  tTestActualPythoncBstZgZZZdZdZddZdZ dZ dZ dZ dZ d Zd Zd Zd Zd ZdZ dZdZRS(NcCs g|_dS(N(Rt_wrapped_dicts(R((RRscCs;|ix$|iD]\}}|i|qW|`dS(N(Rt_restorePolicyAndManagerRtmungedtorigtupdate(RRR((RRs   c Csdkl}dkl}dkl}dkl}dkl}dfdY}||_ ||i |_ |djo9|}|i||i|_}|d|n|i||_dS(N(s get_ident(s _managers(snewSecurityManager(ssetSecurityPolicy(sZopeSecurityPolicytUnderprivilegedUsercBs2tZdZdZeZedZdZRS(s7 Anonymous USer for unit testing purposes. cCsdS(NsUnderprivileged User((R((RtgetIdscCsdS(Ni((Rtobjectt object_roles((RtallowedscCsfS(N((R((RtgetRoless(R R t__doc__Rt getUserNameRRR(((RRs   (t AccessControl.SecurityManagementRRtnewSecurityManagertAccessControl.SecurityManagertsetSecurityPolicyt AccessControl.ZopeSecurityPolicytZopeSecurityPolicyRRt_policyt _old_policyRRt thread_idRt_markert_old_mgrR( RRRRRRRRR((Rt_initPolicyAndManagers        cCspdkl}dkl}|i|ij o|i|in||i|ij o||indS(N(snoSecurityManager(ssetSecurityPolicy( RtnoSecurityManagerRRRRRRR(RRR((RRs  csedkldkl}dkl}tdjo-d|fdY}|||antS(N(sClassSecurityInfo(sBase(sInitializeClasst ProtectedBasecs'tZZeiddZRS(Ntprivate_methodcCsdS(Nsprivate_method called((R((RRs(R R tClassSecurityInfotsecuritytdeclarePrivateR((R(RRs  ( tAccessControl.SecurityInfoRtExtensionClasstBasetGlobalstInitializeClasst_ProtectedBaseRR(RRRRR((RRt_getProtectedBaseClasss      c Bsdkl}|id\}}|i||i||i|de}|i |}z ||UWd|i |Xg}e i D]$\} }|djo || qq~}|o|i|id|ndS(N(sverifysactual_python.pyt __builtins__isUnexercised wrappers: %r(tRestrictedPython.teststverifyRt_compiletcodet its_globalst_wrap_replaced_dict_callablesRRARRt_[1]RR/tktvt untouchedRLtfail( RRRRRRRRARR((Rt testPythons     > cBs!|id\}}||UdS(Nsactual_python.py(RRRR(RRR((RttestPythonRealACscBsdkl}d}|i|d\}}|i|d<|i||iy ||UWne j onX|i d|ddS(N(sverifysX class Normal(ProtectedBase): pass normal = Normal() print normal.private_method() t normal_scriptRsDidn't raise Unauthorized: %st_print( RRt NORMAL_SCRIPTRt _compile_strRRRRR R(RRRRR((Rttest_derived_class_normals    cCsVdkl}d}y|i|d\}}Wntj onX|iddS(N(sverifyss class Sneaky(ProtectedBase): private_method__roles__ = None sneaky = Sneaky() print sneaky.private_method() t sneaky_scriptsDidn't raise SyntaxError!( RRt SNEAKY_SCRIPTRRRRt SyntaxErrorR(RRRRR((Rt"test_derived_class_sneaky_en_suite s  cCsVdkl}d}y|i|d\}}Wntj onX|iddS(N(sverifys class Sneaky(ProtectedBase): pass Sneaky.private_method__roles__ = None sneaky = Sneaky() print sneaky.private_method() RsDidn't raise SyntaxError!( RRRRRRRRR(RRRRR((Rttest_derived_sneaky_post_facto!s  cCsVdkl}d}y|i|d\}}Wntj onX|iddS(N(sverifys~ class Sneaky(ProtectedBase): pass sneaky = Sneaky() sneaky.private_method__roles__ = None print sneaky.private_method() RsDidn't raise SyntaxError!( RRRRRRRRR(RRRRR((Rttest_derived_sneaky_instance7s  cBsdkl}d}|i|d\}}|i|e}|i |}z ||UWd|i |X|i |dddS(N(sverifysi def foo(text): return text kw = {'text':'baz'} print foo(**kw) kw = {'text':True} print foo(**kw) RyRs baz True ( RRtSIMPLE_DICT_ACCESS_SCRIPTRRRRRRARRR*(RRRRRRAR((Rttest_dict_accessNs     cCscdkl}dkl}l}|||d}|}||d>> from AccessControl.ZopeGuards import protected_inplacevar Basic operations on objects without inplace slots work as expected: >>> protected_inplacevar('+=', 1, 2) 3 >>> protected_inplacevar('-=', 5, 2) 3 >>> protected_inplacevar('*=', 5, 2) 10 >>> protected_inplacevar('/=', 6, 2) 3 >>> protected_inplacevar('%=', 5, 2) 1 >>> protected_inplacevar('**=', 5, 2) 25 >>> protected_inplacevar('<<=', 5, 2) 20 >>> protected_inplacevar('>>=', 5, 2) 1 >>> protected_inplacevar('&=', 5, 2) 0 >>> protected_inplacevar('^=', 7, 2) 5 >>> protected_inplacevar('|=', 5, 2) 7 Inplace operations are allowed on lists: >>> protected_inplacevar('+=', [1], [2]) [1, 2] >>> protected_inplacevar('*=', [1], 2) [1, 1] But not on custom objects: >>> class C: ... def __iadd__(self, other): ... return 42 >>> protected_inplacevar('+=', C(), 2) # doctest: +NORMALIZE_WHITESPACE Traceback (most recent call last): ... TypeError: Augmented assignment to C objects is not allowed in untrusted code N((((Rttest_inplacevars1iicCsdS(s\ protected_inplacevar allows inplce ops on sets: >>> from AccessControl.ZopeGuards import protected_inplacevar >>> s = set((1,2,3,4)) >>> sorted(protected_inplacevar('-=', s, set((1, 3)))) [2, 4] >>> sorted(s) [2, 4] >>> sorted(protected_inplacevar('|=', s, set((1, 3, 9)))) [1, 2, 3, 4, 9] >>> sorted(s) [1, 2, 3, 4, 9] >>> sorted(protected_inplacevar('&=', s, set((1, 2, 3, 9)))) [1, 2, 3, 9] >>> sorted(s) [1, 2, 3, 9] >>> sorted(protected_inplacevar('^=', s, set((1, 3, 7, 8)))) [2, 7, 8, 9] >>> sorted(s) [2, 7, 8, 9] N((((Rttest_inplacevar_for_py24scCsXtitig}x9ttttt t t fD]}|i ti|q4W|S(N(tunittestt TestSuitetdoctestt DocTestSuitetsuiteRR8R\RYRsR|RtclstaddTestt makeSuite(RR((Rt test_suites t__main__(5RRR#Rt zope.testingRtZODBRRt"AccessControl.SimpleObjectPoliciesR3R RR(R;RDRZRKR]R_RpRaRdR}t__file__t NameErrorRtabspathtargvt _FILEPATHtdirnameRRtTestCaseRRRR8RYR\RsR|RR~RRRRRXRRR tmain(%RaRRRRpR~R\R(R3RYRR_RRRZRRR;RKR RR#RR8R}R]RRRsRRdR|RRRRDR((Rt?sD      I +[V 3