nixpkgs/pkgs/servers/http/apache-modules/mod_python/jg-20060204-1.patch
Eelco Dolstra af47bb13a5 * Apache updated to 2.2.0.
* mod_python updated to 3.2.8, with a patch to get it to work with
  Apache 2.2.x.

svn path=/nixpkgs/trunk/; revision=4927
2006-02-28 12:01:39 +00:00

266 lines
9.1 KiB
Diff

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):