Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Z
Zope
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
Zope
Commits
718b7126
Commit
718b7126
authored
Jun 29, 2001
by
matt@zope.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixes into PermissionRole stuff
parent
591de589
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
297 additions
and
62 deletions
+297
-62
lib/python/AccessControl/cAccessControl.c
lib/python/AccessControl/cAccessControl.c
+297
-62
No files found.
lib/python/AccessControl/cAccessControl.c
View file @
718b7126
...
...
@@ -36,7 +36,7 @@
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
$Id: cAccessControl.c,v 1.
3 2001/06/28 19:22:32
matt Exp $
$Id: cAccessControl.c,v 1.
4 2001/06/29 17:48:50
matt Exp $
If you have questions regarding this software,
contact:
...
...
@@ -70,10 +70,17 @@ typedef struct {
typedef
struct
{
PyObject_HEAD
PyObject
*
__name__
;
PyObject
*
_p
;
PyObject
*
_d
;
}
PermissionRole
;
typedef
struct
{
PyObject_HEAD
PyObject
*
_p
;
PyObject
*
_pa
;
PyObject
*
_d
;
PyObject
*
_v
;
}
imPermissionRole
;
/*
...
...
@@ -85,20 +92,36 @@ static PyObject *ZopeSecurityPolicy_checkPermission(PyObject *self,
PyObject
*
args
);
static
void
ZopeSecurityPolicy_dealloc
(
ZopeSecurityPolicy
*
self
);
static
PyObject
*
PermissionRole_getattr
(
PermissionRole
*
self
,
char
*
name
);
static
int
PermissionRole_setattr
(
PermissionRole
*
self
,
char
*
name
,
PyObject
*
value
);
static
PyObject
*
PermissionRole_init
(
PermissionRole
*
self
,
PyObject
*
args
);
static
PyObject
*
PermissionRole_of
(
PermissionRole
*
self
,
PyObject
*
args
);
static
void
PermissionRole_dealloc
(
PermissionRole
*
self
);
static
PyObject
*
imPermissionRole_getattr
(
imPermissionRole
*
self
,
char
*
name
);
static
int
imPermissionRole_setattr
(
imPermissionRole
*
self
,
char
*
name
,
PyObject
*
value
);
static
PyObject
*
imPermissionRole_of
(
imPermissionRole
*
self
,
PyObject
*
args
);
static
int
imPermissionRole_length
(
imPermissionRole
*
self
);
static
PyObject
*
imPermissionRole_getitem
(
imPermissionRole
*
self
,
PyObject
*
item
);
static
void
imPermissionRole_dealloc
(
imPermissionRole
*
self
);
static
PyObject
*
rolesForPermissionOn
(
PyObject
*
self
,
PyObject
*
args
);
static
PyObject
*
permissionName
(
PyObject
*
name
);
/*
** Constants
*/
static
PyMethodDef
cAccessControl_methods
[]
=
{
{
"rolesForPermissionOn"
,
(
PyCFunction
)
rolesForPermissionOn
,
METH_VARARGS
,
""
},
{
NULL
,
NULL
}
};
...
...
@@ -159,6 +182,11 @@ static PyExtensionClass ZopeSecurityPolicyType = {
static
char
PermissionRole__doc__
[]
=
"PermissionRole C implementation"
;
static
PyMethodDef
PermissionRole_methods
[]
=
{
{
"__init__"
,
(
PyCFunction
)
PermissionRole_init
,
METH_VARARGS
,
""
},
{
"__of__"
,
(
PyCFunction
)
PermissionRole_of
,
METH_VARARGS
,
...
...
@@ -175,8 +203,8 @@ static PyExtensionClass PermissionRoleType = {
/* Standard methods */
(
destructor
)
PermissionRole_dealloc
,
/* tp_dealloc */
NULL
,
/* tp_print */
NULL
,
/* tp_getattr */
NULL
,
/* tp_setattr */
(
getattrfunc
)
PermissionRole_getattr
,
/* tp_getattr */
(
setattrfunc
)
PermissionRole_setattr
,
/* tp_setattr */
NULL
,
/* tp_compare */
NULL
,
/* tp_repr */
/* Method suites */
...
...
@@ -201,7 +229,11 @@ static PyExtensionClass PermissionRoleType = {
NULL
,
/* tp_next */
#endif
METHOD_CHAIN
(
PermissionRole_methods
),
/* methods */
EXTENSIONCLASS_BINDABLE_FLAG
,
/* flags */
EXTENSIONCLASS_BINDABLE_FLAG
/*|
EXTENSIONCLASS_INSTDICT_FLAG*/
,
/* flags */
NULL
,
/* Class dict */
NULL
,
/* bases */
NULL
,
/* reserved */
};
static
char
imPermissionRole__doc__
[]
=
"imPermissionRole C implementation"
;
...
...
@@ -229,8 +261,8 @@ static PyExtensionClass imPermissionRoleType = {
/* Standard methods */
(
destructor
)
imPermissionRole_dealloc
,
/* tp_dealloc */
NULL
,
/* tp_print */
NULL
,
/* tp_getattr */
NULL
,
/* tp_setattr */
(
getattrfunc
)
imPermissionRole_getattr
,
/* tp_getattr */
(
setattrfunc
)
imPermissionRole_setattr
,
/* tp_setattr */
NULL
,
/* tp_compare */
NULL
,
/* tp_repr */
/* Method suites */
...
...
@@ -255,7 +287,11 @@ static PyExtensionClass imPermissionRoleType = {
NULL
,
/* tp_next */
#endif
METHOD_CHAIN
(
imPermissionRole_methods
),
/* methods */
EXTENSIONCLASS_BINDABLE_FLAG
,
/* flags */
EXTENSIONCLASS_BINDABLE_FLAG
/*|
EXTENSIONCLASS_INSTDICT_FLAG*/
,
/* flags */
NULL
,
/* Class dict */
NULL
,
/* bases */
NULL
,
/* reserved */
};
...
...
@@ -270,10 +306,10 @@ static PyObject *_noroles = NULL;
static
PyObject
*
Unauthorized
=
NULL
;
static
PyObject
*
LOG
=
NULL
;
static
PyObject
*
PROBLEM
=
NULL
;
static
PyObject
*
rolesForPermissionOn
=
NULL
;
static
PyObject
*
_what_not_even_god_should_do
=
NULL
;
static
PyObject
*
Anonymous
=
NULL
;
static
PyObject
*
imPermissionRoleObj
=
NULL
;
static
PyObject
*
defaultPermission
=
NULL
;
/* --------------------------------------------------------------
** ZopeSecurityPolicy Methods
...
...
@@ -326,15 +362,8 @@ static int ZopeSecurityPolicy_setup(void) {
Py_DECREF
(
module
);
module
=
NULL
;
/*| from PermissionRole import rolesForPermissionOn
*/
IMPORT
(
module
,
"AccessControl.PermissionRole"
);
GETATTR
(
module
,
rolesForPermissionOn
);
GETATTR
(
module
,
_what_not_even_god_should_do
);
GETATTR
(
module
,
Anonymous
);
Py_DECREF
(
module
);
module
=
NULL
;
defaultPermission
=
Py_BuildValue
(
"(s)"
,
"Manager"
);
_what_not_even_god_should_do
=
Py_BuildValue
(
"[]"
);
return
1
;
...
...
@@ -889,6 +918,7 @@ static PyObject *ZopeSecurityPolicy_checkPermission(PyObject *self,
PyObject
*
roles
;
PyObject
*
result
=
NULL
;
PyObject
*
user
;
PyObject
*
arg
;
/*| def checkPermission(self, permission, object, context)
*/
...
...
@@ -899,8 +929,9 @@ static PyObject *ZopeSecurityPolicy_checkPermission(PyObject *self,
/*| roles = rolesForPermissionOn(permission, object)
*/
roles
=
PyObject_CallFunction
(
rolesForPermissionOn
,
"OO"
,
permission
,
object
);
arg
=
Py_BuildValue
(
"OO"
,
permission
,
object
);
roles
=
rolesForPermissionOn
(
self
,
arg
);
Py_DECREF
(
arg
);
if
(
roles
==
NULL
)
return
NULL
;
...
...
@@ -939,6 +970,73 @@ static void ZopeSecurityPolicy_dealloc(ZopeSecurityPolicy *self) {
PyMem_DEL
(
self
);
}
/*
** PermissionRole_getatro
*/
static
PyObject
*
PermissionRole_getattr
(
PermissionRole
*
self
,
char
*
name
)
{
#define IZZIT(n) if (strcmp(#n, name) == 0) { Py_INCREF(self->n); return self->n; }
IZZIT
(
__name__
);
IZZIT
(
_p
);
IZZIT
(
_d
);
return
Py_FindAttrString
(
OBJECT
(
self
),
name
);
}
/*
** PermissionRole_setattro
*/
static
int
PermissionRole_setattr
(
PermissionRole
*
self
,
char
*
name
,
PyObject
*
value
)
{
PyObject
*
sname
;
#define IZZITA(n) if (strcmp(#n, name) == 0) { Py_XDECREF(self->n); Py_INCREF(value); self->n = value; return 0; }
IZZITA
(
__name__
);
IZZITA
(
_p
);
IZZITA
(
_d
);
sname
=
PyString_FromString
(
name
);
PyErr_SetObject
(
PyExc_AttributeError
,
sname
);
Py_DECREF
(
sname
);
return
-
1
;
}
/*
** PermissionRole_init
**
*/
static
PyObject
*
PermissionRole_init
(
PermissionRole
*
self
,
PyObject
*
args
)
{
PyObject
*
name
=
NULL
;
PyObject
*
deflt
=
NULL
;
/*|def __init__(self, name, default=('Manager',)):
**| self.__name__ = name
**| self._p = "_" + string.translate(name, name_trans) + "_Permission"
**| self._d = default
*/
if
(
!
PyArg_ParseTuple
(
args
,
"O|O"
,
&
name
,
&
deflt
))
return
NULL
;
if
(
deflt
==
NULL
)
deflt
=
defaultPermission
;
self
->
__name__
=
name
;
Py_INCREF
(
name
);
self
->
_p
=
permissionName
(
name
);
self
->
_d
=
deflt
;
Py_INCREF
(
deflt
);
Py_INCREF
(
Py_None
);
return
Py_None
;
}
/*
** PermissionRole_of
...
...
@@ -948,47 +1046,39 @@ static void ZopeSecurityPolicy_dealloc(ZopeSecurityPolicy *self) {
static
PyObject
*
PermissionRole_of
(
PermissionRole
*
self
,
PyObject
*
args
)
{
PyObject
*
parent
=
NULL
;
PyObject
*
r
=
NULL
;
imPermissionRole
*
r
=
NULL
;
PyObject
*
_p
=
NULL
;
PyObject
*
result
=
NULL
;
/*|def __of__(self, parent):
*/
if
(
!
PyArg_ParseTuple
(
args
,
"O"
,
parent
))
return
NULL
;
if
(
!
PyArg_ParseTuple
(
args
,
"O"
,
&
parent
))
return
NULL
;
/*| r = imPermissionRole()
*/
r
=
PyObject_CallObject
(
imPermissionRoleObj
,
NULL
);
r
=
(
imPermissionRole
*
)
PyObject_CallObject
(
imPermissionRoleObj
,
NULL
);
if
(
r
==
NULL
)
return
NULL
;
/*| r._p = self._p
*/
_p
=
PyObject_GetAttrString
(
OBJECT
(
self
),
"_p"
);
if
(
_p
==
NULL
)
goto
err
;
if
(
PyObject_SetAttrString
(
r
,
"_p"
,
_p
)
==
-
1
)
{
Py_DECREF
(
_p
);
goto
err
;
}
Py_DECREF
(
_p
);
r
->
_p
=
self
->
_p
;
Py_INCREF
(
r
->
_p
);
/*| r._pa = parent
*/
if
(
PyObject_SetAttrString
(
r
,
"_pa"
,
parent
)
==
-
1
)
goto
err
;
r
->
_pa
=
parent
;
Py_INCREF
(
r
->
_pa
);
/*| r._d = self._d
*/
_p
=
PyObject_GetAttrString
(
OBJECT
(
self
),
"_d"
);
if
(
_p
==
NULL
)
goto
err
;
if
(
PyObject_SetAttrString
(
r
,
"_d"
,
_p
)
==
-
1
)
{
Py_DECREF
(
_p
);
goto
err
;
}
Py_DECREF
(
_p
);
r
->
_d
=
self
->
_d
;
Py_INCREF
(
r
->
_d
);
/*| p = getattr(parent, 'aq_inner', None)
**| if p is not None:
...
...
@@ -1000,15 +1090,14 @@ static PyObject *PermissionRole_of(PermissionRole *self, PyObject *args) {
_p
=
PyObject_GetAttrString
(
parent
,
"aq_inner"
);
if
(
_p
)
{
result
=
PyObject_CallMethod
(
r
,
"__of__"
,
"O"
,
_p
);
result
=
PyObject_CallMethod
(
OBJECT
(
r
)
,
"__of__"
,
"O"
,
_p
);
Py_DECREF
(
_p
);
/* Dont need goto */
}
else
{
result
=
r
;
result
=
OBJECT
(
r
)
;
Py_INCREF
(
r
);
}
err:
Py_XDECREF
(
r
);
return
result
;
...
...
@@ -1020,9 +1109,51 @@ static PyObject *PermissionRole_of(PermissionRole *self, PyObject *args) {
*/
static
void
PermissionRole_dealloc
(
PermissionRole
*
self
)
{
Py_XDECREF
(
self
->
__name__
);
Py_XDECREF
(
self
->
_p
);
Py_XDECREF
(
self
->
_d
);
PyMem_DEL
(
self
);
}
/*
** imPermissionRole_getatro
*/
static
PyObject
*
imPermissionRole_getattr
(
imPermissionRole
*
self
,
char
*
name
)
{
IZZIT
(
_p
);
IZZIT
(
_pa
);
IZZIT
(
_d
);
IZZIT
(
_v
);
return
Py_FindAttrString
(
OBJECT
(
self
),
name
);
}
/*
** imPermissionRole_setattro
*/
static
int
imPermissionRole_setattr
(
imPermissionRole
*
self
,
char
*
name
,
PyObject
*
value
)
{
PyObject
*
sname
;
IZZITA
(
_p
);
IZZITA
(
_pa
);
IZZITA
(
_d
);
IZZITA
(
_v
);
sname
=
PyString_FromString
(
name
);
PyErr_SetObject
(
PyExc_AttributeError
,
sname
);
Py_DECREF
(
sname
);
return
-
1
;
}
/*
** imPermissionRole_of
**
...
...
@@ -1049,8 +1180,12 @@ static PyObject *imPermissionRole_of(imPermissionRole *self, PyObject *args) {
obj
=
parent
;
Py_INCREF
(
obj
);
n
=
PyObject_GetAttrString
(
OBJECT
(
self
),
"_p"
);
if
(
n
==
NULL
)
goto
err
;
n
=
self
->
_p
;
if
(
n
==
NULL
)
{
PyErr_SetString
(
PyExc_AttributeError
,
"_p"
);
goto
err
;
}
Py_INCREF
(
n
);
r
=
Py_None
;
Py_INCREF
(
r
);
...
...
@@ -1087,6 +1222,7 @@ static PyObject *imPermissionRole_of(imPermissionRole *self, PyObject *args) {
if
(
r
==
Py_None
)
{
result
=
roles
;
roles
=
NULL
;
/* avoid incref/decref */
goto
err
;
}
else
{
PyObject
*
list
;
PyObject
*
cat
;
...
...
@@ -1181,7 +1317,7 @@ static PyObject *imPermissionRole_of(imPermissionRole *self, PyObject *args) {
if
(
r
==
Py_None
)
{
Py_DECREF
(
r
);
r
=
PyObject_GetAttrString
(
OBJECT
(
self
),
"_d"
)
;
r
=
self
->
_d
;
if
(
r
==
NULL
)
goto
err
;
}
...
...
@@ -1194,8 +1330,8 @@ static PyObject *imPermissionRole_of(imPermissionRole *self, PyObject *args) {
err:
Py_XDECREF
(
r
);
Py_XDECREF
(
n
);
Py_XDECREF
(
r
);
Py_XDECREF
(
obj
);
Py_XDECREF
(
roles
);
...
...
@@ -1222,17 +1358,19 @@ static int imPermissionRole_length(imPermissionRole *self) {
**| return len(v)
*/
v
=
PyObject_GetAttrString
(
OBJECT
(
self
),
"_v"
)
;
v
=
self
->
_v
;
if
(
v
==
NULL
)
{
pa
=
PyObject_GetAttrString
(
OBJECT
(
self
),
"_pa"
)
;
pa
=
self
->
_pa
;
if
(
pa
==
NULL
)
return
-
1
;
v
=
PyObject_CallMethod
(
OBJECT
(
self
),
"__of__"
,
"O"
,
pa
);
Py_DECREF
(
pa
);
PyObject_SetAttrString
(
OBJECT
(
self
),
"_v"
,
v
);
Py_XDECREF
(
self
->
_v
);
self
->
_v
=
v
;
PyObject_DelAttrString
(
OBJECT
(
self
),
"_pa"
);
Py_XDECREF
(
self
->
_pa
);
self
->
_pa
=
NULL
;
}
l
=
PyObject_Length
(
v
);
...
...
@@ -1261,17 +1399,20 @@ static PyObject *imPermissionRole_getitem(imPermissionRole *self,
**| return v[i]
*/
v
=
PyObject_GetAttrString
(
OBJECT
(
self
),
"_v"
);
v
=
self
->
_v
;
if
(
v
==
NULL
)
{
pa
=
PyObject_GetAttrString
(
OBJECT
(
self
),
"_pa"
)
;
pa
=
self
->
_pa
;
if
(
pa
==
NULL
)
return
NULL
;
v
=
PyObject_CallMethod
(
OBJECT
(
self
),
"__of__"
,
"O"
,
pa
);
Py_DECREF
(
pa
);
PyObject_SetAttrString
(
OBJECT
(
self
),
"_v"
,
v
);
Py_XDECREF
(
self
->
_v
);
self
->
_v
=
v
;
PyObject_DelAttrString
(
OBJECT
(
self
),
"_pa"
);
Py_XDECREF
(
self
->
_pa
);
self
->
_pa
=
NULL
;
}
result
=
PyObject_GetItem
(
v
,
item
);
...
...
@@ -1286,9 +1427,105 @@ static PyObject *imPermissionRole_getitem(imPermissionRole *self,
*/
static
void
imPermissionRole_dealloc
(
imPermissionRole
*
self
)
{
Py_XDECREF
(
self
->
_p
);
self
->
_p
=
NULL
;
Py_XDECREF
(
self
->
_pa
);
self
->
_pa
=
NULL
;
Py_XDECREF
(
self
->
_d
);
self
->
_d
=
NULL
;
Py_XDECREF
(
self
->
_v
);
self
->
_v
=
NULL
;
PyMem_DEL
(
self
);
}
/*
** rolesForPermissionOn
*/
static
PyObject
*
rolesForPermissionOn
(
PyObject
*
self
,
PyObject
*
args
)
{
PyObject
*
perm
=
NULL
;
PyObject
*
object
=
NULL
;
PyObject
*
deflt
=
NULL
;
imPermissionRole
*
im
=
NULL
;
PyObject
*
result
;
/*|def rolesForPermissionOn(perm, object, default=('Manager',)):
**|
**| """Return the roles that have the permisson on the given object"""
**|
**| im = imPermissionRole()
**|
**| im._p="_"+string.translate(perm, name_trans)+"_Permission"
**| im._d = default
**| return im.__of__(object)
*/
if
(
!
PyArg_ParseTuple
(
args
,
"OO|O"
,
&
perm
,
&
object
,
&
deflt
))
return
NULL
;
im
=
(
imPermissionRole
*
)
PyObject_CallObject
(
imPermissionRoleObj
,
NULL
);
if
(
im
==
NULL
)
return
NULL
;
im
->
_p
=
permissionName
(
perm
);
if
(
deflt
==
NULL
)
deflt
=
defaultPermission
;
im
->
_d
=
deflt
;
Py_INCREF
(
deflt
);
result
=
PyObject_CallMethod
(
OBJECT
(
im
),
"__of__"
,
"O"
,
object
);
Py_DECREF
(
im
);
return
result
;
}
/*
** permissionName
**
** Can silently truncate permission names if they are really long
*/
static
PyObject
*
permissionName
(
PyObject
*
name
)
{
char
namebuff
[
512
];
register
int
len
=
sizeof
(
namebuff
)
-
1
;
char
*
c
=
namebuff
;
char
*
in
;
char
r
;
*
c
=
'_'
;
c
++
;
len
--
;
in
=
PyString_AsString
(
name
);
while
(
len
&&
*
in
)
{
r
=
*
(
in
++
);
if
(
!
isalnum
(
r
))
r
=
'_'
;
*
(
c
++
)
=
r
;
len
--
;
}
if
(
len
)
{
in
=
"_Permission"
;
while
(
len
&&
*
in
)
{
*
(
c
++
)
=
*
(
in
++
);
len
--
;
}
}
*
c
=
'\0'
;
/* Saved room in len */
return
PyString_FromString
(
namebuff
);
}
/* ----------------------------------------------------------------
** Module initialization
** ----------------------------------------------------------------
...
...
@@ -1297,19 +1534,13 @@ static void imPermissionRole_dealloc(imPermissionRole *self) {
PUBLIC
void
initcAccessControl
(
void
)
{
PyObject
*
module
;
PyObject
*
dict
;
char
*
rev
=
"$Revision: 1.
3
$"
;
char
*
rev
=
"$Revision: 1.
4
$"
;
if
(
!
ExtensionClassImported
)
return
;
ZopeSecurityPolicyType
.
tp_getattro
=
(
getattrofunc
)
PyExtensionClassCAPI
->
getattro
;
PermissionRoleType
.
tp_getattro
=
(
getattrofunc
)
PyExtensionClassCAPI
->
getattro
;
imPermissionRoleType
.
tp_getattro
=
(
getattrofunc
)
PyExtensionClassCAPI
->
getattro
;
module
=
Py_InitModule4
(
"cAccessControl"
,
cAccessControl_methods
,
"$Id: %
\n
"
,
...
...
@@ -1334,10 +1565,14 @@ PUBLIC void initcAccessControl(void) {
PyString_FromStringAndSize
(
rev
+
11
,
strlen
(
rev
+
11
)
-
2
));
if
(
!
ZopeSecurityPolicy_setup
())
{
Py_FatalError
(
"Can't initialize module cAccessControl -- dependancies failed to load."
);
Py_FatalError
(
"Can't initialize module cAccessControl "
"-- dependancies failed to load."
);
return
;
}
PyDict_SetItemString
(
dict
,
"_what_not_even_god_should_do"
,
_what_not_even_god_should_do
);
PyExtensionClass_Export
(
dict
,
"ZopeSecurityPolicy"
,
ZopeSecurityPolicyType
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment