4308 lines
135 KiB
Diff
4308 lines
135 KiB
Diff
diff -ruNp libsoup-2.2.100/aclocal.m4 libsoup-2.2.100/aclocal.m4
|
|
--- libsoup-2.2.100/aclocal.m4 2007-02-12 10:34:08.000000000 -0500
|
|
+++ libsoup-2.2.100/aclocal.m4 2007-05-01 15:49:07.000000000 -0400
|
|
@@ -11,6 +11,331 @@
|
|
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
# PARTICULAR PURPOSE.
|
|
|
|
+# Configure paths for GLIB
|
|
+# Owen Taylor 1997-2001
|
|
+
|
|
+dnl AM_PATH_GLIB_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
|
|
+dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if gmodule, gobject or
|
|
+dnl gthread is specified in MODULES, pass to pkg-config
|
|
+dnl
|
|
+AC_DEFUN([AM_PATH_GLIB_2_0],
|
|
+[dnl
|
|
+dnl Get the cflags and libraries from pkg-config
|
|
+dnl
|
|
+AC_ARG_ENABLE(glibtest, [ --disable-glibtest do not try to compile and run a test GLIB program],
|
|
+ , enable_glibtest=yes)
|
|
+
|
|
+ pkg_config_args=glib-2.0
|
|
+ for module in . $4
|
|
+ do
|
|
+ case "$module" in
|
|
+ gmodule)
|
|
+ pkg_config_args="$pkg_config_args gmodule-2.0"
|
|
+ ;;
|
|
+ gmodule-no-export)
|
|
+ pkg_config_args="$pkg_config_args gmodule-no-export-2.0"
|
|
+ ;;
|
|
+ gobject)
|
|
+ pkg_config_args="$pkg_config_args gobject-2.0"
|
|
+ ;;
|
|
+ gthread)
|
|
+ pkg_config_args="$pkg_config_args gthread-2.0"
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+
|
|
+ AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
|
|
+
|
|
+ no_glib=""
|
|
+
|
|
+ if test x$PKG_CONFIG != xno ; then
|
|
+ if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then
|
|
+ :
|
|
+ else
|
|
+ echo *** pkg-config too old; version 0.7 or better required.
|
|
+ no_glib=yes
|
|
+ PKG_CONFIG=no
|
|
+ fi
|
|
+ else
|
|
+ no_glib=yes
|
|
+ fi
|
|
+
|
|
+ min_glib_version=ifelse([$1], ,2.0.0,$1)
|
|
+ AC_MSG_CHECKING(for GLIB - version >= $min_glib_version)
|
|
+
|
|
+ if test x$PKG_CONFIG != xno ; then
|
|
+ ## don't try to run the test against uninstalled libtool libs
|
|
+ if $PKG_CONFIG --uninstalled $pkg_config_args; then
|
|
+ echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH"
|
|
+ enable_glibtest=no
|
|
+ fi
|
|
+
|
|
+ if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then
|
|
+ :
|
|
+ else
|
|
+ no_glib=yes
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ if test x"$no_glib" = x ; then
|
|
+ GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
|
|
+ GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0`
|
|
+ GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
|
|
+
|
|
+ GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args`
|
|
+ GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args`
|
|
+ glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \
|
|
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
|
|
+ glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \
|
|
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
|
|
+ glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \
|
|
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
|
|
+ if test "x$enable_glibtest" = "xyes" ; then
|
|
+ ac_save_CFLAGS="$CFLAGS"
|
|
+ ac_save_LIBS="$LIBS"
|
|
+ CFLAGS="$CFLAGS $GLIB_CFLAGS"
|
|
+ LIBS="$GLIB_LIBS $LIBS"
|
|
+dnl
|
|
+dnl Now check if the installed GLIB is sufficiently new. (Also sanity
|
|
+dnl checks the results of pkg-config to some extent)
|
|
+dnl
|
|
+ rm -f conf.glibtest
|
|
+ AC_TRY_RUN([
|
|
+#include <glib.h>
|
|
+#include <stdio.h>
|
|
+#include <stdlib.h>
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+ int major, minor, micro;
|
|
+ char *tmp_version;
|
|
+
|
|
+ system ("touch conf.glibtest");
|
|
+
|
|
+ /* HP/UX 9 (%@#!) writes to sscanf strings */
|
|
+ tmp_version = g_strdup("$min_glib_version");
|
|
+ if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) {
|
|
+ printf("%s, bad version string\n", "$min_glib_version");
|
|
+ exit(1);
|
|
+ }
|
|
+
|
|
+ if ((glib_major_version != $glib_config_major_version) ||
|
|
+ (glib_minor_version != $glib_config_minor_version) ||
|
|
+ (glib_micro_version != $glib_config_micro_version))
|
|
+ {
|
|
+ printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n",
|
|
+ $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version,
|
|
+ glib_major_version, glib_minor_version, glib_micro_version);
|
|
+ printf ("*** was found! If pkg-config was correct, then it is best\n");
|
|
+ printf ("*** to remove the old version of GLib. You may also be able to fix the error\n");
|
|
+ printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
|
|
+ printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
|
|
+ printf("*** required on your system.\n");
|
|
+ printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
|
|
+ printf("*** to point to the correct configuration files\n");
|
|
+ }
|
|
+ else if ((glib_major_version != GLIB_MAJOR_VERSION) ||
|
|
+ (glib_minor_version != GLIB_MINOR_VERSION) ||
|
|
+ (glib_micro_version != GLIB_MICRO_VERSION))
|
|
+ {
|
|
+ printf("*** GLIB header files (version %d.%d.%d) do not match\n",
|
|
+ GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
|
|
+ printf("*** library (version %d.%d.%d)\n",
|
|
+ glib_major_version, glib_minor_version, glib_micro_version);
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ if ((glib_major_version > major) ||
|
|
+ ((glib_major_version == major) && (glib_minor_version > minor)) ||
|
|
+ ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro)))
|
|
+ {
|
|
+ return 0;
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n",
|
|
+ glib_major_version, glib_minor_version, glib_micro_version);
|
|
+ printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n",
|
|
+ major, minor, micro);
|
|
+ printf("*** GLIB is always available from ftp://ftp.gtk.org.\n");
|
|
+ printf("***\n");
|
|
+ printf("*** If you have already installed a sufficiently new version, this error\n");
|
|
+ printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
|
|
+ printf("*** being found. The easiest way to fix this is to remove the old version\n");
|
|
+ printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n");
|
|
+ printf("*** correct copy of pkg-config. (In this case, you will have to\n");
|
|
+ printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
|
|
+ printf("*** so that the correct libraries are found at run-time))\n");
|
|
+ }
|
|
+ }
|
|
+ return 1;
|
|
+}
|
|
+],, no_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
|
|
+ CFLAGS="$ac_save_CFLAGS"
|
|
+ LIBS="$ac_save_LIBS"
|
|
+ fi
|
|
+ fi
|
|
+ if test "x$no_glib" = x ; then
|
|
+ AC_MSG_RESULT(yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version))
|
|
+ ifelse([$2], , :, [$2])
|
|
+ else
|
|
+ AC_MSG_RESULT(no)
|
|
+ if test "$PKG_CONFIG" = "no" ; then
|
|
+ echo "*** A new enough version of pkg-config was not found."
|
|
+ echo "*** See http://www.freedesktop.org/software/pkgconfig/"
|
|
+ else
|
|
+ if test -f conf.glibtest ; then
|
|
+ :
|
|
+ else
|
|
+ echo "*** Could not run GLIB test program, checking why..."
|
|
+ ac_save_CFLAGS="$CFLAGS"
|
|
+ ac_save_LIBS="$LIBS"
|
|
+ CFLAGS="$CFLAGS $GLIB_CFLAGS"
|
|
+ LIBS="$LIBS $GLIB_LIBS"
|
|
+ AC_TRY_LINK([
|
|
+#include <glib.h>
|
|
+#include <stdio.h>
|
|
+], [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ],
|
|
+ [ echo "*** The test program compiled, but did not run. This usually means"
|
|
+ echo "*** that the run-time linker is not finding GLIB or finding the wrong"
|
|
+ echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your"
|
|
+ echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
|
|
+ echo "*** to the installed location Also, make sure you have run ldconfig if that"
|
|
+ echo "*** is required on your system"
|
|
+ echo "***"
|
|
+ echo "*** If you have an old version installed, it is best to remove it, although"
|
|
+ echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
|
|
+ [ echo "*** The test program failed to compile or link. See the file config.log for the"
|
|
+ echo "*** exact error that occured. This usually means GLIB is incorrectly installed."])
|
|
+ CFLAGS="$ac_save_CFLAGS"
|
|
+ LIBS="$ac_save_LIBS"
|
|
+ fi
|
|
+ fi
|
|
+ GLIB_CFLAGS=""
|
|
+ GLIB_LIBS=""
|
|
+ GLIB_GENMARSHAL=""
|
|
+ GOBJECT_QUERY=""
|
|
+ GLIB_MKENUMS=""
|
|
+ ifelse([$3], , :, [$3])
|
|
+ fi
|
|
+ AC_SUBST(GLIB_CFLAGS)
|
|
+ AC_SUBST(GLIB_LIBS)
|
|
+ AC_SUBST(GLIB_GENMARSHAL)
|
|
+ AC_SUBST(GOBJECT_QUERY)
|
|
+ AC_SUBST(GLIB_MKENUMS)
|
|
+ rm -f conf.glibtest
|
|
+])
|
|
+
|
|
+dnl Autoconf macros for libgcrypt
|
|
+dnl Copyright (C) 2002, 2004 Free Software Foundation, Inc.
|
|
+dnl
|
|
+dnl This file is free software; as a special exception the author gives
|
|
+dnl unlimited permission to copy and/or distribute it, with or without
|
|
+dnl modifications, as long as this notice is preserved.
|
|
+dnl
|
|
+dnl This file is distributed in the hope that it will be useful, but
|
|
+dnl WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
|
|
+dnl implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
+
|
|
+
|
|
+dnl AM_PATH_LIBGCRYPT([MINIMUM-VERSION,
|
|
+dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
|
|
+dnl Test for libgcrypt and define LIBGCRYPT_CFLAGS and LIBGCRYPT_LIBS.
|
|
+dnl MINIMUN-VERSION is a string with the version number optionalliy prefixed
|
|
+dnl with the API version to also check the API compatibility. Example:
|
|
+dnl a MINIMUN-VERSION of 1:1.2.5 won't pass the test unless the installed
|
|
+dnl version of libgcrypt is at least 1.2.5 *and* the API number is 1. Using
|
|
+dnl this features allows to prevent build against newer versions of libgcrypt
|
|
+dnl with a changed API.
|
|
+dnl
|
|
+AC_DEFUN([AM_PATH_LIBGCRYPT],
|
|
+[ AC_ARG_WITH(libgcrypt-prefix,
|
|
+ AC_HELP_STRING([--with-libgcrypt-prefix=PFX],
|
|
+ [prefix where LIBGCRYPT is installed (optional)]),
|
|
+ libgcrypt_config_prefix="$withval", libgcrypt_config_prefix="")
|
|
+ if test x$libgcrypt_config_prefix != x ; then
|
|
+ if test x${LIBGCRYPT_CONFIG+set} != xset ; then
|
|
+ LIBGCRYPT_CONFIG=$libgcrypt_config_prefix/bin/libgcrypt-config
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ AC_PATH_PROG(LIBGCRYPT_CONFIG, libgcrypt-config, no)
|
|
+ tmp=ifelse([$1], ,1:1.2.0,$1)
|
|
+ if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
|
|
+ req_libgcrypt_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'`
|
|
+ min_libgcrypt_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'`
|
|
+ else
|
|
+ req_libgcrypt_api=0
|
|
+ min_libgcrypt_version="$tmp"
|
|
+ fi
|
|
+
|
|
+ AC_MSG_CHECKING(for LIBGCRYPT - version >= $min_libgcrypt_version)
|
|
+ ok=no
|
|
+ if test "$LIBGCRYPT_CONFIG" != "no" ; then
|
|
+ req_major=`echo $min_libgcrypt_version | \
|
|
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
|
|
+ req_minor=`echo $min_libgcrypt_version | \
|
|
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
|
|
+ req_micro=`echo $min_libgcrypt_version | \
|
|
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
|
|
+ libgcrypt_config_version=`$LIBGCRYPT_CONFIG --version`
|
|
+ major=`echo $libgcrypt_config_version | \
|
|
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
|
|
+ minor=`echo $libgcrypt_config_version | \
|
|
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
|
|
+ micro=`echo $libgcrypt_config_version | \
|
|
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
|
|
+ if test "$major" -gt "$req_major"; then
|
|
+ ok=yes
|
|
+ else
|
|
+ if test "$major" -eq "$req_major"; then
|
|
+ if test "$minor" -gt "$req_minor"; then
|
|
+ ok=yes
|
|
+ else
|
|
+ if test "$minor" -eq "$req_minor"; then
|
|
+ if test "$micro" -ge "$req_micro"; then
|
|
+ ok=yes
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ if test $ok = yes; then
|
|
+ AC_MSG_RESULT(yes)
|
|
+ else
|
|
+ AC_MSG_RESULT(no)
|
|
+ fi
|
|
+ if test $ok = yes; then
|
|
+ # If we have a recent libgcrypt, we should also check that the
|
|
+ # API is compatible
|
|
+ if test "$req_libgcrypt_api" -gt 0 ; then
|
|
+ tmp=`$LIBGCRYPT_CONFIG --api-version 2>/dev/null || echo 0`
|
|
+ if test "$tmp" -gt 0 ; then
|
|
+ AC_MSG_CHECKING([LIBGCRYPT API version])
|
|
+ if test "$req_libgcrypt_api" -eq "$tmp" ; then
|
|
+ AC_MSG_RESULT(okay)
|
|
+ else
|
|
+ ok=no
|
|
+ AC_MSG_RESULT([does not match (want=$req_libgcrypt_api got=$tmp)])
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ if test $ok = yes; then
|
|
+ LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags`
|
|
+ LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs`
|
|
+ ifelse([$2], , :, [$2])
|
|
+ else
|
|
+ LIBGCRYPT_CFLAGS=""
|
|
+ LIBGCRYPT_LIBS=""
|
|
+ ifelse([$3], , :, [$3])
|
|
+ fi
|
|
+ AC_SUBST(LIBGCRYPT_CFLAGS)
|
|
+ AC_SUBST(LIBGCRYPT_LIBS)
|
|
+])
|
|
+
|
|
# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
|
|
|
|
# serial 48 AC_PROG_LIBTOOL
|
|
@@ -7446,220 +7771,4 @@ AC_SUBST([am__tar])
|
|
AC_SUBST([am__untar])
|
|
]) # _AM_PROG_TAR
|
|
|
|
-# Configure paths for GLIB
|
|
-# Owen Taylor 1997-2001
|
|
-
|
|
-dnl AM_PATH_GLIB_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
|
|
-dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if gmodule, gobject or
|
|
-dnl gthread is specified in MODULES, pass to pkg-config
|
|
-dnl
|
|
-AC_DEFUN([AM_PATH_GLIB_2_0],
|
|
-[dnl
|
|
-dnl Get the cflags and libraries from pkg-config
|
|
-dnl
|
|
-AC_ARG_ENABLE(glibtest, [ --disable-glibtest do not try to compile and run a test GLIB program],
|
|
- , enable_glibtest=yes)
|
|
-
|
|
- pkg_config_args=glib-2.0
|
|
- for module in . $4
|
|
- do
|
|
- case "$module" in
|
|
- gmodule)
|
|
- pkg_config_args="$pkg_config_args gmodule-2.0"
|
|
- ;;
|
|
- gmodule-no-export)
|
|
- pkg_config_args="$pkg_config_args gmodule-no-export-2.0"
|
|
- ;;
|
|
- gobject)
|
|
- pkg_config_args="$pkg_config_args gobject-2.0"
|
|
- ;;
|
|
- gthread)
|
|
- pkg_config_args="$pkg_config_args gthread-2.0"
|
|
- ;;
|
|
- esac
|
|
- done
|
|
-
|
|
- AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
|
|
-
|
|
- no_glib=""
|
|
-
|
|
- if test x$PKG_CONFIG != xno ; then
|
|
- if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then
|
|
- :
|
|
- else
|
|
- echo *** pkg-config too old; version 0.7 or better required.
|
|
- no_glib=yes
|
|
- PKG_CONFIG=no
|
|
- fi
|
|
- else
|
|
- no_glib=yes
|
|
- fi
|
|
-
|
|
- min_glib_version=ifelse([$1], ,2.0.0,$1)
|
|
- AC_MSG_CHECKING(for GLIB - version >= $min_glib_version)
|
|
-
|
|
- if test x$PKG_CONFIG != xno ; then
|
|
- ## don't try to run the test against uninstalled libtool libs
|
|
- if $PKG_CONFIG --uninstalled $pkg_config_args; then
|
|
- echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH"
|
|
- enable_glibtest=no
|
|
- fi
|
|
-
|
|
- if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then
|
|
- :
|
|
- else
|
|
- no_glib=yes
|
|
- fi
|
|
- fi
|
|
-
|
|
- if test x"$no_glib" = x ; then
|
|
- GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
|
|
- GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0`
|
|
- GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
|
|
-
|
|
- GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args`
|
|
- GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args`
|
|
- glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \
|
|
- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
|
|
- glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \
|
|
- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
|
|
- glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \
|
|
- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
|
|
- if test "x$enable_glibtest" = "xyes" ; then
|
|
- ac_save_CFLAGS="$CFLAGS"
|
|
- ac_save_LIBS="$LIBS"
|
|
- CFLAGS="$CFLAGS $GLIB_CFLAGS"
|
|
- LIBS="$GLIB_LIBS $LIBS"
|
|
-dnl
|
|
-dnl Now check if the installed GLIB is sufficiently new. (Also sanity
|
|
-dnl checks the results of pkg-config to some extent)
|
|
-dnl
|
|
- rm -f conf.glibtest
|
|
- AC_TRY_RUN([
|
|
-#include <glib.h>
|
|
-#include <stdio.h>
|
|
-#include <stdlib.h>
|
|
-
|
|
-int
|
|
-main ()
|
|
-{
|
|
- int major, minor, micro;
|
|
- char *tmp_version;
|
|
-
|
|
- system ("touch conf.glibtest");
|
|
-
|
|
- /* HP/UX 9 (%@#!) writes to sscanf strings */
|
|
- tmp_version = g_strdup("$min_glib_version");
|
|
- if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) {
|
|
- printf("%s, bad version string\n", "$min_glib_version");
|
|
- exit(1);
|
|
- }
|
|
-
|
|
- if ((glib_major_version != $glib_config_major_version) ||
|
|
- (glib_minor_version != $glib_config_minor_version) ||
|
|
- (glib_micro_version != $glib_config_micro_version))
|
|
- {
|
|
- printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n",
|
|
- $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version,
|
|
- glib_major_version, glib_minor_version, glib_micro_version);
|
|
- printf ("*** was found! If pkg-config was correct, then it is best\n");
|
|
- printf ("*** to remove the old version of GLib. You may also be able to fix the error\n");
|
|
- printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
|
|
- printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
|
|
- printf("*** required on your system.\n");
|
|
- printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
|
|
- printf("*** to point to the correct configuration files\n");
|
|
- }
|
|
- else if ((glib_major_version != GLIB_MAJOR_VERSION) ||
|
|
- (glib_minor_version != GLIB_MINOR_VERSION) ||
|
|
- (glib_micro_version != GLIB_MICRO_VERSION))
|
|
- {
|
|
- printf("*** GLIB header files (version %d.%d.%d) do not match\n",
|
|
- GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
|
|
- printf("*** library (version %d.%d.%d)\n",
|
|
- glib_major_version, glib_minor_version, glib_micro_version);
|
|
- }
|
|
- else
|
|
- {
|
|
- if ((glib_major_version > major) ||
|
|
- ((glib_major_version == major) && (glib_minor_version > minor)) ||
|
|
- ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro)))
|
|
- {
|
|
- return 0;
|
|
- }
|
|
- else
|
|
- {
|
|
- printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n",
|
|
- glib_major_version, glib_minor_version, glib_micro_version);
|
|
- printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n",
|
|
- major, minor, micro);
|
|
- printf("*** GLIB is always available from ftp://ftp.gtk.org.\n");
|
|
- printf("***\n");
|
|
- printf("*** If you have already installed a sufficiently new version, this error\n");
|
|
- printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
|
|
- printf("*** being found. The easiest way to fix this is to remove the old version\n");
|
|
- printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n");
|
|
- printf("*** correct copy of pkg-config. (In this case, you will have to\n");
|
|
- printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
|
|
- printf("*** so that the correct libraries are found at run-time))\n");
|
|
- }
|
|
- }
|
|
- return 1;
|
|
-}
|
|
-],, no_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
|
|
- CFLAGS="$ac_save_CFLAGS"
|
|
- LIBS="$ac_save_LIBS"
|
|
- fi
|
|
- fi
|
|
- if test "x$no_glib" = x ; then
|
|
- AC_MSG_RESULT(yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version))
|
|
- ifelse([$2], , :, [$2])
|
|
- else
|
|
- AC_MSG_RESULT(no)
|
|
- if test "$PKG_CONFIG" = "no" ; then
|
|
- echo "*** A new enough version of pkg-config was not found."
|
|
- echo "*** See http://www.freedesktop.org/software/pkgconfig/"
|
|
- else
|
|
- if test -f conf.glibtest ; then
|
|
- :
|
|
- else
|
|
- echo "*** Could not run GLIB test program, checking why..."
|
|
- ac_save_CFLAGS="$CFLAGS"
|
|
- ac_save_LIBS="$LIBS"
|
|
- CFLAGS="$CFLAGS $GLIB_CFLAGS"
|
|
- LIBS="$LIBS $GLIB_LIBS"
|
|
- AC_TRY_LINK([
|
|
-#include <glib.h>
|
|
-#include <stdio.h>
|
|
-], [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ],
|
|
- [ echo "*** The test program compiled, but did not run. This usually means"
|
|
- echo "*** that the run-time linker is not finding GLIB or finding the wrong"
|
|
- echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your"
|
|
- echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
|
|
- echo "*** to the installed location Also, make sure you have run ldconfig if that"
|
|
- echo "*** is required on your system"
|
|
- echo "***"
|
|
- echo "*** If you have an old version installed, it is best to remove it, although"
|
|
- echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
|
|
- [ echo "*** The test program failed to compile or link. See the file config.log for the"
|
|
- echo "*** exact error that occured. This usually means GLIB is incorrectly installed."])
|
|
- CFLAGS="$ac_save_CFLAGS"
|
|
- LIBS="$ac_save_LIBS"
|
|
- fi
|
|
- fi
|
|
- GLIB_CFLAGS=""
|
|
- GLIB_LIBS=""
|
|
- GLIB_GENMARSHAL=""
|
|
- GOBJECT_QUERY=""
|
|
- GLIB_MKENUMS=""
|
|
- ifelse([$3], , :, [$3])
|
|
- fi
|
|
- AC_SUBST(GLIB_CFLAGS)
|
|
- AC_SUBST(GLIB_LIBS)
|
|
- AC_SUBST(GLIB_GENMARSHAL)
|
|
- AC_SUBST(GOBJECT_QUERY)
|
|
- AC_SUBST(GLIB_MKENUMS)
|
|
- rm -f conf.glibtest
|
|
-])
|
|
-
|
|
m4_include([acinclude.m4])
|
|
diff -ruNp libsoup-2.2.100/ChangeLog libsoup-2.2.100/ChangeLog
|
|
--- libsoup-2.2.100/ChangeLog 2007-02-12 10:19:13.000000000 -0500
|
|
+++ libsoup-2.2.100/ChangeLog 2007-05-01 16:00:48.000000000 -0400
|
|
@@ -1,3 +1,142 @@
|
|
+2007-04-16 Dan Winship <danw@novell.com>
|
|
+
|
|
+ * libsoup/soup-ssl.h: Make a real SoupSSLCredentials type rather
|
|
+ than just using gpointer
|
|
+
|
|
+ * libsoup/soup-server.c (SoupServerPrivate): use it
|
|
+
|
|
+ * libsoup/soup-session.c (SoupSessionPrivate): use it
|
|
+
|
|
+ * libsoup/soup-gnutls.c: Use it, and consistently use "creds"
|
|
+ rather than "cred" as the abbreviation for "credentials".
|
|
+
|
|
+ * docs/reference/libsoup-sections.txt:
|
|
+ * docs/reference/tmpl/soup-misc.sgml:
|
|
+ * docs/reference/tmpl/soup-ssl.sgml: update
|
|
+
|
|
+2007-03-29 Dan Winship <danw@novell.com>
|
|
+
|
|
+ * libsoup/soup-session-sync.c (queue_message): Implement this by
|
|
+ sending the message (synchronously) in another thread and then
|
|
+ queueing the callback back in the main thread.
|
|
+
|
|
+ * libsoup/soup-session.c (soup_session_queue_message): update docs
|
|
+ to be more explicit about what thread the callback occurs in
|
|
+
|
|
+2007-03-17 Dan Winship <danw@novell.com>
|
|
+
|
|
+ * libsoup/soup-message.c (soup_message_set_auth)
|
|
+ (soup_message_get_auth, soup_message_set_proxy_auth)
|
|
+ (soup_message_get_proxy_auth): get/set auth/proxy_auth info for a
|
|
+ message.
|
|
+
|
|
+ * libsoup/soup-session.c (add_auth): Use soup_message_set_auth and
|
|
+ soup_message_set_proxy_auth.
|
|
+ (update_auth_internal): Call soup_message_get_auth or
|
|
+ soup_message_get_proxy_auth to determine the message's prior auth,
|
|
+ rather than calling lookup_auth() again, since it isn't guaranteed
|
|
+ to return the same thing now as it did when the message was
|
|
+ originally sent. Fixes erroneous 401s when queuing multiple
|
|
+ messages at once to an as-yet-unauthenticated-to server. #271540
|
|
+
|
|
+ * libsoup/soup-session-async.c (queue_message): don't run the
|
|
+ queue right away, do it at idle time. Otherwise in some cases
|
|
+ (especially errors), the message callbacks could be invoked before
|
|
+ queue_message returns.
|
|
+
|
|
+ * tests/auth-test.c: add a regression test for #271540.
|
|
+
|
|
+2007-03-17 Dan Winship <danw@novell.com>
|
|
+
|
|
+ * configure.in: require glib 2.12. check for timegm().
|
|
+
|
|
+ * libsoup/soup-date.c (soup_mktime_utc): Use timegm if available.
|
|
+ (soup_date_iso8601_parse): use g_time_val_from_iso8601. #337010,
|
|
+ patch from Emmanuele Bassi.
|
|
+
|
|
+ * libsoup/soup-types.h: remove local copy of
|
|
+ G_GNUC_NULL_TERMINATED since we now depend on a new-enough copy of
|
|
+ glib.
|
|
+
|
|
+ * libsoup/soup-misc.c (soup_base64_encode_close)
|
|
+ (soup_base64_encode_step, soup_base64_encode)
|
|
+ (soup_base64_decode_step): Make these just be wrappers around the
|
|
+ glib base64 methods. (For now; eventually they'll just go away.)
|
|
+
|
|
+ * libsoup/soup-auth-basic.c (authenticate):
|
|
+ * libsoup/soup-auth-digest.c (authenticate):
|
|
+ * libsoup/soup-connection-ntlm.c (soup_ntlm_parse_challenge)
|
|
+ (soup_ntlm_response):
|
|
+ * libsoup/soup-server-auth.c (soup_server_auth_new):
|
|
+ * libsoup/soup-soap-message.c (soup_soap_message_write_base64):
|
|
+ * libsoup/soup-xmlrpc-message.c
|
|
+ (soup_xmlrpc_message_write_base64):
|
|
+ * libsoup/soup-xmlrpc-response.c (soup_xmlrpc_value_get_base64):
|
|
+ Use glib base64 methods
|
|
+
|
|
+2007-03-16 Dan Winship <danw@novell.com>
|
|
+
|
|
+ * libsoup/soup-message.c (soup_message_get_response_encoding):
|
|
+ update the handling of CONNECT: it has no response body by
|
|
+ default, but does have a body if its headers say so.
|
|
+
|
|
+ * tests/proxy-test.c: test libsoup's behavior when talking to
|
|
+ proxies.
|
|
+
|
|
+ * tests/httpd.conf.in: Load mod_proxy and mod_ssl, and add
|
|
+ sections configuring them, for proxy-test
|
|
+
|
|
+ * configure.in: update the apache-module-dir-finding code to deal
|
|
+ with the fact that some modules (eg, mod_ssl) might only be in the
|
|
+ mpm-specific module dir, while others (eg, mod_php5) might only be
|
|
+ in the generic module dir.
|
|
+
|
|
+2007-03-12 Dan Winship <danw@novell.com>
|
|
+
|
|
+ * tests/Makefile.am (INCLUDES): add $(LIBGNUTLS_CFLAGS) for
|
|
+ ssl-test. #417617, patch from Elijah Newren.
|
|
+
|
|
+2007-03-12 Dan Winship <danw@novell.com>
|
|
+
|
|
+ * libsoup/soup-session-sync.c (wait_for_connection): if
|
|
+ soup_connection_connect_sync() returns SOUP_STATUS_TRY_AGAIN, then
|
|
+ try again. (Duh.) Fixes SSL-via-proxy-when-using-synchronous-I/O-
|
|
+ where-the-proxy-closes-the-connection-when-returning-407. (Reported
|
|
+ by Varadhan.)
|
|
+
|
|
+ * tests/get.c: Rewrite to use soup_session_send_message rather
|
|
+ than soup_session_queue_message, and add a "-s" flag to use
|
|
+ SoupSessionSync rather than SoupSessionAsync (so we can test bugs
|
|
+ in the sync code paths).
|
|
+
|
|
+2007-03-08 Dan Winship <danw@novell.com>
|
|
+
|
|
+ * libsoup/soup-gnutls.c (do_handshake): don't return
|
|
+ G_IO_STATUS_AGAIN if we're doing blocking I/O; just keep retrying
|
|
+ until the handshake is complete.
|
|
+ (soup_gnutls_read, soup_gnutls_write): if we get
|
|
+ GNUTLS_E_REHANDSHAKE, call do_handshake() immediately rather than
|
|
+ returning G_IO_STATUS_AGAIN; if the socket is blocking then
|
|
+ G_IO_STATUS_AGAIN is wrong, and if the socket is non-blocking, we
|
|
+ might already need to return SOUP_SSL_ERROR_HANDSHAKE_NEEDS_WRITE
|
|
+ or SOUP_SSL_ERROR_HANDSHAKE_NEEDS_READ.
|
|
+
|
|
+ #415402, based on a patch from Jacob Berkman.
|
|
+
|
|
+ * tests/ssl-test.c: basic ssl test. In particular, tests that
|
|
+ rehandshake requests are handled correctly during both synchronous
|
|
+ and asynchronous I/O. Might eventually test other stuff too...
|
|
+
|
|
+ * configure.in:
|
|
+ * tests/Makefile.am: updates for ssl-test
|
|
+
|
|
+2007-02-19 Dan Winship <danw@novell.com>
|
|
+
|
|
+ * configure.in: Get gcrypt libs/cflags.
|
|
+
|
|
+ * libsoup/Makefile.am (INCLUDES, libsoup_2_2_la_LIBADD): add
|
|
+ gcrypt flags. Patch from "Cygwin Ports Maintainer", #384498
|
|
+
|
|
2007-02-12 Dan Winship <danw@novell.com>
|
|
|
|
* configure.in: 2.2.100
|
|
diff -ruNp libsoup-2.2.100/config.h.in libsoup-2.2.100/config.h.in
|
|
--- libsoup-2.2.100/config.h.in 2007-02-12 10:34:10.000000000 -0500
|
|
+++ libsoup-2.2.100/config.h.in 2007-05-01 15:49:23.000000000 -0400
|
|
@@ -33,6 +33,10 @@
|
|
/* Define to 1 if you have the `gmtime_r' function. */
|
|
#undef HAVE_GMTIME_R
|
|
|
|
+/* Define to 1 if you have the `gnutls_certificate_client_set_sign_function'
|
|
+ function. */
|
|
+#undef HAVE_GNUTLS_CERTIFICATE_CLIENT_SET_SIGN_FUNCTION
|
|
+
|
|
/* Define to 1 if you have the `inet_aton' function. */
|
|
#undef HAVE_INET_ATON
|
|
|
|
@@ -78,6 +82,9 @@
|
|
/* Define to 1 if you have the <sys/types.h> header file. */
|
|
#undef HAVE_SYS_TYPES_H
|
|
|
|
+/* Define to 1 if you have the `timegm' function. */
|
|
+#undef HAVE_TIMEGM
|
|
+
|
|
/* Define to 1 if you have the <unistd.h> header file. */
|
|
#undef HAVE_UNISTD_H
|
|
|
|
diff -ruNp libsoup-2.2.100/configure libsoup-2.2.100/configure
|
|
--- libsoup-2.2.100/configure 2007-02-12 10:34:10.000000000 -0500
|
|
+++ libsoup-2.2.100/configure 2007-05-01 15:49:12.000000000 -0400
|
|
@@ -876,7 +876,12 @@ OS_WIN32_TRUE
|
|
OS_WIN32_FALSE
|
|
LIBGNUTLS_CFLAGS
|
|
LIBGNUTLS_LIBS
|
|
+LIBGCRYPT_CONFIG
|
|
+LIBGCRYPT_CFLAGS
|
|
+LIBGCRYPT_LIBS
|
|
SSL_REQUIREMENT
|
|
+HAVE_SSL_TRUE
|
|
+HAVE_SSL_FALSE
|
|
HTML_DIR
|
|
ENABLE_GTK_DOC_TRUE
|
|
ENABLE_GTK_DOC_FALSE
|
|
@@ -884,6 +889,8 @@ GTK_DOC_USE_LIBTOOL_TRUE
|
|
GTK_DOC_USE_LIBTOOL_FALSE
|
|
APACHE_HTTPD
|
|
APACHE_MODULE_DIR
|
|
+APACHE_SSL_MODULE_DIR
|
|
+APACHE_PHP_MODULE_DIR
|
|
HAVE_APACHE_TRUE
|
|
HAVE_APACHE_FALSE
|
|
IF_HAVE_PHP
|
|
@@ -1512,6 +1519,8 @@ Optional Packages:
|
|
--with-pic try to use only PIC/non-PIC objects [default=use
|
|
both]
|
|
--with-tags[=TAGS] include additional configurations [automatic]
|
|
+ --with-libgcrypt-prefix=PFX
|
|
+ prefix where LIBGCRYPT is installed (optional)
|
|
--with-html-dir=PATH path to installed docs
|
|
--with-apache-httpd Path to apache httpd (for tests)
|
|
--with-apache-module-dir Apache modules dir (for tests)
|
|
@@ -5910,7 +5919,7 @@ ia64-*-hpux*)
|
|
;;
|
|
*-*-irix6*)
|
|
# Find out which ABI we are using.
|
|
- echo '#line 5913 "configure"' > conftest.$ac_ext
|
|
+ echo '#line 5922 "configure"' > conftest.$ac_ext
|
|
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
(eval $ac_compile) 2>&5
|
|
ac_status=$?
|
|
@@ -8709,11 +8718,11 @@ else
|
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
|
-e 's:$: $lt_compiler_flag:'`
|
|
- (eval echo "\"\$as_me:8712: $lt_compile\"" >&5)
|
|
+ (eval echo "\"\$as_me:8721: $lt_compile\"" >&5)
|
|
(eval "$lt_compile" 2>conftest.err)
|
|
ac_status=$?
|
|
cat conftest.err >&5
|
|
- echo "$as_me:8716: \$? = $ac_status" >&5
|
|
+ echo "$as_me:8725: \$? = $ac_status" >&5
|
|
if (exit $ac_status) && test -s "$ac_outfile"; then
|
|
# The compiler can only warn and ignore the option if not recognized
|
|
# So say no if there are warnings other than the usual output.
|
|
@@ -8977,11 +8986,11 @@ else
|
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
|
-e 's:$: $lt_compiler_flag:'`
|
|
- (eval echo "\"\$as_me:8980: $lt_compile\"" >&5)
|
|
+ (eval echo "\"\$as_me:8989: $lt_compile\"" >&5)
|
|
(eval "$lt_compile" 2>conftest.err)
|
|
ac_status=$?
|
|
cat conftest.err >&5
|
|
- echo "$as_me:8984: \$? = $ac_status" >&5
|
|
+ echo "$as_me:8993: \$? = $ac_status" >&5
|
|
if (exit $ac_status) && test -s "$ac_outfile"; then
|
|
# The compiler can only warn and ignore the option if not recognized
|
|
# So say no if there are warnings other than the usual output.
|
|
@@ -9081,11 +9090,11 @@ else
|
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
|
-e 's:$: $lt_compiler_flag:'`
|
|
- (eval echo "\"\$as_me:9084: $lt_compile\"" >&5)
|
|
+ (eval echo "\"\$as_me:9093: $lt_compile\"" >&5)
|
|
(eval "$lt_compile" 2>out/conftest.err)
|
|
ac_status=$?
|
|
cat out/conftest.err >&5
|
|
- echo "$as_me:9088: \$? = $ac_status" >&5
|
|
+ echo "$as_me:9097: \$? = $ac_status" >&5
|
|
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
|
then
|
|
# The compiler can only warn and ignore the option if not recognized
|
|
@@ -11533,7 +11542,7 @@ else
|
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
|
lt_status=$lt_dlunknown
|
|
cat > conftest.$ac_ext <<EOF
|
|
-#line 11536 "configure"
|
|
+#line 11545 "configure"
|
|
#include "confdefs.h"
|
|
|
|
#if HAVE_DLFCN_H
|
|
@@ -11633,7 +11642,7 @@ else
|
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
|
lt_status=$lt_dlunknown
|
|
cat > conftest.$ac_ext <<EOF
|
|
-#line 11636 "configure"
|
|
+#line 11645 "configure"
|
|
#include "confdefs.h"
|
|
|
|
#if HAVE_DLFCN_H
|
|
@@ -14001,11 +14010,11 @@ else
|
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
|
-e 's:$: $lt_compiler_flag:'`
|
|
- (eval echo "\"\$as_me:14004: $lt_compile\"" >&5)
|
|
+ (eval echo "\"\$as_me:14013: $lt_compile\"" >&5)
|
|
(eval "$lt_compile" 2>conftest.err)
|
|
ac_status=$?
|
|
cat conftest.err >&5
|
|
- echo "$as_me:14008: \$? = $ac_status" >&5
|
|
+ echo "$as_me:14017: \$? = $ac_status" >&5
|
|
if (exit $ac_status) && test -s "$ac_outfile"; then
|
|
# The compiler can only warn and ignore the option if not recognized
|
|
# So say no if there are warnings other than the usual output.
|
|
@@ -14105,11 +14114,11 @@ else
|
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
|
-e 's:$: $lt_compiler_flag:'`
|
|
- (eval echo "\"\$as_me:14108: $lt_compile\"" >&5)
|
|
+ (eval echo "\"\$as_me:14117: $lt_compile\"" >&5)
|
|
(eval "$lt_compile" 2>out/conftest.err)
|
|
ac_status=$?
|
|
cat out/conftest.err >&5
|
|
- echo "$as_me:14112: \$? = $ac_status" >&5
|
|
+ echo "$as_me:14121: \$? = $ac_status" >&5
|
|
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
|
then
|
|
# The compiler can only warn and ignore the option if not recognized
|
|
@@ -15675,11 +15684,11 @@ else
|
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
|
-e 's:$: $lt_compiler_flag:'`
|
|
- (eval echo "\"\$as_me:15678: $lt_compile\"" >&5)
|
|
+ (eval echo "\"\$as_me:15687: $lt_compile\"" >&5)
|
|
(eval "$lt_compile" 2>conftest.err)
|
|
ac_status=$?
|
|
cat conftest.err >&5
|
|
- echo "$as_me:15682: \$? = $ac_status" >&5
|
|
+ echo "$as_me:15691: \$? = $ac_status" >&5
|
|
if (exit $ac_status) && test -s "$ac_outfile"; then
|
|
# The compiler can only warn and ignore the option if not recognized
|
|
# So say no if there are warnings other than the usual output.
|
|
@@ -15779,11 +15788,11 @@ else
|
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
|
-e 's:$: $lt_compiler_flag:'`
|
|
- (eval echo "\"\$as_me:15782: $lt_compile\"" >&5)
|
|
+ (eval echo "\"\$as_me:15791: $lt_compile\"" >&5)
|
|
(eval "$lt_compile" 2>out/conftest.err)
|
|
ac_status=$?
|
|
cat out/conftest.err >&5
|
|
- echo "$as_me:15786: \$? = $ac_status" >&5
|
|
+ echo "$as_me:15795: \$? = $ac_status" >&5
|
|
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
|
then
|
|
# The compiler can only warn and ignore the option if not recognized
|
|
@@ -18009,11 +18018,11 @@ else
|
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
|
-e 's:$: $lt_compiler_flag:'`
|
|
- (eval echo "\"\$as_me:18012: $lt_compile\"" >&5)
|
|
+ (eval echo "\"\$as_me:18021: $lt_compile\"" >&5)
|
|
(eval "$lt_compile" 2>conftest.err)
|
|
ac_status=$?
|
|
cat conftest.err >&5
|
|
- echo "$as_me:18016: \$? = $ac_status" >&5
|
|
+ echo "$as_me:18025: \$? = $ac_status" >&5
|
|
if (exit $ac_status) && test -s "$ac_outfile"; then
|
|
# The compiler can only warn and ignore the option if not recognized
|
|
# So say no if there are warnings other than the usual output.
|
|
@@ -18277,11 +18286,11 @@ else
|
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
|
-e 's:$: $lt_compiler_flag:'`
|
|
- (eval echo "\"\$as_me:18280: $lt_compile\"" >&5)
|
|
+ (eval echo "\"\$as_me:18289: $lt_compile\"" >&5)
|
|
(eval "$lt_compile" 2>conftest.err)
|
|
ac_status=$?
|
|
cat conftest.err >&5
|
|
- echo "$as_me:18284: \$? = $ac_status" >&5
|
|
+ echo "$as_me:18293: \$? = $ac_status" >&5
|
|
if (exit $ac_status) && test -s "$ac_outfile"; then
|
|
# The compiler can only warn and ignore the option if not recognized
|
|
# So say no if there are warnings other than the usual output.
|
|
@@ -18381,11 +18390,11 @@ else
|
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
|
-e 's:$: $lt_compiler_flag:'`
|
|
- (eval echo "\"\$as_me:18384: $lt_compile\"" >&5)
|
|
+ (eval echo "\"\$as_me:18393: $lt_compile\"" >&5)
|
|
(eval "$lt_compile" 2>out/conftest.err)
|
|
ac_status=$?
|
|
cat out/conftest.err >&5
|
|
- echo "$as_me:18388: \$? = $ac_status" >&5
|
|
+ echo "$as_me:18397: \$? = $ac_status" >&5
|
|
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
|
then
|
|
# The compiler can only warn and ignore the option if not recognized
|
|
@@ -21569,7 +21578,7 @@ fi
|
|
no_glib=yes
|
|
fi
|
|
|
|
- min_glib_version=2.6.0
|
|
+ min_glib_version=2.12.0
|
|
{ echo "$as_me:$LINENO: checking for GLIB - version >= $min_glib_version" >&5
|
|
echo $ECHO_N "checking for GLIB - version >= $min_glib_version... $ECHO_C" >&6; }
|
|
|
|
@@ -22210,6 +22219,116 @@ fi
|
|
done
|
|
|
|
|
|
+for ac_func in timegm
|
|
+do
|
|
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
|
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
|
|
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
|
|
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
|
|
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
|
|
+#define $ac_func innocuous_$ac_func
|
|
+
|
|
+/* System header to define __stub macros and hopefully few prototypes,
|
|
+ which can conflict with char $ac_func (); below.
|
|
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
|
|
+ <limits.h> exists even on freestanding compilers. */
|
|
+
|
|
+#ifdef __STDC__
|
|
+# include <limits.h>
|
|
+#else
|
|
+# include <assert.h>
|
|
+#endif
|
|
+
|
|
+#undef $ac_func
|
|
+
|
|
+/* Override any GCC internal prototype to avoid an error.
|
|
+ Use char because int might match the return type of a GCC
|
|
+ builtin and then its argument prototype would still apply. */
|
|
+#ifdef __cplusplus
|
|
+extern "C"
|
|
+#endif
|
|
+char $ac_func ();
|
|
+/* The GNU C library defines this for functions which it implements
|
|
+ to always fail with ENOSYS. Some functions are actually named
|
|
+ something starting with __ and the normal name is an alias. */
|
|
+#if defined __stub_$ac_func || defined __stub___$ac_func
|
|
+choke me
|
|
+#endif
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+return $ac_func ();
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext conftest$ac_exeext
|
|
+if { (ac_try="$ac_link"
|
|
+case "(($ac_try" in
|
|
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
|
+ *) ac_try_echo=$ac_try;;
|
|
+esac
|
|
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
|
|
+ (eval "$ac_link") 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
|
+ { (case "(($ac_try" in
|
|
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
|
+ *) ac_try_echo=$ac_try;;
|
|
+esac
|
|
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
|
|
+ (eval "$ac_try") 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest$ac_exeext'
|
|
+ { (case "(($ac_try" in
|
|
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
|
+ *) ac_try_echo=$ac_try;;
|
|
+esac
|
|
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
|
|
+ (eval "$ac_try") 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ eval "$as_ac_var=yes"
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ eval "$as_ac_var=no"
|
|
+fi
|
|
+
|
|
+rm -f core conftest.err conftest.$ac_objext \
|
|
+ conftest$ac_exeext conftest.$ac_ext
|
|
+fi
|
|
+ac_res=`eval echo '${'$as_ac_var'}'`
|
|
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
|
|
+echo "${ECHO_T}$ac_res" >&6; }
|
|
+if test `eval echo '${'$as_ac_var'}'` = yes; then
|
|
+ cat >>confdefs.h <<_ACEOF
|
|
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
|
|
+_ACEOF
|
|
+
|
|
+fi
|
|
+done
|
|
+
|
|
+
|
|
|
|
{ echo "$as_me:$LINENO: checking for socket" >&5
|
|
echo $ECHO_N "checking for socket... $ECHO_C" >&6; }
|
|
@@ -22819,7 +22938,141 @@ else
|
|
LIBGNUTLS_LIBS=$pkg_cv_LIBGNUTLS_LIBS
|
|
{ echo "$as_me:$LINENO: result: yes" >&5
|
|
echo "${ECHO_T}yes" >&6; }
|
|
- have_ssl=yes
|
|
+
|
|
+# Check whether --with-libgcrypt-prefix was given.
|
|
+if test "${with_libgcrypt_prefix+set}" = set; then
|
|
+ withval=$with_libgcrypt_prefix; libgcrypt_config_prefix="$withval"
|
|
+else
|
|
+ libgcrypt_config_prefix=""
|
|
+fi
|
|
+
|
|
+ if test x$libgcrypt_config_prefix != x ; then
|
|
+ if test x${LIBGCRYPT_CONFIG+set} != xset ; then
|
|
+ LIBGCRYPT_CONFIG=$libgcrypt_config_prefix/bin/libgcrypt-config
|
|
+ fi
|
|
+ fi
|
|
+
|
|
+ # Extract the first word of "libgcrypt-config", so it can be a program name with args.
|
|
+set dummy libgcrypt-config; ac_word=$2
|
|
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
|
|
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
|
|
+if test "${ac_cv_path_LIBGCRYPT_CONFIG+set}" = set; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ case $LIBGCRYPT_CONFIG in
|
|
+ [\\/]* | ?:[\\/]*)
|
|
+ ac_cv_path_LIBGCRYPT_CONFIG="$LIBGCRYPT_CONFIG" # Let the user override the test with a path.
|
|
+ ;;
|
|
+ *)
|
|
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
|
+for as_dir in $PATH
|
|
+do
|
|
+ IFS=$as_save_IFS
|
|
+ test -z "$as_dir" && as_dir=.
|
|
+ for ac_exec_ext in '' $ac_executable_extensions; do
|
|
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
|
|
+ ac_cv_path_LIBGCRYPT_CONFIG="$as_dir/$ac_word$ac_exec_ext"
|
|
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
|
+ break 2
|
|
+ fi
|
|
+done
|
|
+done
|
|
+IFS=$as_save_IFS
|
|
+
|
|
+ test -z "$ac_cv_path_LIBGCRYPT_CONFIG" && ac_cv_path_LIBGCRYPT_CONFIG="no"
|
|
+ ;;
|
|
+esac
|
|
+fi
|
|
+LIBGCRYPT_CONFIG=$ac_cv_path_LIBGCRYPT_CONFIG
|
|
+if test -n "$LIBGCRYPT_CONFIG"; then
|
|
+ { echo "$as_me:$LINENO: result: $LIBGCRYPT_CONFIG" >&5
|
|
+echo "${ECHO_T}$LIBGCRYPT_CONFIG" >&6; }
|
|
+else
|
|
+ { echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6; }
|
|
+fi
|
|
+
|
|
+
|
|
+ tmp=1:1.2.0
|
|
+ if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
|
|
+ req_libgcrypt_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'`
|
|
+ min_libgcrypt_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'`
|
|
+ else
|
|
+ req_libgcrypt_api=0
|
|
+ min_libgcrypt_version="$tmp"
|
|
+ fi
|
|
+
|
|
+ { echo "$as_me:$LINENO: checking for LIBGCRYPT - version >= $min_libgcrypt_version" >&5
|
|
+echo $ECHO_N "checking for LIBGCRYPT - version >= $min_libgcrypt_version... $ECHO_C" >&6; }
|
|
+ ok=no
|
|
+ if test "$LIBGCRYPT_CONFIG" != "no" ; then
|
|
+ req_major=`echo $min_libgcrypt_version | \
|
|
+ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\1/'`
|
|
+ req_minor=`echo $min_libgcrypt_version | \
|
|
+ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\2/'`
|
|
+ req_micro=`echo $min_libgcrypt_version | \
|
|
+ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\3/'`
|
|
+ libgcrypt_config_version=`$LIBGCRYPT_CONFIG --version`
|
|
+ major=`echo $libgcrypt_config_version | \
|
|
+ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1/'`
|
|
+ minor=`echo $libgcrypt_config_version | \
|
|
+ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\2/'`
|
|
+ micro=`echo $libgcrypt_config_version | \
|
|
+ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\3/'`
|
|
+ if test "$major" -gt "$req_major"; then
|
|
+ ok=yes
|
|
+ else
|
|
+ if test "$major" -eq "$req_major"; then
|
|
+ if test "$minor" -gt "$req_minor"; then
|
|
+ ok=yes
|
|
+ else
|
|
+ if test "$minor" -eq "$req_minor"; then
|
|
+ if test "$micro" -ge "$req_micro"; then
|
|
+ ok=yes
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ if test $ok = yes; then
|
|
+ { echo "$as_me:$LINENO: result: yes" >&5
|
|
+echo "${ECHO_T}yes" >&6; }
|
|
+ else
|
|
+ { echo "$as_me:$LINENO: result: no" >&5
|
|
+echo "${ECHO_T}no" >&6; }
|
|
+ fi
|
|
+ if test $ok = yes; then
|
|
+ # If we have a recent libgcrypt, we should also check that the
|
|
+ # API is compatible
|
|
+ if test "$req_libgcrypt_api" -gt 0 ; then
|
|
+ tmp=`$LIBGCRYPT_CONFIG --api-version 2>/dev/null || echo 0`
|
|
+ if test "$tmp" -gt 0 ; then
|
|
+ { echo "$as_me:$LINENO: checking LIBGCRYPT API version" >&5
|
|
+echo $ECHO_N "checking LIBGCRYPT API version... $ECHO_C" >&6; }
|
|
+ if test "$req_libgcrypt_api" -eq "$tmp" ; then
|
|
+ { echo "$as_me:$LINENO: result: okay" >&5
|
|
+echo "${ECHO_T}okay" >&6; }
|
|
+ else
|
|
+ ok=no
|
|
+ { echo "$as_me:$LINENO: result: does not match (want=$req_libgcrypt_api got=$tmp)" >&5
|
|
+echo "${ECHO_T}does not match (want=$req_libgcrypt_api got=$tmp)" >&6; }
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ if test $ok = yes; then
|
|
+ LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags`
|
|
+ LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs`
|
|
+ have_ssl=yes
|
|
+ else
|
|
+ LIBGCRYPT_CFLAGS=""
|
|
+ LIBGCRYPT_LIBS=""
|
|
+ have_ssl=no
|
|
+ fi
|
|
+
|
|
+
|
|
+
|
|
fi
|
|
if test "$have_ssl" = "yes"; then
|
|
|
|
@@ -22828,6 +23081,120 @@ cat >>confdefs.h <<\_ACEOF
|
|
_ACEOF
|
|
|
|
SSL_REQUIREMENT="gnutls"
|
|
+
|
|
+ old_LDFLAGS="$LDFLAGS"
|
|
+ LDFLAGS="$LDFLAGS $LIBGNUTLS_LIBS $LIBGCRYPT_LIBS"
|
|
+
|
|
+for ac_func in gnutls_certificate_client_set_sign_function
|
|
+do
|
|
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
|
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
|
|
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
|
|
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
|
|
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
+else
|
|
+ cat >conftest.$ac_ext <<_ACEOF
|
|
+/* confdefs.h. */
|
|
+_ACEOF
|
|
+cat confdefs.h >>conftest.$ac_ext
|
|
+cat >>conftest.$ac_ext <<_ACEOF
|
|
+/* end confdefs.h. */
|
|
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
|
|
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
|
|
+#define $ac_func innocuous_$ac_func
|
|
+
|
|
+/* System header to define __stub macros and hopefully few prototypes,
|
|
+ which can conflict with char $ac_func (); below.
|
|
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
|
|
+ <limits.h> exists even on freestanding compilers. */
|
|
+
|
|
+#ifdef __STDC__
|
|
+# include <limits.h>
|
|
+#else
|
|
+# include <assert.h>
|
|
+#endif
|
|
+
|
|
+#undef $ac_func
|
|
+
|
|
+/* Override any GCC internal prototype to avoid an error.
|
|
+ Use char because int might match the return type of a GCC
|
|
+ builtin and then its argument prototype would still apply. */
|
|
+#ifdef __cplusplus
|
|
+extern "C"
|
|
+#endif
|
|
+char $ac_func ();
|
|
+/* The GNU C library defines this for functions which it implements
|
|
+ to always fail with ENOSYS. Some functions are actually named
|
|
+ something starting with __ and the normal name is an alias. */
|
|
+#if defined __stub_$ac_func || defined __stub___$ac_func
|
|
+choke me
|
|
+#endif
|
|
+
|
|
+int
|
|
+main ()
|
|
+{
|
|
+return $ac_func ();
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+rm -f conftest.$ac_objext conftest$ac_exeext
|
|
+if { (ac_try="$ac_link"
|
|
+case "(($ac_try" in
|
|
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
|
+ *) ac_try_echo=$ac_try;;
|
|
+esac
|
|
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
|
|
+ (eval "$ac_link") 2>conftest.er1
|
|
+ ac_status=$?
|
|
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
+ rm -f conftest.er1
|
|
+ cat conftest.err >&5
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); } &&
|
|
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
|
+ { (case "(($ac_try" in
|
|
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
|
+ *) ac_try_echo=$ac_try;;
|
|
+esac
|
|
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
|
|
+ (eval "$ac_try") 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; } &&
|
|
+ { ac_try='test -s conftest$ac_exeext'
|
|
+ { (case "(($ac_try" in
|
|
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
|
+ *) ac_try_echo=$ac_try;;
|
|
+esac
|
|
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
|
|
+ (eval "$ac_try") 2>&5
|
|
+ ac_status=$?
|
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
+ (exit $ac_status); }; }; then
|
|
+ eval "$as_ac_var=yes"
|
|
+else
|
|
+ echo "$as_me: failed program was:" >&5
|
|
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
+
|
|
+ eval "$as_ac_var=no"
|
|
+fi
|
|
+
|
|
+rm -f core conftest.err conftest.$ac_objext \
|
|
+ conftest$ac_exeext conftest.$ac_ext
|
|
+fi
|
|
+ac_res=`eval echo '${'$as_ac_var'}'`
|
|
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
|
|
+echo "${ECHO_T}$ac_res" >&6; }
|
|
+if test `eval echo '${'$as_ac_var'}'` = yes; then
|
|
+ cat >>confdefs.h <<_ACEOF
|
|
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
|
|
+_ACEOF
|
|
+
|
|
+fi
|
|
+done
|
|
+
|
|
+ LDFLAGS="$old_LDFLAGS"
|
|
else
|
|
if test "$enable_ssl" = "auto"; then
|
|
{ echo "$as_me:$LINENO: WARNING: Disabling SSL support" >&5
|
|
@@ -22847,6 +23214,17 @@ fi
|
|
|
|
|
|
|
|
+if test $enable_ssl != no; then
|
|
+ HAVE_SSL_TRUE=
|
|
+ HAVE_SSL_FALSE='#'
|
|
+else
|
|
+ HAVE_SSL_TRUE='#'
|
|
+ HAVE_SSL_FALSE=
|
|
+fi
|
|
+
|
|
+
|
|
+
|
|
+
|
|
# Check whether --with-html-dir was given.
|
|
if test "${with_html_dir+set}" = set; then
|
|
withval=$with_html_dir;
|
|
@@ -23061,11 +23439,17 @@ if test "${with_apache_module_dir+set}"
|
|
withval=$with_apache_module_dir; APACHE_MODULE_DIR="$withval"
|
|
else
|
|
apache_prefix=`dirname \`dirname $APACHE_HTTPD\``
|
|
+ mpm=`$APACHE_HTTPD -V | sed -ne 's/^Server MPM: */-/p' | tr 'A-Z' 'a-z'`
|
|
# This only works with bash, but should fail harmlessly in sh
|
|
- for dir in $apache_prefix/lib{64,}/{apache,http}{2,}{/modules,}; do
|
|
+ for dir in $apache_prefix/lib{64,}/{apache,http}{2,}{$mpm,}{/modules,}; do
|
|
if test -f $dir/mod_auth_digest.so; then
|
|
APACHE_MODULE_DIR="$dir"
|
|
- break
|
|
+ fi
|
|
+ if test -f $dir/mod_ssl.so; then
|
|
+ APACHE_SSL_MODULE_DIR="$dir"
|
|
+ fi
|
|
+ if test -f $dir/mod_php5.so; then
|
|
+ APACHE_PHP_MODULE_DIR="$dir"
|
|
fi
|
|
done
|
|
fi
|
|
@@ -23073,6 +23457,8 @@ fi
|
|
{ echo "$as_me:$LINENO: result: $APACHE_MODULE_DIR" >&5
|
|
echo "${ECHO_T}$APACHE_MODULE_DIR" >&6; }
|
|
|
|
+
|
|
+
|
|
fi
|
|
|
|
if test "$APACHE_HTTPD" != "no" -a -n "$APACHE_MODULE_DIR"; then
|
|
@@ -23099,7 +23485,7 @@ fi
|
|
if test "$have_apache" = 1; then
|
|
{ echo "$as_me:$LINENO: checking for mod_php5" >&5
|
|
echo $ECHO_N "checking for mod_php5... $ECHO_C" >&6; }
|
|
- if test -f $APACHE_MODULE_DIR/mod_php5.so; then
|
|
+ if test -f $APACHE_PHP_MODULE_DIR/mod_php5.so; then
|
|
have_php=yes
|
|
IF_HAVE_PHP=""
|
|
else
|
|
@@ -23276,6 +23662,13 @@ echo "$as_me: error: conditional \"OS_WI
|
|
Usually this means the macro was only invoked conditionally." >&2;}
|
|
{ (exit 1); exit 1; }; }
|
|
fi
|
|
+if test -z "${HAVE_SSL_TRUE}" && test -z "${HAVE_SSL_FALSE}"; then
|
|
+ { { echo "$as_me:$LINENO: error: conditional \"HAVE_SSL\" was never defined.
|
|
+Usually this means the macro was only invoked conditionally." >&5
|
|
+echo "$as_me: error: conditional \"HAVE_SSL\" was never defined.
|
|
+Usually this means the macro was only invoked conditionally." >&2;}
|
|
+ { (exit 1); exit 1; }; }
|
|
+fi
|
|
if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then
|
|
{ { echo "$as_me:$LINENO: error: conditional \"ENABLE_GTK_DOC\" was never defined.
|
|
Usually this means the macro was only invoked conditionally." >&5
|
|
@@ -23994,7 +24387,12 @@ OS_WIN32_TRUE!$OS_WIN32_TRUE$ac_delim
|
|
OS_WIN32_FALSE!$OS_WIN32_FALSE$ac_delim
|
|
LIBGNUTLS_CFLAGS!$LIBGNUTLS_CFLAGS$ac_delim
|
|
LIBGNUTLS_LIBS!$LIBGNUTLS_LIBS$ac_delim
|
|
+LIBGCRYPT_CONFIG!$LIBGCRYPT_CONFIG$ac_delim
|
|
+LIBGCRYPT_CFLAGS!$LIBGCRYPT_CFLAGS$ac_delim
|
|
+LIBGCRYPT_LIBS!$LIBGCRYPT_LIBS$ac_delim
|
|
SSL_REQUIREMENT!$SSL_REQUIREMENT$ac_delim
|
|
+HAVE_SSL_TRUE!$HAVE_SSL_TRUE$ac_delim
|
|
+HAVE_SSL_FALSE!$HAVE_SSL_FALSE$ac_delim
|
|
HTML_DIR!$HTML_DIR$ac_delim
|
|
ENABLE_GTK_DOC_TRUE!$ENABLE_GTK_DOC_TRUE$ac_delim
|
|
ENABLE_GTK_DOC_FALSE!$ENABLE_GTK_DOC_FALSE$ac_delim
|
|
@@ -24002,6 +24400,8 @@ GTK_DOC_USE_LIBTOOL_TRUE!$GTK_DOC_USE_LI
|
|
GTK_DOC_USE_LIBTOOL_FALSE!$GTK_DOC_USE_LIBTOOL_FALSE$ac_delim
|
|
APACHE_HTTPD!$APACHE_HTTPD$ac_delim
|
|
APACHE_MODULE_DIR!$APACHE_MODULE_DIR$ac_delim
|
|
+APACHE_SSL_MODULE_DIR!$APACHE_SSL_MODULE_DIR$ac_delim
|
|
+APACHE_PHP_MODULE_DIR!$APACHE_PHP_MODULE_DIR$ac_delim
|
|
HAVE_APACHE_TRUE!$HAVE_APACHE_TRUE$ac_delim
|
|
HAVE_APACHE_FALSE!$HAVE_APACHE_FALSE$ac_delim
|
|
IF_HAVE_PHP!$IF_HAVE_PHP$ac_delim
|
|
@@ -24011,7 +24411,7 @@ LIBOBJS!$LIBOBJS$ac_delim
|
|
LTLIBOBJS!$LTLIBOBJS$ac_delim
|
|
_ACEOF
|
|
|
|
- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 42; then
|
|
+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 49; then
|
|
break
|
|
elif $ac_last_try; then
|
|
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
|
|
diff -ruNp libsoup-2.2.100/configure.in libsoup-2.2.100/configure.in
|
|
--- libsoup-2.2.100/configure.in 2007-02-12 10:18:49.000000000 -0500
|
|
+++ libsoup-2.2.100/configure.in 2007-05-01 16:00:48.000000000 -0400
|
|
@@ -73,7 +73,7 @@ dnl ***********************
|
|
dnl *** Checks for glib ***
|
|
dnl ***********************
|
|
|
|
-AM_PATH_GLIB_2_0(2.6.0,,,gobject gthread)
|
|
+AM_PATH_GLIB_2_0(2.12.0,,,gobject gthread)
|
|
|
|
PKG_CHECK_MODULES(XML, libxml-2.0)
|
|
AC_SUBST(XML_CFLAGS)
|
|
@@ -106,6 +106,7 @@ dnl *******************
|
|
dnl *** Misc checks ***
|
|
dnl *******************
|
|
AC_CHECK_FUNCS(gmtime_r)
|
|
+AC_CHECK_FUNCS(timegm)
|
|
|
|
dnl *********************************
|
|
dnl *** Networking library checks ***
|
|
@@ -134,7 +135,8 @@ AC_ARG_ENABLE(ssl,
|
|
enable_ssl=auto)
|
|
|
|
if test "$enable_ssl" != "no"; then
|
|
- PKG_CHECK_MODULES(LIBGNUTLS, gnutls, have_ssl=yes, have_ssl=no)
|
|
+ PKG_CHECK_MODULES(LIBGNUTLS, gnutls,
|
|
+ [AM_PATH_LIBGCRYPT([], have_ssl=yes, have_ssl=no)], have_ssl=no)
|
|
if test "$have_ssl" = "yes"; then
|
|
AC_DEFINE(HAVE_SSL, 1, [Defined if you have SSL support])
|
|
SSL_REQUIREMENT="gnutls"
|
|
@@ -152,6 +154,9 @@ AC_SUBST(LIBGNUTLS_CFLAGS)
|
|
AC_SUBST(LIBGNUTLS_LIBS)
|
|
AC_SUBST(SSL_REQUIREMENT)
|
|
|
|
+dnl This is not supposed to be conditional, but...
|
|
+AM_CONDITIONAL(HAVE_SSL, test $enable_ssl != no)
|
|
+
|
|
dnl ***************
|
|
dnl *** gtk-doc ***
|
|
dnl ***************
|
|
@@ -207,15 +212,23 @@ if test "$APACHE_HTTPD" != "no"; then
|
|
[ --with-apache-module-dir Apache modules dir (for tests)],
|
|
APACHE_MODULE_DIR="$withval",
|
|
[apache_prefix=`dirname \`dirname $APACHE_HTTPD\``
|
|
+ mpm=`$APACHE_HTTPD -V | sed -ne 's/^Server MPM: */-/p' | tr 'A-Z' 'a-z'`
|
|
# This only works with bash, but should fail harmlessly in sh
|
|
- for dir in $apache_prefix/lib{64,}/{apache,http}{2,}{/modules,}; do
|
|
+ for dir in $apache_prefix/lib{64,}/{apache,http}{2,}{$mpm,}{/modules,}; do
|
|
if test -f $dir/mod_auth_digest.so; then
|
|
APACHE_MODULE_DIR="$dir"
|
|
- break
|
|
+ fi
|
|
+ if test -f $dir/mod_ssl.so; then
|
|
+ APACHE_SSL_MODULE_DIR="$dir"
|
|
+ fi
|
|
+ if test -f $dir/mod_php5.so; then
|
|
+ APACHE_PHP_MODULE_DIR="$dir"
|
|
fi
|
|
done])
|
|
AC_MSG_RESULT($APACHE_MODULE_DIR)
|
|
AC_SUBST(APACHE_MODULE_DIR)
|
|
+ AC_SUBST(APACHE_SSL_MODULE_DIR)
|
|
+ AC_SUBST(APACHE_PHP_MODULE_DIR)
|
|
fi
|
|
|
|
if test "$APACHE_HTTPD" != "no" -a -n "$APACHE_MODULE_DIR"; then
|
|
@@ -228,7 +241,7 @@ AM_CONDITIONAL(HAVE_APACHE, test $have_a
|
|
|
|
if test "$have_apache" = 1; then
|
|
AC_MSG_CHECKING([for mod_php5])
|
|
- if test -f $APACHE_MODULE_DIR/mod_php5.so; then
|
|
+ if test -f $APACHE_PHP_MODULE_DIR/mod_php5.so; then
|
|
have_php=yes
|
|
IF_HAVE_PHP=""
|
|
else
|
|
diff -ruNp libsoup-2.2.100/libsoup/Makefile.am libsoup-2.2.100/libsoup/Makefile.am
|
|
--- libsoup-2.2.100/libsoup/Makefile.am 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/libsoup/Makefile.am 2007-04-09 17:03:24.000000000 -0400
|
|
@@ -10,6 +10,7 @@ INCLUDES = \
|
|
$(SOUP_DEBUG_FLAGS) \
|
|
$(GLIB_CFLAGS) \
|
|
$(XML_CFLAGS) \
|
|
+ $(LIBGCRYPT_CFLAGS) \
|
|
$(LIBGNUTLS_CFLAGS)
|
|
|
|
MARSHAL_GENERATED = soup-marshal.c soup-marshal.h
|
|
@@ -67,6 +68,7 @@ libsoup_2_2_la_LIBADD = \
|
|
$(XML_LIBS) \
|
|
$(LIBGNUTLS_LIBS_STATIC) \
|
|
$(LIBGNUTLS_LIBS) \
|
|
+ $(LIBGCRYPT_LIBS) \
|
|
$(LIBWS2_32)
|
|
|
|
libsoup_2_2_la_SOURCES = \
|
|
diff -ruNp libsoup-2.2.100/libsoup/Makefile.in libsoup-2.2.100/libsoup/Makefile.in
|
|
--- libsoup-2.2.100/libsoup/Makefile.in 2007-02-12 10:34:11.000000000 -0500
|
|
+++ libsoup-2.2.100/libsoup/Makefile.in 2007-05-01 15:49:10.000000000 -0400
|
|
@@ -61,7 +61,7 @@ LTLIBRARIES = $(lib_LTLIBRARIES)
|
|
am__DEPENDENCIES_1 =
|
|
libsoup_2_2_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
|
|
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
|
|
- $(am__DEPENDENCIES_1)
|
|
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
|
|
am__objects_1 = soup-marshal.lo
|
|
am_libsoup_2_2_la_OBJECTS = $(am__objects_1) soup-address.lo \
|
|
soup-auth.lo soup-auth-basic.lo soup-auth-digest.lo \
|
|
@@ -102,6 +102,8 @@ AMDEP_TRUE = @AMDEP_TRUE@
|
|
AMTAR = @AMTAR@
|
|
APACHE_HTTPD = @APACHE_HTTPD@
|
|
APACHE_MODULE_DIR = @APACHE_MODULE_DIR@
|
|
+APACHE_PHP_MODULE_DIR = @APACHE_PHP_MODULE_DIR@
|
|
+APACHE_SSL_MODULE_DIR = @APACHE_SSL_MODULE_DIR@
|
|
AR = @AR@
|
|
AS = @AS@
|
|
AUTOCONF = @AUTOCONF@
|
|
@@ -141,6 +143,8 @@ GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE
|
|
GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
|
|
HAVE_APACHE_FALSE = @HAVE_APACHE_FALSE@
|
|
HAVE_APACHE_TRUE = @HAVE_APACHE_TRUE@
|
|
+HAVE_SSL_FALSE = @HAVE_SSL_FALSE@
|
|
+HAVE_SSL_TRUE = @HAVE_SSL_TRUE@
|
|
HAVE_XMLRPC_EPI_PHP_FALSE = @HAVE_XMLRPC_EPI_PHP_FALSE@
|
|
HAVE_XMLRPC_EPI_PHP_TRUE = @HAVE_XMLRPC_EPI_PHP_TRUE@
|
|
HTML_DIR = @HTML_DIR@
|
|
@@ -150,6 +154,9 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
|
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
|
LDFLAGS = @LDFLAGS@
|
|
+LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
|
|
+LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
|
|
+LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
|
|
LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@
|
|
LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@
|
|
LIBOBJS = @LIBOBJS@
|
|
@@ -240,6 +247,7 @@ INCLUDES = \
|
|
$(SOUP_DEBUG_FLAGS) \
|
|
$(GLIB_CFLAGS) \
|
|
$(XML_CFLAGS) \
|
|
+ $(LIBGCRYPT_CFLAGS) \
|
|
$(LIBGNUTLS_CFLAGS)
|
|
|
|
MARSHAL_GENERATED = soup-marshal.c soup-marshal.h
|
|
@@ -282,6 +290,7 @@ libsoup_2_2_la_LIBADD = \
|
|
$(XML_LIBS) \
|
|
$(LIBGNUTLS_LIBS_STATIC) \
|
|
$(LIBGNUTLS_LIBS) \
|
|
+ $(LIBGCRYPT_LIBS) \
|
|
$(LIBWS2_32)
|
|
|
|
libsoup_2_2_la_SOURCES = \
|
|
diff -ruNp libsoup-2.2.100/libsoup/soup-auth-basic.c libsoup-2.2.100/libsoup/soup-auth-basic.c
|
|
--- libsoup-2.2.100/libsoup/soup-auth-basic.c 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/libsoup/soup-auth-basic.c 2007-04-09 17:03:24.000000000 -0400
|
|
@@ -118,7 +118,7 @@ authenticate (SoupAuth *auth, const char
|
|
user_pass = g_strdup_printf ("%s:%s", username, password);
|
|
len = strlen (user_pass);
|
|
|
|
- priv->token = soup_base64_encode (user_pass, len);
|
|
+ priv->token = g_base64_encode ((guchar *)user_pass, len);
|
|
|
|
memset (user_pass, 0, len);
|
|
g_free (user_pass);
|
|
diff -ruNp libsoup-2.2.100/libsoup/soup-auth-digest.c libsoup-2.2.100/libsoup/soup-auth-digest.c
|
|
--- libsoup-2.2.100/libsoup/soup-auth-digest.c 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/libsoup/soup-auth-digest.c 2007-04-09 17:03:24.000000000 -0400
|
|
@@ -1,4 +1,4 @@
|
|
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-digest-offset: 8 -*- */
|
|
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
|
/*
|
|
* soup-auth-digest.c: HTTP Digest Authentication
|
|
*
|
|
@@ -258,7 +258,7 @@ authenticate (SoupAuth *auth, const char
|
|
auth,
|
|
(unsigned long) getpid (),
|
|
(unsigned long) time (0));
|
|
- priv->cnonce = soup_base64_encode (bgen, strlen (bgen));
|
|
+ priv->cnonce = g_base64_encode ((guchar *)bgen, strlen (bgen));
|
|
g_free (bgen);
|
|
|
|
priv->user = g_strdup (username);
|
|
diff -ruNp libsoup-2.2.100/libsoup/soup-connection-ntlm.c libsoup-2.2.100/libsoup/soup-connection-ntlm.c
|
|
--- libsoup-2.2.100/libsoup/soup-connection-ntlm.c 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/libsoup/soup-connection-ntlm.c 2007-04-09 17:03:24.000000000 -0400
|
|
@@ -328,25 +328,14 @@ soup_ntlm_parse_challenge (const char *c
|
|
char **nonce,
|
|
char **default_domain)
|
|
{
|
|
- int clen, decodelen;
|
|
+ gsize clen;
|
|
NTLMString domain;
|
|
guchar *chall;
|
|
- int state;
|
|
- unsigned int save;
|
|
|
|
if (strncmp (challenge, "NTLM ", 5) != 0)
|
|
return FALSE;
|
|
|
|
- decodelen = strlen (challenge) - 5;
|
|
- chall = g_malloc (decodelen);
|
|
-
|
|
- state = save = 0;
|
|
- clen = soup_base64_decode_step ((const guchar *) challenge + 5,
|
|
- decodelen,
|
|
- chall,
|
|
- &state,
|
|
- &save);
|
|
-
|
|
+ chall = g_base64_decode (challenge + 5, &clen);
|
|
if (clen < NTLM_CHALLENGE_DOMAIN_STRING_OFFSET ||
|
|
clen < NTLM_CHALLENGE_NONCE_OFFSET + NTLM_CHALLENGE_NONCE_LENGTH) {
|
|
g_free (chall);
|
|
@@ -385,7 +374,7 @@ soup_ntlm_response (const char *nonce,
|
|
int hlen, dlen, ulen, offset;
|
|
guchar hash[21], lm_resp[24], nt_resp[24];
|
|
NTLMResponse resp;
|
|
- guchar *out, *p;
|
|
+ char *out, *p;
|
|
int state, save;
|
|
|
|
nt_hash (password, hash);
|
|
@@ -411,51 +400,27 @@ soup_ntlm_response (const char *nonce,
|
|
ntlm_set_string (&resp.nt_resp, &offset, sizeof (nt_resp));
|
|
|
|
out = g_malloc (((offset + 3) * 4) / 3 + 6);
|
|
- strncpy ((char *)out, "NTLM ", 5);
|
|
+ strncpy (out, "NTLM ", 5);
|
|
p = out + 5;
|
|
|
|
state = save = 0;
|
|
|
|
- p += soup_base64_encode_step ((guchar *) &resp,
|
|
- sizeof (resp),
|
|
- FALSE,
|
|
- p,
|
|
- &state,
|
|
- &save);
|
|
- p += soup_base64_encode_step ((const guchar *) domain,
|
|
- dlen,
|
|
- FALSE,
|
|
- p,
|
|
- &state,
|
|
- &save);
|
|
- p += soup_base64_encode_step ((const guchar *) user,
|
|
- ulen,
|
|
- FALSE,
|
|
- p,
|
|
- &state,
|
|
- &save);
|
|
- p += soup_base64_encode_step ((const guchar *) host,
|
|
- hlen,
|
|
- FALSE,
|
|
- p,
|
|
- &state,
|
|
- &save);
|
|
- p += soup_base64_encode_step (lm_resp,
|
|
- sizeof (lm_resp),
|
|
- FALSE,
|
|
- p,
|
|
- &state,
|
|
- &save);
|
|
-
|
|
- p += soup_base64_encode_close (nt_resp,
|
|
- sizeof (nt_resp),
|
|
- FALSE,
|
|
- p,
|
|
- &state,
|
|
- &save);
|
|
+ p += g_base64_encode_step ((const guchar *) &resp, sizeof (resp),
|
|
+ FALSE, p, &state, &save);
|
|
+ p += g_base64_encode_step ((const guchar *) domain, dlen,
|
|
+ FALSE, p, &state, &save);
|
|
+ p += g_base64_encode_step ((const guchar *) user, ulen,
|
|
+ FALSE, p, &state, &save);
|
|
+ p += g_base64_encode_step ((const guchar *) host, hlen,
|
|
+ FALSE, p, &state, &save);
|
|
+ p += g_base64_encode_step (lm_resp, sizeof (lm_resp),
|
|
+ FALSE, p, &state, &save);
|
|
+ p += g_base64_encode_step (nt_resp, sizeof (nt_resp),
|
|
+ FALSE, p, &state, &save);
|
|
+ p += g_base64_encode_close (FALSE, p, &state, &save);
|
|
*p = '\0';
|
|
|
|
- return (char *)out;
|
|
+ return out;
|
|
}
|
|
|
|
/* DES utils */
|
|
diff -ruNp libsoup-2.2.100/libsoup/soup-date.c libsoup-2.2.100/libsoup/soup-date.c
|
|
--- libsoup-2.2.100/libsoup/soup-date.c 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/libsoup/soup-date.c 2007-04-09 17:03:24.000000000 -0400
|
|
@@ -26,10 +26,6 @@ static const char *days[] = {
|
|
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
|
|
};
|
|
|
|
-static const int days_before[] = {
|
|
- 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334
|
|
-};
|
|
-
|
|
static int
|
|
parse_month (const char *month)
|
|
{
|
|
@@ -54,12 +50,18 @@ parse_month (const char *month)
|
|
time_t
|
|
soup_mktime_utc (struct tm *tm)
|
|
{
|
|
+#if HAVE_TIMEGM
|
|
+ return timegm (tm);
|
|
+#else
|
|
time_t tt;
|
|
+ static const int days_before[] = {
|
|
+ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334
|
|
+ };
|
|
|
|
/* We check the month because (a) if we don't, the
|
|
* days_before[] part below may access random memory, and (b)
|
|
* soup_date_parse() doesn't check the return value of
|
|
- * parse_month(). The caller is responsible for ensure the
|
|
+ * parse_month(). The caller is responsible for ensuring the
|
|
* sanity of everything else.
|
|
*/
|
|
if (tm->tm_mon < 0 || tm->tm_mon > 11)
|
|
@@ -71,7 +73,9 @@ soup_mktime_utc (struct tm *tm)
|
|
if (tm->tm_year % 4 == 0 && tm->tm_mon < 2)
|
|
tt--;
|
|
tt = ((((tt * 24) + tm->tm_hour) * 60) + tm->tm_min) * 60 + tm->tm_sec;
|
|
+
|
|
return tt;
|
|
+#endif
|
|
}
|
|
|
|
/**
|
|
@@ -185,6 +189,7 @@ char *
|
|
soup_date_generate (time_t when)
|
|
{
|
|
struct tm tm;
|
|
+
|
|
soup_gmtime (&when, &tm);
|
|
|
|
/* RFC1123 format, eg, "Sun, 06 Nov 1994 08:49:37 GMT" */
|
|
@@ -206,59 +211,10 @@ soup_date_generate (time_t when)
|
|
time_t
|
|
soup_date_iso8601_parse (const char *timestamp)
|
|
{
|
|
- struct tm tm;
|
|
- long val;
|
|
- time_t tt;
|
|
-
|
|
- val = strtoul (timestamp, (char **)×tamp, 10);
|
|
- if (*timestamp == '-') {
|
|
- // YYYY-MM-DD
|
|
- tm.tm_year = val - 1900;
|
|
- timestamp++;
|
|
- tm.tm_mon = strtoul (timestamp, (char **)×tamp, 10) - 1;
|
|
- if (*timestamp++ != '-')
|
|
- return -1;
|
|
- tm.tm_mday = strtoul (timestamp, (char **)×tamp, 10);
|
|
- } else {
|
|
- // YYYYMMDD
|
|
- tm.tm_mday = val % 100;
|
|
- tm.tm_mon = (val % 10000) / 100 - 1;
|
|
- tm.tm_year = val / 10000 - 1900;
|
|
- }
|
|
-
|
|
- if (*timestamp++ != 'T')
|
|
- return -1;
|
|
-
|
|
- val = strtoul (timestamp, (char **)×tamp, 10);
|
|
- if (*timestamp == ':') {
|
|
- // hh:mm:ss
|
|
- tm.tm_hour = val;
|
|
- timestamp++;
|
|
- tm.tm_min = strtoul (timestamp, (char **)×tamp, 10);
|
|
- if (*timestamp++ != ':')
|
|
- return -1;
|
|
- tm.tm_sec = strtoul (timestamp, (char **)×tamp, 10);
|
|
- } else {
|
|
- // hhmmss
|
|
- tm.tm_sec = val % 100;
|
|
- tm.tm_min = (val % 10000) / 100;
|
|
- tm.tm_hour = val / 10000;
|
|
- }
|
|
+ GTimeVal timeval;
|
|
|
|
- tt = soup_mktime_utc (&tm);
|
|
+ if (!g_time_val_from_iso8601 (timestamp, &timeval))
|
|
+ return (time_t) -1;
|
|
|
|
- if (*timestamp == '.')
|
|
- strtoul (timestamp + 1, (char **)×tamp, 10);
|
|
-
|
|
- if (*timestamp == '+' || *timestamp == '-') {
|
|
- int sign = (*timestamp == '+') ? -1 : 1;
|
|
- val = strtoul (timestamp + 1, (char **)×tamp, 10);
|
|
- if (*timestamp == ':')
|
|
- val = 60 * val + strtoul (timestamp + 1, NULL, 10);
|
|
- else
|
|
- val = 60 * (val / 100) + (val % 100);
|
|
- tt += sign * val;
|
|
- }
|
|
-
|
|
- return tt;
|
|
+ return (time_t) timeval.tv_sec;
|
|
}
|
|
diff -ruNp libsoup-2.2.100/libsoup/soup-gnutls.c libsoup-2.2.100/libsoup/soup-gnutls.c
|
|
--- libsoup-2.2.100/libsoup/soup-gnutls.c 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/libsoup/soup-gnutls.c 2007-05-01 16:00:48.000000000 -0400
|
|
@@ -2,10 +2,7 @@
|
|
/*
|
|
* soup-gnutls.c
|
|
*
|
|
- * Authors:
|
|
- * Ian Peters <itp@ximian.com>
|
|
- *
|
|
- * Copyright (C) 2003, Ximian, Inc.
|
|
+ * Copyright (C) 2003-2006, Novell, Inc.
|
|
*/
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
@@ -15,6 +12,7 @@
|
|
#ifdef HAVE_SSL
|
|
|
|
#include <errno.h>
|
|
+#include <fcntl.h>
|
|
#include <pthread.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
@@ -32,17 +30,17 @@ gboolean soup_ssl_supported = TRUE;
|
|
|
|
#define DH_BITS 1024
|
|
|
|
-typedef struct {
|
|
- gnutls_certificate_credentials cred;
|
|
+struct SoupSSLCredentials {
|
|
+ gnutls_certificate_credentials creds;
|
|
gboolean have_ca_file;
|
|
-} SoupGNUTLSCred;
|
|
+};
|
|
|
|
typedef struct {
|
|
GIOChannel channel;
|
|
int fd;
|
|
GIOChannel *real_sock;
|
|
gnutls_session session;
|
|
- SoupGNUTLSCred *cred;
|
|
+ SoupSSLCredentials *creds;
|
|
char *hostname;
|
|
gboolean established;
|
|
SoupSSLType type;
|
|
@@ -129,21 +127,26 @@ verify_certificate (gnutls_session sessi
|
|
return TRUE;
|
|
}
|
|
|
|
+#define SOUP_GNUTLS_CHANNEL_NONBLOCKING(chan) (fcntl ((chan)->fd, F_GETFL, 0) & O_NONBLOCK)
|
|
+
|
|
static GIOStatus
|
|
do_handshake (SoupGNUTLSChannel *chan, GError **err)
|
|
{
|
|
int result;
|
|
|
|
+again:
|
|
result = gnutls_handshake (chan->session);
|
|
|
|
- if (result == GNUTLS_E_AGAIN ||
|
|
- result == GNUTLS_E_INTERRUPTED) {
|
|
- g_set_error (err, SOUP_SSL_ERROR,
|
|
- (gnutls_record_get_direction (chan->session) ?
|
|
- SOUP_SSL_ERROR_HANDSHAKE_NEEDS_WRITE :
|
|
- SOUP_SSL_ERROR_HANDSHAKE_NEEDS_READ),
|
|
- "Handshaking...");
|
|
- return G_IO_STATUS_AGAIN;
|
|
+ if (result == GNUTLS_E_AGAIN || result == GNUTLS_E_INTERRUPTED) {
|
|
+ if (SOUP_GNUTLS_CHANNEL_NONBLOCKING (chan)) {
|
|
+ g_set_error (err, SOUP_SSL_ERROR,
|
|
+ (gnutls_record_get_direction (chan->session) ?
|
|
+ SOUP_SSL_ERROR_HANDSHAKE_NEEDS_WRITE :
|
|
+ SOUP_SSL_ERROR_HANDSHAKE_NEEDS_READ),
|
|
+ "Handshaking...");
|
|
+ return G_IO_STATUS_AGAIN;
|
|
+ } else
|
|
+ goto again;
|
|
}
|
|
|
|
if (result < 0) {
|
|
@@ -153,7 +156,7 @@ do_handshake (SoupGNUTLSChannel *chan, G
|
|
return G_IO_STATUS_ERROR;
|
|
}
|
|
|
|
- if (chan->type == SOUP_SSL_TYPE_CLIENT && chan->cred->have_ca_file &&
|
|
+ if (chan->type == SOUP_SSL_TYPE_CLIENT && chan->creds->have_ca_file &&
|
|
!verify_certificate (chan->session, chan->hostname, err))
|
|
return G_IO_STATUS_ERROR;
|
|
|
|
@@ -172,6 +175,7 @@ soup_gnutls_read (GIOChannel *channel,
|
|
|
|
*bytes_read = 0;
|
|
|
|
+again:
|
|
if (!chan->established) {
|
|
result = do_handshake (chan, err);
|
|
|
|
@@ -186,13 +190,17 @@ soup_gnutls_read (GIOChannel *channel,
|
|
|
|
if (result == GNUTLS_E_REHANDSHAKE) {
|
|
chan->established = FALSE;
|
|
- return G_IO_STATUS_AGAIN;
|
|
+ goto again;
|
|
}
|
|
|
|
- if (result < 0) {
|
|
- if ((result == GNUTLS_E_INTERRUPTED) ||
|
|
- (result == GNUTLS_E_AGAIN))
|
|
+ if (result == GNUTLS_E_INTERRUPTED || result == GNUTLS_E_AGAIN) {
|
|
+ if (SOUP_GNUTLS_CHANNEL_NONBLOCKING (chan))
|
|
return G_IO_STATUS_AGAIN;
|
|
+ else
|
|
+ goto again;
|
|
+ }
|
|
+
|
|
+ if (result < 0) {
|
|
g_set_error (err, G_IO_CHANNEL_ERROR,
|
|
G_IO_CHANNEL_ERROR_FAILED,
|
|
"Received corrupted data");
|
|
@@ -216,6 +224,7 @@ soup_gnutls_write (GIOChannel *channel
|
|
|
|
*bytes_written = 0;
|
|
|
|
+again:
|
|
if (!chan->established) {
|
|
result = do_handshake (chan, err);
|
|
|
|
@@ -228,15 +237,22 @@ soup_gnutls_write (GIOChannel *channel
|
|
|
|
result = gnutls_record_send (chan->session, buf, count);
|
|
|
|
+ /* I'm pretty sure this can't actually happen in response to a
|
|
+ * write, but...
|
|
+ */
|
|
if (result == GNUTLS_E_REHANDSHAKE) {
|
|
chan->established = FALSE;
|
|
- return G_IO_STATUS_AGAIN;
|
|
+ goto again;
|
|
}
|
|
|
|
- if (result < 0) {
|
|
- if ((result == GNUTLS_E_INTERRUPTED) ||
|
|
- (result == GNUTLS_E_AGAIN))
|
|
+ if (result == GNUTLS_E_INTERRUPTED || result == GNUTLS_E_AGAIN) {
|
|
+ if (SOUP_GNUTLS_CHANNEL_NONBLOCKING (chan))
|
|
return G_IO_STATUS_AGAIN;
|
|
+ else
|
|
+ goto again;
|
|
+ }
|
|
+
|
|
+ if (result < 0) {
|
|
g_set_error (err, G_IO_CHANNEL_ERROR,
|
|
G_IO_CHANNEL_ERROR_FAILED,
|
|
"Received corrupted data");
|
|
@@ -352,7 +368,7 @@ THROW_CREATE_ERROR:
|
|
* @sock: a #GIOChannel wrapping a TCP socket.
|
|
* @type: whether this is a client or server socket
|
|
* @remote_host: the hostname of the remote machine
|
|
- * @credentials: a client or server credentials structure
|
|
+ * @creds: a client or server credentials structure
|
|
*
|
|
* This attempts to wrap a new #GIOChannel around @sock that
|
|
* will SSL-encrypt/decrypt all traffic through it.
|
|
@@ -362,17 +378,16 @@ THROW_CREATE_ERROR:
|
|
**/
|
|
GIOChannel *
|
|
soup_ssl_wrap_iochannel (GIOChannel *sock, SoupSSLType type,
|
|
- const char *remote_host, gpointer credentials)
|
|
+ const char *remote_host, SoupSSLCredentials *creds)
|
|
{
|
|
SoupGNUTLSChannel *chan = NULL;
|
|
GIOChannel *gchan = NULL;
|
|
gnutls_session session = NULL;
|
|
- SoupGNUTLSCred *cred = credentials;
|
|
int sockfd;
|
|
int ret;
|
|
|
|
g_return_val_if_fail (sock != NULL, NULL);
|
|
- g_return_val_if_fail (credentials != NULL, NULL);
|
|
+ g_return_val_if_fail (creds != NULL, NULL);
|
|
|
|
sockfd = g_io_channel_unix_get_fd (sock);
|
|
if (!sockfd) {
|
|
@@ -389,7 +404,7 @@ soup_ssl_wrap_iochannel (GIOChannel *soc
|
|
goto THROW_CREATE_ERROR;
|
|
|
|
if (gnutls_credentials_set (session, GNUTLS_CRD_CERTIFICATE,
|
|
- cred->cred) != 0)
|
|
+ creds->creds) != 0)
|
|
goto THROW_CREATE_ERROR;
|
|
|
|
if (type == SOUP_SSL_TYPE_SERVER)
|
|
@@ -401,7 +416,7 @@ soup_ssl_wrap_iochannel (GIOChannel *soc
|
|
chan->fd = sockfd;
|
|
chan->real_sock = sock;
|
|
chan->session = session;
|
|
- chan->cred = cred;
|
|
+ chan->creds = creds;
|
|
chan->hostname = g_strdup (remote_host);
|
|
chan->type = type;
|
|
g_io_channel_ref (sock);
|
|
@@ -451,22 +466,22 @@ soup_gnutls_init (void)
|
|
* Return value: the client credentials, which must be freed with
|
|
* soup_ssl_free_client_credentials().
|
|
**/
|
|
-gpointer
|
|
+SoupSSLCredentials *
|
|
soup_ssl_get_client_credentials (const char *ca_file)
|
|
{
|
|
- SoupGNUTLSCred *cred;
|
|
+ SoupSSLCredentials *creds;
|
|
int status;
|
|
|
|
if (!soup_gnutls_inited)
|
|
soup_gnutls_init ();
|
|
|
|
- cred = g_new0 (SoupGNUTLSCred, 1);
|
|
- gnutls_certificate_allocate_credentials (&cred->cred);
|
|
+ creds = g_new0 (SoupSSLCredentials, 1);
|
|
+ gnutls_certificate_allocate_credentials (&creds->creds);
|
|
|
|
if (ca_file) {
|
|
- cred->have_ca_file = TRUE;
|
|
+ creds->have_ca_file = TRUE;
|
|
status = gnutls_certificate_set_x509_trust_file (
|
|
- cred->cred, ca_file, GNUTLS_X509_FMT_PEM);
|
|
+ creds->creds, ca_file, GNUTLS_X509_FMT_PEM);
|
|
if (status < 0) {
|
|
g_warning ("Failed to set SSL trust file (%s).",
|
|
ca_file);
|
|
@@ -478,7 +493,7 @@ soup_ssl_get_client_credentials (const c
|
|
}
|
|
}
|
|
|
|
- return cred;
|
|
+ return creds;
|
|
}
|
|
|
|
/**
|
|
@@ -486,15 +501,13 @@ soup_ssl_get_client_credentials (const c
|
|
* @creds: a client credentials structure returned by
|
|
* soup_ssl_get_client_credentials().
|
|
*
|
|
- * Frees @client_creds.
|
|
+ * Frees @creds.
|
|
**/
|
|
void
|
|
-soup_ssl_free_client_credentials (gpointer creds)
|
|
+soup_ssl_free_client_credentials (SoupSSLCredentials *creds)
|
|
{
|
|
- SoupGNUTLSCred *cred = creds;
|
|
-
|
|
- gnutls_certificate_free_credentials (cred->cred);
|
|
- g_free (cred);
|
|
+ gnutls_certificate_free_credentials (creds->creds);
|
|
+ g_free (creds);
|
|
}
|
|
|
|
/**
|
|
@@ -510,10 +523,10 @@ soup_ssl_free_client_credentials (gpoint
|
|
* Return value: the server credentials, which must be freed with
|
|
* soup_ssl_free_server_credentials().
|
|
**/
|
|
-gpointer
|
|
+SoupSSLCredentials *
|
|
soup_ssl_get_server_credentials (const char *cert_file, const char *key_file)
|
|
{
|
|
- SoupGNUTLSCred *cred;
|
|
+ SoupSSLCredentials *creds;
|
|
|
|
if (!soup_gnutls_inited)
|
|
soup_gnutls_init ();
|
|
@@ -522,20 +535,20 @@ soup_ssl_get_server_credentials (const c
|
|
return NULL;
|
|
}
|
|
|
|
- cred = g_new0 (SoupGNUTLSCred, 1);
|
|
- gnutls_certificate_allocate_credentials (&cred->cred);
|
|
+ creds = g_new0 (SoupSSLCredentials, 1);
|
|
+ gnutls_certificate_allocate_credentials (&creds->creds);
|
|
|
|
- if (gnutls_certificate_set_x509_key_file (cred->cred,
|
|
+ if (gnutls_certificate_set_x509_key_file (creds->creds,
|
|
cert_file, key_file,
|
|
GNUTLS_X509_FMT_PEM) != 0) {
|
|
g_warning ("Failed to set SSL certificate and key files "
|
|
"(%s, %s).", cert_file, key_file);
|
|
- soup_ssl_free_server_credentials (cred);
|
|
+ soup_ssl_free_server_credentials (creds);
|
|
return NULL;
|
|
}
|
|
|
|
- gnutls_certificate_set_dh_params (cred->cred, dh_params);
|
|
- return cred;
|
|
+ gnutls_certificate_set_dh_params (creds->creds, dh_params);
|
|
+ return creds;
|
|
}
|
|
|
|
/**
|
|
@@ -543,15 +556,13 @@ soup_ssl_get_server_credentials (const c
|
|
* @creds: a server credentials structure returned by
|
|
* soup_ssl_get_server_credentials().
|
|
*
|
|
- * Frees @server_creds.
|
|
+ * Frees @creds.
|
|
**/
|
|
void
|
|
-soup_ssl_free_server_credentials (gpointer creds)
|
|
+soup_ssl_free_server_credentials (SoupSSLCredentials *creds)
|
|
{
|
|
- SoupGNUTLSCred *cred = creds;
|
|
-
|
|
- gnutls_certificate_free_credentials (cred->cred);
|
|
- g_free (cred);
|
|
+ gnutls_certificate_free_credentials (creds->creds);
|
|
+ g_free (creds);
|
|
}
|
|
|
|
#endif /* HAVE_SSL */
|
|
diff -ruNp libsoup-2.2.100/libsoup/soup-message.c libsoup-2.2.100/libsoup/soup-message.c
|
|
--- libsoup-2.2.100/libsoup/soup-message.c 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/libsoup/soup-message.c 2007-04-09 17:03:24.000000000 -0400
|
|
@@ -70,6 +70,11 @@ finalize (GObject *object)
|
|
if (priv->uri)
|
|
soup_uri_free (priv->uri);
|
|
|
|
+ if (priv->auth)
|
|
+ g_object_unref (priv->auth);
|
|
+ if (priv->proxy_auth)
|
|
+ g_object_unref (priv->proxy_auth);
|
|
+
|
|
if (msg->request.owner == SOUP_BUFFER_SYSTEM_OWNED)
|
|
g_free (msg->request.body);
|
|
if (msg->response.owner == SOUP_BUFFER_SYSTEM_OWNED)
|
|
@@ -725,6 +730,110 @@ soup_message_foreach_header (GHashTable
|
|
}
|
|
|
|
/**
|
|
+ * soup_message_set_auth:
|
|
+ * @msg: a #SoupMessage
|
|
+ * @auth: a #SoupAuth, or %NULL
|
|
+ *
|
|
+ * Sets @msg to authenticate to its destination using @auth, which
|
|
+ * must have already been fully authenticated. If @auth is %NULL, @msg
|
|
+ * will not authenticate to its destination.
|
|
+ **/
|
|
+void
|
|
+soup_message_set_auth (SoupMessage *msg, SoupAuth *auth)
|
|
+{
|
|
+ SoupMessagePrivate *priv;
|
|
+ char *token;
|
|
+
|
|
+ g_return_if_fail (SOUP_IS_MESSAGE (msg));
|
|
+ g_return_if_fail (auth == NULL || SOUP_IS_AUTH (auth));
|
|
+ g_return_if_fail (auth == NULL || soup_auth_is_authenticated (auth));
|
|
+
|
|
+ priv = SOUP_MESSAGE_GET_PRIVATE (msg);
|
|
+
|
|
+ if (priv->auth)
|
|
+ g_object_unref (priv->auth);
|
|
+ soup_message_remove_header (msg->request_headers, "Authorization");
|
|
+ priv->auth = auth;
|
|
+ if (!priv->auth)
|
|
+ return;
|
|
+
|
|
+ g_object_ref (priv->auth);
|
|
+ token = soup_auth_get_authorization (auth, msg);
|
|
+ soup_message_add_header (msg->request_headers, "Authorization", token);
|
|
+ g_free (token);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * soup_message_get_auth:
|
|
+ * @msg: a #SoupMessage
|
|
+ *
|
|
+ * Gets the #SoupAuth used by @msg for authentication.
|
|
+ *
|
|
+ * Return value: the #SoupAuth used by @msg for authentication, or
|
|
+ * %NULL if @msg is unauthenticated.
|
|
+ **/
|
|
+SoupAuth *
|
|
+soup_message_get_auth (SoupMessage *msg)
|
|
+{
|
|
+ g_return_val_if_fail (SOUP_IS_MESSAGE (msg), NULL);
|
|
+
|
|
+ return SOUP_MESSAGE_GET_PRIVATE (msg)->auth;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * soup_message_set_proxy_auth:
|
|
+ * @msg: a #SoupMessage
|
|
+ * @auth: a #SoupAuth, or %NULL
|
|
+ *
|
|
+ * Sets @msg to authenticate to its proxy using @auth, which must have
|
|
+ * already been fully authenticated. If @auth is %NULL, @msg will not
|
|
+ * authenticate to its proxy.
|
|
+ **/
|
|
+void
|
|
+soup_message_set_proxy_auth (SoupMessage *msg, SoupAuth *auth)
|
|
+{
|
|
+ SoupMessagePrivate *priv;
|
|
+ char *token;
|
|
+
|
|
+ g_return_if_fail (SOUP_IS_MESSAGE (msg));
|
|
+ g_return_if_fail (auth == NULL || SOUP_IS_AUTH (auth));
|
|
+ g_return_if_fail (auth == NULL || soup_auth_is_authenticated (auth));
|
|
+
|
|
+ priv = SOUP_MESSAGE_GET_PRIVATE (msg);
|
|
+
|
|
+ if (priv->proxy_auth)
|
|
+ g_object_unref (priv->proxy_auth);
|
|
+ soup_message_remove_header (msg->request_headers,
|
|
+ "Proxy-Authorization");
|
|
+ priv->proxy_auth = auth;
|
|
+ if (!priv->proxy_auth)
|
|
+ return;
|
|
+
|
|
+ g_object_ref (priv->proxy_auth);
|
|
+ token = soup_auth_get_authorization (auth, msg);
|
|
+ soup_message_add_header (msg->request_headers,
|
|
+ "Proxy-Authorization", token);
|
|
+ g_free (token);
|
|
+}
|
|
+
|
|
+/**
|
|
+ * soup_message_get_proxy_auth:
|
|
+ * @msg: a #SoupMessage
|
|
+ *
|
|
+ * Gets the #SoupAuth used by @msg for authentication to its proxy..
|
|
+ *
|
|
+ * Return value: the #SoupAuth used by @msg for authentication to its
|
|
+ * proxy, or %NULL if @msg isn't authenticated to its proxy.
|
|
+ **/
|
|
+SoupAuth *
|
|
+soup_message_get_proxy_auth (SoupMessage *msg)
|
|
+{
|
|
+ g_return_val_if_fail (SOUP_IS_MESSAGE (msg), NULL);
|
|
+
|
|
+ return SOUP_MESSAGE_GET_PRIVATE (msg)->proxy_auth;
|
|
+}
|
|
+
|
|
+/**
|
|
* soup_message_cleanup_response:
|
|
* @req: a #SoupMessage
|
|
*
|
|
@@ -984,9 +1093,7 @@ soup_message_get_response_encoding (Soup
|
|
{
|
|
SoupMethodId method = soup_method_get_id (msg->method);
|
|
|
|
- /* FIXME: should CONNECT really be here? Where does it say that? */
|
|
if (method == SOUP_METHOD_ID_HEAD ||
|
|
- method == SOUP_METHOD_ID_CONNECT ||
|
|
msg->status_code == SOUP_STATUS_NO_CONTENT ||
|
|
msg->status_code == SOUP_STATUS_NOT_MODIFIED ||
|
|
SOUP_STATUS_IS_INFORMATIONAL (msg->status_code))
|
|
@@ -1022,7 +1129,9 @@ soup_message_get_response_encoding (Soup
|
|
*content_length = lval;
|
|
return SOUP_TRANSFER_CONTENT_LENGTH;
|
|
}
|
|
- } else
|
|
+ } else if (method == SOUP_METHOD_ID_CONNECT)
|
|
+ return SOUP_TRANSFER_NONE;
|
|
+ else
|
|
return SOUP_TRANSFER_EOF;
|
|
}
|
|
}
|
|
diff -ruNp libsoup-2.2.100/libsoup/soup-message-private.h libsoup-2.2.100/libsoup/soup-message-private.h
|
|
--- libsoup-2.2.100/libsoup/soup-message-private.h 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/libsoup/soup-message-private.h 2007-04-09 17:03:24.000000000 -0400
|
|
@@ -6,7 +6,8 @@
|
|
#ifndef SOUP_MESSAGE_PRIVATE_H
|
|
#define SOUP_MESSAGE_PRIVATE_H 1
|
|
|
|
-#include <libsoup/soup-message.h>
|
|
+#include "soup-message.h"
|
|
+#include "soup-auth.h"
|
|
|
|
typedef struct {
|
|
gpointer io_data;
|
|
@@ -20,6 +21,8 @@ typedef struct {
|
|
SoupHttpVersion http_version;
|
|
|
|
SoupUri *uri;
|
|
+
|
|
+ SoupAuth *auth, *proxy_auth;
|
|
} SoupMessagePrivate;
|
|
#define SOUP_MESSAGE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SOUP_TYPE_MESSAGE, SoupMessagePrivate))
|
|
|
|
@@ -57,4 +60,12 @@ void soup_message_io_server (SoupMessag
|
|
SoupMessageParseHeadersFn parse_headers_cb,
|
|
gpointer user_data);
|
|
|
|
+/* Auth handling */
|
|
+void soup_message_set_auth (SoupMessage *msg,
|
|
+ SoupAuth *auth);
|
|
+SoupAuth *soup_message_get_auth (SoupMessage *msg);
|
|
+void soup_message_set_proxy_auth (SoupMessage *msg,
|
|
+ SoupAuth *auth);
|
|
+SoupAuth *soup_message_get_proxy_auth (SoupMessage *msg);
|
|
+
|
|
#endif /* SOUP_MESSAGE_PRIVATE_H */
|
|
diff -ruNp libsoup-2.2.100/libsoup/soup-misc.c libsoup-2.2.100/libsoup/soup-misc.c
|
|
--- libsoup-2.2.100/libsoup/soup-misc.c 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/libsoup/soup-misc.c 2007-04-09 17:03:24.000000000 -0400
|
|
@@ -50,16 +50,6 @@ soup_str_case_equal (gconstpointer v1,
|
|
return g_ascii_strcasecmp (string1, string2) == 0;
|
|
}
|
|
|
|
-/* Base64 utils (straight from camel-mime-utils.c) */
|
|
-#define d(x)
|
|
-
|
|
-static const char *base64_alphabet =
|
|
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
-
|
|
-/*
|
|
- * call this when finished encoding everything, to
|
|
- * flush off the last little bit
|
|
- */
|
|
int
|
|
soup_base64_encode_close (const guchar *in,
|
|
int inlen,
|
|
@@ -68,53 +58,19 @@ soup_base64_encode_close (const guchar
|
|
int *state,
|
|
int *save)
|
|
{
|
|
- int c1, c2;
|
|
- unsigned char *outptr = out;
|
|
-
|
|
- if (inlen > 0)
|
|
- outptr += soup_base64_encode_step (in,
|
|
- inlen,
|
|
- break_lines,
|
|
- outptr,
|
|
- state,
|
|
- save);
|
|
-
|
|
- c1 = ((unsigned char *) save) [1];
|
|
- c2 = ((unsigned char *) save) [2];
|
|
-
|
|
- d(printf("mode = %d\nc1 = %c\nc2 = %c\n",
|
|
- (int)((char *) save) [0],
|
|
- (int)((char *) save) [1],
|
|
- (int)((char *) save) [2]));
|
|
-
|
|
- switch (((char *) save) [0]) {
|
|
- case 2:
|
|
- outptr [2] = base64_alphabet[ ( (c2 &0x0f) << 2 ) ];
|
|
- g_assert (outptr [2] != 0);
|
|
- goto skip;
|
|
- case 1:
|
|
- outptr[2] = '=';
|
|
- skip:
|
|
- outptr [0] = base64_alphabet [ c1 >> 2 ];
|
|
- outptr [1] = base64_alphabet [ c2 >> 4 | ( (c1&0x3) << 4 )];
|
|
- outptr [3] = '=';
|
|
- outptr += 4;
|
|
- break;
|
|
+ if (inlen > 0) {
|
|
+ out += soup_base64_encode_step (in,
|
|
+ inlen,
|
|
+ break_lines,
|
|
+ out,
|
|
+ state,
|
|
+ save);
|
|
}
|
|
- if (break_lines)
|
|
- *outptr++ = '\n';
|
|
-
|
|
- *save = 0;
|
|
- *state = 0;
|
|
|
|
- return outptr-out;
|
|
+ return (int)g_base64_encode_close (break_lines, (char *) out,
|
|
+ state, save);
|
|
}
|
|
|
|
-/*
|
|
- * performs an 'encode step', only encodes blocks of 3 characters to the
|
|
- * output at a time, saves left-over state in state and save (initialise to
|
|
- * 0 on first invocation).
|
|
- */
|
|
int
|
|
soup_base64_encode_step (const guchar *in,
|
|
int len,
|
|
@@ -123,142 +79,16 @@ soup_base64_encode_step (const guchar *
|
|
int *state,
|
|
int *save)
|
|
{
|
|
- register guchar *outptr;
|
|
- register const guchar *inptr;
|
|
-
|
|
- if (len <= 0)
|
|
- return 0;
|
|
-
|
|
- inptr = in;
|
|
- outptr = out;
|
|
-
|
|
- d (printf ("we have %d chars, and %d saved chars\n",
|
|
- len,
|
|
- ((char *) save) [0]));
|
|
-
|
|
- if (len + ((char *) save) [0] > 2) {
|
|
- const guchar *inend = in+len-2;
|
|
- register int c1, c2, c3;
|
|
- register int already;
|
|
-
|
|
- already = *state;
|
|
-
|
|
- switch (((char *) save) [0]) {
|
|
- case 1: c1 = ((unsigned char *) save) [1]; goto skip1;
|
|
- case 2: c1 = ((unsigned char *) save) [1];
|
|
- c2 = ((unsigned char *) save) [2]; goto skip2;
|
|
- }
|
|
-
|
|
- /*
|
|
- * yes, we jump into the loop, no i'm not going to change it,
|
|
- * it's beautiful!
|
|
- */
|
|
- while (inptr < inend) {
|
|
- c1 = *inptr++;
|
|
- skip1:
|
|
- c2 = *inptr++;
|
|
- skip2:
|
|
- c3 = *inptr++;
|
|
- *outptr++ = base64_alphabet [ c1 >> 2 ];
|
|
- *outptr++ = base64_alphabet [ c2 >> 4 |
|
|
- ((c1&0x3) << 4) ];
|
|
- *outptr++ = base64_alphabet [ ((c2 &0x0f) << 2) |
|
|
- (c3 >> 6) ];
|
|
- *outptr++ = base64_alphabet [ c3 & 0x3f ];
|
|
- /* this is a bit ugly ... */
|
|
- if (break_lines && (++already)>=19) {
|
|
- *outptr++='\n';
|
|
- already = 0;
|
|
- }
|
|
- }
|
|
-
|
|
- ((char *)save)[0] = 0;
|
|
- len = 2-(inptr-inend);
|
|
- *state = already;
|
|
- }
|
|
-
|
|
- d(printf("state = %d, len = %d\n",
|
|
- (int)((char *)save)[0],
|
|
- len));
|
|
-
|
|
- if (len>0) {
|
|
- register char *saveout;
|
|
-
|
|
- /* points to the slot for the next char to save */
|
|
- saveout = & (((char *)save)[1]) + ((char *)save)[0];
|
|
-
|
|
- /* len can only be 0 1 or 2 */
|
|
- switch(len) {
|
|
- case 2: *saveout++ = *inptr++;
|
|
- case 1: *saveout++ = *inptr++;
|
|
- }
|
|
- ((char *)save)[0]+=len;
|
|
- }
|
|
-
|
|
- d(printf("mode = %d\nc1 = %c\nc2 = %c\n",
|
|
- (int)((char *)save)[0],
|
|
- (int)((char *)save)[1],
|
|
- (int)((char *)save)[2]));
|
|
-
|
|
- return outptr-out;
|
|
+ return (int)g_base64_encode_step (in, len, break_lines,
|
|
+ (char *)out, state, save);
|
|
}
|
|
|
|
-/**
|
|
- * soup_base64_encode:
|
|
- * @text: the binary data to encode.
|
|
- * @len: the length of @text.
|
|
- *
|
|
- * Encode a sequence of binary data into it's Base-64 stringified
|
|
- * representation.
|
|
- *
|
|
- * Return value: The Base-64 encoded string representing @text.
|
|
- */
|
|
char *
|
|
soup_base64_encode (const char *text, int len)
|
|
{
|
|
- unsigned char *out;
|
|
- int state = 0, outlen, save = 0;
|
|
-
|
|
- out = g_malloc (len * 4 / 3 + 5);
|
|
- outlen = soup_base64_encode_close ((const guchar *)text,
|
|
- len,
|
|
- FALSE,
|
|
- out,
|
|
- &state,
|
|
- &save);
|
|
- out[outlen] = '\0';
|
|
- return (char *) out;
|
|
-}
|
|
-
|
|
-static unsigned char camel_mime_base64_rank[256] = {
|
|
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
|
|
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
|
|
- 255,255,255,255,255,255,255,255,255,255,255, 62,255,255,255, 63,
|
|
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,255,255,255, 0,255,255,
|
|
- 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
|
|
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,255,255,255,255,255,
|
|
- 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
|
|
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,255,255,255,255,255,
|
|
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
|
|
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
|
|
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
|
|
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
|
|
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
|
|
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
|
|
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
|
|
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
|
|
-};
|
|
+ return g_base64_encode ((const guchar *)text, len);
|
|
+}
|
|
|
|
-/**
|
|
- * base64_decode_step: decode a chunk of base64 encoded data
|
|
- * @in: input stream
|
|
- * @len: max length of data to decode
|
|
- * @out: output stream
|
|
- * @state: holds the number of bits that are stored in @save
|
|
- * @save: leftover bits that have not yet been decoded
|
|
- *
|
|
- * Decodes a chunk of base64 encoded data
|
|
- **/
|
|
int
|
|
soup_base64_decode_step (const guchar *in,
|
|
int len,
|
|
@@ -266,68 +96,20 @@ soup_base64_decode_step (const guchar *
|
|
int *state,
|
|
guint *save)
|
|
{
|
|
- register const guchar *inptr;
|
|
- register guchar *outptr;
|
|
- const guchar *inend;
|
|
- guchar c;
|
|
- register unsigned int v;
|
|
- int i;
|
|
-
|
|
- inend = in+len;
|
|
- outptr = out;
|
|
-
|
|
- /* convert 4 base64 bytes to 3 normal bytes */
|
|
- v=*save;
|
|
- i=*state;
|
|
- inptr = in;
|
|
- while (inptr < inend) {
|
|
- c = camel_mime_base64_rank [*inptr++];
|
|
- if (c != 0xff) {
|
|
- v = (v<<6) | c;
|
|
- i++;
|
|
- if (i==4) {
|
|
- *outptr++ = v>>16;
|
|
- *outptr++ = v>>8;
|
|
- *outptr++ = v;
|
|
- i=0;
|
|
- }
|
|
- }
|
|
- }
|
|
-
|
|
- *save = v;
|
|
- *state = i;
|
|
-
|
|
- /* quick scan back for '=' on the end somewhere */
|
|
- /* fortunately we can drop 1 output char for each trailing = (upto 2) */
|
|
- i=2;
|
|
- while (inptr > in && i) {
|
|
- inptr--;
|
|
- if (camel_mime_base64_rank [*inptr] != 0xff) {
|
|
- if (*inptr == '=')
|
|
- outptr--;
|
|
- i--;
|
|
- }
|
|
- }
|
|
-
|
|
- /* if i!= 0 then there is a truncation error! */
|
|
- return outptr - out;
|
|
+ return (int) g_base64_decode_step ((const char *)in, len,
|
|
+ out, state, save);
|
|
}
|
|
|
|
char *
|
|
soup_base64_decode (const char *text,
|
|
int *out_len)
|
|
{
|
|
- guchar *ret;
|
|
- int inlen, state = 0;
|
|
- unsigned int save = 0;
|
|
-
|
|
- inlen = strlen (text);
|
|
- ret = g_malloc0 (inlen);
|
|
-
|
|
- *out_len = soup_base64_decode_step ((const guchar *)text, inlen,
|
|
- ret, &state, &save);
|
|
+ char *ret;
|
|
+ gsize out_len_tmp;
|
|
|
|
- return (char *)ret;
|
|
+ ret = (char *) g_base64_decode (text, &out_len_tmp);
|
|
+ *out_len = out_len_tmp;
|
|
+ return ret;
|
|
}
|
|
|
|
typedef struct {
|
|
diff -ruNp libsoup-2.2.100/libsoup/soup-misc.h libsoup-2.2.100/libsoup/soup-misc.h
|
|
--- libsoup-2.2.100/libsoup/soup-misc.h 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/libsoup/soup-misc.h 2007-04-09 17:03:24.000000000 -0400
|
|
@@ -9,7 +9,8 @@
|
|
#include <glib-object.h>
|
|
#include <libxml/tree.h>
|
|
|
|
-/* Base64 encoding/decoding */
|
|
+#ifndef LIBSOUP_DISABLE_DEPRECATED
|
|
+/* Base64 encoding/decoding. DEPRECATED: use <glib/base64.h> */
|
|
|
|
char *soup_base64_encode (const char *text,
|
|
int len);
|
|
@@ -36,6 +37,7 @@ int soup_base64_decode_st
|
|
guchar *out,
|
|
int *state,
|
|
guint *save);
|
|
+#endif /* LIBSOUP_DISABLE_DEPRECATED */
|
|
|
|
/* Non-default-GMainContext operations */
|
|
GSource *soup_add_io_watch (GMainContext *async_context,
|
|
diff -ruNp libsoup-2.2.100/libsoup/soup-server-auth.c libsoup-2.2.100/libsoup/soup-server-auth.c
|
|
--- libsoup-2.2.100/libsoup/soup-server-auth.c 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/libsoup/soup-server-auth.c 2007-04-09 17:03:24.000000000 -0400
|
|
@@ -352,23 +352,24 @@ soup_server_auth_new (SoupServerAuthCont
|
|
switch (type) {
|
|
case SOUP_AUTH_TYPE_BASIC:
|
|
{
|
|
- gchar *userpass, *colon;
|
|
- gint len;
|
|
+ guchar *userpass, *colon;
|
|
+ gsize len;
|
|
|
|
- userpass = soup_base64_decode (header, &len);
|
|
+ userpass = g_base64_decode (header, &len);
|
|
if (!userpass)
|
|
break;
|
|
|
|
- colon = strchr (userpass, ':');
|
|
+ colon = memchr (userpass, ':', len);
|
|
if (!colon) {
|
|
g_free (userpass);
|
|
break;
|
|
}
|
|
|
|
ret->basic.type = SOUP_AUTH_TYPE_BASIC;
|
|
- ret->basic.user = g_strndup (userpass,
|
|
+ ret->basic.user = g_strndup ((char *)userpass,
|
|
colon - userpass);
|
|
- ret->basic.passwd = g_strdup (colon + 1);
|
|
+ ret->basic.passwd = g_strndup ((char *)colon + 1,
|
|
+ len - (colon + 1 - userpass));
|
|
|
|
g_free (userpass);
|
|
|
|
diff -ruNp libsoup-2.2.100/libsoup/soup-server.c libsoup-2.2.100/libsoup/soup-server.c
|
|
--- libsoup-2.2.100/libsoup/soup-server.c 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/libsoup/soup-server.c 2007-05-01 14:29:21.000000000 -0400
|
|
@@ -33,7 +33,7 @@ typedef struct {
|
|
guint port;
|
|
|
|
char *ssl_cert_file, *ssl_key_file;
|
|
- gpointer ssl_creds;
|
|
+ SoupSSLCredentials *ssl_creds;
|
|
|
|
GMainLoop *loop;
|
|
|
|
diff -ruNp libsoup-2.2.100/libsoup/soup-session-async.c libsoup-2.2.100/libsoup/soup-session-async.c
|
|
--- libsoup-2.2.100/libsoup/soup-session-async.c 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/libsoup/soup-session-async.c 2007-04-09 17:03:24.000000000 -0400
|
|
@@ -184,6 +184,19 @@ final_finished (SoupMessage *req, gpoint
|
|
run_queue (sa, FALSE);
|
|
}
|
|
|
|
+static gboolean
|
|
+idle_run_queue (gpointer user_data)
|
|
+{
|
|
+ SoupSessionAsync *sa = user_data;
|
|
+
|
|
+ g_object_add_weak_pointer (G_OBJECT (sa), (gpointer)&sa);
|
|
+ g_object_unref (sa);
|
|
+
|
|
+ if (sa)
|
|
+ run_queue (sa, TRUE);
|
|
+ return FALSE;
|
|
+}
|
|
+
|
|
static void
|
|
queue_message (SoupSession *session, SoupMessage *req,
|
|
SoupMessageCallbackFn callback, gpointer user_data)
|
|
@@ -202,7 +215,8 @@ queue_message (SoupSession *session, Sou
|
|
|
|
SOUP_SESSION_CLASS (soup_session_async_parent_class)->queue_message (session, req, callback, user_data);
|
|
|
|
- run_queue (sa, TRUE);
|
|
+ g_object_ref (sa);
|
|
+ g_idle_add (idle_run_queue, sa);
|
|
}
|
|
|
|
static guint
|
|
diff -ruNp libsoup-2.2.100/libsoup/soup-session.c libsoup-2.2.100/libsoup/soup-session.c
|
|
--- libsoup-2.2.100/libsoup/soup-session.c 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/libsoup/soup-session.c 2007-05-01 16:00:48.000000000 -0400
|
|
@@ -19,6 +19,7 @@
|
|
#include "soup-connection-ntlm.h"
|
|
#include "soup-marshal.h"
|
|
#include "soup-message-filter.h"
|
|
+#include "soup-message-private.h"
|
|
#include "soup-message-queue.h"
|
|
#include "soup-ssl.h"
|
|
#include "soup-uri.h"
|
|
@@ -39,7 +40,7 @@ typedef struct {
|
|
gboolean use_ntlm;
|
|
|
|
char *ssl_ca_file;
|
|
- gpointer ssl_creds;
|
|
+ SoupSSLCredentials *ssl_creds;
|
|
|
|
GSList *filters;
|
|
|
|
@@ -744,8 +745,7 @@ authenticate_auth (SoupSession *session,
|
|
|
|
static gboolean
|
|
update_auth_internal (SoupSession *session, SoupMessage *msg,
|
|
- const GSList *headers, gboolean proxy,
|
|
- gboolean got_unauthorized)
|
|
+ const GSList *headers, gboolean proxy)
|
|
{
|
|
SoupSessionHost *host;
|
|
SoupAuth *new_auth, *prior_auth, *old_auth;
|
|
@@ -772,20 +772,11 @@ update_auth_internal (SoupSession *sessi
|
|
return FALSE;
|
|
|
|
/* See if this auth is the same auth we used last time */
|
|
- prior_auth = lookup_auth (session, msg, proxy);
|
|
+ prior_auth = proxy ? soup_message_get_proxy_auth (msg) : soup_message_get_auth (msg);
|
|
if (prior_auth &&
|
|
G_OBJECT_TYPE (prior_auth) == G_OBJECT_TYPE (new_auth) &&
|
|
!strcmp (soup_auth_get_realm (prior_auth),
|
|
soup_auth_get_realm (new_auth))) {
|
|
- if (!got_unauthorized) {
|
|
- /* The user is just trying to preauthenticate
|
|
- * using information we already have, so
|
|
- * there's nothing more that needs to be done.
|
|
- */
|
|
- g_object_unref (new_auth);
|
|
- return TRUE;
|
|
- }
|
|
-
|
|
/* The server didn't like the username/password we
|
|
* provided before. Invalidate it and note this fact.
|
|
*/
|
|
@@ -891,7 +882,7 @@ authorize_handler (SoupMessage *msg, gpo
|
|
if (!headers)
|
|
return;
|
|
|
|
- if (update_auth_internal (session, msg, headers, proxy, TRUE))
|
|
+ if (update_auth_internal (session, msg, headers, proxy))
|
|
soup_session_requeue_message (session, msg);
|
|
}
|
|
|
|
@@ -926,23 +917,18 @@ redirect_handler (SoupMessage *msg, gpoi
|
|
static void
|
|
add_auth (SoupSession *session, SoupMessage *msg, gboolean proxy)
|
|
{
|
|
- const char *header = proxy ? "Proxy-Authorization" : "Authorization";
|
|
SoupAuth *auth;
|
|
- char *token;
|
|
|
|
auth = lookup_auth (session, msg, proxy);
|
|
- if (!auth)
|
|
- return;
|
|
- if (!soup_auth_is_authenticated (auth) &&
|
|
- !authenticate_auth (session, auth, msg, FALSE, proxy))
|
|
- return;
|
|
-
|
|
- token = soup_auth_get_authorization (auth, msg);
|
|
- if (token) {
|
|
- soup_message_remove_header (msg->request_headers, header);
|
|
- soup_message_add_header (msg->request_headers, header, token);
|
|
- g_free (token);
|
|
+ if (auth && !soup_auth_is_authenticated (auth)) {
|
|
+ if (!authenticate_auth (session, auth, msg, FALSE, proxy))
|
|
+ auth = NULL;
|
|
}
|
|
+
|
|
+ if (proxy)
|
|
+ soup_message_set_proxy_auth (msg, auth);
|
|
+ else
|
|
+ soup_message_set_auth (msg, auth);
|
|
}
|
|
|
|
static void
|
|
@@ -1273,8 +1259,9 @@ queue_message (SoupSession *session, Sou
|
|
* any resources related to the time it was last sent are freed.
|
|
*
|
|
* Upon message completion, the callback specified in @callback will
|
|
- * be invoked. If after returning from this callback the message has
|
|
- * not been requeued, @msg will be unreffed.
|
|
+ * be invoked (in the thread associated with @session's async
|
|
+ * context). If after returning from this callback the message has not
|
|
+ * been requeued, @msg will be unreffed.
|
|
*/
|
|
void
|
|
soup_session_queue_message (SoupSession *session, SoupMessage *msg,
|
|
diff -ruNp libsoup-2.2.100/libsoup/soup-session-sync.c libsoup-2.2.100/libsoup/soup-session-sync.c
|
|
--- libsoup-2.2.100/libsoup/soup-session-sync.c 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/libsoup/soup-session-sync.c 2007-04-09 17:07:39.000000000 -0400
|
|
@@ -11,6 +11,7 @@
|
|
|
|
#include "soup-session-sync.h"
|
|
#include "soup-connection.h"
|
|
+#include "soup-misc.h"
|
|
|
|
typedef struct {
|
|
GMutex *lock;
|
|
@@ -98,13 +99,63 @@ soup_session_sync_new_with_options (cons
|
|
return session;
|
|
}
|
|
|
|
+typedef struct {
|
|
+ SoupSession *session;
|
|
+ SoupMessage *msg;
|
|
+ SoupMessageCallbackFn callback;
|
|
+ gpointer user_data;
|
|
+} SoupSessionSyncAsyncData;
|
|
+
|
|
+static void
|
|
+async_data_free (SoupSessionSyncAsyncData *sad)
|
|
+{
|
|
+ g_object_unref (sad->session);
|
|
+ g_object_unref (sad->msg);
|
|
+ g_free (sad);
|
|
+}
|
|
+
|
|
+static gboolean
|
|
+queue_message_callback (gpointer data)
|
|
+{
|
|
+ SoupSessionSyncAsyncData *sad = data;
|
|
+
|
|
+ sad->callback (sad->msg, sad->user_data);
|
|
+ async_data_free (sad);
|
|
+ return FALSE;
|
|
+}
|
|
+
|
|
+static gpointer
|
|
+queue_message_thread (gpointer data)
|
|
+{
|
|
+ SoupSessionSyncAsyncData *sad = data;
|
|
+
|
|
+ soup_session_send_message (sad->session, sad->msg);
|
|
+ if (sad->callback) {
|
|
+ GMainContext *async_context;
|
|
+
|
|
+ g_object_get (sad->session,
|
|
+ SOUP_SESSION_ASYNC_CONTEXT, &async_context,
|
|
+ NULL);
|
|
+ soup_add_idle (async_context, queue_message_callback, sad);
|
|
+ } else
|
|
+ async_data_free (sad);
|
|
+
|
|
+ return NULL;
|
|
+}
|
|
|
|
static void
|
|
queue_message (SoupSession *session, SoupMessage *msg,
|
|
SoupMessageCallbackFn callback, gpointer user_data)
|
|
{
|
|
- /* FIXME */
|
|
- g_warning ("soup_session_queue_message called on synchronous session");
|
|
+ SoupSessionSyncAsyncData *sad;
|
|
+
|
|
+ sad = g_new (SoupSessionSyncAsyncData, 1);
|
|
+ sad->session = g_object_ref (session);
|
|
+ sad->msg = g_object_ref (msg);
|
|
+ sad->callback = callback;
|
|
+ sad->user_data = user_data;
|
|
+
|
|
+ g_thread_create (queue_message_thread, sad, FALSE, NULL);
|
|
}
|
|
|
|
static SoupConnection *
|
|
@@ -130,7 +181,9 @@ wait_for_connection (SoupSession *sessio
|
|
* not return the no-longer-valid connection.
|
|
*/
|
|
|
|
- if (!SOUP_STATUS_IS_SUCCESSFUL (status))
|
|
+ if (status == SOUP_STATUS_TRY_AGAIN)
|
|
+ goto try_again;
|
|
+ else if (!SOUP_STATUS_IS_SUCCESSFUL (status))
|
|
conn = NULL;
|
|
else if (msg->status == SOUP_MESSAGE_STATUS_FINISHED) {
|
|
/* Message was cancelled while we were
|
|
diff -ruNp libsoup-2.2.100/libsoup/soup-soap-message.c libsoup-2.2.100/libsoup/soup-soap-message.c
|
|
--- libsoup-2.2.100/libsoup/soup-soap-message.c 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/libsoup/soup-soap-message.c 2007-04-09 17:03:24.000000000 -0400
|
|
@@ -513,7 +513,7 @@ soup_soap_message_write_double (SoupSoap
|
|
void
|
|
soup_soap_message_write_base64 (SoupSoapMessage *msg, const char *string, int len)
|
|
{
|
|
- gchar *str = soup_base64_encode (string, len);
|
|
+ gchar *str = g_base64_encode ((const guchar *)string, len);
|
|
soup_soap_message_write_string (msg, str);
|
|
g_free (str);
|
|
}
|
|
diff -ruNp libsoup-2.2.100/libsoup/soup-ssl.h libsoup-2.2.100/libsoup/soup-ssl.h
|
|
--- libsoup-2.2.100/libsoup/soup-ssl.h 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/libsoup/soup-ssl.h 2007-05-01 16:00:48.000000000 -0400
|
|
@@ -20,16 +20,19 @@ typedef enum {
|
|
SOUP_SSL_TYPE_SERVER
|
|
} SoupSSLType;
|
|
|
|
-gpointer soup_ssl_get_client_credentials (const char *ca_file);
|
|
-void soup_ssl_free_client_credentials (gpointer creds);
|
|
-gpointer soup_ssl_get_server_credentials (const char *cert_file,
|
|
- const char *key_file);
|
|
-void soup_ssl_free_server_credentials (gpointer creds);
|
|
-
|
|
-GIOChannel *soup_ssl_wrap_iochannel (GIOChannel *sock,
|
|
- SoupSSLType type,
|
|
- const char *remote_host,
|
|
- gpointer credentials);
|
|
+typedef struct SoupSSLCredentials SoupSSLCredentials;
|
|
+
|
|
+SoupSSLCredentials *soup_ssl_get_client_credentials (const char *ca_file);
|
|
+void soup_ssl_free_client_credentials (SoupSSLCredentials *creds);
|
|
+
|
|
+SoupSSLCredentials *soup_ssl_get_server_credentials (const char *cert_file,
|
|
+ const char *key_file);
|
|
+void soup_ssl_free_server_credentials (SoupSSLCredentials *creds);
|
|
+
|
|
+GIOChannel *soup_ssl_wrap_iochannel (GIOChannel *sock,
|
|
+ SoupSSLType type,
|
|
+ const char *remote_host,
|
|
+ SoupSSLCredentials *creds);
|
|
|
|
#define SOUP_SSL_ERROR soup_ssl_error_quark()
|
|
|
|
diff -ruNp libsoup-2.2.100/libsoup/soup-types.h libsoup-2.2.100/libsoup/soup-types.h
|
|
--- libsoup-2.2.100/libsoup/soup-types.h 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/libsoup/soup-types.h 2007-04-12 16:40:44.000000000 -0400
|
|
@@ -49,13 +49,4 @@ GType type_name##_get_type(void)\
|
|
return type; \
|
|
}
|
|
|
|
-/* Compat for glib 2.6.x */
|
|
-#ifndef G_GNUC_NULL_TERMINATED
|
|
-# if __GNUC__ >= 4
|
|
-# define G_GNUC_NULL_TERMINATED __attribute__((__sentinel__))
|
|
-# else
|
|
-# define G_GNUC_NULL_TERMINATED
|
|
-# endif
|
|
-#endif
|
|
-
|
|
#endif
|
|
diff -ruNp libsoup-2.2.100/libsoup/soup-xmlrpc-message.c libsoup-2.2.100/libsoup/soup-xmlrpc-message.c
|
|
--- libsoup-2.2.100/libsoup/soup-xmlrpc-message.c 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/libsoup/soup-xmlrpc-message.c 2007-04-09 17:03:24.000000000 -0400
|
|
@@ -226,7 +226,7 @@ soup_xmlrpc_message_write_base64 (SoupXm
|
|
g_return_if_fail (SOUP_IS_XMLRPC_MESSAGE (msg));
|
|
priv = SOUP_XMLRPC_MESSAGE_GET_PRIVATE (msg);
|
|
|
|
- str = soup_base64_encode (buf, len);
|
|
+ str = g_base64_encode (buf, len);
|
|
|
|
priv->last_node = xmlNewChild (priv->last_node, NULL, (const xmlChar *)"value", NULL);
|
|
xmlNewTextChild (priv->last_node, NULL, (const xmlChar *)"base64", (xmlChar *)str);
|
|
diff -ruNp libsoup-2.2.100/libsoup/soup-xmlrpc-response.c libsoup-2.2.100/libsoup/soup-xmlrpc-response.c
|
|
--- libsoup-2.2.100/libsoup/soup-xmlrpc-response.c 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/libsoup/soup-xmlrpc-response.c 2007-04-09 17:03:24.000000000 -0400
|
|
@@ -361,8 +361,8 @@ soup_xmlrpc_value_get_base64 (SoupXmlrpc
|
|
{
|
|
xmlNode *xml;
|
|
xmlChar *content;
|
|
- char *decoded;
|
|
- int len;
|
|
+ guchar *decoded;
|
|
+ gsize len;
|
|
|
|
xml = (xmlNode *) value;
|
|
if (strcmp ((const char *)xml->name, "value"))
|
|
@@ -372,11 +372,11 @@ soup_xmlrpc_value_get_base64 (SoupXmlrpc
|
|
return FALSE;
|
|
|
|
content = xmlNodeGetContent (xml);
|
|
- decoded = soup_base64_decode ((const char *)content, &len);
|
|
+ decoded = g_base64_decode ((const char *)content, &len);
|
|
xmlFree (content);
|
|
|
|
*data = g_byte_array_new ();
|
|
- g_byte_array_append (*data, (guchar *)decoded, len);
|
|
+ g_byte_array_append (*data, decoded, len);
|
|
g_free (decoded);
|
|
|
|
return TRUE;
|
|
diff -ruNp libsoup-2.2.100/Makefile.in libsoup-2.2.100/Makefile.in
|
|
--- libsoup-2.2.100/Makefile.in 2007-02-12 10:34:12.000000000 -0500
|
|
+++ libsoup-2.2.100/Makefile.in 2007-05-01 15:49:11.000000000 -0400
|
|
@@ -80,6 +80,8 @@ AMDEP_TRUE = @AMDEP_TRUE@
|
|
AMTAR = @AMTAR@
|
|
APACHE_HTTPD = @APACHE_HTTPD@
|
|
APACHE_MODULE_DIR = @APACHE_MODULE_DIR@
|
|
+APACHE_PHP_MODULE_DIR = @APACHE_PHP_MODULE_DIR@
|
|
+APACHE_SSL_MODULE_DIR = @APACHE_SSL_MODULE_DIR@
|
|
AR = @AR@
|
|
AS = @AS@
|
|
AUTOCONF = @AUTOCONF@
|
|
@@ -119,6 +121,8 @@ GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE
|
|
GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
|
|
HAVE_APACHE_FALSE = @HAVE_APACHE_FALSE@
|
|
HAVE_APACHE_TRUE = @HAVE_APACHE_TRUE@
|
|
+HAVE_SSL_FALSE = @HAVE_SSL_FALSE@
|
|
+HAVE_SSL_TRUE = @HAVE_SSL_TRUE@
|
|
HAVE_XMLRPC_EPI_PHP_FALSE = @HAVE_XMLRPC_EPI_PHP_FALSE@
|
|
HAVE_XMLRPC_EPI_PHP_TRUE = @HAVE_XMLRPC_EPI_PHP_TRUE@
|
|
HTML_DIR = @HTML_DIR@
|
|
@@ -128,6 +132,9 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
|
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
|
LDFLAGS = @LDFLAGS@
|
|
+LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
|
|
+LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
|
|
+LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
|
|
LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@
|
|
LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@
|
|
LIBOBJS = @LIBOBJS@
|
|
diff -ruNp libsoup-2.2.100/tests/auth-test.c libsoup-2.2.100/tests/auth-test.c
|
|
--- libsoup-2.2.100/tests/auth-test.c 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/tests/auth-test.c 2007-04-09 17:03:24.000000000 -0400
|
|
@@ -14,6 +14,7 @@
|
|
#include "apache-wrapper.h"
|
|
#endif
|
|
|
|
+GMainLoop *loop;
|
|
int errors = 0;
|
|
|
|
typedef struct {
|
|
@@ -243,12 +244,69 @@ reauthenticate (SoupSession *session, So
|
|
}
|
|
}
|
|
|
|
+static void
|
|
+bug271540_sent (SoupMessage *msg, gpointer data)
|
|
+{
|
|
+ int n = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (msg), "#"));
|
|
+ gboolean *authenticated = data;
|
|
+ int auth = identify_auth (msg);
|
|
+
|
|
+ if (!*authenticated && auth) {
|
|
+ printf (" using auth on message %d before authenticating!!??\n", n);
|
|
+ errors++;
|
|
+ } else if (*authenticated && !auth) {
|
|
+ printf (" sent unauthenticated message %d after authenticating!\n", n);
|
|
+ errors++;
|
|
+ }
|
|
+}
|
|
+
|
|
+static void
|
|
+bug271540_authenticate (SoupSession *session, SoupMessage *msg,
|
|
+ const char *auth_type, const char *auth_realm,
|
|
+ char **username, char **password, gpointer data)
|
|
+{
|
|
+ int n = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (msg), "#"));
|
|
+ gboolean *authenticated = data;
|
|
+
|
|
+ if (strcmp (auth_type, "Basic") != 0 ||
|
|
+ strcmp (auth_realm, "realm1") != 0)
|
|
+ return;
|
|
+
|
|
+ if (!*authenticated) {
|
|
+ printf (" authenticating message %d\n", n);
|
|
+ *username = g_strdup ("user1");
|
|
+ *password = g_strdup ("realm1");
|
|
+ *authenticated = TRUE;
|
|
+ } else {
|
|
+ printf (" asked to authenticate message %d after authenticating!\n", n);
|
|
+ errors++;
|
|
+ }
|
|
+}
|
|
+
|
|
+static void
|
|
+bug271540_finished (SoupMessage *msg, gpointer data)
|
|
+{
|
|
+ int *left = data;
|
|
+ int n = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (msg), "#"));
|
|
+
|
|
+ if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) {
|
|
+ printf (" got status '%d %s' on message %d!\n",
|
|
+ msg->status_code, msg->reason_phrase, n);
|
|
+ errors++;
|
|
+ }
|
|
+
|
|
+ (*left)--;
|
|
+ if (!*left)
|
|
+ g_main_loop_quit (loop);
|
|
+}
|
|
+
|
|
int
|
|
main (int argc, char **argv)
|
|
{
|
|
SoupSession *session;
|
|
SoupMessage *msg;
|
|
char *base_uri, *uri, *expected;
|
|
+ gboolean authenticated;
|
|
#ifdef HAVE_APACHE
|
|
gboolean using_apache = FALSE;
|
|
#endif
|
|
@@ -325,6 +383,30 @@ main (int argc, char **argv)
|
|
|
|
g_object_unref (msg);
|
|
}
|
|
+ g_object_unref (session);
|
|
+
|
|
+ /* And now for a regression test */
|
|
+
|
|
+ printf ("Regression test for bug 271540:\n");
|
|
+ session = soup_session_async_new ();
|
|
+
|
|
+ authenticated = FALSE;
|
|
+ g_signal_connect (session, "authenticate",
|
|
+ G_CALLBACK (bug271540_authenticate), &authenticated);
|
|
+
|
|
+ uri = g_strconcat (base_uri, "Basic/realm1/", NULL);
|
|
+ for (i = 0; i < 10; i++) {
|
|
+ msg = soup_message_new (SOUP_METHOD_GET, uri);
|
|
+ g_object_set_data (G_OBJECT (msg), "#", GINT_TO_POINTER (i + 1));
|
|
+ g_signal_connect (msg, "wrote_headers",
|
|
+ G_CALLBACK (bug271540_sent), &authenticated);
|
|
+
|
|
+ soup_session_queue_message (session, msg,
|
|
+ bug271540_finished, &i);
|
|
+ }
|
|
+
|
|
+ loop = g_main_loop_new (NULL, TRUE);
|
|
+ g_main_loop_run (loop);
|
|
|
|
g_object_unref (session);
|
|
|
|
diff -ruNp libsoup-2.2.100/tests/get.c libsoup-2.2.100/tests/get.c
|
|
--- libsoup-2.2.100/tests/get.c 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/tests/get.c 2007-04-09 17:03:24.000000000 -0400
|
|
@@ -26,6 +26,7 @@ const char *method = SOUP_METHOD_GET;
|
|
char *base;
|
|
SoupUri *base_uri;
|
|
int pending;
|
|
+GHashTable *fetched_urls;
|
|
|
|
static GPtrArray *
|
|
find_hrefs (const SoupUri *base, const char *body, int length)
|
|
@@ -98,8 +99,6 @@ mkdirs (const char *path)
|
|
}
|
|
}
|
|
|
|
-static void get_url (const char *url);
|
|
-
|
|
static void
|
|
print_header (gpointer name, gpointer value, gpointer data)
|
|
{
|
|
@@ -107,18 +106,57 @@ print_header (gpointer name, gpointer va
|
|
}
|
|
|
|
static void
|
|
-got_url (SoupMessage *msg, gpointer uri)
|
|
+get_url (const char *url)
|
|
{
|
|
- char *name;
|
|
+ char *url_to_get, *slash, *name;
|
|
+ SoupMessage *msg;
|
|
int fd, i;
|
|
+ SoupUri *uri;
|
|
GPtrArray *hrefs;
|
|
const char *header;
|
|
|
|
+ if (strncmp (url, base, strlen (base)) != 0)
|
|
+ return;
|
|
+ if (strchr (url, '?') && strcmp (url, base) != 0)
|
|
+ return;
|
|
+
|
|
+ slash = strrchr (url, '/');
|
|
+ if (slash && !slash[1])
|
|
+ url_to_get = g_strdup_printf ("%sindex.html", url);
|
|
+ else
|
|
+ url_to_get = g_strdup (url);
|
|
+
|
|
+ if (g_hash_table_lookup (fetched_urls, url_to_get))
|
|
+ return;
|
|
+ g_hash_table_insert (fetched_urls, url_to_get, url_to_get);
|
|
+
|
|
+ if (recurse) {
|
|
+ /* See if we're already downloading it, and create the
|
|
+ * file if not.
|
|
+ */
|
|
+
|
|
+ name = url_to_get + strlen (base);
|
|
+ if (*name == '/')
|
|
+ name++;
|
|
+ if (access (name, F_OK) == 0)
|
|
+ return;
|
|
+
|
|
+ mkdirs (name);
|
|
+ fd = open (name, O_WRONLY | O_CREAT | O_TRUNC, 0644);
|
|
+ close (fd);
|
|
+ }
|
|
+
|
|
+ msg = soup_message_new (method, url_to_get);
|
|
+ soup_message_set_flags (msg, SOUP_MESSAGE_NO_REDIRECT);
|
|
+
|
|
+ soup_session_send_message (session, msg);
|
|
+
|
|
name = soup_message_get_uri (msg)->path;
|
|
if (strncmp (base_uri->path, name, strlen (base_uri->path)) != 0) {
|
|
fprintf (stderr, " Error: not under %s\n", base_uri->path);
|
|
- goto DONE;
|
|
+ return;
|
|
}
|
|
+
|
|
if (debug) {
|
|
char *path = soup_uri_to_string (soup_message_get_uri (msg), TRUE);
|
|
printf ("%s %s HTTP/1.%d\n\n", method, path,
|
|
@@ -136,18 +174,19 @@ got_url (SoupMessage *msg, gpointer uri)
|
|
name++;
|
|
|
|
if (SOUP_STATUS_IS_REDIRECTION (msg->status_code)) {
|
|
- unlink (name);
|
|
+ if (recurse)
|
|
+ unlink (name);
|
|
header = soup_message_get_header (msg->response_headers, "Location");
|
|
if (header) {
|
|
if (!debug)
|
|
printf (" -> %s\n", header);
|
|
get_url (header);
|
|
}
|
|
- goto DONE;
|
|
+ return;
|
|
}
|
|
|
|
if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code))
|
|
- goto DONE;
|
|
+ return;
|
|
|
|
if (recurse)
|
|
fd = open (name, O_WRONLY | O_CREAT | O_TRUNC, 0644);
|
|
@@ -155,66 +194,21 @@ got_url (SoupMessage *msg, gpointer uri)
|
|
fd = STDOUT_FILENO;
|
|
write (fd, msg->response.body, msg->response.length);
|
|
if (!recurse)
|
|
- goto DONE;
|
|
+ return;
|
|
close (fd);
|
|
|
|
header = soup_message_get_header (msg->response_headers, "Content-Type");
|
|
if (header && g_ascii_strncasecmp (header, "text/html", 9) != 0)
|
|
- goto DONE;
|
|
+ return;
|
|
|
|
+ uri = soup_uri_new (url);
|
|
hrefs = find_hrefs (uri, msg->response.body, msg->response.length);
|
|
+ soup_uri_free (uri);
|
|
for (i = 0; i < hrefs->len; i++) {
|
|
get_url (hrefs->pdata[i]);
|
|
g_free (hrefs->pdata[i]);
|
|
}
|
|
g_ptr_array_free (hrefs, TRUE);
|
|
-
|
|
- DONE:
|
|
- soup_uri_free (uri);
|
|
- if (!--pending)
|
|
- g_main_quit (loop);
|
|
-}
|
|
-
|
|
-static void
|
|
-get_url (const char *url)
|
|
-{
|
|
- char *url_to_get, *slash, *name;
|
|
- SoupMessage *msg;
|
|
- int fd;
|
|
-
|
|
- if (strncmp (url, base, strlen (base)) != 0)
|
|
- return;
|
|
-
|
|
- slash = strrchr (url, '/');
|
|
- if (slash && !slash[1])
|
|
- url_to_get = g_strdup_printf ("%sindex.html", url);
|
|
- else
|
|
- url_to_get = g_strdup (url);
|
|
-
|
|
- if (recurse) {
|
|
- /* See if we're already downloading it, and create the
|
|
- * file if not.
|
|
- */
|
|
-
|
|
- name = url_to_get + strlen (base);
|
|
- if (*name == '/')
|
|
- name++;
|
|
- if (access (name, F_OK) == 0) {
|
|
- g_free (url_to_get);
|
|
- return;
|
|
- }
|
|
-
|
|
- mkdirs (name);
|
|
- fd = open (name, O_WRONLY | O_CREAT | O_TRUNC, 0644);
|
|
- close (fd);
|
|
- }
|
|
-
|
|
- msg = soup_message_new (method, url_to_get);
|
|
- soup_message_set_flags (msg, SOUP_MESSAGE_NO_REDIRECT);
|
|
-
|
|
- pending++;
|
|
- soup_session_queue_message (session, msg, got_url, soup_uri_new (url));
|
|
- g_free (url_to_get);
|
|
}
|
|
|
|
static void
|
|
@@ -229,12 +223,13 @@ main (int argc, char **argv)
|
|
{
|
|
const char *cafile = NULL;
|
|
SoupUri *proxy = NULL;
|
|
+ gboolean synchronous = FALSE;
|
|
int opt;
|
|
|
|
g_type_init ();
|
|
g_thread_init (NULL);
|
|
|
|
- while ((opt = getopt (argc, argv, "c:dhp:r")) != -1) {
|
|
+ while ((opt = getopt (argc, argv, "c:dhp:rs")) != -1) {
|
|
switch (opt) {
|
|
case 'c':
|
|
cafile = optarg;
|
|
@@ -262,6 +257,10 @@ main (int argc, char **argv)
|
|
recurse = TRUE;
|
|
break;
|
|
|
|
+ case 's':
|
|
+ synchronous = TRUE;
|
|
+ break;
|
|
+
|
|
case '?':
|
|
usage ();
|
|
break;
|
|
@@ -279,10 +278,19 @@ main (int argc, char **argv)
|
|
exit (1);
|
|
}
|
|
|
|
- session = soup_session_async_new_with_options (
|
|
- SOUP_SESSION_SSL_CA_FILE, cafile,
|
|
- SOUP_SESSION_PROXY_URI, proxy,
|
|
- NULL);
|
|
+ fetched_urls = g_hash_table_new (g_str_hash, g_str_equal);
|
|
+
|
|
+ if (synchronous) {
|
|
+ session = soup_session_sync_new_with_options (
|
|
+ SOUP_SESSION_SSL_CA_FILE, cafile,
|
|
+ SOUP_SESSION_PROXY_URI, proxy,
|
|
+ NULL);
|
|
+ } else {
|
|
+ session = soup_session_async_new_with_options (
|
|
+ SOUP_SESSION_SSL_CA_FILE, cafile,
|
|
+ SOUP_SESSION_PROXY_URI, proxy,
|
|
+ NULL);
|
|
+ }
|
|
|
|
if (recurse) {
|
|
char *outdir;
|
|
@@ -297,11 +305,13 @@ main (int argc, char **argv)
|
|
g_free (outdir);
|
|
}
|
|
|
|
+ if (!synchronous)
|
|
+ loop = g_main_loop_new (NULL, TRUE);
|
|
+
|
|
get_url (base);
|
|
|
|
- loop = g_main_loop_new (NULL, TRUE);
|
|
- g_main_run (loop);
|
|
- g_main_loop_unref (loop);
|
|
+ if (!synchronous)
|
|
+ g_main_loop_unref (loop);
|
|
|
|
soup_uri_free (base_uri);
|
|
|
|
diff -ruNp libsoup-2.2.100/tests/httpd.conf.in libsoup-2.2.100/tests/httpd.conf.in
|
|
--- libsoup-2.2.100/tests/httpd.conf.in 2007-01-02 13:25:11.000000000 -0500
|
|
+++ libsoup-2.2.100/tests/httpd.conf.in 2007-04-09 17:03:24.000000000 -0400
|
|
@@ -6,21 +6,161 @@ Listen 127.0.0.1:47524
|
|
PidFile @builddir@/httpd.pid
|
|
DocumentRoot @srcdir@
|
|
|
|
+# The tests shut down apache with "graceful-stop", because that makes
|
|
+# it close its listening socket right away. But it seems to sometimes
|
|
+# result in apache never fully exiting. This fixes that.
|
|
+GracefulShutdownTimeout 1
|
|
+
|
|
# Change this to "./error.log" if it's failing and you don't know why
|
|
ErrorLog /dev/null
|
|
|
|
-LoadModule alias_module @APACHE_MODULE_DIR@/mod_alias.so
|
|
-LoadModule auth_basic_module @APACHE_MODULE_DIR@/mod_auth_basic.so
|
|
-LoadModule auth_digest_module @APACHE_MODULE_DIR@/mod_auth_digest.so
|
|
-LoadModule authn_file_module @APACHE_MODULE_DIR@/mod_authn_file.so
|
|
-LoadModule authz_user_module @APACHE_MODULE_DIR@/mod_authz_user.so
|
|
-LoadModule dir_module @APACHE_MODULE_DIR@/mod_dir.so
|
|
-LoadModule mime_module @APACHE_MODULE_DIR@/mod_mime.so
|
|
-@IF_HAVE_PHP@LoadModule php5_module @APACHE_MODULE_DIR@/mod_php5.so
|
|
+LoadModule alias_module @APACHE_MODULE_DIR@/mod_alias.so
|
|
+LoadModule auth_basic_module @APACHE_MODULE_DIR@/mod_auth_basic.so
|
|
+LoadModule auth_digest_module @APACHE_MODULE_DIR@/mod_auth_digest.so
|
|
+LoadModule authn_file_module @APACHE_MODULE_DIR@/mod_authn_file.so
|
|
+LoadModule authz_host_module @APACHE_MODULE_DIR@/mod_authz_host.so
|
|
+LoadModule authz_user_module @APACHE_MODULE_DIR@/mod_authz_user.so
|
|
+LoadModule dir_module @APACHE_MODULE_DIR@/mod_dir.so
|
|
+LoadModule mime_module @APACHE_MODULE_DIR@/mod_mime.so
|
|
+@IF_HAVE_PHP@LoadModule php5_module @APACHE_PHP_MODULE_DIR@/mod_php5.so
|
|
+LoadModule proxy_module @APACHE_MODULE_DIR@/mod_proxy.so
|
|
+LoadModule proxy_http_module @APACHE_MODULE_DIR@/mod_proxy_http.so
|
|
+LoadModule proxy_connect_module @APACHE_MODULE_DIR@/mod_proxy_connect.so
|
|
+LoadModule ssl_module @APACHE_SSL_MODULE_DIR@/mod_ssl.so
|
|
|
|
DirectoryIndex httpd.pid
|
|
AddType application/x-httpd-php .php
|
|
|
|
+
|
|
+# Proxy #1: unauthenticated
|
|
+Listen 127.0.0.1:47526
|
|
+<VirtualHost 127.0.0.1:47526>
|
|
+ ProxyRequests On
|
|
+ AllowCONNECT 47525
|
|
+
|
|
+ # Deny proxying by default
|
|
+ <Proxy *>
|
|
+ Order Deny,Allow
|
|
+ Deny from all
|
|
+ </Proxy>
|
|
+
|
|
+ # Allow local http connections
|
|
+ <Proxy http://127.0.0.1:47524*>
|
|
+ Order Allow,Deny
|
|
+ Allow from all
|
|
+ </Proxy>
|
|
+
|
|
+ # Allow CONNECT to local https port
|
|
+ <Proxy 127.0.0.1:47525>
|
|
+ Order Allow,Deny
|
|
+ Allow from all
|
|
+ </Proxy>
|
|
+
|
|
+ # Deny non-proxy requests
|
|
+ <Directory />
|
|
+ Order Deny,Allow
|
|
+ Deny from all
|
|
+ </Directory>
|
|
+</VirtualHost>
|
|
+
|
|
+# Proxy #2: authenticated
|
|
+Listen 127.0.0.1:47527
|
|
+<VirtualHost 127.0.0.1:47527>
|
|
+ ProxyRequests On
|
|
+ AllowCONNECT 47525
|
|
+
|
|
+ # Deny proxying by default
|
|
+ <Proxy *>
|
|
+ Order Deny,Allow
|
|
+ Deny from all
|
|
+ </Proxy>
|
|
+
|
|
+ # Allow local http connections with authentication
|
|
+ <Proxy http://127.0.0.1:47524*>
|
|
+ Order Allow,Deny
|
|
+ Allow from all
|
|
+
|
|
+ AuthType Basic
|
|
+ AuthName realm1
|
|
+ AuthUserFile ./htpasswd
|
|
+ Require valid-user
|
|
+ </Proxy>
|
|
+
|
|
+ # Allow CONNECT to local https port with authentication
|
|
+ <Proxy 127.0.0.1:47525>
|
|
+ Order Allow,Deny
|
|
+ Allow from all
|
|
+
|
|
+ AuthType Basic
|
|
+ AuthName realm1
|
|
+ AuthUserFile ./htpasswd
|
|
+ Require valid-user
|
|
+ </Proxy>
|
|
+
|
|
+ # Fail non-proxy requests
|
|
+ <Directory />
|
|
+ Order Deny,Allow
|
|
+ Deny from all
|
|
+ </Directory>
|
|
+</VirtualHost>
|
|
+
|
|
+# Proxy #3: unauthenticatable-to
|
|
+Listen 127.0.0.1:47528
|
|
+<VirtualHost 127.0.0.1:47528>
|
|
+ ProxyRequests On
|
|
+ AllowCONNECT 47525
|
|
+
|
|
+ # Deny proxying by default
|
|
+ <Proxy *>
|
|
+ Order Deny,Allow
|
|
+ Deny from all
|
|
+ </Proxy>
|
|
+
|
|
+ # Allow local http connections with authentication
|
|
+ <Proxy http://127.0.0.1:47524*>
|
|
+ Order Allow,Deny
|
|
+ Allow from all
|
|
+
|
|
+ AuthType Basic
|
|
+ AuthName realm1
|
|
+ AuthUserFile ./htpasswd
|
|
+ Require user no-such-user
|
|
+ </Proxy>
|
|
+
|
|
+ # Allow CONNECT to local https port with authentication
|
|
+ <Proxy 127.0.0.1:47525>
|
|
+ Order Allow,Deny
|
|
+ Allow from all
|
|
+
|
|
+ AuthType Basic
|
|
+ AuthName realm1
|
|
+ AuthUserFile ./htpasswd
|
|
+ Require user no-such-user
|
|
+ </Proxy>
|
|
+
|
|
+ # Fail non-proxy requests
|
|
+ <Directory />
|
|
+ Order Deny,Allow
|
|
+ Deny from all
|
|
+ </Directory>
|
|
+</VirtualHost>
|
|
+
|
|
+
|
|
+# SSL setup
|
|
+<IfModule mod_ssl.c>
|
|
+ Listen 127.0.0.1:47525
|
|
+
|
|
+ <VirtualHost 127.0.0.1:47525>
|
|
+ SSLEngine on
|
|
+
|
|
+ SSLCertificateFile test-cert.pem
|
|
+ SSLCertificateKeyFile test-key.pem
|
|
+
|
|
+ </VirtualHost>
|
|
+</IfModule>
|
|
+
|
|
+
|
|
+# Basic auth tests
|
|
Alias /Basic/realm1/realm2/realm1 @builddir@
|
|
Alias /Basic/realm1/realm2 @builddir@
|
|
Alias /Basic/realm1/subdir @builddir@
|
|
@@ -28,6 +168,7 @@ Alias /Basic/realm1/not @builddir@
|
|
Alias /Basic/realm1 @builddir@
|
|
Alias /Basic/realm2 @builddir@
|
|
Alias /Basic/realm3 @builddir@
|
|
+Alias /Basic @builddir@
|
|
|
|
<Location /Basic/realm1>
|
|
AuthType Basic
|
|
@@ -71,7 +212,7 @@ Alias /Basic/realm3 @builddir@
|
|
Require user user3
|
|
</Location>
|
|
|
|
-
|
|
+# Digest auth tests
|
|
Alias /Digest/realm1/realm2/realm1 @builddir@
|
|
Alias /Digest/realm1/realm2 @builddir@
|
|
Alias /Digest/realm1/subdir @builddir@
|
|
@@ -79,6 +220,7 @@ Alias /Digest/realm1/not @builddir@
|
|
Alias /Digest/realm1 @builddir@
|
|
Alias /Digest/realm2 @builddir@
|
|
Alias /Digest/realm3 @builddir@
|
|
+Alias /Digest @builddir@
|
|
|
|
<Location /Digest/realm1>
|
|
AuthType Digest
|
|
@@ -127,4 +269,3 @@ Alias /Digest/realm3 @builddir@
|
|
AuthDigestDomain /Digest/realm3
|
|
Require valid-user
|
|
</Location>
|
|
-
|
|
diff -ruNp libsoup-2.2.100/tests/Makefile.am libsoup-2.2.100/tests/Makefile.am
|
|
--- libsoup-2.2.100/tests/Makefile.am 2007-01-05 14:41:31.000000000 -0500
|
|
+++ libsoup-2.2.100/tests/Makefile.am 2007-04-09 17:03:24.000000000 -0400
|
|
@@ -1,12 +1,12 @@
|
|
INCLUDES = \
|
|
-I$(top_srcdir) \
|
|
$(XML_CFLAGS) \
|
|
- $(GLIB_CFLAGS)
|
|
+ $(GLIB_CFLAGS) \
|
|
+ $(LIBGNUTLS_CFLAGS)
|
|
|
|
LIBS = $(top_builddir)/libsoup/libsoup-$(SOUP_API_VERSION).la
|
|
|
|
noinst_PROGRAMS = \
|
|
- auth-test \
|
|
date \
|
|
dict \
|
|
dns \
|
|
@@ -17,6 +17,8 @@ noinst_PROGRAMS = \
|
|
simple-httpd \
|
|
simple-proxy \
|
|
uri-parsing \
|
|
+ $(APACHE_TESTS) \
|
|
+ $(SSL_TESTS) \
|
|
$(XMLRPC_TESTS)
|
|
|
|
auth_test_SOURCES = auth-test.c apache-wrapper.c apache-wrapper.h
|
|
@@ -26,20 +28,25 @@ dns_SOURCES = dns.c
|
|
get_SOURCES = get.c
|
|
getbug_SOURCES = getbug.c
|
|
header_parsing_SOURCES = header-parsing.c
|
|
+proxy_test_SOURCES = proxy-test.c apache-wrapper.c apache-wrapper.h
|
|
revserver_SOURCES = revserver.c
|
|
simple_httpd_SOURCES = simple-httpd.c
|
|
simple_proxy_SOURCES = simple-proxy.c
|
|
+ssl_test_SOURCES = ssl-test.c
|
|
uri_parsing_SOURCES = uri-parsing.c
|
|
xmlrpc_test_SOURCES = xmlrpc-test.c apache-wrapper.c apache-wrapper.h
|
|
|
|
if HAVE_APACHE
|
|
-APACHE_TESTS = auth-test
|
|
+APACHE_TESTS = auth-test proxy-test
|
|
+endif
|
|
+if HAVE_SSL
|
|
+SSL_TESTS = ssl-test
|
|
endif
|
|
if HAVE_XMLRPC_EPI_PHP
|
|
XMLRPC_TESTS = xmlrpc-test
|
|
endif
|
|
|
|
-TESTS = date header-parsing uri-parsing $(APACHE_TESTS) $(XMLRPC_TESTS)
|
|
+TESTS = date header-parsing uri-parsing $(APACHE_TESTS) $(SSL_TESTS) $(XMLRPC_TESTS)
|
|
|
|
EXTRA_DIST = \
|
|
libsoup.supp \
|
|
diff -ruNp libsoup-2.2.100/tests/Makefile.in libsoup-2.2.100/tests/Makefile.in
|
|
--- libsoup-2.2.100/tests/Makefile.in 2007-02-12 10:34:12.000000000 -0500
|
|
+++ libsoup-2.2.100/tests/Makefile.in 2007-05-01 15:49:10.000000000 -0400
|
|
@@ -36,11 +36,11 @@ PRE_UNINSTALL = :
|
|
POST_UNINSTALL = :
|
|
build_triplet = @build@
|
|
host_triplet = @host@
|
|
-noinst_PROGRAMS = auth-test$(EXEEXT) date$(EXEEXT) dict$(EXEEXT) \
|
|
- dns$(EXEEXT) get$(EXEEXT) getbug$(EXEEXT) \
|
|
- header-parsing$(EXEEXT) revserver$(EXEEXT) \
|
|
- simple-httpd$(EXEEXT) simple-proxy$(EXEEXT) \
|
|
- uri-parsing$(EXEEXT) $(am__EXEEXT_1)
|
|
+noinst_PROGRAMS = date$(EXEEXT) dict$(EXEEXT) dns$(EXEEXT) \
|
|
+ get$(EXEEXT) getbug$(EXEEXT) header-parsing$(EXEEXT) \
|
|
+ revserver$(EXEEXT) simple-httpd$(EXEEXT) simple-proxy$(EXEEXT) \
|
|
+ uri-parsing$(EXEEXT) $(am__EXEEXT_1) $(am__EXEEXT_2) \
|
|
+ $(am__EXEEXT_3)
|
|
subdir = tests
|
|
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
|
|
$(srcdir)/httpd.conf.in
|
|
@@ -52,7 +52,10 @@ am__configure_deps = $(am__aclocal_m4_de
|
|
mkinstalldirs = $(install_sh) -d
|
|
CONFIG_HEADER = $(top_builddir)/config.h
|
|
CONFIG_CLEAN_FILES = httpd.conf
|
|
-@HAVE_XMLRPC_EPI_PHP_TRUE@am__EXEEXT_1 = xmlrpc-test$(EXEEXT)
|
|
+@HAVE_APACHE_TRUE@am__EXEEXT_1 = auth-test$(EXEEXT) \
|
|
+@HAVE_APACHE_TRUE@ proxy-test$(EXEEXT)
|
|
+@HAVE_SSL_TRUE@am__EXEEXT_2 = ssl-test$(EXEEXT)
|
|
+@HAVE_XMLRPC_EPI_PHP_TRUE@am__EXEEXT_3 = xmlrpc-test$(EXEEXT)
|
|
PROGRAMS = $(noinst_PROGRAMS)
|
|
am_auth_test_OBJECTS = auth-test.$(OBJEXT) apache-wrapper.$(OBJEXT)
|
|
auth_test_OBJECTS = $(am_auth_test_OBJECTS)
|
|
@@ -75,6 +78,9 @@ getbug_LDADD = $(LDADD)
|
|
am_header_parsing_OBJECTS = header-parsing.$(OBJEXT)
|
|
header_parsing_OBJECTS = $(am_header_parsing_OBJECTS)
|
|
header_parsing_LDADD = $(LDADD)
|
|
+am_proxy_test_OBJECTS = proxy-test.$(OBJEXT) apache-wrapper.$(OBJEXT)
|
|
+proxy_test_OBJECTS = $(am_proxy_test_OBJECTS)
|
|
+proxy_test_LDADD = $(LDADD)
|
|
am_revserver_OBJECTS = revserver.$(OBJEXT)
|
|
revserver_OBJECTS = $(am_revserver_OBJECTS)
|
|
revserver_LDADD = $(LDADD)
|
|
@@ -84,6 +90,9 @@ simple_httpd_LDADD = $(LDADD)
|
|
am_simple_proxy_OBJECTS = simple-proxy.$(OBJEXT)
|
|
simple_proxy_OBJECTS = $(am_simple_proxy_OBJECTS)
|
|
simple_proxy_LDADD = $(LDADD)
|
|
+am_ssl_test_OBJECTS = ssl-test.$(OBJEXT)
|
|
+ssl_test_OBJECTS = $(am_ssl_test_OBJECTS)
|
|
+ssl_test_LDADD = $(LDADD)
|
|
am_uri_parsing_OBJECTS = uri-parsing.$(OBJEXT)
|
|
uri_parsing_OBJECTS = $(am_uri_parsing_OBJECTS)
|
|
uri_parsing_LDADD = $(LDADD)
|
|
@@ -104,13 +113,15 @@ LINK = $(LIBTOOL) --tag=CC --mode=link $
|
|
$(AM_LDFLAGS) $(LDFLAGS) -o $@
|
|
SOURCES = $(auth_test_SOURCES) $(date_SOURCES) $(dict_SOURCES) \
|
|
$(dns_SOURCES) $(get_SOURCES) $(getbug_SOURCES) \
|
|
- $(header_parsing_SOURCES) $(revserver_SOURCES) \
|
|
- $(simple_httpd_SOURCES) $(simple_proxy_SOURCES) \
|
|
+ $(header_parsing_SOURCES) $(proxy_test_SOURCES) \
|
|
+ $(revserver_SOURCES) $(simple_httpd_SOURCES) \
|
|
+ $(simple_proxy_SOURCES) $(ssl_test_SOURCES) \
|
|
$(uri_parsing_SOURCES) $(xmlrpc_test_SOURCES)
|
|
DIST_SOURCES = $(auth_test_SOURCES) $(date_SOURCES) $(dict_SOURCES) \
|
|
$(dns_SOURCES) $(get_SOURCES) $(getbug_SOURCES) \
|
|
- $(header_parsing_SOURCES) $(revserver_SOURCES) \
|
|
- $(simple_httpd_SOURCES) $(simple_proxy_SOURCES) \
|
|
+ $(header_parsing_SOURCES) $(proxy_test_SOURCES) \
|
|
+ $(revserver_SOURCES) $(simple_httpd_SOURCES) \
|
|
+ $(simple_proxy_SOURCES) $(ssl_test_SOURCES) \
|
|
$(uri_parsing_SOURCES) $(xmlrpc_test_SOURCES)
|
|
ETAGS = etags
|
|
CTAGS = ctags
|
|
@@ -122,6 +133,8 @@ AMDEP_TRUE = @AMDEP_TRUE@
|
|
AMTAR = @AMTAR@
|
|
APACHE_HTTPD = @APACHE_HTTPD@
|
|
APACHE_MODULE_DIR = @APACHE_MODULE_DIR@
|
|
+APACHE_PHP_MODULE_DIR = @APACHE_PHP_MODULE_DIR@
|
|
+APACHE_SSL_MODULE_DIR = @APACHE_SSL_MODULE_DIR@
|
|
AR = @AR@
|
|
AS = @AS@
|
|
AUTOCONF = @AUTOCONF@
|
|
@@ -161,6 +174,8 @@ GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE
|
|
GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
|
|
HAVE_APACHE_FALSE = @HAVE_APACHE_FALSE@
|
|
HAVE_APACHE_TRUE = @HAVE_APACHE_TRUE@
|
|
+HAVE_SSL_FALSE = @HAVE_SSL_FALSE@
|
|
+HAVE_SSL_TRUE = @HAVE_SSL_TRUE@
|
|
HAVE_XMLRPC_EPI_PHP_FALSE = @HAVE_XMLRPC_EPI_PHP_FALSE@
|
|
HAVE_XMLRPC_EPI_PHP_TRUE = @HAVE_XMLRPC_EPI_PHP_TRUE@
|
|
HTML_DIR = @HTML_DIR@
|
|
@@ -170,6 +185,9 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
|
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
|
LDFLAGS = @LDFLAGS@
|
|
+LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
|
|
+LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
|
|
+LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
|
|
LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@
|
|
LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@
|
|
LIBOBJS = @LIBOBJS@
|
|
@@ -256,7 +274,8 @@ target_alias = @target_alias@
|
|
INCLUDES = \
|
|
-I$(top_srcdir) \
|
|
$(XML_CFLAGS) \
|
|
- $(GLIB_CFLAGS)
|
|
+ $(GLIB_CFLAGS) \
|
|
+ $(LIBGNUTLS_CFLAGS)
|
|
|
|
auth_test_SOURCES = auth-test.c apache-wrapper.c apache-wrapper.h
|
|
date_SOURCES = date.c
|
|
@@ -265,14 +284,17 @@ dns_SOURCES = dns.c
|
|
get_SOURCES = get.c
|
|
getbug_SOURCES = getbug.c
|
|
header_parsing_SOURCES = header-parsing.c
|
|
+proxy_test_SOURCES = proxy-test.c apache-wrapper.c apache-wrapper.h
|
|
revserver_SOURCES = revserver.c
|
|
simple_httpd_SOURCES = simple-httpd.c
|
|
simple_proxy_SOURCES = simple-proxy.c
|
|
+ssl_test_SOURCES = ssl-test.c
|
|
uri_parsing_SOURCES = uri-parsing.c
|
|
xmlrpc_test_SOURCES = xmlrpc-test.c apache-wrapper.c apache-wrapper.h
|
|
-@HAVE_APACHE_TRUE@APACHE_TESTS = auth-test
|
|
+@HAVE_APACHE_TRUE@APACHE_TESTS = auth-test proxy-test
|
|
+@HAVE_SSL_TRUE@SSL_TESTS = ssl-test
|
|
@HAVE_XMLRPC_EPI_PHP_TRUE@XMLRPC_TESTS = xmlrpc-test
|
|
-TESTS = date header-parsing uri-parsing $(APACHE_TESTS) $(XMLRPC_TESTS)
|
|
+TESTS = date header-parsing uri-parsing $(APACHE_TESTS) $(SSL_TESTS) $(XMLRPC_TESTS)
|
|
EXTRA_DIST = \
|
|
libsoup.supp \
|
|
test-cert.pem \
|
|
@@ -345,6 +367,9 @@ getbug$(EXEEXT): $(getbug_OBJECTS) $(get
|
|
header-parsing$(EXEEXT): $(header_parsing_OBJECTS) $(header_parsing_DEPENDENCIES)
|
|
@rm -f header-parsing$(EXEEXT)
|
|
$(LINK) $(header_parsing_LDFLAGS) $(header_parsing_OBJECTS) $(header_parsing_LDADD) $(LIBS)
|
|
+proxy-test$(EXEEXT): $(proxy_test_OBJECTS) $(proxy_test_DEPENDENCIES)
|
|
+ @rm -f proxy-test$(EXEEXT)
|
|
+ $(LINK) $(proxy_test_LDFLAGS) $(proxy_test_OBJECTS) $(proxy_test_LDADD) $(LIBS)
|
|
revserver$(EXEEXT): $(revserver_OBJECTS) $(revserver_DEPENDENCIES)
|
|
@rm -f revserver$(EXEEXT)
|
|
$(LINK) $(revserver_LDFLAGS) $(revserver_OBJECTS) $(revserver_LDADD) $(LIBS)
|
|
@@ -354,6 +379,9 @@ simple-httpd$(EXEEXT): $(simple_httpd_OB
|
|
simple-proxy$(EXEEXT): $(simple_proxy_OBJECTS) $(simple_proxy_DEPENDENCIES)
|
|
@rm -f simple-proxy$(EXEEXT)
|
|
$(LINK) $(simple_proxy_LDFLAGS) $(simple_proxy_OBJECTS) $(simple_proxy_LDADD) $(LIBS)
|
|
+ssl-test$(EXEEXT): $(ssl_test_OBJECTS) $(ssl_test_DEPENDENCIES)
|
|
+ @rm -f ssl-test$(EXEEXT)
|
|
+ $(LINK) $(ssl_test_LDFLAGS) $(ssl_test_OBJECTS) $(ssl_test_LDADD) $(LIBS)
|
|
uri-parsing$(EXEEXT): $(uri_parsing_OBJECTS) $(uri_parsing_DEPENDENCIES)
|
|
@rm -f uri-parsing$(EXEEXT)
|
|
$(LINK) $(uri_parsing_LDFLAGS) $(uri_parsing_OBJECTS) $(uri_parsing_LDADD) $(LIBS)
|
|
@@ -375,9 +403,11 @@ distclean-compile:
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getbug.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/header-parsing.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxy-test.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/revserver.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple-httpd.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple-proxy.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssl-test.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uri-parsing.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmlrpc-test.Po@am__quote@
|
|
|
|
diff -ruNp libsoup-2.2.100/tests/proxy-test.c libsoup-2.2.100/tests/proxy-test.c
|
|
--- libsoup-2.2.100/tests/proxy-test.c 1969-12-31 19:00:00.000000000 -0500
|
|
+++ libsoup-2.2.100/tests/proxy-test.c 2007-04-09 17:03:24.000000000 -0400
|
|
@@ -0,0 +1,148 @@
|
|
+#ifdef HAVE_CONFIG_H
|
|
+#include "config.h"
|
|
+#endif
|
|
+
|
|
+#include <stdio.h>
|
|
+#include <stdlib.h>
|
|
+#include <string.h>
|
|
+
|
|
+#include "libsoup/soup.h"
|
|
+#include "apache-wrapper.h"
|
|
+
|
|
+int errors = 0;
|
|
+
|
|
+typedef struct {
|
|
+ const char *explanation;
|
|
+ const char *url;
|
|
+ const guint final_status;
|
|
+} SoupProxyTest;
|
|
+
|
|
+SoupProxyTest tests[] = {
|
|
+ { "GET -> 200", "", SOUP_STATUS_OK },
|
|
+ { "GET -> 404", "/not-found", SOUP_STATUS_NOT_FOUND },
|
|
+ { "GET -> 401 -> 200", "/Basic/realm1/", SOUP_STATUS_OK },
|
|
+ { "GET -> 401 -> 401", "/Basic/realm2/", SOUP_STATUS_UNAUTHORIZED },
|
|
+ { "GET -> 403", "http://no-proxy.example.com/", SOUP_STATUS_FORBIDDEN },
|
|
+};
|
|
+int ntests = sizeof (tests) / sizeof (tests[0]);
|
|
+
|
|
+#define HTTP_SERVER "http://127.0.0.1:47524"
|
|
+#define HTTPS_SERVER "https://127.0.0.1:47525"
|
|
+
|
|
+enum {
|
|
+ SIMPLE_PROXY,
|
|
+ AUTH_PROXY,
|
|
+ UNAUTH_PROXY
|
|
+};
|
|
+static const char *proxies[] = {
|
|
+ "http://127.0.0.1:47526",
|
|
+ "http://127.0.0.1:47527",
|
|
+ "http://127.0.0.1:47528"
|
|
+};
|
|
+static const char *proxy_names[] = {
|
|
+ "simple proxy",
|
|
+ "authenticated proxy",
|
|
+ "unauthenticatable-to proxy"
|
|
+};
|
|
+
|
|
+static void
|
|
+authenticate (SoupSession *session, SoupMessage *msg,
|
|
+ const char *auth_type, const char *auth_realm,
|
|
+ char **username, char **password, gpointer data)
|
|
+{
|
|
+ *username = g_strdup ("user1");
|
|
+ *password = g_strdup ("realm1");
|
|
+}
|
|
+
|
|
+static void
|
|
+test_url (const char *url, int proxy, guint expected, gboolean sync)
|
|
+{
|
|
+ SoupSession *session;
|
|
+ SoupUri *proxy_uri;
|
|
+ SoupMessage *msg;
|
|
+
|
|
+ printf (" GET %s via %s\n", url, proxy_names[proxy]);
|
|
+ if (proxy == UNAUTH_PROXY && expected != SOUP_STATUS_FORBIDDEN)
|
|
+ expected = SOUP_STATUS_PROXY_UNAUTHORIZED;
|
|
+
|
|
+ /* We create a new session for each request to ensure that
|
|
+ * connections/auth aren't cached between tests.
|
|
+ */
|
|
+ proxy_uri = soup_uri_new (proxies[proxy]);
|
|
+ session = g_object_new (sync ? SOUP_TYPE_SESSION_SYNC : SOUP_TYPE_SESSION_ASYNC,
|
|
+ SOUP_SESSION_PROXY_URI, proxy_uri,
|
|
+ NULL);
|
|
+ soup_uri_free (proxy_uri);
|
|
+ g_signal_connect (session, "authenticate",
|
|
+ G_CALLBACK (authenticate), NULL);
|
|
+
|
|
+ msg = soup_message_new (SOUP_METHOD_GET, url);
|
|
+ if (!msg) {
|
|
+ fprintf (stderr, "proxy-test: Could not parse URI\n");
|
|
+ exit (1);
|
|
+ }
|
|
+
|
|
+ soup_session_send_message (session, msg);
|
|
+
|
|
+ printf (" %d %s\n", msg->status_code, msg->reason_phrase);
|
|
+ if (msg->status_code != expected) {
|
|
+ printf (" EXPECTED %d!\n", expected);
|
|
+ errors++;
|
|
+ }
|
|
+
|
|
+ g_object_unref (msg);
|
|
+ soup_session_abort (session);
|
|
+ g_object_unref (session);
|
|
+}
|
|
+
|
|
+static void
|
|
+run_test (int i, gboolean sync)
|
|
+{
|
|
+ char *http_url, *https_url;
|
|
+
|
|
+ printf ("Test %d: %s (%s)\n", i + 1, tests[i].explanation,
|
|
+ sync ? "sync" : "async");
|
|
+
|
|
+ if (!strncmp (tests[i].url, "http", 4)) {
|
|
+ http_url = g_strdup (tests[i].url);
|
|
+ https_url = g_strdup_printf ("https%s", tests[i].url + 4);
|
|
+ } else {
|
|
+ http_url = g_strconcat (HTTP_SERVER, tests[i].url, NULL);
|
|
+ https_url = g_strconcat (HTTPS_SERVER, tests[i].url, NULL);
|
|
+ }
|
|
+ test_url (http_url, SIMPLE_PROXY, tests[i].final_status, sync);
|
|
+ test_url (https_url, SIMPLE_PROXY, tests[i].final_status, sync);
|
|
+ test_url (http_url, AUTH_PROXY, tests[i].final_status, sync);
|
|
+ test_url (https_url, AUTH_PROXY, tests[i].final_status, sync);
|
|
+ test_url (http_url, UNAUTH_PROXY, tests[i].final_status, sync);
|
|
+ test_url (https_url, UNAUTH_PROXY, tests[i].final_status, sync);
|
|
+
|
|
+ g_free (http_url);
|
|
+ g_free (https_url);
|
|
+
|
|
+ printf ("\n");
|
|
+}
|
|
+
|
|
+int
|
|
+main (int argc, char **argv)
|
|
+{
|
|
+ int i;
|
|
+
|
|
+ g_type_init ();
|
|
+ g_thread_init (NULL);
|
|
+
|
|
+ if (!apache_init ()) {
|
|
+ fprintf (stderr, "Could not start apache\n");
|
|
+ return 1;
|
|
+ }
|
|
+
|
|
+ for (i = 0; i < ntests; i++) {
|
|
+ run_test (i, FALSE);
|
|
+ run_test (i, TRUE);
|
|
+ }
|
|
+
|
|
+ apache_cleanup ();
|
|
+
|
|
+ printf ("proxy-test: %d errors\n", errors);
|
|
+ return errors;
|
|
+}
|
|
diff -ruNp libsoup-2.2.100/tests/ssl-test.c libsoup-2.2.100/tests/ssl-test.c
|
|
--- libsoup-2.2.100/tests/ssl-test.c 1969-12-31 19:00:00.000000000 -0500
|
|
+++ libsoup-2.2.100/tests/ssl-test.c 2007-05-01 15:44:30.000000000 -0400
|
|
@@ -0,0 +1,323 @@
|
|
+#include <gnutls/gnutls.h>
|
|
+#include <glib.h>
|
|
+#include <stdio.h>
|
|
+#include <stdlib.h>
|
|
+#include <string.h>
|
|
+#include <unistd.h>
|
|
+#include <netinet/in.h>
|
|
+#include <sys/socket.h>
|
|
+
|
|
+#include "libsoup/soup-socket.h"
|
|
+#include "libsoup/soup-ssl.h"
|
|
+
|
|
+#define BUFSIZE 1024
|
|
+#define DH_BITS 1024
|
|
+
|
|
+GMainLoop *loop;
|
|
+gnutls_dh_params_t dh_params;
|
|
+
|
|
+/* SERVER */
|
|
+
|
|
+/* Read @bufsize bytes into @buf from @session. */
|
|
+static void
|
|
+server_read (gnutls_session_t session, char *buf, int bufsize)
|
|
+{
|
|
+ int total, nread;
|
|
+
|
|
+ total = 0;
|
|
+ while (total < bufsize) {
|
|
+ nread = gnutls_record_recv (session, buf + total,
|
|
+ bufsize - total);
|
|
+ if (nread <= 0)
|
|
+ g_error ("server read failed at position %d", total);
|
|
+ total += nread;
|
|
+ }
|
|
+}
|
|
+
|
|
+/* Write @bufsize bytes from @buf to @session, forcing 3 rehandshakes
|
|
+ * along the way. (We do an odd number of rehandshakes to make sure
|
|
+ * they occur at weird times relative to the client's read buffer
|
|
+ * size.)
|
|
+ */
|
|
+static void
|
|
+server_write (gnutls_session_t session, char *buf, int bufsize)
|
|
+{
|
|
+ int total, nwrote;
|
|
+ int next_rehandshake = bufsize / 3;
|
|
+
|
|
+ total = 0;
|
|
+ while (total < bufsize) {
|
|
+ if (total >= next_rehandshake) {
|
|
+ if (gnutls_rehandshake (session) < 0)
|
|
+ g_error ("client refused rehandshake at position %d", total);
|
|
+ if (gnutls_handshake (session) < 0)
|
|
+ g_error ("server rehandshake failed at position %d", total);
|
|
+ next_rehandshake = MIN (bufsize, next_rehandshake + bufsize / 3);
|
|
+ }
|
|
+
|
|
+ nwrote = gnutls_record_send (session, buf + total,
|
|
+ next_rehandshake - total);
|
|
+ if (nwrote <= 0)
|
|
+ g_error ("server write failed at position %d: %d", total, nwrote);
|
|
+ total += nwrote;
|
|
+ }
|
|
+}
|
|
+
|
|
+const char *ssl_cert_file = "test-cert.pem";
|
|
+const char *ssl_key_file = "test-key.pem";
|
|
+
|
|
+static gpointer
|
|
+server_thread (gpointer user_data)
|
|
+{
|
|
+ int listener = GPOINTER_TO_INT (user_data), client;
|
|
+ gnutls_certificate_credentials creds;
|
|
+ gnutls_session_t session;
|
|
+ struct sockaddr_in sin;
|
|
+ int len;
|
|
+ char buf[BUFSIZE];
|
|
+ int status;
|
|
+
|
|
+ gnutls_certificate_allocate_credentials (&creds);
|
|
+ if (gnutls_certificate_set_x509_key_file (creds,
|
|
+ ssl_cert_file, ssl_key_file,
|
|
+ GNUTLS_X509_FMT_PEM) != 0) {
|
|
+ g_error ("Failed to set SSL certificate and key files "
|
|
+ "(%s, %s).", ssl_cert_file, ssl_key_file);
|
|
+ }
|
|
+ gnutls_certificate_set_dh_params (creds, dh_params);
|
|
+
|
|
+ /* Create a new session */
|
|
+ gnutls_init (&session, GNUTLS_SERVER);
|
|
+ gnutls_set_default_priority (session);
|
|
+ gnutls_credentials_set (session, GNUTLS_CRD_CERTIFICATE, creds);
|
|
+ gnutls_dh_set_prime_bits (session, DH_BITS);
|
|
+
|
|
+ /* Wait for client thread to connect */
|
|
+ len = sizeof (sin);
|
|
+ client = accept (listener, (struct sockaddr *) &sin, (void *)&len);
|
|
+ gnutls_transport_set_ptr (session, GINT_TO_POINTER (client));
|
|
+
|
|
+ /* Initial handshake */
|
|
+ status = gnutls_handshake (session);
|
|
+ if (status < 0)
|
|
+ g_error ("initial handshake failed: %d", status);
|
|
+
|
|
+ /* Synchronous client test. */
|
|
+ server_read (session, buf, BUFSIZE);
|
|
+ server_write (session, buf, BUFSIZE);
|
|
+
|
|
+ /* Async client test. */
|
|
+ server_read (session, buf, BUFSIZE);
|
|
+ server_write (session, buf, BUFSIZE);
|
|
+
|
|
+ /* That's all, folks. */
|
|
+ gnutls_bye (session, GNUTLS_SHUT_WR);
|
|
+ gnutls_deinit (session);
|
|
+ close (client);
|
|
+
|
|
+ return NULL;
|
|
+}
|
|
+
|
|
+/* async client code */
|
|
+
|
|
+typedef struct {
|
|
+ char writebuf[BUFSIZE], readbuf[BUFSIZE];
|
|
+ int total;
|
|
+} AsyncData;
|
|
+
|
|
+static void
|
|
+async_read (SoupSocket *sock, gpointer user_data)
|
|
+{
|
|
+ AsyncData *data = user_data;
|
|
+ SoupSocketIOStatus status;
|
|
+ gsize n;
|
|
+
|
|
+ do {
|
|
+ status = soup_socket_read (sock, data->readbuf + data->total,
|
|
+ BUFSIZE - data->total, &n);
|
|
+ if (status == SOUP_SOCKET_OK)
|
|
+ data->total += n;
|
|
+ } while (status == SOUP_SOCKET_OK && data->total < BUFSIZE);
|
|
+
|
|
+ if (status == SOUP_SOCKET_ERROR || status == SOUP_SOCKET_EOF)
|
|
+ g_error ("Async read got status %d", status);
|
|
+ else if (status == SOUP_SOCKET_WOULD_BLOCK)
|
|
+ return;
|
|
+
|
|
+ if (memcmp (data->writebuf, data->readbuf, BUFSIZE) != 0)
|
|
+ g_error ("Sync read didn't match write");
|
|
+
|
|
+ g_main_loop_quit (loop);
|
|
+}
|
|
+
|
|
+static void
|
|
+async_write (SoupSocket *sock, gpointer user_data)
|
|
+{
|
|
+ AsyncData *data = user_data;
|
|
+ SoupSocketIOStatus status;
|
|
+ gsize n;
|
|
+
|
|
+ do {
|
|
+ status = soup_socket_write (sock, data->writebuf + data->total,
|
|
+ BUFSIZE - data->total, &n);
|
|
+ if (status == SOUP_SOCKET_OK)
|
|
+ data->total += n;
|
|
+ } while (status == SOUP_SOCKET_OK && data->total < BUFSIZE);
|
|
+
|
|
+ if (status == SOUP_SOCKET_ERROR || status == SOUP_SOCKET_EOF)
|
|
+ g_error ("Async write got status %d", status);
|
|
+ else if (status == SOUP_SOCKET_WOULD_BLOCK)
|
|
+ return;
|
|
+
|
|
+ data->total = 0;
|
|
+ async_read (sock, user_data);
|
|
+}
|
|
+
|
|
+static gboolean
|
|
+start_writing (gpointer user_data)
|
|
+{
|
|
+ SoupSocket *sock = user_data;
|
|
+ AsyncData *data;
|
|
+ int i;
|
|
+
|
|
+ data = g_new (AsyncData, 1);
|
|
+ for (i = 0; i < BUFSIZE; i++)
|
|
+ data->writebuf[i] = i & 0xFF;
|
|
+
|
|
+ g_signal_connect (sock, "writable",
|
|
+ G_CALLBACK (async_write), data);
|
|
+ g_signal_connect (sock, "readable",
|
|
+ G_CALLBACK (async_read), data);
|
|
+
|
|
+ async_write (sock, data);
|
|
+ return FALSE;
|
|
+}
|
|
+
|
|
+int debug;
|
|
+
|
|
+static void
|
|
+debug_log (int level, const char *str)
|
|
+{
|
|
+ fputs (str, stderr);
|
|
+}
|
|
+
|
|
+int
|
|
+main (int argc, char **argv)
|
|
+{
|
|
+ int opt, listener, sin_len, port, i;
|
|
+ struct sockaddr_in sin;
|
|
+ GThread *server;
|
|
+ char writebuf[BUFSIZE], readbuf[BUFSIZE];
|
|
+ SoupSocket *sock;
|
|
+ gsize n, total;
|
|
+ SoupSocketIOStatus status;
|
|
+
|
|
+ g_type_init ();
|
|
+ g_thread_init (NULL);
|
|
+
|
|
+ while ((opt = getopt (argc, argv, "c:d:k:")) != -1) {
|
|
+ switch (opt) {
|
|
+ case 'c':
|
|
+ ssl_cert_file = optarg;
|
|
+ break;
|
|
+ case 'd':
|
|
+ debug = atoi (optarg);
|
|
+ break;
|
|
+ case 'k':
|
|
+ ssl_key_file = optarg;
|
|
+ break;
|
|
+
|
|
+ case '?':
|
|
+ fprintf (stderr, "Usage: %s [-d debuglevel] [-c ssl-cert-file] [-k ssl-key-file]\n",
|
|
+ argv[0]);
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (debug) {
|
|
+ gnutls_global_set_log_function (debug_log);
|
|
+ gnutls_global_set_log_level (debug);
|
|
+ }
|
|
+
|
|
+ /* Create server socket */
|
|
+ listener = socket (AF_INET, SOCK_STREAM, 0);
|
|
+ if (listener == -1) {
|
|
+ perror ("creating listening socket");
|
|
+ exit (1);
|
|
+ }
|
|
+
|
|
+ memset (&sin, 0, sizeof (sin));
|
|
+ sin.sin_family = AF_INET;
|
|
+ sin.sin_addr.s_addr = INADDR_ANY;
|
|
+
|
|
+ if (bind (listener, (struct sockaddr *) &sin, sizeof (sin)) == -1) {
|
|
+ perror ("binding listening socket");
|
|
+ exit (1);
|
|
+ }
|
|
+
|
|
+ if (listen (listener, 1) == -1) {
|
|
+ perror ("listening on socket");
|
|
+ exit (1);
|
|
+ }
|
|
+
|
|
+ sin_len = sizeof (sin);
|
|
+ getsockname (listener, (struct sockaddr *)&sin, (void *)&sin_len);
|
|
+ port = ntohs (sin.sin_port);
|
|
+
|
|
+ /* Now spawn server thread */
|
|
+ server = g_thread_create (server_thread, GINT_TO_POINTER (listener),
|
|
+ FALSE, NULL);
|
|
+
|
|
+ /* And create the client */
|
|
+ sock = soup_socket_client_new_sync ("127.0.0.1", port,
|
|
+ soup_ssl_get_client_credentials (NULL),
|
|
+ &status);
|
|
+ if (status != SOUP_STATUS_OK) {
|
|
+ g_error ("Could not create client socket: %s",
|
|
+ soup_status_get_phrase (status));
|
|
+ }
|
|
+
|
|
+ soup_socket_start_ssl (sock);
|
|
+
|
|
+ /* Synchronous client test */
|
|
+ for (i = 0; i < BUFSIZE; i++)
|
|
+ writebuf[i] = i & 0xFF;
|
|
+
|
|
+ total = 0;
|
|
+ while (total < BUFSIZE) {
|
|
+ status = soup_socket_write (sock, writebuf + total,
|
|
+ BUFSIZE - total, &n);
|
|
+ if (status != SOUP_SOCKET_OK)
|
|
+ g_error ("Sync write got status %d", status);
|
|
+ total += n;
|
|
+ }
|
|
+
|
|
+ total = 0;
|
|
+ while (total < BUFSIZE) {
|
|
+ status = soup_socket_read (sock, readbuf + total,
|
|
+ BUFSIZE - total, &n);
|
|
+ if (status != SOUP_SOCKET_OK)
|
|
+ g_error ("Sync read got status %d", status);
|
|
+ total += n;
|
|
+ }
|
|
+
|
|
+ if (memcmp (writebuf, readbuf, BUFSIZE) != 0)
|
|
+ g_error ("Sync read didn't match write");
|
|
+
|
|
+ printf ("SYNCHRONOUS SSL TEST PASSED\n");
|
|
+
|
|
+ /* Switch socket to async and do it again */
|
|
+
|
|
+ g_object_set (sock,
|
|
+ SOUP_SOCKET_FLAG_NONBLOCKING, TRUE,
|
|
+ NULL);
|
|
+
|
|
+ g_idle_add (start_writing, sock);
|
|
+ loop = g_main_loop_new (NULL, TRUE);
|
|
+ g_main_loop_run (loop);
|
|
+
|
|
+ printf ("ASYNCHRONOUS SSL TEST PASSED\n");
|
|
+
|
|
+ /* Success */
|
|
+ return 0;
|
|
+}
|