From 2276ef4bfd54973493b4126b301cbc9b2df5d341 Mon Sep 17 00:00:00 2001 From: bwarsaw Date: Mon, 5 Jun 2000 17:11:49 +0000 Subject: Added a variable STEALTH_MODE which can be set to true to inhibit traceback, system, and environment information to the web pages. The information is always still printed to the log files. --- scripts/driver | 87 +++++++++++++++++++++++++++++++++------------------------- 1 file changed, 49 insertions(+), 38 deletions(-) (limited to 'scripts/driver') diff --git a/scripts/driver b/scripts/driver index c4eada9e2..116b0ad75 100644 --- a/scripts/driver +++ b/scripts/driver @@ -1,5 +1,3 @@ -#! /usr/bin/env python -# # Copyright (C) 1998,1999,2000 by the Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or @@ -22,11 +20,19 @@ import sys # From here on we are as bulletproof as possible! +# The driver script prints out a lot of information when a Mailman bug is +# encountered. This really helps for development, but it also reveals +# information about the host system that some administrators are not +# comfortable with. By setting STEALTH_MODE to 1, you disable the printing of +# this information to the web pages. This information is still, and always, +# printed in the error logs. +STEALTH_MODE = 0 + # This standard driver script is used to run CGI programs, wrapped in code # that catches errors, and displays them as HTML. This guarantees that -# (almost) any problems in the Mailman software doesn't result in a Web server +# (almost) any problem in the Mailman software doesn't result in a Web server # error. It is much more helpful to generate and show a traceback, which the # user could send to the administrator, than to display a server error and # have to trudge through server logs. @@ -48,26 +54,26 @@ def run_main(): try: # These will ensure that even if something between now and the # creation of the real logger below fails, we can still get - # *something* meaningful + # *something* meaningful. logger = None - # insert the relative path to the parent of the Mailman package - # directory, so we can pick up the Utils module + # Insert the relative path to the parent of the Mailman package + # directory, so we can pick up the Utils module. import os - # sys gets imported at module level below + # sys gets imported at module level below. sys.path.insert(0, os.pardir) - # map stderr to a logger, if possible + # Map stderr to a logger, if possible. from Mailman.Logging.StampedLogger import StampedLogger logger = StampedLogger('error', label='admin', manual_reprime=1, nofail=0, immediate=1) - # pre-load the `cgi' module. we do this because we're distributing a - # slightly different version than the standard Python module. it's + # Pre-load the `cgi' module. We do this because we're distributing a + # slightly different version than the standard Python module. It's # essentially Python 1.5.2's module, with an experimental patch to # handle clients that give bogus or non-existant content-type headers. # - # we assign sys.modules['cgi'] to this special cgi module because we + # We assign sys.modules['cgi'] to this special cgi module because we # don't want to have to rewrite all the Mailman.Cgi modules to get the # special one. import Mailman.pythonlib.cgi @@ -90,7 +96,7 @@ def run_main(): finally: sys.stderr = sys.__stderr__ except SystemExit: - # this is a valid way for the function to exit + # This is a valid way for the function to exit. pass except: print_traceback(logger) @@ -115,7 +121,7 @@ def print_traceback(logfp=None): except ImportError: VERSION = '<undetermined>' - # write to the log file first + # Write to the log file first. logfp.write('@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n') logfp.write('[----- Mailman Version: %s -----]\n' % VERSION) logfp.write('[----- Traceback ------]\n') @@ -125,26 +131,31 @@ def print_traceback(logfp=None): logfp.write('[failed to import module traceback]\n') logfp.write('[exc: %s, var: %s]\n' % sys.exc_info()[0:2]) - # print to the HTML sink + # Write to the HTML sink. print """\ Content-type: text/html Bug in Mailman version %(VERSION)s -

Bug in Mailman version %(VERSION)s

+

Bug in Mailman version %(VERSION)s

We're sorry, we hit a bug!

- -

If you would like to help us identify the problem, please -email a copy of this page to the webmaster for this site with +""" % locals() + if not STEALTH_MODE: + print '''

If you would like to help us identify the problem, +please email a copy of this page to the webmaster for this site with a description of what happened. Thanks! -

Traceback:

-

""" % locals()
-    if traceback:
-        traceback.print_exc(file=sys.stdout)
+

Traceback:

'''
+        if traceback:
+            traceback.print_exc(file=sys.stdout)
+        else:
+            print '[failed to import module traceback]'
+            print '[exc: %s, var: %s]' % sys.exc_info()[0:2]
+        print '\n\n
' else: - print '[failed to import module traceback]' - print '[exc: %s, var: %s]' % sys.exc_info()[0:2] - print '\n\n
' + print '''

Please inform the webmaster for this site of this +problem. Printing of traceback and other system information has been +explicitly inhibited, but the webmaster can find this information in the +Mailman error logs.''' @@ -157,18 +168,17 @@ def print_environment(logfp=None): except ImportError: os = None - # some information about our Python executable + # Write some information about our Python executable to the log file. logfp.write('[----- Python Information -----]\n') logfp.write('sys.version = %s\n' % sys.version) logfp.write('sys.executable = %s\n' % sys.executable) logfp.write('sys.prefix = %s\n' % sys.prefix) logfp.write('sys.exec_prefix= %s\n' % sys.exec_prefix) - # what else? logfp.write('sys.path = %s\n' % sys.exec_prefix) logfp.write('sys.platform = %s\n' % sys.platform) - # some information about our Python executable - if os: + # Write the same information to the HTML sink. + if not STEALTH_MODE: print '''\


Python information:

@@ -189,7 +199,7 @@ def print_environment(logfp=None): sys.platform, '' print '' - # write to the log file first + # Write environment variables to the log file. logfp.write('[----- Environment Variables -----]\n') if os: for k, v in os.environ.items(): @@ -197,19 +207,20 @@ def print_environment(logfp=None): else: logfp.write('[failed to import module os]') - # write to the HTML sink - if os: + # Write environment variables to the HTML sink. + if not STEALTH_MODE: print '''\


Environment variables:

''' - for k, v in os.environ.items(): - print '' - print '
VariableValue
', k, '', v, '
' - else: - print '


[failed to import module os]' + if os: + for k, v in os.environ.items(): + print '', k, '', v, '' + print '' + else: + print '


[failed to import module os]' @@ -218,7 +229,7 @@ try: except: # Some exception percolated all the way back up to the top. This # generally shouldn't happen because the run_main() call is similarly - # wrapped, but just in case, we'll give it one last ditch effort to report + # wrapped, but just in case, we'll give it one last ditch effort to report # problems to *somebody*. Most likely this will end up in the Web server # log file. try: -- cgit v1.3.1