home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 5 / DATAFILE_PDCD5.iso / utilities / p / python / pyhtmldoc / a / an_example next >
Text File  |  1996-11-14  |  2KB  |  33 lines

  1. <TITLE>An example -- Python library reference</TITLE>
  2. Prev: <A HREF="../r/rexec" TYPE="Prev">rexec</A>  
  3. Up: <A HREF="../r/rexec" TYPE="Up">rexec</A>  
  4. Top: <A HREF="../t/top" TYPE="Top">Top</A>  
  5. <H2>11.1.1. An example</H2>
  6. Let us say that we want a slightly more relaxed policy than the
  7. standard RExec class.  For example, if we're willing to allow files in
  8. <FILE>/tmp</FILE> to be written, we can subclass the <CODE>RExec</CODE> class:
  9. <P>
  10. <UL COMPACT><CODE>class TmpWriterRExec(rexec.RExec):<P>
  11.     def r_open(self, file, mode='r', buf=-1):<P>
  12.         if mode in ('r', 'rb'):<P>
  13.             pass<P>
  14.         elif mode in ('w', 'wb', 'a', 'ab'):<P>
  15.             # check filename : must begin with /tmp/<P>
  16.             if file[:5]!='/tmp/': <P>
  17.                 raise IOError, "can't write outside /tmp"<P>
  18.             elif (string.find(file, '/../') >= 0 or<P>
  19.                  file[:3] == '../' or file[-3:] == '/..'):<P>
  20.                 raise IOError, "'..' in filename forbidden"<P>
  21.         else: raise IOError, "Illegal open() mode"<P>
  22.         return open(file, mode, buf)<P>
  23. </CODE></UL>
  24. Notice that the above code will occasionally forbid a perfectly valid
  25. filename; for example, code in the restricted environment won't be
  26. able to open a file called <FILE>/tmp/foo/../bar</FILE>.  To fix this, the
  27. <CODE>r_open</CODE> method would have to simplify the filename to
  28. <FILE>/tmp/bar</FILE>, which would require splitting apart the filename and
  29. performing various operations on it.  In cases where security is at
  30. stake, it may be preferable to write simple code which is sometimes
  31. overly restrictive, instead of more general code that is also more
  32. complex and may harbor a subtle security hole.
  33.