Ian Kent a3ae01
diff -up autofs-5.0.2/configure.libxml2-workaround autofs-5.0.2/configure
Ian Kent a3ae01
--- autofs-5.0.2/configure.libxml2-workaround	2007-09-24 14:25:06.000000000 +0800
Ian Kent a3ae01
+++ autofs-5.0.2/configure	2007-09-24 14:26:09.000000000 +0800
Ian Kent a3ae01
@@ -2498,6 +2498,23 @@ echo "${ECHO_T}yes" >&6; }
Ian Kent a3ae01
   HAVE_LIBXML=1
Ian Kent a3ae01
   XML_LIBS=`$XML_CONFIG --libs`
Ian Kent a3ae01
   XML_FLAGS=`$XML_CONFIG --cflags`
Ian Kent a3ae01
+  XML_VER=`$XML_CONFIG --version`
Ian Kent a3ae01
+  XML_MAJOR=`echo $XML_VER|cut -d\. -f1`
Ian Kent a3ae01
+  if test $XML_MAJOR -le 2
Ian Kent a3ae01
+  then
Ian Kent a3ae01
+    XML_MINOR=`echo $XML_VER|cut -d\. -f2`
Ian Kent a3ae01
+    if test $XML_MINOR -le 6
Ian Kent a3ae01
+    then
Ian Kent a3ae01
+      XML_REV=`echo $XML_VER|cut -d\. -f3`
Ian Kent a3ae01
+      if test $XML_REV -le 99; then
Ian Kent a3ae01
+
Ian Kent a3ae01
+cat >>confdefs.h <<\_ACEOF
Ian Kent a3ae01
+#define LIBXML2_WORKAROUND 1
Ian Kent a3ae01
+_ACEOF
Ian Kent a3ae01
+
Ian Kent a3ae01
+      fi
Ian Kent a3ae01
+    fi
Ian Kent a3ae01
+  fi
Ian Kent a3ae01
 fi
Ian Kent a3ae01
 
Ian Kent a3ae01
 #
Ian Kent a3ae01
diff -up autofs-5.0.2/include/config.h.in.libxml2-workaround autofs-5.0.2/include/config.h.in
Ian Kent a3ae01
--- autofs-5.0.2/include/config.h.in.libxml2-workaround	2007-09-24 14:25:06.000000000 +0800
Ian Kent a3ae01
+++ autofs-5.0.2/include/config.h.in	2007-09-24 14:26:09.000000000 +0800
Ian Kent a3ae01
@@ -60,6 +60,9 @@
Ian Kent a3ae01
 /* Define to 1 if you have the <unistd.h> header file. */
Ian Kent a3ae01
 #undef HAVE_UNISTD_H
Ian Kent a3ae01
 
Ian Kent a3ae01
+/* Use libxml2 tsd usage workaround */
Ian Kent a3ae01
+#undef LIBXML2_WORKAROUND
Ian Kent a3ae01
+
Ian Kent a3ae01
 /* Define to the address where bug reports for this package should be sent. */
Ian Kent a3ae01
 #undef PACKAGE_BUGREPORT
Ian Kent a3ae01
 
Ian Kent a3ae01
diff -up autofs-5.0.2/aclocal.m4.libxml2-workaround autofs-5.0.2/aclocal.m4
Ian Kent a3ae01
--- autofs-5.0.2/aclocal.m4.libxml2-workaround	2007-09-24 14:25:06.000000000 +0800
Ian Kent a3ae01
+++ autofs-5.0.2/aclocal.m4	2007-09-24 14:26:09.000000000 +0800
Ian Kent a3ae01
@@ -167,6 +167,19 @@ else
Ian Kent a3ae01
   HAVE_LIBXML=1
Ian Kent a3ae01
   XML_LIBS=`$XML_CONFIG --libs`
Ian Kent a3ae01
   XML_FLAGS=`$XML_CONFIG --cflags`
Ian Kent a3ae01
+  XML_VER=`$XML_CONFIG --version`
Ian Kent a3ae01
+  XML_MAJOR=`echo $XML_VER|cut -d\. -f1`
Ian Kent a3ae01
+  if test $XML_MAJOR -le 2
Ian Kent a3ae01
+  then
Ian Kent a3ae01
+    XML_MINOR=`echo $XML_VER|cut -d\. -f2`
Ian Kent a3ae01
+    if test $XML_MINOR -le 6
Ian Kent a3ae01
+    then
Ian Kent a3ae01
+      XML_REV=`echo $XML_VER|cut -d\. -f3`
Ian Kent a3ae01
+      if test $XML_REV -le 99; then
Ian Kent a3ae01
+        AC_DEFINE(LIBXML2_WORKAROUND,1, [Use libxml2 tsd usage workaround])
Ian Kent a3ae01
+      fi
Ian Kent a3ae01
+    fi
Ian Kent a3ae01
+  fi
Ian Kent a3ae01
 fi])
Ian Kent a3ae01
 
Ian Kent a3ae01
 dnl --------------------------------------------------------------------------
Ian Kent a3ae01
diff -up autofs-5.0.2/modules/lookup_ldap.c.libxml2-workaround autofs-5.0.2/modules/lookup_ldap.c
Ian Kent a3ae01
--- autofs-5.0.2/modules/lookup_ldap.c.libxml2-workaround	2007-09-24 14:25:06.000000000 +0800
Ian Kent a3ae01
+++ autofs-5.0.2/modules/lookup_ldap.c	2007-09-24 14:26:09.000000000 +0800
Ian Kent a3ae01
@@ -1929,9 +1929,6 @@ int lookup_done(void *context)
Ian Kent a3ae01
 	struct lookup_context *ctxt = (struct lookup_context *) context;
Ian Kent a3ae01
 	int rv = close_parse(ctxt->parse);
Ian Kent a3ae01
 #ifdef WITH_SASL
Ian Kent a3ae01
-	EVP_cleanup();
Ian Kent a3ae01
-	ERR_free_strings();
Ian Kent a3ae01
-
Ian Kent a3ae01
 	autofs_sasl_done(ctxt);
Ian Kent a3ae01
 #endif
Ian Kent a3ae01
 	free_context(ctxt);
Ian Kent a3ae01
diff -up autofs-5.0.2/daemon/automount.c.libxml2-workaround autofs-5.0.2/daemon/automount.c
Ian Kent a3ae01
--- autofs-5.0.2/daemon/automount.c.libxml2-workaround	2007-09-24 14:25:06.000000000 +0800
Ian Kent a3ae01
+++ autofs-5.0.2/daemon/automount.c	2007-09-24 14:28:56.000000000 +0800
Ian Kent a3ae01
@@ -40,6 +40,9 @@
Ian Kent a3ae01
 #include <sys/utsname.h>
Ian Kent a3ae01
 
Ian Kent a3ae01
 #include "automount.h"
Ian Kent a3ae01
+#ifdef LIBXML2_WORKAROUND
Ian Kent a3ae01
+#include <dlfcn.h>
Ian Kent a3ae01
+#endif
Ian Kent a3ae01
 
Ian Kent a3ae01
 const char *program;		/* Initialized with argv[0] */
Ian Kent a3ae01
 const char *version = VERSION_STRING;	/* Program version */
Ian Kent a3ae01
@@ -1266,22 +1269,6 @@ void *handle_mounts(void *arg)
Ian Kent a3ae01
 	}
Ian Kent a3ae01
 
Ian Kent a3ae01
 	pthread_cleanup_pop(1);
Ian Kent a3ae01
-
Ian Kent a3ae01
-	/*
Ian Kent a3ae01
-	 * A cowboy .. me!
Ian Kent a3ae01
-	 * That noise yu ear aint spuurs sonny!!
Ian Kent a3ae01
-	 *
Ian Kent a3ae01
-	 * The libkrb5support destructor called indirectly through
Ian Kent a3ae01
-	 * libgssapi_krb5 which is used bt libkrb5 (somehow) must run
Ian Kent a3ae01
-	 * to completion before the last thread using it exits so
Ian Kent a3ae01
-	 * that it's per thread data keys are deleted or we get a
Ian Kent a3ae01
-	 * little segfault at exit. So much for dlclose being
Ian Kent a3ae01
-	 * syncronous.
Ian Kent a3ae01
-	 *
Ian Kent a3ae01
-	 * So, the solution is a recipe for disaster.
Ian Kent a3ae01
-	 * Hope we don't get a really busy system!
Ian Kent a3ae01
-	 */
Ian Kent a3ae01
-	/*sleep(1);*/
Ian Kent a3ae01
 	sched_yield();
Ian Kent a3ae01
 
Ian Kent a3ae01
 	return NULL;
Ian Kent a3ae01
@@ -1681,6 +1668,11 @@ int main(int argc, char *argv[])
Ian Kent a3ae01
 		close(start_pipefd[1]);
Ian Kent a3ae01
 		exit(1);
Ian Kent a3ae01
 	}
Ian Kent a3ae01
+
Ian Kent a3ae01
+#ifdef LIBXML2_WORKAROUND
Ian Kent a3ae01
+	void *dh = dlopen("libxml2.so", RTLD_NOW);
Ian Kent a3ae01
+#endif
Ian Kent a3ae01
+
Ian Kent a3ae01
 	if (!master_read_master(master_list, age, 0)) {
Ian Kent a3ae01
 		master_kill(master_list);
Ian Kent a3ae01
 		*pst_stat = 3;
Ian Kent a3ae01
@@ -1702,5 +1694,9 @@ int main(int argc, char *argv[])
Ian Kent a3ae01
 	}
Ian Kent a3ae01
 	closelog();
Ian Kent a3ae01
 
Ian Kent a3ae01
+#ifdef LIBXML2_WORKAROUND
Ian Kent a3ae01
+	if (dh)
Ian Kent a3ae01
+		dlclose(dh);
Ian Kent a3ae01
+#endif
Ian Kent a3ae01
 	exit(0);
Ian Kent a3ae01
 }