af47bb13a5
* 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
266 lines
9.1 KiB
Diff
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):
|