Keep track of whether a CGI request is carried over SSL.
[chopwood] / cgi.py
diff --git a/cgi.py b/cgi.py
index 0630feb..0bd66cc 100644 (file)
--- a/cgi.py
+++ b/cgi.py
@@ -145,7 +145,7 @@ def cookie(name, value, **kw):
                                  T.gmtime(U.NOW + maxage))
   return '; '.join(['%s=%s' % (urlencode(name), urlencode(value))] +
                    [v is not True and '%s=%s' % (k, v) or k
-                    for k, v in attr.iteritems()])
+                    for k, v in attr.iteritems() if v])
 
 def action(*v, **kw):
   """
@@ -264,7 +264,7 @@ def cgi_errors(hook = None):
     if hook: hook()
     if isinstance(e, U.ExpectedError) and not OUT.headerp:
       page('error.fhtml',
-           headers = dict(status = e.code),
+           header = dict(status = e.code),
            title = 'Chopwood: error', error = e)
     else:
       exty, exval, extb = SYS.exc_info()
@@ -278,7 +278,7 @@ def cgi_errors(hook = None):
           format_tmpl(TMPL['exception.fhtml'], toplevel = False)
         else:
           page('exception.fhtml',
-               headers = dict(status = 500),
+               header = dict(status = 500),
                title = 'Chopwood: internal error',
                toplevel = True)
 
@@ -291,6 +291,7 @@ SPECIAL = {}
 PARAM = []
 PARAMDICT = {}
 PATH = []
+SSLP = False
 
 ## Regular expressions for splitting apart query and cookie strings.
 R_QSPLIT = RX.compile('[;&]')
@@ -346,8 +347,13 @@ def cgiparse():
   `PATH'
         The trailing `PATH_INFO' path, split at `/' markers, with any
         trailing empty component removed.
+
+  `SSLP'
+        True if the client connection is carried over SSL or TLS.
   """
 
+  global SSLP
+
   def getenv(var):
     try: return ENV[var]
     except KeyError: raise U.ExpectedError, (500, "No `%s' supplied" % var)
@@ -402,6 +408,10 @@ def cgiparse():
     if pp and not pp[-1]: pp.pop()
     PATH[:] = pp
 
+  ## Check the crypto for the connection.
+  if ENV.get('SSL_PROTOCOL'):
+    SSLP = True
+
 ###--------------------------------------------------------------------------
 ### CGI subcommands.