[Python-checkins] CVS: python/dist/src/Python structmember.c,2.19,2.20

Guido van Rossum gvanrossum@users.sourceforge.net
Mon, 17 Sep 2001 12:28:10 -0700


Update of /cvsroot/python/python/dist/src/Python
In directory usw-pr-cvs1:/tmp/cvs-serv23085/Python

Modified Files:
	structmember.c 
Log Message:
Add support for restricting access based on restricted execution mode.
Renamed the 'readonly' field to 'flags' and defined some new flag
bits: READ_RESTRICTED and WRITE_RESTRICTED, as well as a shortcut
RESTRICTED that means both.


Index: structmember.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/structmember.c,v
retrieving revision 2.19
retrieving revision 2.20
diff -C2 -d -r2.19 -r2.20
*** structmember.c	2001/01/27 06:20:08	2.19
--- structmember.c	2001/09/17 19:28:08	2.20
***************
*** 39,42 ****
--- 39,48 ----
  		if (strcmp(l->name, name) == 0) {
  			PyObject *v;
+ 			if ((l->flags & READ_RESTRICTED) &&
+ 			    PyEval_GetRestricted()) {
+ 				PyErr_SetString(PyExc_RuntimeError,
+ 						"restricted attribute");
+ 				return NULL;
+ 			}
  			addr += l->offset;
  			switch (l->type) {
***************
*** 134,146 ****
  	for (l = mlist; l->name != NULL; l++) {
  		if (strcmp(l->name, name) == 0) {
  #ifdef macintosh
! 			if (l->readonly || l->type == T_STRING ||
! 			    l->type == T_PSTRING)
  			{
- #else
- 			if (l->readonly || l->type == T_STRING ) {
- #endif /* macintosh */
  				PyErr_SetString(PyExc_TypeError,
  						"readonly attribute");
  				return -1;
  			}
--- 140,157 ----
  	for (l = mlist; l->name != NULL; l++) {
  		if (strcmp(l->name, name) == 0) {
+ 			if ((l->flags & READONLY) || l->type == T_STRING
  #ifdef macintosh
! 			    || l->type == T_PSTRING
! #endif
! 				)
  			{
  				PyErr_SetString(PyExc_TypeError,
  						"readonly attribute");
+ 				return -1;
+ 			}
+ 			if ((l->flags & WRITE_RESTRICTED) &&
+ 			    PyEval_GetRestricted()) {
+ 				PyErr_SetString(PyExc_RuntimeError,
+ 						"restricted attribute");
  				return -1;
  			}