diff -uprN django.orig/core/handlers/modpython.py django/core/handlers/modpython.py
--- django.orig/core/handlers/modpython.py	2007-08-27 00:20:51.000000000 +0400
+++ django/core/handlers/modpython.py	2007-08-31 17:57:19.000000000 +0400
@@ -43,11 +43,11 @@ class ModPythonRequest(http.HttpRequest)
 
     def is_secure(self):
         # Note: modpython 3.2.10+ has req.is_https(), but we need to support previous versions
-        return 'HTTPS' in self._req.subprocess_env and self._req.subprocess_env['HTTPS'] == 'on'
+        return self._req.subprocess_env.has_key('HTTPS') and self._req.subprocess_env['HTTPS'] == 'on'
 
     def _load_post_and_files(self):
         "Populates self._post and self._files"
-        if 'content-type' in self._req.headers_in and self._req.headers_in['content-type'].startswith('multipart'):
+        if self._req.headers_in.has_key('content-type') and self._req.headers_in['content-type'].startswith('multipart'):
             self._post, self._files = http.parse_file_upload(self._req.headers_in, self.raw_post_data)
         else:
             self._post, self._files = http.QueryDict(self.raw_post_data, encoding=self._encoding), datastructures.MultiValueDict()
@@ -75,7 +75,9 @@ class ModPythonRequest(http.HttpRequest)
 
     def _get_cookies(self):
         if not hasattr(self, '_cookies'):
-            self._cookies = http.parse_cookie(self._req.headers_in.get('cookie', ''))
+            if not self._req.headers_in.has_key('cookie'):
+                self._req.headers_in['cookie'] = ''
+            self._cookies = http.parse_cookie(self._req.headers_in['cookie'])
         return self._cookies
 
     def _set_cookies(self, cookies):
@@ -89,8 +91,20 @@ class ModPythonRequest(http.HttpRequest)
     def _get_meta(self):
         "Lazy loader that returns self.META dictionary"
         if not hasattr(self, '_meta'):
+            if hasattr(self._req, 'ap_auth_type'):
+                auth_type = self._req.ap_auth_type
+            elif hasattr(self._req.connection, 'ap_auth_type'):
+                auth_type = self._req.connection.ap_auth_type
+            else:
+                auth_type = None
+            if hasattr(self._req, 'user'):
+                user = self._req.user
+            elif hasattr(self._req.connection, 'user'):
+                user = self._req.connection.user
+            else:
+                user = None
             self._meta = {
-                'AUTH_TYPE':         self._req.ap_auth_type,
+                'AUTH_TYPE':         auth_type,
                 'CONTENT_LENGTH':    self._req.clength, # This may be wrong
                 'CONTENT_TYPE':      self._req.content_type, # This may be wrong
                 'GATEWAY_INTERFACE': 'CGI/1.1',
@@ -100,7 +114,7 @@ class ModPythonRequest(http.HttpRequest)
                 'REMOTE_ADDR':       self._req.connection.remote_ip,
                 'REMOTE_HOST':       None, # DNS lookups not supported
                 'REMOTE_IDENT':      self._req.connection.remote_logname,
-                'REMOTE_USER':       self._req.user,
+                'REMOTE_USER':       user,
                 'REQUEST_METHOD':    self._req.method,
                 'SCRIPT_NAME':       None, # Not supported
                 'SERVER_NAME':       self._req.server.server_hostname,
@@ -108,9 +122,9 @@ class ModPythonRequest(http.HttpRequest)
                 'SERVER_PROTOCOL':   self._req.protocol,
                 'SERVER_SOFTWARE':   'mod_python'
             }
-            for key, value in self._req.headers_in.items():
-                key = 'HTTP_' + key.upper().replace('-', '_')
-                self._meta[key] = value
+            for key in self._req.headers_in.keys():
+                meta_key = 'HTTP_' + key.upper().replace('-', '_')
+                self._meta[meta_key] = self._req.headers_in[key]
         return self._meta
 
     def _get_raw_post_data(self):
@@ -165,6 +179,8 @@ class ModPythonHandler(BaseHandler):
         for c in response.cookies.values():
             req.headers_out.add('Set-Cookie', c.output(header=''))
         req.status = response.status_code
+        if hasattr(req, 'send_http_header'):
+            req.send_http_header()
         try:
             for chunk in response:
                 req.write(chunk)
