diff options
-rw-r--r-- | NEWS | 8 | ||||
-rwxr-xr-x | autogen.sh | 17 | ||||
-rw-r--r-- | configure.ac | 33 | ||||
-rw-r--r-- | m4/apache.m4 | 151 | ||||
-rw-r--r-- | m4/apache_test.m4 | 96 | ||||
-rw-r--r-- | m4/apr_memcache.m4 | 56 | ||||
-rw-r--r-- | m4/apreq.m4 | 43 | ||||
-rwxr-xr-x | m4/buildconf.py | 83 | ||||
-rw-r--r-- | m4/find_apr.m4 | 166 | ||||
-rw-r--r-- | m4/libgnutls.m4 | 171 | ||||
-rw-r--r-- | m4/libmemcache.m4 | 46 | ||||
-rw-r--r-- | m4/librsvg.m4 | 29 | ||||
-rw-r--r-- | m4/lua.m4 | 71 | ||||
-rw-r--r-- | m4/outoforder.m4 | 36 | ||||
-rw-r--r-- | src/gnutls_cache.c | 9 | ||||
-rw-r--r-- | src/gnutls_config.c | 7 | ||||
-rw-r--r-- | src/gnutls_hooks.c | 6 | ||||
-rw-r--r-- | src/mod_gnutls.c | 3 |
18 files changed, 1006 insertions, 25 deletions
@@ -1,3 +1,11 @@ | |||
1 | ** Version 0.4.3 (2008-03-05) | ||
2 | |||
3 | - Added --disable-srp configure option | ||
4 | |||
5 | - Better check for memcache (patch by Guillaume Rousse) | ||
6 | |||
7 | - Corrected possible memory leak in DBM support for resuming sessions. | ||
8 | |||
1 | ** Version 0.4.2 (2007-12-10) | 9 | ** Version 0.4.2 (2007-12-10) |
2 | 10 | ||
3 | - Added support for sending a certificate chain. | 11 | - Added support for sending a certificate chain. |
@@ -1,25 +1,10 @@ | |||
1 | #!/bin/sh | 1 | #!/bin/sh |
2 | 2 | ||
3 | if [ -z $ACLOCAL ]; then | ||
4 | ACLOCAL=aclocal | ||
5 | fi | ||
6 | if [ -z $AUTOCONF ]; then | ||
7 | AUTOCONF=autoconf | ||
8 | fi | ||
9 | if [ -z $AUTOHEADER ]; then | ||
10 | AUTOHEADER=autoheader | ||
11 | fi | ||
12 | if [ -z $AUTORECONF ]; then | 3 | if [ -z $AUTORECONF ]; then |
13 | AUTORECONF=autoreconf | 4 | AUTORECONF=autoreconf |
14 | fi | 5 | fi |
15 | 6 | ||
16 | #rm -rf autom4te.cache | 7 | #rm -rf autom4te.cache |
17 | $AUTORECONF -f -i | 8 | $AUTORECONF -f -v -i |
18 | #touch stamp-h.in | 9 | #touch stamp-h.in |
19 | 10 | ||
20 | for x in providers/*; do | ||
21 | if [ -e $x/autogen.sh ]; then | ||
22 | echo Generating Config files in $x | ||
23 | (cd $x; ./autogen.sh $*) | ||
24 | fi | ||
25 | done | ||
diff --git a/configure.ac b/configure.ac index 259e289..b95f362 100644 --- a/configure.ac +++ b/configure.ac | |||
@@ -1,5 +1,5 @@ | |||
1 | dnl | 1 | dnl |
2 | AC_INIT(mod_gnutls, 0.4.2.1) | 2 | AC_INIT(mod_gnutls, 0.4.3) |
3 | OOO_CONFIG_NICE(config.nice) | 3 | OOO_CONFIG_NICE(config.nice) |
4 | MOD_GNUTLS_VERSION=AC_PACKAGE_VERSION | 4 | MOD_GNUTLS_VERSION=AC_PACKAGE_VERSION |
5 | AC_PREREQ(2.53) | 5 | AC_PREREQ(2.53) |
@@ -28,8 +28,14 @@ CHECK_APACHE(,$AP_VERSION, | |||
28 | dnl LIBTOOL="`${APR_CONFIG} --apr-libtool`" | 28 | dnl LIBTOOL="`${APR_CONFIG} --apr-libtool`" |
29 | dnl AC_SUBST(LIBTOOL) | 29 | dnl AC_SUBST(LIBTOOL) |
30 | 30 | ||
31 | MIN_TLS_VERSION=2.1.7 | 31 | MIN_TLS_VERSION=2.2.1 |
32 | CHECK_LIBGNUTLS($MIN_TLS_VERSION) | 32 | AM_PATH_LIBGNUTLS($MIN_TLS_VERSION,, |
33 | AC_MSG_ERROR([[ | ||
34 | *** | ||
35 | *** libgnutls were not found. You may want to get it from | ||
36 | *** http://www.gnutls.org/ | ||
37 | *** | ||
38 | ]])) | ||
33 | 39 | ||
34 | dnl CHECK_LUA() | 40 | dnl CHECK_LUA() |
35 | 41 | ||
@@ -37,7 +43,19 @@ have_apr_memcache=0 | |||
37 | CHECK_APR_MEMCACHE([have_apr_memcache=1], [have_apr_memcache=0]) | 43 | CHECK_APR_MEMCACHE([have_apr_memcache=1], [have_apr_memcache=0]) |
38 | AC_SUBST(have_apr_memcache) | 44 | AC_SUBST(have_apr_memcache) |
39 | 45 | ||
40 | MODULE_CFLAGS="${LIBGNUTLS_CFLAGS} ${APR_MEMCACHE_CFLAGS} ${APXS_CFLAGS} ${AP_INCLUDES} ${APR_INCLUDES} ${APU_INCLUDES}" | 46 | AC_ARG_ENABLE(srp, |
47 | AS_HELP_STRING([--disable-srp], | ||
48 | [unconditionally disable the SRP functionality]), | ||
49 | use_srp=$enableval, use_srp=yes) | ||
50 | |||
51 | SRP_CFLAGS="" | ||
52 | if test "$use_srp" != "no"; then | ||
53 | SRP_CFLAGS="-DENABLE_SRP=1" | ||
54 | fi | ||
55 | AC_MSG_CHECKING([whether to enable SRP functionality]) | ||
56 | AC_MSG_RESULT($use_srp) | ||
57 | |||
58 | MODULE_CFLAGS="${LIBGNUTLS_CFLAGS} ${SRP_CFLAGS} ${APR_MEMCACHE_CFLAGS} ${APXS_CFLAGS} ${AP_INCLUDES} ${APR_INCLUDES} ${APU_INCLUDES}" | ||
41 | MODULE_LIBS="${APR_MEMCACHE_LIBS} ${LIBGNUTLS_LIBS}" | 59 | MODULE_LIBS="${APR_MEMCACHE_LIBS} ${LIBGNUTLS_LIBS}" |
42 | 60 | ||
43 | AC_SUBST(MODULE_CFLAGS) | 61 | AC_SUBST(MODULE_CFLAGS) |
@@ -49,8 +67,9 @@ AC_OUTPUT | |||
49 | echo "---" | 67 | echo "---" |
50 | echo "Configuration summary for mod_gnutls:" | 68 | echo "Configuration summary for mod_gnutls:" |
51 | echo "" | 69 | echo "" |
52 | echo " * mod_gnutls version: ${MOD_GNUTLS_VERSION}" | 70 | echo " * mod_gnutls version: ${MOD_GNUTLS_VERSION}" |
53 | echo " * Apache Modules directory: ${AP_LIBEXECDIR}" | 71 | echo " * Apache Modules directory: ${AP_LIBEXECDIR}" |
54 | echo " * GnuTLS Library version: ${LIBGNUTLS_VERSION}" | 72 | echo " * GnuTLS Library version: ${LIBGNUTLS_VERSION}" |
73 | echo " * SRP authentication: ${use_srp}" | ||
55 | echo "" | 74 | echo "" |
56 | echo "---" | 75 | echo "---" |
diff --git a/m4/apache.m4 b/m4/apache.m4 new file mode 100644 index 0000000..6051821 --- /dev/null +++ b/m4/apache.m4 | |||
@@ -0,0 +1,151 @@ | |||
1 | |||
2 | dnl CHECK_APACHE([MINIMUM13-VERSION [, MINIMUM20-VERSION [, | ||
3 | dnl ACTION-IF-FOUND13 [, ACTION-IF-FOUND20 [, ACTION-IF-NOT-FOUND]]]) | ||
4 | dnl Test for Apache apxs, APR, and APU | ||
5 | |||
6 | AC_DEFUN([CHECK_APACHE], | ||
7 | [dnl | ||
8 | AC_ARG_WITH( | ||
9 | apxs, | ||
10 | [AC_HELP_STRING([--with-apxs=PATH],[Path to apxs])], | ||
11 | apxs_prefix="$withval", | ||
12 | apxs_prefix="/usr" | ||
13 | ) | ||
14 | |||
15 | AC_ARG_ENABLE( | ||
16 | apachetest, | ||
17 | [AC_HELP_STRING([--disable-apxstest],[Do not try to compile and run apache version test program])], | ||
18 | , | ||
19 | enable_apachetest=yes | ||
20 | ) | ||
21 | |||
22 | if test -x $apxs_prefix -a ! -d $apxs_prefix; then | ||
23 | APXS_BIN=$apxs_prefix | ||
24 | else | ||
25 | test_paths="$apxs_prefix:$apxs_prefix/bin:$apxs_prefix/sbin" | ||
26 | test_paths="${test_paths}:/usr/bin:/usr/sbin" | ||
27 | test_paths="${test_paths}:/usr/local/bin:/usr/local/sbin:/usr/local/apache2/bin" | ||
28 | AC_PATH_PROG(APXS_BIN, apxs, no, [$test_paths]) | ||
29 | fi | ||
30 | min_apache13_version=ifelse([$1], ,no,$1) | ||
31 | min_apache20_version=ifelse([$2], ,no,$2) | ||
32 | no_apxs="" | ||
33 | if test "$APXS_BIN" = "no"; then | ||
34 | AC_MSG_ERROR([*** The apxs binary installed by apache could not be found!]) | ||
35 | AC_MSG_ERROR([*** Use the --with-apxs option with the full path to apxs]) | ||
36 | else | ||
37 | AP_INCLUDES="-I`$APXS_BIN -q INCLUDEDIR 2>/dev/null`" | ||
38 | AP_INCLUDEDIR="`$APXS_BIN -q INCLUDEDIR 2>/dev/null`" | ||
39 | |||
40 | AP_PREFIX="`$APXS_BIN -q prefix 2>/dev/null`" | ||
41 | |||
42 | AP_BINDIR="`$APXS_BIN -q bindir 2>/dev/null`" | ||
43 | AP_SBINDIR="`$APXS_BIN -q sbindir 2>/dev/null`" | ||
44 | AP_SYSCONFDIR="`$APXS_BIN -q sysconfdir 2>/dev/null`" | ||
45 | |||
46 | APXS_CFLAGS="" | ||
47 | for flag in CFLAGS EXTRA_CFLAGS EXTRA_CPPFLAGS NOTEST_CFLAGS; do | ||
48 | APXS_CFLAGS="$APXS_CFLAGS `$APXS_BIN -q $flag 2>/dev/null`" | ||
49 | done | ||
50 | |||
51 | AP_CPPFLAGS="$APXS_CPPFLAGS $AP_INCLUDES" | ||
52 | AP_CFLAGS="$APXS_CFLAGS $AP_INCLUDES" | ||
53 | |||
54 | AP_LIBEXECDIR=`$APXS_BIN -q LIBEXECDIR 2>/dev/null` | ||
55 | |||
56 | if test "x$enable_apachetest" = "xyes" ; then | ||
57 | if test "$min_apache20_version" != "no"; then | ||
58 | APR_CONFIG="`$APXS_BIN -q APR_BINDIR 2>/dev/null`/apr-1-config" | ||
59 | if test ! -x $APR_CONFIG; then | ||
60 | APR_CONFIG="`$APXS_BIN -q APR_BINDIR 2>/dev/null`/apr-config" | ||
61 | fi | ||
62 | APR_INCLUDES=`$APR_CONFIG --includes 2>/dev/null` | ||
63 | APR_LDFLAGS=`$APR_CONFIG --link-ld 2>/dev/null` | ||
64 | APR_LIBS=`$APR_CONFIG --libs 2>/dev/null` | ||
65 | APR_LIBTOOL=`$APR_CONFIG --link-libtool 2>/dev/null` | ||
66 | APR_CPPFLAGS=`$APR_CONFIG --cppflags 2>/dev/null` | ||
67 | APR_CFLAGS=`$APR_CONFIG --cflags 2>/dev/null` | ||
68 | APR_VERSION=`$APR_CONFIG --version 2>/dev/null` | ||
69 | APU_CONFIG="`$APXS_BIN -q APU_BINDIR 2>/dev/null`/apu-1-config" | ||
70 | if test ! -x $APU_CONFIG; then | ||
71 | APU_CONFIG="`$APXS_BIN -q APU_BINDIR 2>/dev/null`/apu-config" | ||
72 | fi | ||
73 | APU_INCLUDES=`$APU_CONFIG --includes 2>/dev/null` | ||
74 | APU_LDFLAGS=`$APU_CONFIG --link-ld 2>/dev/null` | ||
75 | APU_LIBS=`$APU_CONFIG --libs 2>/dev/null` | ||
76 | APU_LIBTOOL=`$APU_CONFIG --link-libtool 2>/dev/null` | ||
77 | APU_VERSION=`$APU_CONFIG --version 2>/dev/null` | ||
78 | |||
79 | AC_MSG_CHECKING(for Apache 2.0 version >= $min_apache20_version) | ||
80 | TEST_APACHE_VERSION(20,$min_apache20_version, | ||
81 | AC_MSG_RESULT(yes) | ||
82 | AC_DEFINE(WITH_APACHE20,1,[Define to 1 if we are compiling with Apache 2.0.x]) | ||
83 | AP_VERSION="2.0" | ||
84 | APXS_EXTENSION=.la | ||
85 | if test -f `$APXS_BIN -q INCLUDEDIR`/mod_status.h; then | ||
86 | AC_DEFINE(HAVE_MOD_STATUS_H,1,[Define to 1 if mod_status.h and the mod_Status hook are available]) | ||
87 | fi | ||
88 | AP_CFLAGS="$AP_CFLAGS $APU_INCLUDES $APR_INCLUDES" | ||
89 | AP_CPPFLAGS="$AP_CPPFLAGS $APU_INCLUDES $APR_INCLUDES" | ||
90 | AP_DEFS="-DWITH_APACHE20" | ||
91 | ifelse([$4], , , $4), | ||
92 | AC_MSG_RESULT(no) | ||
93 | if test "x$min_apache13_version" = "xno"; then | ||
94 | ifelse([$5], , , $5) | ||
95 | fi | ||
96 | ) | ||
97 | fi | ||
98 | if test "$min_apache13_version" != "no" -a "x$AP_VERSION" = "x"; then | ||
99 | APR_INCLUDES="" | ||
100 | APR_VERSION="" | ||
101 | APR_LDFLAGS="" | ||
102 | APR_LIBS="" | ||
103 | APR_LIBTOOL="" | ||
104 | APR_CFLAGS="" | ||
105 | APR_CPPFLAGS="" | ||
106 | APU_INCLUDES="" | ||
107 | APU_VERSION="" | ||
108 | APU_LDFLAGS="" | ||
109 | APU_LIBS="" | ||
110 | APU_LIBTOOL="" | ||
111 | AC_MSG_CHECKING(for Apache 1.3 version >= $min_apache13_version) | ||
112 | TEST_APACHE_VERSION(13,$min_apache13_version, | ||
113 | AC_MSG_RESULT(yes) | ||
114 | AC_DEFINE(WITH_APACHE13,1,[Define to 1 if we are compiling with Apache 1.3.x]) | ||
115 | AP_VERSION="1.3" | ||
116 | APXS_EXTENSION=.so | ||
117 | AP_CFLAGS="-g $AP_CFLAGS" | ||
118 | AP_DEFS="-DWITH_APACHE13" | ||
119 | ifelse([$3], , , $3), | ||
120 | AC_MSG_RESULT(no) | ||
121 | ifelse([$5], , , $5) | ||
122 | ) | ||
123 | fi | ||
124 | fi | ||
125 | AC_CHECK_DECL([DEFAULT_EXP_LIBEXECDIR],,[AC_DEFINE_UNQUOTED([DEFAULT_EXP_LIBEXECDIR],["$AP_LIBEXECDIR"],[Default Module LibExec directory])]) | ||
126 | AC_SUBST(AP_DEFS) | ||
127 | AC_SUBST(AP_PREFIX) | ||
128 | AC_SUBST(AP_CFLAGS) | ||
129 | AC_SUBST(AP_CPPFLAGS) | ||
130 | AC_SUBST(AP_INCLUDES) | ||
131 | AC_SUBST(AP_INCLUDEDIR) | ||
132 | AC_SUBST(AP_LIBEXECDIR) | ||
133 | AC_SUBST(AP_VERSION) | ||
134 | AC_SUBST(AP_SYSCONFDIR) | ||
135 | AC_SUBST(AP_BINDIR) | ||
136 | AC_SUBST(AP_SBINDIR) | ||
137 | AC_SUBST(APR_INCLUDES) | ||
138 | AC_SUBST(APR_LDFLAGS) | ||
139 | AC_SUBST(APR_LIBS) | ||
140 | AC_SUBST(APR_LIBTOOL) | ||
141 | AC_SUBST(APR_CPPFLAGS) | ||
142 | AC_SUBST(APR_CFLAGS) | ||
143 | AC_SUBST(APU_INCLUDES) | ||
144 | AC_SUBST(APU_LDFLAGS) | ||
145 | AC_SUBST(APU_LIBS) | ||
146 | AC_SUBST(APU_LIBTOOL) | ||
147 | AC_SUBST(APXS_EXTENSION) | ||
148 | AC_SUBST(APXS_BIN) | ||
149 | AC_SUBST(APXS_CFLAGS) | ||
150 | fi | ||
151 | ]) | ||
diff --git a/m4/apache_test.m4 b/m4/apache_test.m4 new file mode 100644 index 0000000..8c91adf --- /dev/null +++ b/m4/apache_test.m4 | |||
@@ -0,0 +1,96 @@ | |||
1 | dnl TEST_APACHE_VERSION(RELEASE, [MINIMUM-VERSION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) | ||
2 | dnl Test for Apache | ||
3 | dnl | ||
4 | AC_DEFUN([TEST_APACHE_VERSION], | ||
5 | [dnl | ||
6 | AC_REQUIRE([AC_CANONICAL_TARGET]) | ||
7 | releasetest=$1 | ||
8 | min_apache_version="$2" | ||
9 | no_apache="" | ||
10 | ac_save_CFLAGS="$CFLAGS" | ||
11 | CFLAGS="$CFLAGS $AP_CFLAGS" | ||
12 | if test $releasetest -eq 20; then | ||
13 | CFLAGS="$CFLAGS $APU_INCLUDES $APR_INCLUDES" | ||
14 | fi | ||
15 | AC_TRY_RUN([ | ||
16 | #include <stdio.h> | ||
17 | #include <stdlib.h> | ||
18 | #include <string.h> | ||
19 | #include "httpd.h" | ||
20 | |||
21 | #ifndef AP_SERVER_BASEREVISION | ||
22 | #define AP_SERVER_BASEREVISION SERVER_BASEREVISION | ||
23 | #endif | ||
24 | |||
25 | char* my_strdup (char *str) | ||
26 | { | ||
27 | char *new_str; | ||
28 | |||
29 | if (str) { | ||
30 | new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); | ||
31 | strcpy (new_str, str); | ||
32 | } else | ||
33 | new_str = NULL; | ||
34 | |||
35 | return new_str; | ||
36 | } | ||
37 | |||
38 | int main (int argc, char *argv[]) | ||
39 | { | ||
40 | int major1, minor1, micro1; | ||
41 | int major2, minor2, micro2; | ||
42 | char *tmp_version; | ||
43 | |||
44 | { FILE *fp = fopen("conf.apachetest", "a"); if ( fp ) fclose(fp); } | ||
45 | |||
46 | tmp_version = my_strdup("$min_apache_version"); | ||
47 | if (sscanf(tmp_version, "%d.%d.%d", &major1, &minor1, µ1) != 3) { | ||
48 | printf("%s, bad version string\n", "$min_apache_version"); | ||
49 | exit(1); | ||
50 | } | ||
51 | tmp_version = my_strdup(AP_SERVER_BASEREVISION); | ||
52 | if (sscanf(tmp_version, "%d.%d.%d", &major2, &minor2, µ2) != 3) { | ||
53 | printf("%s, bad version string\n", AP_SERVER_BASEREVISION); | ||
54 | exit(1); | ||
55 | } | ||
56 | |||
57 | if ( (major2 == major1) && | ||
58 | ( (minor2 > minor1) || | ||
59 | ((minor2 == minor1) && (micro2 >= micro1)) ) ) { | ||
60 | exit(0); | ||
61 | } else { | ||
62 | exit(1); | ||
63 | } | ||
64 | } | ||
65 | |||
66 | ],, no_apache=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) | ||
67 | CFLAGS="$ac_save_CFLAGS" | ||
68 | |||
69 | if test "x$no_apache" = x ; then | ||
70 | ifelse([$3], , :, [$3]) | ||
71 | else | ||
72 | if test -f conf.apachetest ; then | ||
73 | : | ||
74 | else | ||
75 | echo "*** Could not run Apache test program, checking why..." | ||
76 | CFLAGS="$CFLAGS $AP_CFLAGS" | ||
77 | if test $releasetest -eq 20; then | ||
78 | CFLAGS="$CFLAGS $APU_INCLUDES $APR_INCLUDES" | ||
79 | fi | ||
80 | AC_TRY_LINK([ | ||
81 | #include <stdio.h> | ||
82 | #include "httpd.h" | ||
83 | |||
84 | int main(int argc, char *argv[]) | ||
85 | { return 0; } | ||
86 | #undef main | ||
87 | #define main K_and_R_C_main | ||
88 | ], [ return 0; ], | ||
89 | [ echo "*** The test program compiled, but failed to run. Check config.log" ], | ||
90 | [ echo "*** The test program failed to compile or link. Check config.log" ]) | ||
91 | CFLAGS="$ac_save_CFLAGS" | ||
92 | fi | ||
93 | ifelse([$4], , :, [$4]) | ||
94 | fi | ||
95 | rm -f conf.apachetest | ||
96 | ]) | ||
diff --git a/m4/apr_memcache.m4 b/m4/apr_memcache.m4 new file mode 100644 index 0000000..71ab2b6 --- /dev/null +++ b/m4/apr_memcache.m4 | |||
@@ -0,0 +1,56 @@ | |||
1 | dnl Check for memcache client libraries | ||
2 | dnl CHECK_APR_MEMCACHE(ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]) | ||
3 | dnl Sets: | ||
4 | dnl APR_MEMCACHE_LIBS | ||
5 | AC_DEFUN([CHECK_APR_MEMCACHE], | ||
6 | [dnl | ||
7 | |||
8 | AC_ARG_WITH( | ||
9 | apr-memcache-prefix, | ||
10 | [AC_HELP_STRING([--with-apr-memcache-prefix=PATH],[Install prefix for apr_memcache])], | ||
11 | apr_memcache_prefix="$withval", | ||
12 | apr_memcache_prefix="/usr", | ||
13 | :) | ||
14 | AC_ARG_WITH( | ||
15 | apr-memcache-libs, | ||
16 | [AC_HELP_STRING([--with-apr-memcache-libs=PATH],[Path to apr_memcache libs])], | ||
17 | apr_memcache_libs="$withval", | ||
18 | apr_memcache_libs="$apr_memcache_prefix/lib" | ||
19 | :) | ||
20 | AC_ARG_WITH( | ||
21 | apr-memcache-includes, | ||
22 | [AC_HELP_STRING([--with-apr-memcache-includes=PATH],[Path to apr_memcache includes])], | ||
23 | apr_memcache_includes="$withval", | ||
24 | apr_memcache_includes="$apr_memcache_prefix/include/apr_memcache-0" | ||
25 | :) | ||
26 | |||
27 | |||
28 | AC_LIBTOOL_SYS_DYNAMIC_LINKER | ||
29 | |||
30 | dnl # Determine memcache lib directory | ||
31 | save_CFLAGS=$CFLAGS | ||
32 | save_LDFLAGS=$LDFLAGS | ||
33 | CFLAGS="-I$apr_memcache_includes $APR_INCLUDES $CFLAGS" | ||
34 | LDFLAGS="-L$apr_memcache_libs $LDFLAGS" | ||
35 | AC_CHECK_LIB( | ||
36 | apr_memcache, | ||
37 | apr_memcache_create, | ||
38 | [ | ||
39 | APR_MEMCACHE_LIBS="-R$apr_memcache_libs -L$apr_memcache_libs -lapr_memcache" | ||
40 | APR_MEMCACHE_CFLAGS="-I$apr_memcache_includes" | ||
41 | ] | ||
42 | ) | ||
43 | CFLAGS=$save_CFLAGS | ||
44 | LDFLAGS=$save_LDFLAGS | ||
45 | |||
46 | AC_SUBST(APR_MEMCACHE_LIBS) | ||
47 | AC_SUBST(APR_MEMCACHE_CFLAGS) | ||
48 | |||
49 | if test -z "${APR_MEMCACHE_LIBS}"; then | ||
50 | AC_MSG_NOTICE([*** memcache library not found.]) | ||
51 | ifelse([$2], , AC_MSG_ERROR([memcache library is required]), $2) | ||
52 | else | ||
53 | AC_MSG_NOTICE([using '${APR_MEMCACHE_LIBS}' for memcache]) | ||
54 | ifelse([$1], , , $1) | ||
55 | fi | ||
56 | ]) | ||
diff --git a/m4/apreq.m4 b/m4/apreq.m4 new file mode 100644 index 0000000..b457e02 --- /dev/null +++ b/m4/apreq.m4 | |||
@@ -0,0 +1,43 @@ | |||
1 | dnl Check for apreq2 libraries | ||
2 | dnl CHECK_APREQ2(MINIMUM-VERSION, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]) | ||
3 | AC_DEFUN([CHECK_APREQ2], | ||
4 | [dnl | ||
5 | |||
6 | AC_ARG_WITH( | ||
7 | apreq2, | ||
8 | [AC_HELP_STRING([--with-apreq2=PATH],[Path to your apreq2-config])], | ||
9 | ap_path="$withval", | ||
10 | ap_path="/usr" | ||
11 | ) | ||
12 | |||
13 | if test -x $ap_path -a ! -d $ap_path; then | ||
14 | AP_BIN=$ap_path | ||
15 | else | ||
16 | test_paths="$ap_path:$ap_path/bin:$ap_path/sbin" | ||
17 | |||
18 | dnl Search the Apache Binary Directories too. Since we should set these in apache.m4 | ||
19 | if test -d $AP_BINDIR; then | ||
20 | test_paths="${test_paths}:${AP_BINDIR}" | ||
21 | fi | ||
22 | if test -d $AP_SBINDIR; then | ||
23 | test_paths="${test_paths}:${AP_SBINDIR}" | ||
24 | fi | ||
25 | |||
26 | test_paths="${test_paths}:/usr/bin:/usr/sbin" | ||
27 | test_paths="${test_paths}:/usr/local/bin:/usr/local/sbin" | ||
28 | AC_PATH_PROG(AP_BIN, apreq2-config, no, [$test_paths]) | ||
29 | fi | ||
30 | |||
31 | if test "$AP_BIN" = "no"; then | ||
32 | AC_MSG_ERROR([*** The apreq2-config binary installed by apreq2 could not be found!]) | ||
33 | AC_MSG_ERROR([*** Use the --with-apreq2 option with the full path to apreq2-config]) | ||
34 | ifelse([$3], , AC_MSG_ERROR([apreq2 >=$1 is not installed.]), $3) | ||
35 | else | ||
36 | dnl TODO: Do a apreq2-config Version check here... | ||
37 | APREQ_LIBS="`$AP_BIN --link-ld --ldflags --libs 2>/dev/null`" | ||
38 | APREQ_CFLAGS="`$AP_BIN --includes 2>/dev/null`" | ||
39 | AC_SUBST(APREQ_LIBS) | ||
40 | AC_SUBST(APREQ_CFLAGS) | ||
41 | ifelse([$2], , AC_MSG_RESULT([yes]), $2) | ||
42 | fi | ||
43 | ]) | ||
diff --git a/m4/buildconf.py b/m4/buildconf.py new file mode 100755 index 0000000..9ba621f --- /dev/null +++ b/m4/buildconf.py | |||
@@ -0,0 +1,83 @@ | |||
1 | #!/usr/bin/env python | ||
2 | # | ||
3 | # buildconf.py: Runs Autotools on a project. | ||
4 | # | ||
5 | # Copyright 2004 Edward Rudd and Paul Querna | ||
6 | # | ||
7 | # Licensed under the Apache License, Version 2.0 (the "License"); | ||
8 | # you may not use this file except in compliance with the License. | ||
9 | # You may obtain a copy of the License at | ||
10 | # | ||
11 | # http://www.apache.org/licenses/LICENSE-2.0 | ||
12 | # | ||
13 | # Unless required by applicable law or agreed to in writing, software | ||
14 | # distributed under the License is distributed on an "AS IS" BASIS, | ||
15 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
16 | # See the License for the specific language governing permissions and | ||
17 | # limitations under the License. | ||
18 | # | ||
19 | |||
20 | import os | ||
21 | import sys | ||
22 | import popen2 | ||
23 | from optparse import OptionParser | ||
24 | |||
25 | cmd = {} | ||
26 | |||
27 | def run_cmd(command, args=""): | ||
28 | global cmd | ||
29 | rp = popen2.Popen4("%s %s" % (cmd[command], args)) | ||
30 | sout = rp.fromchild.readlines() | ||
31 | for line in sout: | ||
32 | sys.stdout.write(line) | ||
33 | rv = rp.wait() | ||
34 | if rv != 0: | ||
35 | print "Error: '%s %s' returned %d" % (cmd[command], args, rv) | ||
36 | sys.exit(-1) | ||
37 | |||
38 | def select_cmd(command, list, args = "--version"): | ||
39 | global cmd | ||
40 | cmd[command] = None | ||
41 | for x in list: | ||
42 | # rv = os.spawnlp(os.P_WAIT, x, args) | ||
43 | rp = popen2.Popen4("%s %s" % (x, args)) | ||
44 | rv = rp.wait() | ||
45 | if rv == 0: | ||
46 | cmd[command] = x | ||
47 | break | ||
48 | if cmd[command] == None: | ||
49 | print "Errpr: Could not find suitable version for '%s', tried running: %s" % (command, list) | ||
50 | sys.exit(-1) | ||
51 | |||
52 | parser = OptionParser() | ||
53 | |||
54 | parser.add_option("--libtoolize", action="store_true", dest="libtoolize", default=False) | ||
55 | parser.add_option("--aclocal", action="store_true", dest="aclocal", default=False) | ||
56 | parser.add_option("--automake", action="store_true", dest="automake", default=False) | ||
57 | parser.add_option("--autoconf", action="store_true", dest="autoconf", default=False) | ||
58 | parser.add_option("--autoheader", action="store_true", dest="autoheader", default=False) | ||
59 | |||
60 | (options, args) = parser.parse_args() | ||
61 | |||
62 | if options.libtoolize: | ||
63 | select_cmd("libtoolize", ['libtoolize14','glibtoolize','libtoolize']) | ||
64 | if options.aclocal: | ||
65 | select_cmd("aclocal", ['aclocal-1.9','aclocal-1.8','aclocal-1.7','aclocal-1.6','aclocal']) | ||
66 | if options.autoheader: | ||
67 | select_cmd("autoheader", ['autoheader259','autoheader257','autoheader']) | ||
68 | if options.automake: | ||
69 | select_cmd("automake", ['automake-1.9','automake-1.8','automake-1.7','automake-1.6','automake']) | ||
70 | if options.autoconf: | ||
71 | select_cmd("autoconf", ['autoconf259','autoconf257','autoconf']) | ||
72 | |||
73 | if options.libtoolize: | ||
74 | run_cmd("libtoolize", "--force --copy") | ||
75 | if options.aclocal: | ||
76 | run_cmd("aclocal", "-I m4") | ||
77 | if options.autoheader: | ||
78 | run_cmd("autoheader") | ||
79 | if options.automake: | ||
80 | run_cmd("automake", "--add-missing --copy --foreign") | ||
81 | if options.autoconf: | ||
82 | run_cmd("autoconf") | ||
83 | |||
diff --git a/m4/find_apr.m4 b/m4/find_apr.m4 new file mode 100644 index 0000000..9228c76 --- /dev/null +++ b/m4/find_apr.m4 | |||
@@ -0,0 +1,166 @@ | |||
1 | dnl -------------------------------------------------------- -*- autoconf -*- | ||
2 | dnl Copyright 2000-2005 The Apache Software Foundation | ||
3 | dnl | ||
4 | dnl Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | dnl you may not use this file except in compliance with the License. | ||
6 | dnl You may obtain a copy of the License at | ||
7 | dnl | ||
8 | dnl http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | dnl | ||
10 | dnl Unless required by applicable law or agreed to in writing, software | ||
11 | dnl distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | dnl WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | dnl See the License for the specific language governing permissions and | ||
14 | dnl limitations under the License. | ||
15 | |||
16 | dnl | ||
17 | dnl find_apr.m4 : locate the APR include files and libraries | ||
18 | dnl | ||
19 | dnl This macro file can be used by applications to find and use the APR | ||
20 | dnl library. It provides a standardized mechanism for using APR. It supports | ||
21 | dnl embedding APR into the application source, or locating an installed | ||
22 | dnl copy of APR. | ||
23 | dnl | ||
24 | dnl APR_FIND_APR(srcdir, builddir, implicit-install-check, acceptable-majors) | ||
25 | dnl | ||
26 | dnl where srcdir is the location of the bundled APR source directory, or | ||
27 | dnl empty if source is not bundled. | ||
28 | dnl | ||
29 | dnl where builddir is the location where the bundled APR will will be built, | ||
30 | dnl or empty if the build will occur in the srcdir. | ||
31 | dnl | ||
32 | dnl where implicit-install-check set to 1 indicates if there is no | ||
33 | dnl --with-apr option specified, we will look for installed copies. | ||
34 | dnl | ||
35 | dnl where acceptable-majors is a space separated list of acceptable major | ||
36 | dnl version numbers. Often only a single major version will be acceptable. | ||
37 | dnl If multiple versions are specified, and --with-apr=PREFIX or the | ||
38 | dnl implicit installed search are used, then the first (leftmost) version | ||
39 | dnl in the list that is found will be used. Currently defaults to [0 1]. | ||
40 | dnl | ||
41 | dnl Sets the following variables on exit: | ||
42 | dnl | ||
43 | dnl apr_found : "yes", "no", "reconfig" | ||
44 | dnl | ||
45 | dnl apr_config : If the apr-config tool exists, this refers to it. If | ||
46 | dnl apr_found is "reconfig", then the bundled directory | ||
47 | dnl should be reconfigured *before* using apr_config. | ||
48 | dnl | ||
49 | dnl Note: this macro file assumes that apr-config has been installed; it | ||
50 | dnl is normally considered a required part of an APR installation. | ||
51 | dnl | ||
52 | dnl If a bundled source directory is available and needs to be (re)configured, | ||
53 | dnl then apr_found is set to "reconfig". The caller should reconfigure the | ||
54 | dnl (passed-in) source directory, placing the result in the build directory, | ||
55 | dnl as appropriate. | ||
56 | dnl | ||
57 | dnl If apr_found is "yes" or "reconfig", then the caller should use the | ||
58 | dnl value of apr_config to fetch any necessary build/link information. | ||
59 | dnl | ||
60 | |||
61 | AC_DEFUN([APR_FIND_APR], [ | ||
62 | apr_found="no" | ||
63 | |||
64 | if test "$ac_cv_emxos2" = "yes"; then | ||
65 | # Scripts don't pass test -x on OS/2 | ||
66 | TEST_X="test -f" | ||
67 | else | ||
68 | TEST_X="test -x" | ||
69 | fi | ||
70 | |||
71 | ifelse([$4], [], [ | ||
72 | ifdef(AC_WARNING,AC_WARNING([$0: missing argument 4 (acceptable-majors): Defaulting to APR 0.x then APR 1.x])) | ||
73 | acceptable_majors="0 1"], | ||
74 | [acceptable_majors="$4"]) | ||
75 | |||
76 | apr_temp_acceptable_apr_config="" | ||
77 | for apr_temp_major in $acceptable_majors | ||
78 | do | ||
79 | case $apr_temp_major in | ||
80 | 0) | ||
81 | apr_temp_acceptable_apr_config="$apr_temp_acceptable_apr_config apr-config" | ||
82 | ;; | ||
83 | *) | ||
84 | apr_temp_acceptable_apr_config="$apr_temp_acceptable_apr_config apr-$apr_temp_major-config" | ||
85 | ;; | ||
86 | esac | ||
87 | done | ||
88 | |||
89 | AC_MSG_CHECKING(for APR) | ||
90 | AC_ARG_WITH(apr, | ||
91 | [ --with-apr=PATH prefix for installed APR, path to APR build tree, | ||
92 | or the full path to apr-config], | ||
93 | [ | ||
94 | if test "$withval" = "no" || test "$withval" = "yes"; then | ||
95 | AC_MSG_ERROR([--with-apr requires a directory or file to be provided]) | ||
96 | fi | ||
97 | |||
98 | for apr_temp_apr_config_file in $apr_temp_acceptable_apr_config | ||
99 | do | ||
100 | for lookdir in "$withval/bin" "$withval" | ||
101 | do | ||
102 | if $TEST_X "$lookdir/$apr_temp_apr_config_file"; then | ||
103 | apr_found="yes" | ||
104 | apr_config="$lookdir/$apr_temp_apr_config_file" | ||
105 | break 2 | ||
106 | fi | ||
107 | done | ||
108 | done | ||
109 | |||
110 | if test "$apr_found" != "yes" && $TEST_X "$withval" && $withval --help > /dev/null 2>&1 ; then | ||
111 | apr_found="yes" | ||
112 | apr_config="$withval" | ||
113 | fi | ||
114 | |||
115 | dnl if --with-apr is used, it is a fatal error for its argument | ||
116 | dnl to be invalid | ||
117 | if test "$apr_found" != "yes"; then | ||
118 | AC_MSG_ERROR([the --with-apr parameter is incorrect. It must specify an install prefix, a build directory, or an apr-config file.]) | ||
119 | fi | ||
120 | ],[ | ||
121 | dnl If we allow installed copies, check those before using bundled copy. | ||
122 | if test -n "$3" && test "$3" = "1"; then | ||
123 | for apr_temp_apr_config_file in $apr_temp_acceptable_apr_config | ||
124 | do | ||
125 | if $apr_temp_apr_config_file --help > /dev/null 2>&1 ; then | ||
126 | apr_found="yes" | ||
127 | apr_config="$apr_temp_apr_config_file" | ||
128 | break | ||
129 | else | ||
130 | dnl look in some standard places | ||
131 | for lookdir in /usr /usr/local /usr/local/apr /opt/apr /usr/local/apache2; do | ||
132 | if $TEST_X "$lookdir/bin/$apr_temp_apr_config_file"; then | ||
133 | apr_found="yes" | ||
134 | apr_config="$lookdir/bin/$apr_temp_apr_config_file" | ||
135 | break 2 | ||
136 | fi | ||
137 | done | ||
138 | fi | ||
139 | done | ||
140 | fi | ||
141 | dnl if we have not found anything yet and have bundled source, use that | ||
142 | if test "$apr_found" = "no" && test -d "$1"; then | ||
143 | apr_temp_abs_srcdir="`cd $1 && pwd`" | ||
144 | apr_found="reconfig" | ||
145 | apr_bundled_major="`sed -n '/#define.*APR_MAJOR_VERSION/s/^[^0-9]*\([0-9]*\).*$/\1/p' \"$1/include/apr_version.h\"`" | ||
146 | case $apr_bundled_major in | ||
147 | "") | ||
148 | AC_MSG_ERROR([failed to find major version of bundled APR]) | ||
149 | ;; | ||
150 | 0) | ||
151 | apr_temp_apr_config_file="apr-config" | ||
152 | ;; | ||
153 | *) | ||
154 | apr_temp_apr_config_file="apr-$apr_bundled_major-config" | ||
155 | ;; | ||
156 | esac | ||
157 | if test -n "$2"; then | ||
158 | apr_config="$2/$apr_temp_apr_config_file" | ||
159 | else | ||
160 | apr_config="$1/$apr_temp_apr_config_file" | ||
161 | fi | ||
162 | fi | ||
163 | ]) | ||
164 | |||
165 | AC_MSG_RESULT($apr_found) | ||
166 | ]) | ||
diff --git a/m4/libgnutls.m4 b/m4/libgnutls.m4 new file mode 100644 index 0000000..3e714fc --- /dev/null +++ b/m4/libgnutls.m4 | |||
@@ -0,0 +1,171 @@ | |||
1 | dnl Autoconf macros for libgnutls | ||
2 | dnl $id$ | ||
3 | |||
4 | # Modified for LIBGNUTLS -- nmav | ||
5 | # Configure paths for LIBGCRYPT | ||
6 | # Shamelessly stolen from the one of XDELTA by Owen Taylor | ||
7 | # Werner Koch 99-12-09 | ||
8 | |||
9 | dnl AM_PATH_LIBGNUTLS([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]]) | ||
10 | dnl Test for libgnutls, and define LIBGNUTLS_CFLAGS and LIBGNUTLS_LIBS | ||
11 | dnl | ||
12 | AC_DEFUN([AM_PATH_LIBGNUTLS], | ||
13 | [dnl | ||
14 | dnl Get the cflags and libraries from the libgnutls-config script | ||
15 | dnl | ||
16 | AC_ARG_WITH(libgnutls-prefix, | ||
17 | [ --with-libgnutls-prefix=PFX Prefix where libgnutls is installed (optional)], | ||
18 | libgnutls_config_prefix="$withval", libgnutls_config_prefix="") | ||
19 | |||
20 | if test x$libgnutls_config_prefix != x ; then | ||
21 | if test x${LIBGNUTLS_CONFIG+set} != xset ; then | ||
22 | LIBGNUTLS_CONFIG=$libgnutls_config_prefix/bin/libgnutls-config | ||
23 | fi | ||
24 | fi | ||
25 | |||
26 | AC_PATH_PROG(LIBGNUTLS_CONFIG, libgnutls-config, no) | ||
27 | min_libgnutls_version=ifelse([$1], ,0.1.0,$1) | ||
28 | AC_MSG_CHECKING(for libgnutls - version >= $min_libgnutls_version) | ||
29 | no_libgnutls="" | ||
30 | if test "$LIBGNUTLS_CONFIG" = "no" ; then | ||
31 | no_libgnutls=yes | ||
32 | else | ||
33 | LIBGNUTLS_CFLAGS=`$LIBGNUTLS_CONFIG $libgnutls_config_args --cflags` | ||
34 | LIBGNUTLS_LIBS=`$LIBGNUTLS_CONFIG $libgnutls_config_args --libs` | ||
35 | libgnutls_config_version=`$LIBGNUTLS_CONFIG $libgnutls_config_args --version` | ||
36 | |||
37 | |||
38 | ac_save_CFLAGS="$CFLAGS" | ||
39 | ac_save_LIBS="$LIBS" | ||
40 | CFLAGS="$CFLAGS $LIBGNUTLS_CFLAGS" | ||
41 | LIBS="$LIBS $LIBGNUTLS_LIBS" | ||
42 | dnl | ||
43 | dnl Now check if the installed libgnutls is sufficiently new. Also sanity | ||
44 | dnl checks the results of libgnutls-config to some extent | ||
45 | dnl | ||
46 | rm -f conf.libgnutlstest | ||
47 | AC_TRY_RUN([ | ||
48 | #include <stdio.h> | ||
49 | #include <stdlib.h> | ||
50 | #include <string.h> | ||
51 | #include <gnutls/gnutls.h> | ||
52 | |||
53 | int | ||
54 | main () | ||
55 | { | ||
56 | system ("touch conf.libgnutlstest"); | ||
57 | |||
58 | if( strcmp( gnutls_check_version(NULL), "$libgnutls_config_version" ) ) | ||
59 | { | ||
60 | printf("\n*** 'libgnutls-config --version' returned %s, but LIBGNUTLS (%s)\n", | ||
61 | "$libgnutls_config_version", gnutls_check_version(NULL) ); | ||
62 | printf("*** was found! If libgnutls-config was correct, then it is best\n"); | ||
63 | printf("*** to remove the old version of LIBGNUTLS. You may also be able to fix the error\n"); | ||
64 | printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); | ||
65 | printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); | ||
66 | printf("*** required on your system.\n"); | ||
67 | printf("*** If libgnutls-config was wrong, set the environment variable LIBGNUTLS_CONFIG\n"); | ||
68 | printf("*** to point to the correct copy of libgnutls-config, and remove the file config.cache\n"); | ||
69 | printf("*** before re-running configure\n"); | ||
70 | } | ||
71 | else if ( strcmp(gnutls_check_version(NULL), LIBGNUTLS_VERSION ) ) | ||
72 | { | ||
73 | printf("\n*** LIBGNUTLS header file (version %s) does not match\n", LIBGNUTLS_VERSION); | ||
74 | printf("*** library (version %s)\n", gnutls_check_version(NULL) ); | ||
75 | } | ||
76 | else | ||
77 | { | ||
78 | if ( gnutls_check_version( "$min_libgnutls_version" ) ) | ||
79 | { | ||
80 | return 0; | ||
81 | } | ||
82 | else | ||
83 | { | ||
84 | printf("no\n*** An old version of LIBGNUTLS (%s) was found.\n", | ||
85 | gnutls_check_version(NULL) ); | ||
86 | printf("*** You need a version of LIBGNUTLS newer than %s. The latest version of\n", | ||
87 | "$min_libgnutls_version" ); | ||
88 | printf("*** LIBGNUTLS is always available from ftp://gnutls.hellug.gr/pub/gnutls.\n"); | ||
89 | printf("*** \n"); | ||
90 | printf("*** If you have already installed a sufficiently new version, this error\n"); | ||
91 | printf("*** probably means that the wrong copy of the libgnutls-config shell script is\n"); | ||
92 | printf("*** being found. The easiest way to fix this is to remove the old version\n"); | ||
93 | printf("*** of LIBGNUTLS, but you can also set the LIBGNUTLS_CONFIG environment to point to the\n"); | ||
94 | printf("*** correct copy of libgnutls-config. (In this case, you will have to\n"); | ||
95 | printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); | ||
96 | printf("*** so that the correct libraries are found at run-time))\n"); | ||
97 | } | ||
98 | } | ||
99 | return 1; | ||
100 | } | ||
101 | ],, no_libgnutls=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) | ||
102 | CFLAGS="$ac_save_CFLAGS" | ||
103 | LIBS="$ac_save_LIBS" | ||
104 | fi | ||
105 | |||
106 | if test "x$no_libgnutls" = x ; then | ||
107 | AC_MSG_RESULT(yes) | ||
108 | ifelse([$2], , :, [$2]) | ||
109 | else | ||
110 | if test -f conf.libgnutlstest ; then | ||
111 | : | ||
112 | else | ||
113 | AC_MSG_RESULT(no) | ||
114 | fi | ||
115 | if test "$LIBGNUTLS_CONFIG" = "no" ; then | ||
116 | echo "*** The libgnutls-config script installed by LIBGNUTLS could not be found" | ||
117 | echo "*** If LIBGNUTLS was installed in PREFIX, make sure PREFIX/bin is in" | ||
118 | echo "*** your path, or set the LIBGNUTLS_CONFIG environment variable to the" | ||
119 | echo "*** full path to libgnutls-config." | ||
120 | else | ||
121 | if test -f conf.libgnutlstest ; then | ||
122 | : | ||
123 | else | ||
124 | echo "*** Could not run libgnutls test program, checking why..." | ||
125 | CFLAGS="$CFLAGS $LIBGNUTLS_CFLAGS" | ||
126 | LIBS="$LIBS $LIBGNUTLS_LIBS" | ||
127 | AC_TRY_LINK([ | ||
128 | #include <stdio.h> | ||
129 | #include <stdlib.h> | ||
130 | #include <string.h> | ||
131 | #include <gnutls/gnutls.h> | ||
132 | ], [ return !!gnutls_check_version(NULL); ], | ||
133 | [ echo "*** The test program compiled, but did not run. This usually means" | ||
134 | echo "*** that the run-time linker is not finding LIBGNUTLS or finding the wrong" | ||
135 | echo "*** version of LIBGNUTLS. If it is not finding LIBGNUTLS, you'll need to set your" | ||
136 | echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" | ||
137 | echo "*** to the installed location Also, make sure you have run ldconfig if that" | ||
138 | echo "*** is required on your system" | ||
139 | echo "***" | ||
140 | echo "*** If you have an old version installed, it is best to remove it, although" | ||
141 | echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" | ||
142 | echo "***" ], | ||
143 | [ echo "*** The test program failed to compile or link. See the file config.log for the" | ||
144 | echo "*** exact error that occured. This usually means LIBGNUTLS was incorrectly installed" | ||
145 | echo "*** or that you have moved LIBGNUTLS since it was installed. In the latter case, you" | ||
146 | echo "*** may want to edit the libgnutls-config script: $LIBGNUTLS_CONFIG" ]) | ||
147 | CFLAGS="$ac_save_CFLAGS" | ||
148 | LIBS="$ac_save_LIBS" | ||
149 | fi | ||
150 | fi | ||
151 | LIBGNUTLS_CFLAGS="" | ||
152 | LIBGNUTLS_LIBS="" | ||
153 | ifelse([$3], , :, [$3]) | ||
154 | fi | ||
155 | rm -f conf.libgnutlstest | ||
156 | AC_SUBST(LIBGNUTLS_CFLAGS) | ||
157 | AC_SUBST(LIBGNUTLS_LIBS) | ||
158 | |||
159 | LIBGNUTLS_VERSION=`$LIBGNUTLS_CONFIG $libgnutls_config_args --version` | ||
160 | LIBGNUTLS_PREFIX="`$LIBGNUTLS_CONFIG $libgnutls_config_args --prefix`" | ||
161 | GNUTLS_CERTTOOL="${LIBGNUTLS_PREFIX}/bin/certtool" | ||
162 | |||
163 | AC_SUBST(LIBGNUTLS_CFLAGS) | ||
164 | AC_SUBST(LIBGNUTLS_LIBS) | ||
165 | AC_SUBST(LIBGNUTLS_VERSION) | ||
166 | AC_SUBST(LIBGNUTLS_PREFIX) | ||
167 | AC_SUBST(LIBGNUTLS_CERTTOOL) | ||
168 | |||
169 | ]) | ||
170 | |||
171 | dnl *-*wedit:notab*-* Please keep this as the last line. | ||
diff --git a/m4/libmemcache.m4 b/m4/libmemcache.m4 new file mode 100644 index 0000000..95e630b --- /dev/null +++ b/m4/libmemcache.m4 | |||
@@ -0,0 +1,46 @@ | |||
1 | dnl Check for memcache client libraries | ||
2 | dnl CHECK_MEMCACHE(ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]) | ||
3 | AC_DEFUN([CHECK_MEMCACHE], | ||
4 | [dnl | ||
5 | |||
6 | AC_ARG_WITH( | ||
7 | memcache, | ||
8 | [AC_HELP_STRING([--with-memcache=PATH],[Path memcache libraries])], | ||
9 | mc_path="$withval", | ||
10 | :) | ||
11 | |||
12 | dnl # Determine memcache lib directory | ||
13 | if test -z $mc_path; then | ||
14 | test_paths="/usr/lib /usr/local/lib" | ||
15 | else | ||
16 | test_paths="${mc_path}/lib" | ||
17 | fi | ||
18 | |||
19 | for x in $test_paths ; do | ||
20 | AC_MSG_CHECKING([for memcache library in ${x}]) | ||
21 | if test -f ${x}/libmemcache.so.1.0; then | ||
22 | AC_MSG_RESULT([yes]) | ||
23 | save_CFLAGS=$CFLAGS | ||
24 | save_LDFLAGS=$LDFLAGS | ||
25 | CFLAGS="$CFLAGS" | ||
26 | LDFLAGS="-L$x $LDFLAGS" | ||
27 | AC_CHECK_LIB(memcache, mc_server_add, | ||
28 | LIBMEMCACHE_LIBS="-L$x -lmemcache") | ||
29 | CFLAGS=$save_CFLAGS | ||
30 | LDFLAGS=$save_LDFLAGS | ||
31 | break | ||
32 | else | ||
33 | AC_MSG_RESULT([no]) | ||
34 | fi | ||
35 | done | ||
36 | |||
37 | AC_SUBST(LIBMEMCACHE_LIBS) | ||
38 | |||
39 | if test -z "${LIBMEMCACHE_LIBS}"; then | ||
40 | AC_MSG_NOTICE([*** memcache library not found.]) | ||
41 | ifelse([$2], , AC_MSG_ERROR([memcache library is required]), $2) | ||
42 | else | ||
43 | AC_MSG_NOTICE([using '${LIBMEMCACHE_LIBS}' for memcache]) | ||
44 | ifelse([$1], , , $1) | ||
45 | fi | ||
46 | ]) | ||
diff --git a/m4/librsvg.m4 b/m4/librsvg.m4 new file mode 100644 index 0000000..c8d2bf0 --- /dev/null +++ b/m4/librsvg.m4 | |||
@@ -0,0 +1,29 @@ | |||
1 | dnl Check for librsvg libraries | ||
2 | dnl CHECK_RSVG(MINIMUM-VERSION, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]) | ||
3 | AC_DEFUN([CHECK_RSVG], | ||
4 | [dnl | ||
5 | |||
6 | pname=librsvg-2.0 | ||
7 | |||
8 | AC_PATH_PROG(PKG_CONFIG, pkg-config, no) | ||
9 | |||
10 | if test x$PKG_CONFIG = xno ; then | ||
11 | ifelse([$3], , AC_MSG_ERROR([pkg-config not found. pkg-config is required for librsvg]), $3) | ||
12 | fi | ||
13 | |||
14 | AC_MSG_CHECKING(for librsvg - version >= $1) | ||
15 | |||
16 | if $PKG_CONFIG --atleast-version=$1 $pname; then | ||
17 | RSVG_LDFLAGS=`$PKG_CONFIG $pname --libs-only-L` | ||
18 | RSVG_LIBS=`$PKG_CONFIG $pname --libs-only-l --libs-only-other` | ||
19 | RSVG_CFLAGS=`$PKG_CONFIG $pname --cflags` | ||
20 | RSVG_VERSION=`$PKG_CONFIG $pname --modversion` | ||
21 | AC_SUBST(RSVG_LDFLAGS) | ||
22 | AC_SUBST(RSVG_LIBS) | ||
23 | AC_SUBST(RSVG_CFLAGS) | ||
24 | AC_SUBST(RSVG_VERSION) | ||
25 | ifelse([$2], , AC_MSG_RESULT([yes]), $2) | ||
26 | else | ||
27 | ifelse([$3], , AC_MSG_ERROR([librsvg >=$1 is not installed.]), $3) | ||
28 | fi | ||
29 | ]) | ||
diff --git a/m4/lua.m4 b/m4/lua.m4 new file mode 100644 index 0000000..beae980 --- /dev/null +++ b/m4/lua.m4 | |||
@@ -0,0 +1,71 @@ | |||
1 | dnl Check for Lua 5.0 Libraries | ||
2 | dnl CHECK_LUA(ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]) | ||
3 | dnl Sets: | ||
4 | dnl LUA_CFLAGS | ||
5 | dnl LUA_LIBS | ||
6 | AC_DEFUN([CHECK_LUA], | ||
7 | [dnl | ||
8 | |||
9 | AC_ARG_WITH( | ||
10 | lua, | ||
11 | [AC_HELP_STRING([--with-lua=PATH],[Path to the Lua 5.0 prefix])], | ||
12 | lua_path="$withval", | ||
13 | :) | ||
14 | |||
15 | dnl # Determine memcache lib directory | ||
16 | if test -z $mc_path; then | ||
17 | test_paths="/usr/local /usr" | ||
18 | else | ||
19 | test_paths="${lua_path}" | ||
20 | fi | ||
21 | |||
22 | for x in $test_paths ; do | ||
23 | AC_MSG_CHECKING([for lua.h in ${x}/include/lua50]) | ||
24 | if test -f ${x}/include/lua50/lua.h; then | ||
25 | AC_MSG_RESULT([yes]) | ||
26 | save_CFLAGS=$CFLAGS | ||
27 | save_LDFLAGS=$LDFLAGS | ||
28 | CFLAGS="$CFLAGS" | ||
29 | LDFLAGS="-L$x/lib $LDFLAGS" | ||
30 | AC_CHECK_LIB(lua50, lua_open, | ||
31 | [ | ||
32 | LUA_LIBS="-L$x/lib -llua50 -llualib50" | ||
33 | LUA_CFLAGS="-I$x/include/lua50" | ||
34 | ]) | ||
35 | CFLAGS=$save_CFLAGS | ||
36 | LDFLAGS=$save_LDFLAGS | ||
37 | break | ||
38 | else | ||
39 | AC_MSG_RESULT([no]) | ||
40 | fi | ||
41 | AC_MSG_CHECKING([for lua.h in ${x}/include]) | ||
42 | if test -f ${x}/include/lua.h; then | ||
43 | AC_MSG_RESULT([yes]) | ||
44 | save_CFLAGS=$CFLAGS | ||
45 | save_LDFLAGS=$LDFLAGS | ||
46 | CFLAGS="$CFLAGS" | ||
47 | LDFLAGS="-L$x/lib $LDFLAGS" | ||
48 | AC_CHECK_LIB(lua, lua_open, | ||
49 | [ | ||
50 | LUA_LIBS="-L$x/lib -llua -llualib" | ||
51 | LUA_CFLAGS="-I$x/include/lua50" | ||
52 | ]) | ||
53 | CFLAGS=$save_CFLAGS | ||
54 | LDFLAGS=$save_LDFLAGS | ||
55 | break | ||
56 | else | ||
57 | AC_MSG_RESULT([no]) | ||
58 | fi | ||
59 | done | ||
60 | |||
61 | AC_SUBST(LUA_LIBS) | ||
62 | AC_SUBST(LUA_CFLAGS) | ||
63 | |||
64 | if test -z "${LUA_LIBS}"; then | ||
65 | AC_MSG_NOTICE([*** Lua 5.0 library not found.]) | ||
66 | ifelse([$2], , AC_MSG_ERROR([Lua 5.0 library is required]), $2) | ||
67 | else | ||
68 | AC_MSG_NOTICE([using '${LUA_LIBS}' for Lua Library]) | ||
69 | ifelse([$1], , , $1) | ||
70 | fi | ||
71 | ]) | ||
diff --git a/m4/outoforder.m4 b/m4/outoforder.m4 new file mode 100644 index 0000000..7add221 --- /dev/null +++ b/m4/outoforder.m4 | |||
@@ -0,0 +1,36 @@ | |||
1 | dnl m4 for utility macros used by all out of order projects | ||
2 | |||
3 | dnl this writes a "config.nice" file which reinvokes ./configure with all | ||
4 | dnl of the arguments. this is different from config.status which simply | ||
5 | dnl regenerates the output files. config.nice is useful after you rebuild | ||
6 | dnl ./configure (via autoconf or autogen.sh) | ||
7 | AC_DEFUN([OOO_CONFIG_NICE],[ | ||
8 | echo configure: creating $1 | ||
9 | rm -f $1 | ||
10 | cat >$1<<EOF | ||
11 | #! /bin/sh | ||
12 | # | ||
13 | # Created by configure | ||
14 | |||
15 | EOF | ||
16 | |||
17 | for arg in [$]0 "[$]@"; do | ||
18 | if test "[$]arg" != "--no-create" -a "[$]arg" != "--no-recursion"; then | ||
19 | echo "\"[$]arg\" \\" >> $1 | ||
20 | fi | ||
21 | done | ||
22 | echo '"[$]@"' >> $1 | ||
23 | chmod +x $1 | ||
24 | ]) | ||
25 | |||
26 | dnl this macro adds a maintainer mode option to enable programmer specific | ||
27 | dnl code in makefiles | ||
28 | AC_DEFUN([OOO_MAINTAIN_MODE],[ | ||
29 | AC_ARG_ENABLE( | ||
30 | maintainer, | ||
31 | [AC_HELP_STRING([--enable-maintainer],[Enable maintainer mode for this project])], | ||
32 | AC_MSG_RESULT([Enabling Maintainer Mode!!]) | ||
33 | OOO_MAINTAIN=1, | ||
34 | OOO_MAINTAIN=0) | ||
35 | AC_SUBST(OOO_MAINTAIN) | ||
36 | ]) | ||
diff --git a/src/gnutls_cache.c b/src/gnutls_cache.c index 83e7bb5..90f5a86 100644 --- a/src/gnutls_cache.c +++ b/src/gnutls_cache.c | |||
@@ -1,5 +1,6 @@ | |||
1 | /** | 1 | /** |
2 | * Copyright 2004-2005 Paul Querna | 2 | * Copyright 2004-2005 Paul Querna |
3 | * Portions Copyright 2008 Nikos Mavrogiannopoulos | ||
3 | * | 4 | * |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 5 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | * you may not use this file except in compliance with the License. | 6 | * you may not use this file except in compliance with the License. |
@@ -345,6 +346,7 @@ static int dbm_cache_expire(mgs_handle_t *ctxt) | |||
345 | break; | 346 | break; |
346 | } | 347 | } |
347 | } | 348 | } |
349 | apr_dbm_freedatum( dbm, dbmval); | ||
348 | 350 | ||
349 | } | 351 | } |
350 | apr_dbm_nextkey(dbm, &dbmkey); | 352 | apr_dbm_nextkey(dbm, &dbmkey); |
@@ -401,20 +403,25 @@ static gnutls_datum_t dbm_cache_fetch(void* baton, gnutls_datum_t key) | |||
401 | } | 403 | } |
402 | 404 | ||
403 | if (dbmval.dptr == NULL || dbmval.dsize <= sizeof(apr_time_t)) { | 405 | if (dbmval.dptr == NULL || dbmval.dsize <= sizeof(apr_time_t)) { |
406 | apr_dbm_freedatum( dbm, dbmval); | ||
404 | apr_dbm_close(dbm); | 407 | apr_dbm_close(dbm); |
405 | return data; | 408 | return data; |
406 | } | 409 | } |
407 | apr_dbm_close(dbm); | ||
408 | 410 | ||
409 | data.size = dbmval.dsize - sizeof(apr_time_t); | 411 | data.size = dbmval.dsize - sizeof(apr_time_t); |
410 | 412 | ||
411 | data.data = gnutls_malloc(data.size); | 413 | data.data = gnutls_malloc(data.size); |
412 | if (data.data == NULL) { | 414 | if (data.data == NULL) { |
415 | apr_dbm_freedatum( dbm, dbmval); | ||
416 | apr_dbm_close(dbm); | ||
413 | return data; | 417 | return data; |
414 | } | 418 | } |
415 | 419 | ||
416 | memcpy(data.data, dbmval.dptr+sizeof(apr_time_t), data.size); | 420 | memcpy(data.data, dbmval.dptr+sizeof(apr_time_t), data.size); |
417 | 421 | ||
422 | apr_dbm_freedatum( dbm, dbmval); | ||
423 | apr_dbm_close(dbm); | ||
424 | |||
418 | return data; | 425 | return data; |
419 | } | 426 | } |
420 | 427 | ||
diff --git a/src/gnutls_config.c b/src/gnutls_config.c index 8d6308a..4786f6d 100644 --- a/src/gnutls_config.c +++ b/src/gnutls_config.c | |||
@@ -202,6 +202,8 @@ const char *mgs_set_key_file(cmd_parms * parms, void *dummy, | |||
202 | return NULL; | 202 | return NULL; |
203 | } | 203 | } |
204 | 204 | ||
205 | #ifdef ENABLE_SRP | ||
206 | |||
205 | const char *mgs_set_srp_tpasswd_file(cmd_parms * parms, void *dummy, | 207 | const char *mgs_set_srp_tpasswd_file(cmd_parms * parms, void *dummy, |
206 | const char *arg) | 208 | const char *arg) |
207 | { | 209 | { |
@@ -228,6 +230,8 @@ const char *mgs_set_srp_tpasswd_conf_file(cmd_parms * parms, void *dummy, | |||
228 | return NULL; | 230 | return NULL; |
229 | } | 231 | } |
230 | 232 | ||
233 | #endif | ||
234 | |||
231 | const char *mgs_set_cache(cmd_parms * parms, void *dummy, | 235 | const char *mgs_set_cache(cmd_parms * parms, void *dummy, |
232 | const char *type, const char *arg) | 236 | const char *type, const char *arg) |
233 | { | 237 | { |
@@ -426,6 +430,7 @@ void *mgs_config_server_create(apr_pool_t * p, server_rec * s) | |||
426 | ": (%d) %s", ret, gnutls_strerror(ret)); | 430 | ": (%d) %s", ret, gnutls_strerror(ret)); |
427 | } | 431 | } |
428 | 432 | ||
433 | #ifdef ENABLE_SRP | ||
429 | ret = gnutls_srp_allocate_server_credentials(&sc->srp_creds); | 434 | ret = gnutls_srp_allocate_server_credentials(&sc->srp_creds); |
430 | if (ret < 0) { | 435 | if (ret < 0) { |
431 | return apr_psprintf(p, "GnuTLS: Failed to initialize" | 436 | return apr_psprintf(p, "GnuTLS: Failed to initialize" |
@@ -434,6 +439,8 @@ void *mgs_config_server_create(apr_pool_t * p, server_rec * s) | |||
434 | 439 | ||
435 | sc->srp_tpasswd_conf_file = NULL; | 440 | sc->srp_tpasswd_conf_file = NULL; |
436 | sc->srp_tpasswd_file = NULL; | 441 | sc->srp_tpasswd_file = NULL; |
442 | #endif | ||
443 | |||
437 | sc->privkey_x509 = NULL; | 444 | sc->privkey_x509 = NULL; |
438 | memset( sc->certs_x509, 0, sizeof(sc->certs_x509)); | 445 | memset( sc->certs_x509, 0, sizeof(sc->certs_x509)); |
439 | sc->certs_x509_num = 0; | 446 | sc->certs_x509_num = 0; |
diff --git a/src/gnutls_hooks.c b/src/gnutls_hooks.c index 55a1120..0483602 100644 --- a/src/gnutls_hooks.c +++ b/src/gnutls_hooks.c | |||
@@ -115,11 +115,13 @@ static int mgs_select_virtual_server_cb(gnutls_session_t session) | |||
115 | 115 | ||
116 | gnutls_credentials_set(session, GNUTLS_CRD_ANON, ctxt->sc->anon_creds); | 116 | gnutls_credentials_set(session, GNUTLS_CRD_ANON, ctxt->sc->anon_creds); |
117 | 117 | ||
118 | #ifdef ENABLE_SRP | ||
118 | if (ctxt->sc->srp_tpasswd_conf_file != NULL | 119 | if (ctxt->sc->srp_tpasswd_conf_file != NULL |
119 | && ctxt->sc->srp_tpasswd_file != NULL) { | 120 | && ctxt->sc->srp_tpasswd_file != NULL) { |
120 | gnutls_credentials_set(session, GNUTLS_CRD_SRP, | 121 | gnutls_credentials_set(session, GNUTLS_CRD_SRP, |
121 | ctxt->sc->srp_creds); | 122 | ctxt->sc->srp_creds); |
122 | } | 123 | } |
124 | #endif | ||
123 | 125 | ||
124 | /* update the priorities - to avoid negotiating a ciphersuite that is not | 126 | /* update the priorities - to avoid negotiating a ciphersuite that is not |
125 | * enabled on this virtual server. Note that here we ignore the version | 127 | * enabled on this virtual server. Note that here we ignore the version |
@@ -313,6 +315,7 @@ mgs_hook_post_config(apr_pool_t * p, apr_pool_t * plog, | |||
313 | gnutls_certificate_server_set_retrieve_function(sc->certs, | 315 | gnutls_certificate_server_set_retrieve_function(sc->certs, |
314 | cert_retrieve_fn); | 316 | cert_retrieve_fn); |
315 | 317 | ||
318 | #ifdef ENABLE_SRP | ||
316 | if (sc->srp_tpasswd_conf_file != NULL | 319 | if (sc->srp_tpasswd_conf_file != NULL |
317 | && sc->srp_tpasswd_file != NULL) { | 320 | && sc->srp_tpasswd_file != NULL) { |
318 | rv = gnutls_srp_set_server_credentials_file(sc->srp_creds, | 321 | rv = gnutls_srp_set_server_credentials_file(sc->srp_creds, |
@@ -329,6 +332,7 @@ mgs_hook_post_config(apr_pool_t * p, apr_pool_t * plog, | |||
329 | exit(-1); | 332 | exit(-1); |
330 | } | 333 | } |
331 | } | 334 | } |
335 | #endif | ||
332 | 336 | ||
333 | if (sc->certs_x509[0] == NULL | 337 | if (sc->certs_x509[0] == NULL |
334 | && sc->enabled == GNUTLS_ENABLED_TRUE) { | 338 | && sc->enabled == GNUTLS_ENABLED_TRUE) { |
@@ -662,8 +666,10 @@ int mgs_hook_fixups(request_rec * r) | |||
662 | gnutls_compression_get_name(gnutls_compression_get | 666 | gnutls_compression_get_name(gnutls_compression_get |
663 | (ctxt->session))); | 667 | (ctxt->session))); |
664 | 668 | ||
669 | #ifdef ENABLE_SRP | ||
665 | apr_table_setn(env, "SSL_SRP_USER", | 670 | apr_table_setn(env, "SSL_SRP_USER", |
666 | gnutls_srp_server_get_username(ctxt->session)); | 671 | gnutls_srp_server_get_username(ctxt->session)); |
672 | #endif | ||
667 | 673 | ||
668 | if (apr_table_get(env, "SSL_CLIENT_VERIFY") == NULL) | 674 | if (apr_table_get(env, "SSL_CLIENT_VERIFY") == NULL) |
669 | apr_table_setn(env, "SSL_CLIENT_VERIFY", "NONE"); | 675 | apr_table_setn(env, "SSL_CLIENT_VERIFY", "NONE"); |
diff --git a/src/mod_gnutls.c b/src/mod_gnutls.c index a6e5528..cc760e6 100644 --- a/src/mod_gnutls.c +++ b/src/mod_gnutls.c | |||
@@ -17,7 +17,6 @@ | |||
17 | 17 | ||
18 | #include "mod_gnutls.h" | 18 | #include "mod_gnutls.h" |
19 | 19 | ||
20 | |||
21 | static void gnutls_hooks(apr_pool_t * p) | 20 | static void gnutls_hooks(apr_pool_t * p) |
22 | { | 21 | { |
23 | ap_hook_pre_connection(mgs_hook_pre_connection, NULL, NULL, | 22 | ap_hook_pre_connection(mgs_hook_pre_connection, NULL, NULL, |
@@ -80,6 +79,7 @@ static const command_rec mgs_config_cmds[] = { | |||
80 | NULL, | 79 | NULL, |
81 | RSRC_CONF, | 80 | RSRC_CONF, |
82 | "SSL Server SRP Password file"), | 81 | "SSL Server SRP Password file"), |
82 | #ifdef ENABLE_SRP | ||
83 | AP_INIT_TAKE1("GnuTLSSRPPasswdFile", mgs_set_srp_tpasswd_file, | 83 | AP_INIT_TAKE1("GnuTLSSRPPasswdFile", mgs_set_srp_tpasswd_file, |
84 | NULL, | 84 | NULL, |
85 | RSRC_CONF, | 85 | RSRC_CONF, |
@@ -88,6 +88,7 @@ static const command_rec mgs_config_cmds[] = { | |||
88 | NULL, | 88 | NULL, |
89 | RSRC_CONF, | 89 | RSRC_CONF, |
90 | "SSL Server SRP Parameters file"), | 90 | "SSL Server SRP Parameters file"), |
91 | #endif | ||
91 | AP_INIT_TAKE1("GnuTLSCacheTimeout", mgs_set_cache_timeout, | 92 | AP_INIT_TAKE1("GnuTLSCacheTimeout", mgs_set_cache_timeout, |
92 | NULL, | 93 | NULL, |
93 | RSRC_CONF, | 94 | RSRC_CONF, |