diff -rc mod_python-3.2.8-orig/src/connobject.c mod_python-3.2.8/src/connobject.c
*** mod_python-3.2.8-orig/src/connobject.c	2006-02-02 22:30:55.000000000 +0100
--- mod_python-3.2.8/src/connobject.c	2006-02-28 11:18:01.000000000 +0100
***************
*** 319,332 ****
  {
      PyObject *addrobj = makeipaddr(addr);
      PyObject *ret = NULL;
      if (addrobj) {
          apr_port_t port;
!         if(apr_sockaddr_port_get(&port, addr)==APR_SUCCESS) {
!             ret = Py_BuildValue("Oi", addrobj, port );
!         }
!         else {
!             PyErr_SetString(PyExc_SystemError,"apr_sockaddr_port_get failure");
!         }
          Py_DECREF(addrobj);
      }
      return ret;
--- 319,332 ----
  {
      PyObject *addrobj = makeipaddr(addr);
      PyObject *ret = NULL;
+ 
+     /* apr_sockaddr_port_get was deprecated and removed in apr 1.x
+      * Access the port directly instead
+      */
      if (addrobj) {
          apr_port_t port;
!         port = addr->port; 
!         ret = Py_BuildValue("Oi", addrobj, port );
          Py_DECREF(addrobj);
      }
      return ret;
diff -rc mod_python-3.2.8-orig/src/include/mod_python.h.in mod_python-3.2.8/src/include/mod_python.h.in
*** mod_python-3.2.8-orig/src/include/mod_python.h.in	2005-09-19 19:51:03.000000000 +0200
--- mod_python-3.2.8/src/include/mod_python.h.in	2006-02-28 11:18:01.000000000 +0100
***************
*** 179,184 ****
--- 179,219 ----
  
  #endif /* !Mp_MOD_PYTHON_H */
  
+ #ifndef APR_STATUS_IS_SUCCESS
+ /* APR_STATUS_IS_SUCCESS is defined in apr_errno.h for apr versions < 1.x.
+  * It was dropped in the current apr version 1.x, which causes a problem
+  * for mod_python connobject.c and filterobject.c in Apache 2.2.
+  * Occurrences of APR_STATUS_IS_SUCCESS in mod_python should be replaced
+  * with something like:
+  *   if (s != APR_SUCCESS) 
+  *     //error handling code
+  *
+  * Their is some uncertainty if the APR_OS_START_SYSERR part of
+  * the test is significant in Win32 (it likely is not), but to be safe 
+  * APR_STATUS_IS_SUCCESS is reproduced here for use with Apache 2.2.
+  * The APR_STATUS_IS_SUCCESS should be considered as deprecated.
+  */
+ 
+ #if defined(OS2) && !defined(DOXYGEN)
+ #define APR_STATUS_IS_SUCCESS(s)           ((s) == APR_SUCCESS \
+                 || (s) == APR_OS_START_SYSERR + NO_ERROR)
+ 
+ #elif defined(WIN32) && !defined(DOXYGEN) /* !defined(OS2) */
+ #define APR_STATUS_IS_SUCCESS(s)           ((s) == APR_SUCCESS \
+                 || (s) == APR_OS_START_SYSERR + ERROR_SUCCESS)
+ 
+ #elif defined(NETWARE) && !defined(DOXYGEN) /* !defined(OS2) && !defined(WIN32) */
+ #define APR_STATUS_IS_SUCCESS(s)           ((s) == APR_SUCCESS)
+ 
+ #else /* !defined(NETWARE) && !defined(OS2) && !defined(WIN32) */
+ 
+ /** no error */
+ #define APR_STATUS_IS_SUCCESS(s)        ((s) == APR_SUCCESS)
+ #endif
+ 
+ #endif /* !APR_STATUS_IS_SUCCESS */
+ 
+ 
  /*
  # makes emacs go into C mode
  ### Local Variables:
diff -rc mod_python-3.2.8-orig/test/httpdconf.py mod_python-3.2.8/test/httpdconf.py
*** mod_python-3.2.8-orig/test/httpdconf.py	2005-09-13 22:35:57.000000000 +0200
--- mod_python-3.2.8/test/httpdconf.py	2006-02-28 11:18:01.000000000 +0100
***************
*** 37,44 ****
  class Container:
      
      def __init__(self, *args):
!         self.args = args
          self.indent = 0
  
      def __str__(self):
  
--- 37,47 ----
  class Container:
      
      def __init__(self, *args):
!         self.args = list(args)
          self.indent = 0
+     
+     def append(self, value):
+         self.args.append(value)
  
      def __str__(self):
  
***************
*** 80,85 ****
--- 83,98 ----
      def __init__(self, val):
          Directive.__init__(self, self.__class__.__name__, val)
  
+ class AuthBasicAuthoritative(Directive):
+     # New in Apache 2.2
+     def __init__(self, val):
+         Directive.__init__(self, self.__class__.__name__, val)
+ 
+ class AuthBasicProvider(Directive):
+     # New in Apache 2.2
+     def __init__(self, val):
+         Directive.__init__(self, self.__class__.__name__, val)
+ 
  class AuthType(Directive):
      def __init__(self, val):
          Directive.__init__(self, self.__class__.__name__, val)
***************
*** 112,117 ****
--- 125,134 ----
      def __init__(self, dir, *args):
          ContainerTag.__init__(self, self.__class__.__name__, dir, args)
  
+ class KeepAliveTimeout(Directive):
+     def __init__(self, val):
+         Directive.__init__(self, self.__class__.__name__, val)
+ 
  class Listen(Directive):
      def __init__(self, val):
          Directive.__init__(self, self.__class__.__name__, val)
diff -rc mod_python-3.2.8-orig/test/test.py mod_python-3.2.8/test/test.py
*** mod_python-3.2.8-orig/test/test.py	2006-02-19 20:51:17.000000000 +0100
--- mod_python-3.2.8/test/test.py	2006-02-28 11:18:01.000000000 +0100
***************
*** 220,225 ****
--- 220,251 ----
          s = '"%s"' % s
      return s
  
+ def get_apache_version():
+ 
+     print "Checking Apache version...."
+     httpd = quoteIfSpace(HTTPD)
+     cmd = '%s -v' % (httpd)
+     (stdin,stdout) = os.popen2(cmd)
+ 
+     version_str = None
+     for line in stdout:
+         if line.startswith('Server version'):
+              version_str = line.strip()
+              break
+ 
+     if version_str:
+         version_str = version_str.split('/')[1]
+         major,minor,patch = version_str.split('.',3)
+         version = '%s.%s' % (major,minor)
+     else:
+         
+         print "Can't determine Apache version. Assuming 2.0"
+         version = '2.0'
+     print version
+     return version
+ 
+ APACHE_VERSION = get_apache_version()
+ 
  class HttpdCtrl:
      # a mixin providing ways to control httpd
  
***************
*** 289,302 ****
              Listen(PORT),
              PythonOption('PythonOptionTest sample_value'),
              DocumentRoot(DOCUMENT_ROOT),
!             LoadModule("python_module %s" % quoteIfSpace(MOD_PYTHON_SO)),
!             IfModule("!mod_auth.c",
                       LoadModule("auth_module %s" %
                                  quoteIfSpace(os.path.join(modpath, "mod_auth.so")))))
  
          f = open(CONFIG, "w")
          f.write(str(s))
-         f.write("\n# --APPENDED-- \n\n"+append)
          f.close()
  
      def startHttpd(self,extra=''):
--- 315,340 ----
              Listen(PORT),
              PythonOption('PythonOptionTest sample_value'),
              DocumentRoot(DOCUMENT_ROOT),
!             LoadModule("python_module %s" % quoteIfSpace(MOD_PYTHON_SO)))
! 
!         if APACHE_VERSION == '2.2':
!             # mod_auth has been split into mod_auth_basic and some other modules
!             s.append(IfModule("!mod_auth_basic.c",
!                      LoadModule("auth_basic_module %s" %
!                                 quoteIfSpace(os.path.join(modpath, "mod_auth_basic.so")))))
! 
!             # Default KeepAliveTimeout is 5 for apache 2.2, but 15 in apache 2.0
!             # Explicitly set the value so it's the same as 2.0
!             s.append(KeepAliveTimeout("15"))
!         else:
!             s.append(IfModule("!mod_auth.c",
                       LoadModule("auth_module %s" %
                                  quoteIfSpace(os.path.join(modpath, "mod_auth.so")))))
  
+         s.append("\n# --APPENDED-- \n\n"+append)
+ 
          f = open(CONFIG, "w")
          f.write(str(s))
          f.close()
  
      def startHttpd(self,extra=''):
***************
*** 595,601 ****
  
      def test_req_requires_conf(self):
  
!         c = VirtualHost("*",
                          ServerName("test_req_requires"),
                          DocumentRoot(DOCUMENT_ROOT),
                          Directory(DOCUMENT_ROOT,
--- 633,658 ----
  
      def test_req_requires_conf(self):
  
!         if APACHE_VERSION == '2.2':
!             # Apache 2.2 needs AuthBasicAuthoritative Off 
!             # This is necessary when combining mod_auth_basic with third-party
!             # modules that are not configured with the AuthBasicProvider  
!             # directive. 
!             c = VirtualHost("*",
!                         ServerName("test_req_requires"),
!                         DocumentRoot(DOCUMENT_ROOT),
!                         Directory(DOCUMENT_ROOT,
!                                   SetHandler("mod_python"),
!                                   AuthName("blah"),
!                                   AuthType("basic"),
!                                   Require("valid-user"),
!                                   AuthBasicAuthoritative("Off"),
!                                   PythonAuthenHandler("tests::req_requires"),
!                                   PythonDebug("On")))
! 
!         else:
!             # This configuration is suitable for Apache 2.0
!             c = VirtualHost("*",
                          ServerName("test_req_requires"),
                          DocumentRoot(DOCUMENT_ROOT),
                          Directory(DOCUMENT_ROOT,
***************
*** 605,610 ****
--- 662,668 ----
                                    Require("valid-user"),
                                    PythonAuthenHandler("tests::req_requires"),
                                    PythonDebug("On")))
+ 
          return str(c)
  
      def test_req_requires(self):
