Import of upstream source 4.3.9 upstream/4.3.9
authorJoey Schulze <joey@infodrom.org>
Wed, 14 May 2008 08:46:20 +0000 (08:46 +0000)
committerJoey Schulze <joey@infodrom.org>
Wed, 14 May 2008 08:46:20 +0000 (08:46 +0000)
500mod_auth_mysql.info [new file with mode: 0644]
DIRECTIVES [new file with mode: 0644]
INSTALL [new file with mode: 0644]
Makefile.in [new file with mode: 0644]
USAGE [new file with mode: 0644]
auth_mysql.load [new file with mode: 0644]
config.h.in [new file with mode: 0644]
configure [new file with mode: 0755]
configure.ac [new file with mode: 0644]
install-sh [new file with mode: 0755]
mod_auth_mysql.c [new file with mode: 0644]

diff --git a/500mod_auth_mysql.info b/500mod_auth_mysql.info
new file mode 100644 (file)
index 0000000..d1074dc
--- /dev/null
@@ -0,0 +1,43 @@
+LoadModule: auth_mysql_module /usr/lib/apache/1.3/mod_auth_mysql.so
+Directives:
+ Auth_MySQL_Info
+ AuthMySQL_DefaultHost
+ AuthMySQL_Host
+ AuthMySQL_DefaultUser
+ AuthMySQL_User
+ AuthMySQL_DefaultPassword
+ AuthMySQL_Password
+ Auth_MySQL_General_DB
+ Auth_MySQL_DB
+ AuthMySQL_DefaultDB
+ AuthMySQL_DB
+ Auth_MySQL_Username
+ Auth_MySQL_Password
+ Auth_MySQL_DB
+ Auth_MySQL_Password_Table
+ AuthMySQL_Password_Table
+ Auth_MySQL_Group_Table
+ Auth_MySQL_Password_Field
+ Auth_MySQL_Username_Field
+ Auth_MySQL_Group_Field
+ AuthMySQL_Group_Table
+ AuthMySQL_Password_Field
+ AuthMySQL_Username_Field
+ AuthMySQL_Group_Field
+ AuthMySQL_Group_User_Field
+ Auth_MySQL_Empty_Passwords
+ AuthMySQL_Empty_Passwords
+ Auth_MySQL_Authoritative
+ AuthMySQL_Authoritative
+ Auth_MySQL_Encrypted_Passwords
+ AuthMySQL_Encrypted_Passwords
+ Auth_MySQL_Scrambled_Passwords
+ AuthMySQL_Scrambled_Passwords
+ Auth_MySQL_Encryption_Types
+ AuthMySQL_Encryption_Types
+ Auth_MySQL_Non_Persistent
+ AuthMySQL_Persistent
+ AuthMySQL_AllowOverride
+ Auth_MySQL
+ AuthMySQL
+Description: Support for MySQL authentication
diff --git a/DIRECTIVES b/DIRECTIVES
new file mode 100644 (file)
index 0000000..6a48da2
--- /dev/null
@@ -0,0 +1,261 @@
+All the directives understood by this version of mod-auth-mysql are listed
+below.  The huge number of synonym directives is due to the merging of two
+separate versions of the program, both of which had subtly different usage
+symantics.  I'm sure there will be rationalisation in the near future.
+
+Auth_MySQL_Info <host> <user> <password>
+       Server-wide config option to specify the database host, username,
+       and password used to connect to the MySQL server.
+
+       This option affects all directories which do not override it via
+       AuthMySQL_Host, AuthMySQL_User, and/or AuthMySQL_Password.
+
+AuthMySQL_DefaultHost <hostname>
+       Specifies the MySQL server to use for authentication.
+       
+       This option affects all directories which do not override it via
+       AuthMySQL_Host.
+
+AuthMySQL_Host <hostname>
+       Synonym for AuthMySQL_DefaultHost, to be used in .htaccess files and
+       directory-specific entries.
+
+Auth_MySQL_DefaultPort <portnum>
+       Specifies a port to use to talk to a MySQL server.  If left empty,
+       the default (3306) will be used.
+
+       This option affects all directories which do not override it via
+       Auth_MySQL_Port.
+
+Auth_MySQL_Port <portnum>
+       Specifies a non-default port to use (other than 3306) when talking
+       to the MySQL server on AuthMySQL_Host or AuthMySQL_DefaultHost.
+
+Auth_MySQL_DefaultSocket <socketname>
+       If using a local MySQL server, you can
+       specify a non-default named pipe to use instead of the default pipe
+       name compiled into your MySQL client library.
+
+       This option affects all directories which do not override it via
+       Auth_MySQL_Socket.
+
+Auth_MySQL_Socket <socketname>
+       If using a local MySQL server, you can specify a non-default named
+       pipe to use instead of the default one compiled into MySQL with this
+       option.
+
+AuthMySQL_DefaultUser <username>
+       Specifies the username for connection to the MySQL server.
+
+AuthMySQL_User <username>
+       Synonym for AuthMySQL_DefaultUser, to be used in .htaccess files and
+       directory-specific entries.
+       
+AuthMySQL_DefaultPassword <password>
+       Specifies the password user together with the above user.
+
+AuthMySQL_Password <password>
+       Synonym for AuthMySQL_Password, to be used in .htaccess files and
+       directory-specific entries.
+
+Auth_MySQL_General_DB <database_name>
+       Server-wide, specifies a default database name to use.
+
+Auth_MySQL_DB <database_name>
+       Synonym for Auth_MySQL_General_DB, to be used in .htaccess files and
+       directory-specific entries.
+
+AuthMySQL_DefaultDB <database_name>
+       Synonym for Auth_MySQL_General_DB.
+
+AuthMySQL_DB <database_name>
+       Synonym for Auth_MySQL_General_DB, to be used in .htaccess files and
+       directory-specific entries.
+
+AuthName "<Realm>"
+       Describes the data you're guarding.
+
+AuthType <type>
+       The authentication process used in the transaction.  Stick with
+       Basic, no others work at present.
+
+require <type> <identifier(s)>
+       Specify what is considered a valid authentication.  <type> can be
+       either user, group, or valid-user.  valid-user is the simplest -
+       anyone who gets the username and password right gets in.  Otherwise,
+       the user must either have a username in the space-separated list of
+       identifiers (if using user) or must be a member of a group in the
+       list of identifiers (if user group).
+       
+       Multiple require statements are allowed; if multiple require
+       statements are present in a configuration, then the user will be
+       considered authenticated if they can satisfy any of the require
+       statements supplied.
+
+Auth_MySQL_Password_Table <password_table_name>
+       The name of the MySQL table in the specified database which stores
+       username:password pairs.  By default, it is 'mysql_auth'.
+
+AuthMySQL_Password_Table <password_table_name>
+       Synonym for Auth_MySQL_Password_Table.
+
+Auth_MySQL_Group_Table <group_table_name>
+       As per ...Password_Table above, stores username:group pairs. 
+       Normally you'll store username:password:group triplets in the one
+       table, but we are nothing if not flexible.  Defaults to
+       'mysql_auth'.
+
+AuthMySQL_Group_Table <group_table_name>
+       Synonym for Auth_MySQL_Group_Table.
+
+Auth_MySQL_Username_Field <username_field_name>
+       The name of the field which stores usernames.  Defaults to
+       'username'. The username/password combo specified in Auth_MySQL_Info
+       must have select privileges to this field in the Password and Group
+       tables.
+
+AuthMySQL_Username_Field <username_field_name>
+       Synonym for Auth_MySQL_Username_Field.
+
+Auth_MySQL_Password_Field <password_field_name>
+       As per ...Username_Field above, but for passwords.  Same MySQL
+       access privileges.  Defaults to 'password'.
+
+AuthMySQL_Password_Field <password_field_name>
+       Synonym for Auth_MySQL_Password_Field.
+
+Auth_MySQL_Group_Field <group_field_name>
+       As per ...Username_Field above.  Defaults to 'groups'.
+       
+AuthMySQL_Group_Field <group_field_name>
+       Synonym for Auth_MySQL_Group_Field.
+       
+Auth_MySQL_Group_User_Field <field_name>
+       The name of the field in the groups table which stores the username. 
+       Defaults to the field name specified for usernames in the passwords
+       table.
+
+AuthMySQL_Group_User_Field <field_name>
+       Synonym for Auth_MySQL_Group_User_Field.
+
+Auth_MySQL_Password_Clause <SQL fragment>
+       Adds arbitrary clause to username:password matching query, for example:
+       " AND Allowed=1". Clause has to start with space. Default is empty.
+
+Auth_MySQL_Group_Clause <SQL fragment>
+       Adds arbitrary clause to username:group matching query, for example:
+       " AND Allowed=1". Clause has to start with space. Default is empty.
+Auth_MySQL_Empty_Passwords <on/off>
+       Whether or not to allow empty passwords.  If the password field is
+       empty (equals to '') and this option is 'on', users would be able to
+       access the page by just specifying their username WITHOUT ANY
+       PASSWORD CHECKING.  If this is 'off', they would be denied access. 
+       Default: 'on'.
+
+AuthMySQL_Empty_Passwords <on/off>
+       Synonym for Auth_MySQL_Empty_Passwords.
+
+Auth_MySQL_Encryption_Types <type_list>
+
+       Select which types of encryption to check, and in which order to
+       check them.  It overrides the legacy Auth_MySQL_Scrambled_Passwords
+       and Auth_MySQL_Encrypted_Passwords directives.  Multiple encryption
+       types may be specified, to instruct the module to check each
+       password in multiple encryption schemes - a useful feature for
+       legacy transitions.  For example:
+
+       Auth_MySQL_Encryption_Types Plaintext Crypt_DES
+
+       Would instruct the module to do a direct comparison of the entered
+       password with the contents of the password field, and if that fails,
+       to do a DES crypt() check, a la Unix password handling.  
+
+       The available encryption types supported at this time are:
+       
+       Plaintext
+               Pretty self-explanatory.  Not recommended.
+               
+       Crypt_DES
+               Check the password via the standard Unix crypt() call, using
+               DES hashing.
+
+       Crypt_MD5
+               Check the password via the standard Unix crypt() call, using
+               an MD5 hash.
+       
+       Crypt
+               Check the password via the standard Unix crypt() call,
+               without preference for the hashing scheme employed.  This is
+               the generally preferred means of checking crypt()ed
+               passwords, because it allows you to use other schemes which
+               may be available on your system, such as blowfish.
+               
+       PHP_MD5
+               Compares with an MD5 hash, encoded in the way that PHP and
+               MySQL handle MD5 hashes - 32 character hex code, with
+               lowercase letters.
+
+       SHA1Sum
+               Compares with a SHA1 hash, encoded the way that MySQL, PHP,
+               and the sha1sum command produce their output (a 40 character
+               lowercase hex representation).
+
+       MySQL
+               The hashing scheme used by the MySQL PASSWORD() function.
+               
+AuthMySQL_Encryption_Types <type_list>
+       Synonym for Auth_MySQL_Encryption_Types.
+
+Auth_MySQL_Encrypted_Passwords <on/off> (DEPRECATED)
+       Equivalent to: Auth_MySQL_Encryption_Types Crypt_DES
+       Only used if ...Encryption_Types is not set.  Defaults to 'on'.  If
+       both this option and ...Scrambled_Passwords are 'off' and
+       ...Encryption_Types is not set, passwords are expected to be in
+       plaintext.
+
+AuthMySQL_Encrypted_Passwords <on/off> (DEPRECATED)
+       Synonym for Auth_MySQL_Encrypted_Passwords.
+
+Auth_MySQL_Scrambled_Passwords <on/off> (DEPRECATED)
+       Equivalent to: Auth_MySQL_Encryption_Types MySQL
+       The same restrictions apply to this directive as to
+       ...Encrypted_Passwords.
+
+AuthMySQL_Scrambled_Passwords <on/off> (DEPRECATED)
+       Synonym for Auth_MySQL_Scrambled_Passwords.
+
+Auth_MySQL_Authoritative <on/off>
+       Whether or not to use other authentication schemes if the user is
+       successfully authenticated.  That is, if the user passes the MySQL
+       authentication, they may still be rejected by a later module if this
+       option is set 'off'.  The default is 'on' (i.e. if the user passes
+       the MySQL module, they're considered OK).
+
+AuthMySQL_Authoritative <on/off>
+       Synonym for Auth_MySQL_Authoritative.
+
+Auth_MySQL_Non_Persistent <on/off>
+       If set to 'on', the link to the MySQL server is explicitly closed
+       after each authentication request.  Note that I can't think of any
+       possible good reason to do this, unless your platform makes MySQL go
+       crazy when it has plenty of simultaneous threads (bad handling of
+       file descriptors may cause that).  In my opinion, one should
+       increase the maximum number of simultaneous threads in MySQL and
+       keep this option off.  Default: off, and for good reason.
+
+AuthMySQL_Persistent <on/off>
+       An antonym for Auth_MySQL_Non_Persistent.
+
+AuthMySQL_AllowOverride <on/off>
+       Whether or not .htaccess files are allowed to use their own
+       Host/User/Password/DB specifications.  If set to 'off', then the
+       defaults specified in the httpd.conf cannot be overridden.
+
+Auth_MYSQL <on/off>
+       Whether or not to enable MySQL authentication.  If it's off, the
+       MySQL authentication will simply pass authentication off to other
+       modules defined.
+
+AuthMySQL <on/off>
+       Synonym for Auth_MYSQL.
diff --git a/INSTALL b/INSTALL
new file mode 100644 (file)
index 0000000..989fcbb
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,10 @@
+You'll need to have the development libraries and include files for both
+MySQL and Apache.  Both should be found automatically if they're installed
+somewhere reasonable, but otherwise, specify the location using the
+--with-mysql-includes, --with-mysql-libs, and --with-apxs options to
+configure (see ./configure --help for more information).
+
+Once configure has run successfully, you should be able to type 'make &&
+make install' for a happy installation.
+
+See USAGE for information on how exactly to use this beast.
diff --git a/Makefile.in b/Makefile.in
new file mode 100644 (file)
index 0000000..7540dbd
--- /dev/null
@@ -0,0 +1,29 @@
+APXS   = @apxs@
+APXSFLAGS =
+APXS2  = @apxs2@
+APXS2FLAGS =
+SRCS   = mod_auth_mysql.c
+HDRS   = config.h
+OPTS   = @build_opts@ -lmysqlclient
+MODULES = @modules@
+
+all: $(MODULES)
+
+apache13_mod_auth_mysql.so: $(SRCS) $(HDRS)
+       $(APXS) $(APXSFLAGS) -o $@ $(OPTS) -c $(SRCS)
+
+apache2_mod_auth_mysql.so: apache2_mod_auth_mysql.la
+       cp .libs/apache2_mod_auth_mysql.so .
+
+apache2_mod_auth_mysql.la: $(SRCS) $(HDRS)
+       $(APXS2) $(APXS2FLAGS) -o $@ $(OPTS) -DAPACHE2 -c $(SRCS)
+
+clean:
+       -rm -rf *.o *.so *.lo *.slo *.la .libs
+
+distclean: clean
+       -rm -f config.status config.log config.h Makefile
+       -rm -rf autom4te.cache
+
+maintclean: distclean
+       -rm -f configure
diff --git a/USAGE b/USAGE
new file mode 100644 (file)
index 0000000..d83db0a
--- /dev/null
+++ b/USAGE
@@ -0,0 +1,125 @@
+OK, so it's compiled cleanly and now it's time to use it.  You've come to
+the right place.
+
+Creating the necessary SQL information
+--------------------------------------
+
+At the very least, you need a table in your database which has a list of
+usernames and their corresponding passwords.  Having a field listing the
+group users belong to, or a separate table for that, is useful too, but you
+need usernames and passwords as a minimum.
+
+For instance:
+
+create table mysql_auth (
+       username char(25) not null,
+       passwd char(25),
+       groups char(25),
+       primary key (username)
+);
+
+This would work quite well.
+
+NOTE 1: You don't have to use a new table for the purpose of storing
+usernames and passwords; I quite happily use a 'members' table (with all
+sorts of other interesting information in it) with mod-auth-mysql.
+
+NOTE 2: The names given above are merely the defaults for the module.  They
+can all be overridden if you have different names for your fields (eg
+password instead of passwd).
+
+Once your table(s) is/are created, you need to put the data in as
+appropriate.
+
+
+Telling Apache to protect the website
+-------------------------------------
+
+First up, tell the module where it should be getting it's info from:
+
+Auth_MySQL_Info <host> <user> <password>
+
+or
+
+AuthMySQL_DefaultHost <host>
+AuthMySQL_DefaultUser <user>
+AuthMySQL_DefaultPassword <password>
+
+This should be placed globally.
+
+If you're going to use the same database all over your web server, you can
+use
+
+Auth_MySQL_General_DB <database>
+
+to set that.  This setting can be overridden in .htaccess files if
+AuthMySQL_AllowOverride is set.
+
+On that topic, if you want .htaccess files to be restricted in what they're
+able to connect to database-wise, you can
+
+AuthMySQL_AllowOverride no
+
+and the host, user, password, and database name cannot be changed.
+
+Create a .htaccess file in the directory you want to protect (or put the
+directives inside a Directory section in httpd.conf) with something like the
+following:
+
+AuthName "My Company's Financial Information - Top Secret"
+AuthType Basic
+require valid-user
+
+This will allow any user who can supply a username and password access.
+
+If you replace the require line with
+
+require user bill fred jane
+
+then only users who can successfully authenticate as bill, fred, or jane
+will be allowed access.  Or, if you set the require line to
+
+require group executives
+
+then only users who are a part of the executives group will be allowed
+access to the documents in that directory.
+
+A special note: multiple require lines are logically OR'd -- if the user's
+details match *any* of the require lines supplied, the user will be
+considered authenticated.  For example,
+
+require user jane joe
+require group executives
+
+means that if the user is jane or joe, or the user is in the executives
+group, they will be let in.  Neither jane nor joe have to be in the
+executives group.
+
+Passwords
+-----------
+
+There is also the slight matter of how the passwords are stored in the
+database.  Several different methods are available:
+
+Plaintext
+Crypt_DES
+Crypt_MD5
+Crypt (basically Crypt_DES and Crypt_MD5, plus any other schemes your local
+       crypt() call implements)
+PHP_MD5 (MD5 hashes, encoded the way PHP and MySQL both do it)
+SHA1Sum (SHA1 hashes, encoded as a 40 character lowercase hex string)
+MySQL (the hashing scheme used by the MySQL PASSWORD() function)
+
+You should list all of the available ways your passwords can be encoded in
+the Auth_MySQL_Encryption_Types config item.  By default, only Crypt_DES is
+enabled.  A common example, if you're using a PHP script to manage
+passwords, might be:
+
+Auth_MySQL_Encryption_Types PHP_MD5 Crypt
+
+Note that adding more types to be checked slows down authentication, and
+allowing the Plaintext type means that any hashed passwords stored in the DB
+become plaintext equivalents.
+
+The full set of directives available are now listed in the file DIRECTIVES,
+for ease of perusal.
diff --git a/auth_mysql.load b/auth_mysql.load
new file mode 100644 (file)
index 0000000..be80731
--- /dev/null
@@ -0,0 +1 @@
+LoadModule auth_mysql_module /usr/lib/apache2/modules/mod_auth_mysql.so
diff --git a/config.h.in b/config.h.in
new file mode 100644 (file)
index 0000000..f6b821e
--- /dev/null
@@ -0,0 +1,49 @@
+/* config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Enable DES encrpytion */
+#undef CRYPT_DES
+
+/* Enable crypt() MD5 encryption */
+#undef CRYPT_MD5
+
+/* Define to 1 if you have the <crypt.h> header file. */
+#undef HAVE_CRYPT_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the `mysqlclient' library (-lmysqlclient). */
+#undef HAVE_LIBMYSQLCLIENT
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#undef RETSIGTYPE
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
diff --git a/configure b/configure
new file mode 100755 (executable)
index 0000000..390b02f
--- /dev/null
+++ b/configure
@@ -0,0 +1,4588 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.59 for mod_auth_mysql 4.2.0.
+#
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)$' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+         /^X\/\(\/\/\)$/{ s//\1/; q; }
+         /^X\/\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+        case $as_dir in
+        /*)
+          if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+            $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+            $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+            CONFIG_SHELL=$as_dir/$as_base
+            export CONFIG_SHELL
+            exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+          fi;;
+        esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='     ' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS="  $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete.  It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME='mod_auth_mysql'
+PACKAGE_TARNAME='mod_auth_mysql'
+PACKAGE_VERSION='4.2.0'
+PACKAGE_STRING='mod_auth_mysql 4.2.0'
+PACKAGE_BUGREPORT=''
+
+ac_unique_file="mod_auth_mysql.c"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT modules apxs apxs2 mysql_includes mysql_libs build_opts CPP EGREP LIBOBJS LTLIBOBJS'
+ac_subst_files=''
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+ac_prev=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_option in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    eval "enable_$ac_feature=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_$ac_feature='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_$ac_package='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/-/_/g'`
+    eval "with_$ac_package=no" ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+    eval "$ac_envvar='$ac_optarg'"
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+             localstatedir libdir includedir oldincludedir infodir mandir
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then its parent.
+  ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$0" : 'X\(//\)[^/]' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r $srcdir/$ac_unique_file; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+  if test "$ac_srcdir_defaulted" = yes; then
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+   { (exit 1); exit 1; }; }
+  else
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+  fi
+fi
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+   { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures mod_auth_mysql 4.2.0 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+_ACEOF
+
+  cat <<_ACEOF
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                         [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                         [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR           user executables [EPREFIX/bin]
+  --sbindir=DIR          system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR       program executables [EPREFIX/libexec]
+  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+  --libdir=DIR           object code libraries [EPREFIX/lib]
+  --includedir=DIR       C header files [PREFIX/include]
+  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+  --infodir=DIR          info documentation [PREFIX/info]
+  --mandir=DIR           man documentation [PREFIX/man]
+_ACEOF
+
+  cat <<\_ACEOF
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of mod_auth_mysql 4.2.0:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-apache13       Indicate that the apache 1.3 module should be built
+  --enable-apache2        Indicate that the apache 2.0 module should be built
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-apxs             location of the apxs module helper
+  --with-apxs2            location of the apxs2 Apache2 module helper
+  --with-mysql-includes   MySQL includes directory
+  --with-mysql-libs       MySQL libraries directory
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
+              headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  ac_popdir=`pwd`
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d $ac_dir || continue
+    ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+    cd $ac_dir
+    # Check for guested configure; otherwise get Cygnus style configure.
+    if test -f $ac_srcdir/configure.gnu; then
+      echo
+      $SHELL $ac_srcdir/configure.gnu  --help=recursive
+    elif test -f $ac_srcdir/configure; then
+      echo
+      $SHELL $ac_srcdir/configure  --help=recursive
+    elif test -f $ac_srcdir/configure.ac ||
+          test -f $ac_srcdir/configure.in; then
+      echo
+      $ac_configure --help
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi
+    cd "$ac_popdir"
+  done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+  cat <<\_ACEOF
+mod_auth_mysql configure 4.2.0
+generated by GNU Autoconf 2.59
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit 0
+fi
+exec 5>config.log
+cat >&5 <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by mod_auth_mysql $as_me 4.2.0, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_sep=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *" "*|*"   "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+       ac_must_keep_next=false # Got value, back to normal.
+      else
+       case $ac_arg in
+         *=* | --config-cache | -C | -disable-* | --disable-* \
+         | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+         | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+         | -with-* | --with-* | -without-* | --without-* | --x)
+           case "$ac_configure_args0 " in
+             "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+           esac
+           ;;
+         -* ) ac_must_keep_next=true ;;
+       esac
+      fi
+      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+      # Get rid of the leading space.
+      ac_sep=" "
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+{
+  (set) 2>&1 |
+    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      sed -n \
+       "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+      ;;
+    *)
+      sed -n \
+       "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+}
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=$`echo $ac_var`
+      echo "$ac_var='"'"'$ac_val'"'"'"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+       eval ac_val=$`echo $ac_var`
+       echo "$ac_var='"'"'$ac_val'"'"'"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      sed "/^$/d" confdefs.h | sort
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core &&
+  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+     ' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . $cache_file;;
+      *)                      . ./$cache_file;;
+    esac
+  fi
+else
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+              sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+  eval ac_new_val="\$ac_env_${ac_var}_value"
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+       { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+       { echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+echo "$as_me:   former value:  $ac_old_val" >&2;}
+       { echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+echo "$as_me:   current value: $ac_new_val" >&2;}
+       ac_cache_corrupted=:
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *" "*|*"   "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+          ac_config_headers="$ac_config_headers config.h"
+
+
+# Checks for programs.
+
+# Checks for libraries.
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; 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_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; 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_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; 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_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; 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_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; 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_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; 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_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; 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_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_CC" && break
+done
+
+  CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+     "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+  (eval $ac_link_default) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Find the output, starting from the most likely.  This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+       ;;
+    conftest.$ac_ext )
+       # This is the source file.
+       ;;
+    [ab].out )
+       # We found the default executable, but exeext='' is most
+       # certainly right.
+       break;;
+    *.* )
+       ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+       # FIXME: I believe we export ac_cv_exeext for Libtool,
+       # but it would be cool to find out if it's true.  Does anybody
+       # maintain Libtool? --akim.
+       export ac_cv_exeext
+       break;;
+    * )
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+       cross_compiling=yes
+    else
+       { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  fi
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+         export ac_cv_exeext
+         break;;
+    * ) break;;
+  esac
+done
+else
+  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+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.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+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.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 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'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+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.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 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'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std1 is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std1.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX                  -qlanglvl=ansi
+# Ultrix and OSF/1     -std1
+# HP-UX 10.20 and later        -Ae
+# HP-UX older versions -Aa -D_HPUX_SOURCE
+# SVR4                 -Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 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'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+  x|xno)
+    echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+  *)
+    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+    CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C.  Since we use `exit',
+# in C++ we need to declare it.  In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+  choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 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'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  for ac_declaration in \
+   '' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 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'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 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'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+echo "$as_me:$LINENO: checking for mysql_init in -lmysqlclient" >&5
+echo $ECHO_N "checking for mysql_init in -lmysqlclient... $ECHO_C" >&6
+if test "${ac_cv_lib_mysqlclient_mysql_init+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmysqlclient  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char mysql_init ();
+int
+main ()
+{
+mysql_init ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&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'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_mysqlclient_mysql_init=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_mysqlclient_mysql_init=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_mysqlclient_mysql_init" >&5
+echo "${ECHO_T}$ac_cv_lib_mysqlclient_mysql_init" >&6
+if test $ac_cv_lib_mysqlclient_mysql_init = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBMYSQLCLIENT 1
+_ACEOF
+
+  LIBS="-lmysqlclient $LIBS"
+
+fi
+
+
+# Check whether --enable-apache13 or --disable-apache13 was given.
+if test "${enable_apache13+set}" = set; then
+  enableval="$enable_apache13"
+
+if test "x$enableval" = "xyes"; then
+       buildapache13="yes"
+       modules="$modules apache13_mod_auth_mysql.so"
+fi
+
+else
+
+# Build the apache 1.3 module by default
+buildapache13="yes"
+modules="$modules apache13_mod_auth_mysql.so"
+
+fi;
+
+# Check whether --enable-apache2 or --disable-apache2 was given.
+if test "${enable_apache2+set}" = set; then
+  enableval="$enable_apache2"
+
+if test "x$enableval" = "xyes"; then
+       buildapache2="yes"
+       modules="$modules apache2_mod_auth_mysql.so"
+fi
+
+fi;
+
+
+
+# Check whether --with-apxs or --without-apxs was given.
+if test "${with_apxs+set}" = set; then
+  withval="$with_apxs"
+
+if test "x$buildapache13" = "xyes"; then
+       if test ! -x $withval; then
+               { { echo "$as_me:$LINENO: error: $withval not found" >&5
+echo "$as_me: error: $withval not found" >&2;}
+   { (exit 1); exit 1; }; }
+       else
+               apxs="$withval"
+       fi
+fi
+
+else
+
+if test "x$buildapache13" = "xyes"; then
+       # Test common apxs locations; add any others I've missed here
+       if test -x /usr/bin/apxs; then
+               apxs="/usr/bin/apxs"
+       elif test -x /usr/local/bin/apxs; then
+               apxs="/usr/local/bin/apxs"
+       else
+               { { echo "$as_me:$LINENO: error: Apache extension helper apxs not found!" >&5
+echo "$as_me: error: Apache extension helper apxs not found!" >&2;}
+   { (exit 1); exit 1; }; }
+       fi
+fi
+
+fi;
+
+
+
+# Check whether --with-apxs2 or --without-apxs2 was given.
+if test "${with_apxs2+set}" = set; then
+  withval="$with_apxs2"
+
+if test "x$buildapache2" = "xyes"; then
+       if test ! -x $withval; then
+               { { echo "$as_me:$LINENO: error: $withval not found" >&5
+echo "$as_me: error: $withval not found" >&2;}
+   { (exit 1); exit 1; }; }
+       else
+               apxs2="$withval"
+       fi
+fi
+
+else
+
+if test "x$buildapache2" = "xyes"; then
+       # Test likely apxs2 locations
+       if test -x /usr/bin/apxs2; then
+               apxs2="/usr/bin/apxs2"
+       elif test -x /usr/local/bin/apxs2; then
+               apxs2="/usr/local/bin/apxs2"
+       else
+               { { echo "$as_me:$LINENO: error: Apache2 extension helper not found!" >&5
+echo "$as_me: error: Apache2 extension helper not found!" >&2;}
+   { (exit 1); exit 1; }; }
+       fi
+fi
+
+fi;
+
+
+
+# Check whether --with-mysql-includes or --without-mysql-includes was given.
+if test "${with_mysql_includes+set}" = set; then
+  withval="$with_mysql_includes"
+
+if test ! -e $withval/mysql.h; then
+       { { echo "$as_me:$LINENO: error: Invalid MySQL includes directory: $withval" >&5
+echo "$as_me: error: Invalid MySQL includes directory: $withval" >&2;}
+   { (exit 1); exit 1; }; }
+else
+       mysql_includes="-I$withval"
+fi
+
+else
+
+# Common location finder
+if test -e /usr/include/mysql/mysql.h; then
+       mysql_includes="-I/usr/include/mysql"
+elif test -e /usr/include/mysql.h; then
+       mysql_includes="-I/usr/include"
+elif test -e /usr/local/include/mysql/mysql.h; then
+       mysql_includes="-I/usr/local/include/mysql"
+elif test -e /usr/local/include/mysql.h; then
+       mysql_includes="-I/usr/local/include"
+else
+       { { echo "$as_me:$LINENO: error: MySQL include files not found!" >&5
+echo "$as_me: error: MySQL include files not found!" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+fi;
+
+
+
+# Check whether --with-mysql-libs or --without-mysql-libs was given.
+if test "${with_mysql_libs+set}" = set; then
+  withval="$with_mysql_libs"
+
+if test ! -e $withval/libmysqlclient.so; then
+       { { echo "$as_me:$LINENO: error: Invalid MySQL libs directory: $withval" >&5
+echo "$as_me: error: Invalid MySQL libs directory: $withval" >&2;}
+   { (exit 1); exit 1; }; }
+else
+       mysql_libs="-L$withval"
+fi
+
+else
+
+# Common location finder
+if test -e /usr/lib/mysql/libmysqlclient.so; then
+       mysql_libs="-L/usr/lib/mysql"
+elif test -e /usr/lib/libmysqlclient.so; then
+       mysql_libs="-L/usr/lib"
+elif test -e /usr/local/lib/mysql/libmysqlclient.so; then
+       mysql_libs="-L/usr/local/lib/mysql"
+elif test -e /usr/local/lib/libmysqlclient.so ; then
+       mysql_libs="-L/usr/local/lib"
+else
+       { { echo "$as_me:$LINENO: error: MySQL libraries not found!" >&5
+echo "$as_me: error: MySQL libraries not found!" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+fi;
+
+
+build_opts="$mysql_includes $mysql_libs"
+
+
+# Checks for header files.
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+    then ac_cv_prog_egrep='grep -E'
+    else ac_cv_prog_egrep='egrep'
+    fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+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.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 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'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+                  (('a' <= (c) && (c) <= 'i') \
+                    || ('j' <= (c) && (c) <= 'r') \
+                    || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+       || toupper (i) != TOUPPER (i))
+      exit(2);
+  exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+                 inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+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.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 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'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+for ac_header in crypt.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 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'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ----------------------------------------- ##
+## Report this to the mod_auth_mysql lists.  ##
+## ----------------------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+echo "$as_me:$LINENO: checking for crypt in -lcrypt" >&5
+echo $ECHO_N "checking for crypt in -lcrypt... $ECHO_C" >&6
+if test "${ac_cv_lib_crypt_crypt+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcrypt  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char crypt ();
+int
+main ()
+{
+crypt ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&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'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_crypt_crypt=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_crypt_crypt=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_crypt_crypt" >&5
+echo "${ECHO_T}$ac_cv_lib_crypt_crypt" >&6
+if test $ac_cv_lib_crypt_crypt = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBCRYPT 1
+_ACEOF
+
+  LIBS="-lcrypt $LIBS"
+
+fi
+
+
+if test -n $HAVE_CRYPT_H; then
+       if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <crypt.h>
+#include <string.h>
+
+int main()
+{
+       return strcmp(crypt("a", "\$1\$aaaaaaaa"),
+                       "\$1\$aaaaaaaa\$S270EsVIz5M8Y9/k4SSEf.");
+}
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+cat >>confdefs.h <<\_ACEOF
+#define CRYPT_MD5 1
+_ACEOF
+
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+       if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <crypt.h>
+#include <string.h>
+
+int main()
+{
+       return strcmp(crypt("a", "aa"),
+                       "aafKPWZb/dLAs");
+}
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+cat >>confdefs.h <<\_ACEOF
+#define CRYPT_DES 1
+_ACEOF
+
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+fi  # if test -n HAVE_CRYPT_H
+
+# Checks for typedefs, structures, and compiler characteristics.
+echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
+if test "${ac_cv_c_const+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.  */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this.  */
+  typedef int charset[2];
+  const charset x;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *ccp;
+  char **p;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  ccp = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++ccp;
+  p = (char**) ccp;
+  ccp = (char const *const *) p;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; };
+    struct s *b; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+  }
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 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'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_const=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_c_const=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6
+if test $ac_cv_c_const = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define const
+_ACEOF
+
+fi
+
+
+# Checks for library functions.
+echo "$as_me:$LINENO: checking return type of signal handlers" >&5
+echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6
+if test "${ac_cv_type_signal+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.  */
+#include <sys/types.h>
+#include <signal.h>
+#ifdef signal
+# undef signal
+#endif
+#ifdef __cplusplus
+extern "C" void (*signal (int, void (*)(int)))(int);
+#else
+void (*signal ()) ();
+#endif
+
+int
+main ()
+{
+int i;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 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'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_signal=void
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_signal=int
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
+echo "${ECHO_T}$ac_cv_type_signal" >&6
+
+cat >>confdefs.h <<_ACEOF
+#define RETSIGTYPE $ac_cv_type_signal
+_ACEOF
+
+
+
+          ac_config_files="$ac_config_files Makefile"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+  (set) 2>&1 |
+    case `(ac_space=' '; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+       "s/'/'\\\\''/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;;
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n \
+       "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} |
+  sed '
+     t clear
+     : clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+  if test -w $cache_file; then
+    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+    cat confcache >$cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[         ]*VPATH[        ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[    ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[      ]*$//;
+}'
+fi
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_i=`echo "$ac_i" |
+        sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+  # 2. Add them.
+  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)$' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+         /^X\/\(\/\/\)$/{ s//\1/; q; }
+         /^X\/\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+        case $as_dir in
+        /*)
+          if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+            $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+            $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+            CONFIG_SHELL=$as_dir/$as_base
+            export CONFIG_SHELL
+            exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+          fi;;
+        esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='     ' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS="  $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.  Logging --version etc. is OK.
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by mod_auth_mysql $as_me 4.2.0, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+                  instantiate the configuration file FILE
+  --header=FILE[:TEMPLATE]
+                  instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Report bugs to <bug-autoconf@gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+mod_auth_mysql config.status 4.2.0
+configured by $0, generated by GNU Autoconf 2.59,
+  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "x$1" : 'x\([^=]*\)='`
+    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  -*)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  *) # This is not an option, so the user has probably given explicit
+     # arguments.
+     ac_option=$1
+     ac_need_defaults=false;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --vers* | -V )
+    echo "$ac_cs_version"; exit 0 ;;
+  --he | --h)
+    # Conflict between --help and --header
+    { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit 0 ;;
+  --debug | --d* | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    ac_need_defaults=false;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1" ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+
+
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+  case "$ac_config_target" in
+  # Handling of arguments.
+  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+  "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./confstat$$-$RANDOM
+  (umask 077 && mkdir $tmp)
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+  # Protect against being on the right side of a sed subst in config.status.
+  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@DEFS@,$DEFS,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@LIBS@,$LIBS,;t t
+s,@CC@,$CC,;t t
+s,@CFLAGS@,$CFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@ac_ct_CC@,$ac_ct_CC,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@modules@,$modules,;t t
+s,@apxs@,$apxs,;t t
+s,@apxs2@,$apxs2,;t t
+s,@mysql_includes@,$mysql_includes,;t t
+s,@mysql_libs@,$mysql_libs,;t t
+s,@build_opts@,$build_opts,;t t
+s,@CPP@,$CPP,;t t
+s,@EGREP@,$EGREP,;t t
+s,@LIBOBJS@,$LIBOBJS,;t t
+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
+CEOF
+
+_ACEOF
+
+  cat >>$CONFIG_STATUS <<\_ACEOF
+  # Split the substitutions into bite-sized pieces for seds with
+  # small command number limits, like on Digital OSF/1 and HP-UX.
+  ac_max_sed_lines=48
+  ac_sed_frag=1 # Number of current file.
+  ac_beg=1 # First line for current file.
+  ac_end=$ac_max_sed_lines # Line after last line for current file.
+  ac_more_lines=:
+  ac_sed_cmds=
+  while $ac_more_lines; do
+    if test $ac_beg -gt 1; then
+      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    else
+      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    fi
+    if test ! -s $tmp/subs.frag; then
+      ac_more_lines=false
+    else
+      # The purpose of the label and of the branching condition is to
+      # speed up the sed processing (if there are no `@' at all, there
+      # is no need to browse any of the substitutions).
+      # These are the two extra sed commands mentioned above.
+      (echo ':t
+  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+      if test -z "$ac_sed_cmds"; then
+       ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+      else
+       ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+      fi
+      ac_sed_frag=`expr $ac_sed_frag + 1`
+      ac_beg=$ac_end
+      ac_end=`expr $ac_end + $ac_max_sed_lines`
+    fi
+  done
+  if test -z "$ac_sed_cmds"; then
+    ac_sed_cmds=cat
+  fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+       cat >$tmp/stdin
+       ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+       ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+       ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$ac_file" : 'X\(//\)[^/]' \| \
+        X"$ac_file" : 'X\(//\)$' \| \
+        X"$ac_file" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    configure_input=
+  else
+    configure_input="$ac_file.  "
+  fi
+  configure_input=$configure_input"Generated from `echo $ac_file_in |
+                                    sed 's,.*/,,'` by configure."
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+        # Absolute (can't be DOS-style, as IFS=:)
+        test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+        echo "$f";;
+      *) # Relative
+        if test -f "$f"; then
+          # Build tree
+          echo "$f"
+        elif test -f "$srcdir/$f"; then
+          # Source tree
+          echo "$srcdir/$f"
+        else
+          # /dev/null tree
+          { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+        fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+
+  if test x"$ac_file" != x-; then
+    { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    rm -f "$ac_file"
+  fi
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@abs_srcdir@,$ac_abs_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s,@builddir@,$ac_builddir,;t t
+s,@abs_builddir@,$ac_abs_builddir,;t t
+s,@top_builddir@,$ac_top_builddir,;t t
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+  rm -f $tmp/stdin
+  if test x"$ac_file" != x-; then
+    mv $tmp/out $ac_file
+  else
+    cat $tmp/out
+    rm -f $tmp/out
+  fi
+
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([   ]*\)#\([        ]*define[       ][      ]*\)'
+ac_dB='[        ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([   ]*\)#\([        ]*\)undef\([    ][      ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+       cat >$tmp/stdin
+       ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+       ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+       ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+        # Absolute (can't be DOS-style, as IFS=:)
+        test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+        # Do quote $f, to prevent DOS paths from being IFS'd.
+        echo "$f";;
+      *) # Relative
+        if test -f "$f"; then
+          # Build tree
+          echo "$f"
+        elif test -f "$srcdir/$f"; then
+          # Source tree
+          echo "$srcdir/$f"
+        else
+          # /dev/null tree
+          { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+        fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+  # Remove the trailing spaces.
+  sed 's/[      ]*$//' $ac_file_inputs >$tmp/in
+
+_ACEOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h.  The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status.  Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\_ACEOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[    ]*#[    ]*define[       ][      ]*\([^  (][^    (]*\)\(([^)]*)\)[       ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+t end
+s,^[    ]*#[    ]*define[       ][      ]*\([^  ][^     ]*\)[   ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+_ACEOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless.  Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
+
+# This sed command replaces #undef with comments.  This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >>conftest.undefs <<\_ACEOF
+s,^[    ]*#[    ]*undef[        ][      ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+_ACEOF
+
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo '  if grep "^[     ]*#[    ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo '  :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+  # Write a limited-size here document to $tmp/defines.sed.
+  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#define' lines.
+  echo '/^[     ]*#[    ]*define/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/defines.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+  rm -f conftest.defines
+  mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo '  fi # grep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.undefs >/dev/null
+do
+  # Write a limited-size here document to $tmp/undefs.sed.
+  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#undef'
+  echo '/^[     ]*#[    ]*undef/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+  rm -f conftest.undefs
+  mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    echo "/* Generated by configure.  */" >$tmp/config.h
+  else
+    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
+  fi
+  cat $tmp/in >>$tmp/config.h
+  rm -f $tmp/in
+  if test x"$ac_file" != x-; then
+    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$ac_file" : 'X\(//\)[^/]' \| \
+        X"$ac_file" : 'X\(//\)$' \| \
+        X"$ac_file" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+      { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+      rm -f $ac_file
+      mv $tmp/config.h $ac_file
+    fi
+  else
+    cat $tmp/config.h
+    rm -f $tmp/config.h
+  fi
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
diff --git a/configure.ac b/configure.ac
new file mode 100644 (file)
index 0000000..02c2116
--- /dev/null
@@ -0,0 +1,180 @@
+# Process this file with autoconf to produce a configure script.
+AC_INIT(mod_auth_mysql, 4.2.0)
+
+AC_CONFIG_SRCDIR([mod_auth_mysql.c])
+AC_CONFIG_HEADER([config.h])
+
+# Checks for programs.
+
+# Checks for libraries.
+AC_CHECK_LIB([mysqlclient], [mysql_init])
+
+AC_ARG_ENABLE(apache13,
+AC_HELP_STRING([--enable-apache13], [Indicate that the apache 1.3 module should be built]),
+[
+if test "x$enableval" = "xyes"; then
+       buildapache13="yes"
+       modules="$modules apache13_mod_auth_mysql.so"
+fi
+],
+[
+# Build the apache 1.3 module by default
+buildapache13="yes"
+modules="$modules apache13_mod_auth_mysql.so"
+])
+
+AC_ARG_ENABLE(apache2,
+AC_HELP_STRING([--enable-apache2], [Indicate that the apache 2.0 module should be built]),
+[
+if test "x$enableval" = "xyes"; then
+       buildapache2="yes"
+       modules="$modules apache2_mod_auth_mysql.so"
+fi
+])
+AC_SUBST(modules)
+
+AC_ARG_WITH(apxs,
+AC_HELP_STRING([--with-apxs], [location of the apxs module helper]),
+[
+if test "x$buildapache13" = "xyes"; then
+       if test ! -x $withval; then
+               AC_MSG_ERROR($withval not found)
+       else
+               apxs="$withval"
+       fi
+fi
+],
+[
+if test "x$buildapache13" = "xyes"; then
+       # Test common apxs locations; add any others I've missed here
+       if test -x /usr/bin/apxs; then
+               apxs="/usr/bin/apxs"
+       elif test -x /usr/local/bin/apxs; then
+               apxs="/usr/local/bin/apxs"
+       else
+               AC_MSG_ERROR(Apache extension helper apxs not found!)
+       fi
+fi
+])
+AC_SUBST(apxs)
+
+AC_ARG_WITH(apxs2,
+AC_HELP_STRING([--with-apxs2], [location of the apxs2 Apache2 module helper]),
+[
+if test "x$buildapache2" = "xyes"; then
+       if test ! -x $withval; then
+               AC_MSG_ERROR($withval not found)
+       else
+               apxs2="$withval"
+       fi
+fi
+],
+[
+if test "x$buildapache2" = "xyes"; then
+       # Test likely apxs2 locations
+       if test -x /usr/bin/apxs2; then
+               apxs2="/usr/bin/apxs2"
+       elif test -x /usr/local/bin/apxs2; then
+               apxs2="/usr/local/bin/apxs2"
+       else
+               AC_MSG_ERROR(Apache2 extension helper not found!)
+       fi
+fi
+])
+AC_SUBST(apxs2)
+
+AC_ARG_WITH(mysql-includes,
+AC_HELP_STRING([--with-mysql-includes], [MySQL includes directory]),
+[
+if test ! -e $withval/mysql.h; then
+       AC_MSG_ERROR(Invalid MySQL includes directory: $withval)
+else
+       mysql_includes="-I$withval"
+fi
+],
+[
+# Common location finder
+if test -e /usr/include/mysql/mysql.h; then
+       mysql_includes="-I/usr/include/mysql"
+elif test -e /usr/include/mysql.h; then
+       mysql_includes="-I/usr/include"
+elif test -e /usr/local/include/mysql/mysql.h; then
+       mysql_includes="-I/usr/local/include/mysql"
+elif test -e /usr/local/include/mysql.h; then
+       mysql_includes="-I/usr/local/include"
+else
+       AC_MSG_ERROR(MySQL include files not found!)
+fi
+])
+AC_SUBST(mysql_includes)
+
+AC_ARG_WITH(mysql-libs,
+AC_HELP_STRING([--with-mysql-libs], [MySQL libraries directory]),
+[
+if test ! -e $withval/libmysqlclient.so; then
+       AC_MSG_ERROR(Invalid MySQL libs directory: $withval)
+else
+       mysql_libs="-L$withval"
+fi
+],
+[
+# Common location finder
+if test -e /usr/lib/mysql/libmysqlclient.so; then
+       mysql_libs="-L/usr/lib/mysql"
+elif test -e /usr/lib/libmysqlclient.so; then
+       mysql_libs="-L/usr/lib"
+elif test -e /usr/local/lib/mysql/libmysqlclient.so; then
+       mysql_libs="-L/usr/local/lib/mysql"
+elif test -e /usr/local/lib/libmysqlclient.so ; then
+       mysql_libs="-L/usr/local/lib"
+else
+       AC_MSG_ERROR(MySQL libraries not found!)
+fi
+])
+AC_SUBST(mysql_libs)
+
+AC_SUBST(build_opts, "$mysql_includes $mysql_libs")
+
+# Checks for header files.
+AC_CHECK_HEADERS([crypt.h])
+
+AC_CHECK_LIB([crypt], [crypt])
+
+if test -n $HAVE_CRYPT_H; then
+       AC_TRY_RUN(
+[
+#include <crypt.h>
+#include <string.h>
+
+int main()
+{
+       return strcmp(crypt("a", "\$1\$aaaaaaaa"),
+                       "\$1\$aaaaaaaa\$S270EsVIz5M8Y9/k4SSEf.");
+}
+],
+AC_DEFINE(CRYPT_MD5, 1, [Enable crypt() MD5 encryption]),
+,,)
+       AC_TRY_RUN(
+[
+#include <crypt.h>
+#include <string.h>
+
+int main()
+{
+       return strcmp(crypt("a", "aa"),
+                       "aafKPWZb/dLAs");
+}
+],
+AC_DEFINE(CRYPT_DES, 1, [Enable DES encrpytion]),
+,,)
+
+fi  # if test -n HAVE_CRYPT_H
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+
+# Checks for library functions.
+AC_TYPE_SIGNAL
+
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
diff --git a/install-sh b/install-sh
new file mode 100755 (executable)
index 0000000..a5f0afc
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+# Dummy file to make configure happy.  <shrug>
+
+exit 0
diff --git a/mod_auth_mysql.c b/mod_auth_mysql.c
new file mode 100644 (file)
index 0000000..ee1f94b
--- /dev/null
@@ -0,0 +1,1749 @@
+/*
+ * Copyright (c) 2001 by J. R. Westmoreland <jr@jrw.org>
+ * Portions Copyright (c) 2002-2004 by Matthew Palmer <mpalmer@debian.org>
+ *
+ * Original module/version: mod_auth_mysql v2.20
+ * Originally written and maintained by Zeev Suraski <bourbon@netvision.net.il>
+ * A couple of fixes by Marschall Peter <Peter.Marschall@gedos.de>
+ * and Brent Metz <bmetz@thor.tjhsst.edu>
+ * MySQL/PHP style MD5 hashes, and an integration with the mod-auth-mysql
+ * maintained by Bill Joned by Matthew Palmer <mpalmer@debian.org>
+ *
+ * This version maintained by Matthew Palmer <mpalmer@debian.org>
+ *
+ * Please read the INSTALL and USAGE files for further information.
+ * 
+ * 2004-02-01 MURAKAMI, takeshi <takeshi@softagency.co.jp>
+ * add port, socket
+ * 2004-02-07 MURAKAMI, takeshi <takeshi@softagency.co.jp>
+ * apache2
+ * 2004-09-20 Joseph Walton <joe@kafsemo.org>
+ * SHA1 hash support
+ */
+
+#define AUTH_MYSQL_VERSION "4.3.9"
+
+#include "config.h"
+
+#ifdef APACHE2
+#define PALLOC apr_palloc
+#define PCALLOC apr_pcalloc
+#define SNPRINTF apr_snprintf
+#define PSTRDUP apr_pstrdup
+#define PSTRCAT apr_pstrcat
+#define APACHELOG(severity, handle, message...) ap_log_error(APLOG_MARK, APLOG_NOERRNO | severity, 0, handle->server, message)
+#else
+#define PALLOC ap_palloc
+#define PCALLOC ap_pcalloc
+#define SNPRINTF ap_snprintf
+#define PSTRDUP ap_pstrdup
+#define PSTRCAT ap_pstrcat
+#define APACHELOG(severity, handle, message...) ap_log_error(APLOG_MARK, APLOG_NOERRNO | severity, handle->server, message)
+#endif
+
+#include <httpd.h>
+#include <http_config.h>
+#include <http_core.h>
+#include <http_protocol.h>
+#include <http_log.h>
+#ifdef APACHE2
+#include "http_request.h"   /* for ap_hook_(check_user_id | auth_checker)*/
+#include <apr_md5.h>
+#include <apr_sha1.h>
+#else
+#include <ap_md5.h>
+#include <ap_sha1.h>
+#endif
+
+#include <mysql.h>
+#include <errmsg.h>
+#include <mysqld_error.h>
+
+#ifdef HAVE_CRYPT_H
+#include <crypt.h>
+#endif
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+/* This are the system-wide config options; the more specific options live in
+ * a mysql_auth_config_rec structure, one for each MySQL-configured directory.
+ */
+static char    *auth_db_host = NULL,
+               *auth_db_name = NULL,
+               *auth_db_user = NULL,
+               *auth_db_pwd = NULL;
+
+static int     auth_db_override = 1;
+
+char *tmp_host = NULL;
+char *auth_db_socket = NULL;
+long auth_db_port = -1;
+unsigned long auth_db_client_flag = 0;
+
+/* Support for general-purpose encryption schemes.  Should be fairly straightforward.
+ * We have a checking routine and a name for it (for AuthMySQL_Encryption_Types).
+ */
+
+#define PLAINTEXT_ENCRYPTION_FLAG      1<<0
+#ifdef CRYPT_DES
+#define CRYPT_DES_ENCRYPTION_FLAG      1<<1
+#endif
+#define MYSQL_ENCRYPTION_FLAG          1<<2
+#ifdef CRYPT_MD5
+#define CRYPT_MD5_ENCRYPTION_FLAG      1<<3
+#endif
+#define PHP_MD5_ENCRYPTION_FLAG                1<<4
+#ifdef HAVE_CRYPT_H
+#define CRYPT_ENCRYPTION_FLAG          1<<5
+#endif
+#define SHA1SUM_ENCRYPTION_FLAG                1<<6
+
+static int check_no_encryption(const char *passwd, char *enc_passwd)
+{
+       return (!strcmp(passwd, enc_passwd));
+}
+
+
+#ifdef CRYPT_DES
+static int check_crypt_des_encryption(const char *passwd, char *enc_passwd)
+{
+       /* Ensure that MD5 passwords aren't checked here */
+       if (!strncmp(enc_passwd, "$1$", 3)) {
+               return 0;
+       }
+       return (!strcmp(crypt(passwd, enc_passwd), enc_passwd));
+}
+#endif
+
+#ifdef CRYPT_MD5
+static int check_crypt_MD5_encryption(const char *passwd, char *enc_passwd)
+{
+       /* Make sure only MD5 passwords are checked */
+       if (strncmp(enc_passwd, "$1$", 3)) {
+               return 0;
+       }
+       return (!strcmp(crypt(passwd, enc_passwd), enc_passwd));
+}
+#endif
+
+#ifdef HAVE_CRYPT_H
+static int check_crypt_encryption(const char *passwd, char *enc_passwd)
+{
+       return (!strcmp(crypt(passwd, enc_passwd), enc_passwd));
+}
+#endif
+
+char hex_digit(char c)
+{
+       if (c < 10) {
+               return c+'0';
+       } else {
+               return c-10+'a';
+       }
+}
+
+static char *md5_hex_hash(const char *pass)
+{
+       unsigned char hash[16];
+       /* This makes this function *very* specialised.  Change this to
+        * use dynamic memory if you want to reuse it somewhere else */
+       static char real_hash[33];
+       int i;
+#ifdef APACHE2
+       apr_md5_ctx_t ct;
+
+       apr_md5_init(&ct);
+       apr_md5_update(&ct, pass, strlen(pass));
+       apr_md5_final(hash, &ct);
+#else
+       AP_MD5_CTX ct;
+
+       ap_MD5Init(&ct);
+       ap_MD5Update(&ct, pass, strlen(pass));
+       ap_MD5Final(hash, &ct);
+#endif
+       
+       /* Now we convert the 16 octet hash to a 32 byte hex string */
+       for (i = 0; i < 16; i++) {
+               real_hash[2*i+1] = hash[i] & 0xF;
+               real_hash[2*i] = (hash[i] & 0xF0) >> 4;
+       }
+       for (i = 0; i < 32; i++) {
+               real_hash[i] = hex_digit(real_hash[i]);
+       }
+       real_hash[32] = '\0';
+
+       return real_hash;
+}
+
+static int check_PHP_MD5_encryption(const char *passwd, char *enc_passwd)
+{
+       return (!strcmp(md5_hex_hash(passwd), enc_passwd));
+}
+
+static char *sha1_hex_hash(const char *passwd)
+{
+       int i;
+
+#ifdef APACHE2
+       apr_sha1_ctx_t ct;
+       char hash[APR_SHA1_DIGESTSIZE];
+       static char real_hash[APR_SHA1_DIGESTSIZE * 2 + 1];
+
+       apr_sha1_init(&ct);
+       apr_sha1_update(&ct, passwd, strlen(passwd));
+       apr_sha1_final(hash, &ct);
+#else
+       AP_SHA1_CTX ct;
+       char hash[SHA_DIGESTSIZE];
+       static char real_hash[SHA_DIGESTSIZE * 2 + 1];
+
+       ap_SHA1Init(&ct);
+       ap_SHA1Update(&ct, passwd, strlen(passwd));
+       ap_SHA1Final(hash, &ct);
+#endif
+
+       /* Now we convert the 20 octet hash to a 40 byte hex string */
+       for (i = 0; i < sizeof(hash); i++) {
+               real_hash[2*i+1] = hash[i] & 0xF;
+               real_hash[2*i] = (hash[i] & 0xF0) >> 4;
+       }
+       for (i = 0; i < sizeof(real_hash); i++) {
+               real_hash[i] = hex_digit(real_hash[i]);
+       }
+       real_hash[sizeof(real_hash)-1] = '\0';
+
+       return real_hash;
+}
+
+static int check_SHA1Sum_encryption(const char *passwd, char *enc_passwd)
+{
+       return (!strcmp(sha1_hex_hash(passwd), enc_passwd));
+}
+
+
+static int check_mysql_encryption(const char *passwd, char *enc_passwd)
+{
+       char scrambled_passwd[32];
+       
+       make_scrambled_password(scrambled_passwd, passwd);
+       return (!strcmp(scrambled_passwd, enc_passwd));
+}
+
+typedef struct {
+       char *name;
+       int (*check_function)(const char *passwd, char *enc_passwd);
+       int flag;
+} encryption_type_entry;
+
+encryption_type_entry supported_encryption_types[] = {
+       { "Plaintext",          check_no_encryption,                    PLAINTEXT_ENCRYPTION_FLAG },
+#if CRYPT_DES
+       { "Crypt_DES",          check_crypt_des_encryption,             CRYPT_DES_ENCRYPTION_FLAG },
+#endif
+       { "MySQL",              check_mysql_encryption,                 MYSQL_ENCRYPTION_FLAG },
+#if CRYPT_MD5
+       { "Crypt_MD5",          check_crypt_MD5_encryption,             CRYPT_MD5_ENCRYPTION_FLAG },
+#endif
+       { "Crypt",              check_crypt_encryption,                 CRYPT_ENCRYPTION_FLAG },
+       { "PHP_MD5",            check_PHP_MD5_encryption,               PHP_MD5_ENCRYPTION_FLAG },
+       { "SHA1Sum",    check_SHA1Sum_encryption, SHA1SUM_ENCRYPTION_FLAG},
+       /* add additional encryption types below */
+       { NULL,                 NULL,                                   0 }
+};
+
+static int get_encryption_flag(const char *name)
+{
+       register encryption_type_entry *ete=supported_encryption_types;
+       
+       while (ete->name) {
+               if (!strcmp(ete->name, name)) {
+                       return ete->flag;
+               }
+               ete++;
+       }
+       return 0;
+}
+
+/* end of support for general-purpose encryption schemes */
+
+/* Per-directory configuration structure.  One of these is created for each
+ * <Directory>...</Directory> and .htaccess file which requests authentication
+ */
+typedef struct {
+       char *dir;
+
+       char *db_host;
+       char *db_socket;
+       unsigned int db_port;
+       char *db_user;
+       char *db_pwd;
+       char *db_name;
+       
+       MYSQL *dbh;
+
+       /* Boolean options */
+       unsigned char persistent;
+       unsigned char enable_mysql_auth;
+
+       /* Some MySQL errors are retryable; if we retry the operation
+        * by recursing into the same function, we set this so we don't
+        * recurse indefinitely if it's a permanent error.
+        */
+       unsigned char dbh_error_lastchance;
+
+       char *user_table;
+       char *group_table;
+
+       char *user_field;
+       char *password_field;
+       char *group_field;
+       char *group_user_field;
+       char *group_where_clause;
+       char *password_where_clause;
+               
+       int encryption_types;
+       unsigned char using_encryption_types;
+
+       unsigned char allow_empty_passwords;
+       unsigned char authoritative;
+
+       /* You're not going to believe this, but, near as I can tell, apache
+        * doesn't respect the last part of the config_rec.  May be an
+        * underflow in some code somewhere, but I'm not taking no chances
+        * with *my* config variables...
+        */
+       char sacrificial_lamb[15];
+
+} mysql_auth_config_rec;
+
+module auth_mysql_module;
+
+#ifdef APACHE2
+static apr_status_t
+#else
+static void
+#endif
+auth_mysql_cleanup(void *ptr)
+{
+       mysql_auth_config_rec *sec = ptr;
+
+       if (sec->dbh) {
+#ifdef DEBUG
+               syslog(LOG_DEBUG, "MAMDEBUG: Closing MySQL connection");
+#endif
+               mysql_close(sec->dbh);
+               sec->dbh = NULL;
+       }
+}
+
+/* Do the magic required when the module is first loaded.
+ */
+#ifdef APACHE2
+void mysql_auth_init_handler(server_rec *s, apr_pool_t *p)
+#else
+void mysql_auth_init_handler(server_rec *s, pool *p)
+#endif
+{
+#ifdef APACHE2
+#else
+#if MODULE_MAGIC_NUMBER >= 19980527
+    ap_add_version_component("AuthMySQL/" AUTH_MYSQL_VERSION);
+#endif
+#endif
+}
+
+/* Called each and every time a new per-directory configuration is
+ * created.  We just initialise variables and set defaults.  This is
+ * run *before* actual config takes place.
+ */
+#ifdef APACHE2
+void *create_mysql_auth_dir_config(apr_pool_t *p, char *d)
+#else
+void *create_mysql_auth_dir_config(pool *p, char *d)
+#endif
+{
+#ifdef DEBUG
+       int i;
+#endif
+
+       mysql_auth_config_rec *sec = (mysql_auth_config_rec *) PCALLOC(p, sizeof(mysql_auth_config_rec));
+       
+#ifdef DEBUG
+       syslog(LOG_DEBUG, "MAMDEBUG: Now configuring server config for %s", d);
+       syslog(LOG_DEBUG, "MAMDEBUG: sizeof(mysql_auth_config_rec) = %i",
+                               sizeof(mysql_auth_config_rec));
+#endif
+
+       sec->db_name = sec->db_socket = sec->db_user = sec->db_pwd = NULL;
+
+       sec->dbh = NULL;
+       /* When the memory for this connection record is cleaned, we must
+        * be sure to close the DB connection, if it exists.  If this does
+        * not happen, we are in a world of pain.
+        */
+#ifdef APACHE2
+       apr_pool_cleanup_register(p, sec, auth_mysql_cleanup, apr_pool_cleanup_null);
+#else
+       ap_register_cleanup(p, sec, auth_mysql_cleanup, ap_null_cleanup);
+#endif
+
+       sec->dir = d;
+       
+       sec->user_table = sec->group_table = NULL;
+       sec->user_field = sec->password_field = sec->group_field = NULL;
+       sec->group_where_clause = sec->password_where_clause = NULL;
+       sec->group_user_field = NULL;
+       
+       sec->authoritative = 1;
+       sec->allow_empty_passwords = 1;
+
+       sec->dbh_error_lastchance = 0;
+
+#ifdef DEBUG
+       syslog(LOG_DEBUG, "MAMDEBUG: Enabling MySQL auth by default");
+#endif
+       sec->enable_mysql_auth = 1;
+
+#ifdef CRYPT_DES
+       sec->encryption_types = CRYPT_DES_ENCRYPTION_FLAG;
+       sec->using_encryption_types = 0;
+#else
+       sec->encryption_types = 0;
+       sec->using_encryption_types = 0;
+#endif
+
+       sec->db_port = -1;
+       
+#ifdef DEBUG
+       syslog(LOG_DEBUG, "MAMDEBUG: Persistent is now ON");
+#endif
+       sec->persistent = 1;
+
+#ifdef DEBUG
+       for (i = 0; i < 15; i++)
+       {
+               sec->sacrificial_lamb[i] = i % 10 + '0';
+       }
+#endif
+       
+       return sec;
+}
+
+/* Helper function to make some decisions about whether to use crypted
+ * passwords in response to "AuthMySQL_Encrypted_Passwords on" in a config
+ * file.
+ * XXX DEPRECATED XXX
+ */
+static const char *set_crypted_password_flag(cmd_parms *cmd, void *sconf, int arg)
+{
+       mysql_auth_config_rec *sec = (mysql_auth_config_rec *) sconf;
+       
+       if (sec->using_encryption_types) {
+               /* This setting is ignored if we're using Encryption_Types */
+               return NULL;
+       }
+#ifdef CRYPT_DES
+       if (arg) {
+               sec->encryption_types |= CRYPT_DES_ENCRYPTION_FLAG;
+       } else {
+               sec->encryption_types &= ~CRYPT_DES_ENCRYPTION_FLAG;
+               if (!sec->encryption_types) {
+                       sec->encryption_types = PLAINTEXT_ENCRYPTION_FLAG;
+               }
+       }
+#endif
+
+       return NULL;
+}
+
+/* Equivalent to set_crypted_password_flag above, except that this time we're
+ * talking about MySQL-style scrambled passwords instead.
+ * XXX DEPRECATED XXX
+ */
+static const char *set_scrambled_password_flag(cmd_parms *cmd, void *sconf, int arg)
+{
+       mysql_auth_config_rec *sec = (mysql_auth_config_rec *) sconf;
+
+       if (sec->using_encryption_types) {
+               /* This setting is ignored if we're using Encryption_Types */
+               return NULL;
+       }
+       if (arg) {
+               sec->encryption_types |= MYSQL_ENCRYPTION_FLAG;
+       } else {
+               sec->encryption_types &= ~MYSQL_ENCRYPTION_FLAG;
+               if (!sec->encryption_types) {
+                       sec->encryption_types = PLAINTEXT_ENCRYPTION_FLAG;
+               }
+       }
+       return NULL;
+}
+
+/* Ensure that any string passed through us won't unduly upset the MySQL
+ * server when passed in as part of a query.
+ */
+#ifdef APACHE2
+static char *mysql_escape(char *str, apr_pool_t *p)
+#else
+static char *mysql_escape(char *str, pool *p)
+#endif
+{
+       char *dest;
+       
+       if (!str) {
+               return NULL;
+       }
+
+       dest = (char *) PALLOC(p, strlen(str) * 2 + 1);
+       if (!dest) {
+               return str;
+       }
+       
+       mysql_escape_string(dest, str, strlen(str));
+       
+       return dest;
+}
+
+/* Config helper to set the server-wide default database name.
+ */
+static const char *set_auth_mysql_db(cmd_parms * parms, void *dummy, const char *db)
+{
+       auth_db_name = (char *)db;
+       return NULL;
+}
+
+/* Config helper to set the server-wide default database host.
+ */
+static const char *set_auth_mysql_host(cmd_parms *parms, void *dummy, const char *host)
+{
+       auth_db_host = (char *) host;
+       return NULL;
+}
+
+/* Config helper to set server-wide defaults for database parameters.
+ */
+static const char *set_auth_mysql_info(cmd_parms * parms, void *dummy, const char *host, const char *user, const char *pwd)
+{
+       if (*host != '.') {
+               auth_db_host = (char *) host;
+       }
+
+       if (*user != '.') {
+               auth_db_user = (char *)user;
+       }
+
+       if (*pwd != '.') {
+               auth_db_pwd = (char *)pwd;
+       }
+
+       return NULL;
+}
+
+/* Config helper to set the server-wide default database username.
+ */
+static const char *set_auth_mysql_user(cmd_parms *parms, void *dummy, const char *user)
+{
+       auth_db_user = (char *)user;
+       return NULL;
+}
+
+/* Config helper to set the server-wide default database password (coupled to
+ * the user specified above).
+ */
+static const char *set_auth_mysql_pwd(cmd_parms *parms, void *dummy, const char *pwd)
+{
+       auth_db_pwd = (char *)pwd;
+       return NULL;
+}
+
+/* Set the server-wide database server socket.
+ */
+static const char *set_auth_mysql_socket(cmd_parms *parms, void *dummy, const char *sock)
+{
+       auth_db_socket = (char *)socket;
+       return NULL;
+}
+
+/* Set the server-wide database server port.
+ */
+static const char *set_auth_mysql_port(cmd_parms *parms, void *dummy, const char *port)
+{
+       auth_db_port = (unsigned int) atoi(port);
+       return NULL;
+}
+
+/* Config helper to judge whether to allow per-directory configs to override
+ * the server-wide defaults for database parameters.  The only reason this
+ * exists (instead of using an ap_set_flag_slot) is because this isn't part
+ * of a config structure, and I'm not sure how to set globals from the Apache
+ * config thing.
+ */
+static const char *set_auth_mysql_override(cmd_parms *parms, void *dummy, int arg)
+{
+       auth_db_override = arg;
+       return NULL;
+}
+
+/* Config helper to set a selected encryption type.
+ */
+static const char *set_encryption_types(cmd_parms *cmd, void *sconf, const char *arg)
+{
+       mysql_auth_config_rec *sec = (mysql_auth_config_rec *) sconf;
+
+       int new_encryption_flag = get_encryption_flag(arg);
+
+       if (!new_encryption_flag) {
+               APACHELOG(APLOG_ERR, cmd, "Unsupported encryption type: %s", arg);
+               return NULL;
+       }
+
+       if (!sec->using_encryption_types) {
+               sec->encryption_types = 0;
+               sec->using_encryption_types = 1;
+       }
+       
+       sec->encryption_types |= new_encryption_flag;
+       
+       return NULL;
+}
+
+/* This pair of config helpers exist only because of varying semantics
+ * in the two versions of mod_auth_mysql I merged.  As soon as we have a
+ * consistent set of configuration primitives, these are going.
+ */
+static const char *set_non_persistent(cmd_parms *cmd, void *sconf, int arg)
+{
+       mysql_auth_config_rec *sec = (mysql_auth_config_rec *) sconf;
+
+       sec->persistent = !arg;
+       APACHELOG(APLOG_DEBUG, cmd, "set_non_persistent: Setting persistent in %s to %i", sec->dir, sec->persistent);
+       return NULL;
+}
+
+static const char *set_persistent(cmd_parms *cmd, void *sconf, int arg)
+{
+       mysql_auth_config_rec *sec = (mysql_auth_config_rec *) sconf;
+
+       sec->persistent = arg;
+       APACHELOG(APLOG_DEBUG, cmd, "set_persistent: Setting persistent in %s to %i", sec->dir, sec->persistent);
+       return NULL;
+}
+
+static const char *enable_mysql(cmd_parms *cmd, void *sconf, int arg)
+{
+       mysql_auth_config_rec *sec = (mysql_auth_config_rec *) sconf;
+
+       sec->enable_mysql_auth = arg;
+       APACHELOG(APLOG_DEBUG, cmd, "enable_mysql: Setting enable_mysql_auth in %s to %i", sec->dir, sec->enable_mysql_auth);
+       return NULL;
+}
+
+/* The command list.  What it's called, when it's legal to use it, and
+ * what to do when we find it.  Pretty cool, IMHO.
+ */
+
+#ifdef APACHE2
+static
+command_rec mysql_auth_cmds[] = {
+   AP_INIT_TAKE3( "Auth_MySQL_Info",   set_auth_mysql_info,
+                 NULL,
+                 RSRC_CONF,    "host, user and password of the MySQL database" ),
+
+   AP_INIT_TAKE1( "AuthMySQL_DefaultHost",     set_auth_mysql_host,
+                 NULL,
+                 RSRC_CONF,    "Default MySQL host" ),
+
+   AP_INIT_TAKE1( "AuthMySQL_DefaultUser",     set_auth_mysql_user,
+                 NULL,
+                 RSRC_CONF,    "Default MySQL user" ),
+
+   AP_INIT_TAKE1( "AuthMySQL_DefaultPassword", set_auth_mysql_pwd,
+                 NULL,
+                 RSRC_CONF,    "Default MySQL password" ),
+
+   AP_INIT_TAKE1( "Auth_MySQL_DefaultPort",    set_auth_mysql_port,
+                 NULL,
+                 RSRC_CONF,    "Default MySQL server port" ),
+       
+   AP_INIT_TAKE1( "Auth_MySQL_DefaultSocket",  set_auth_mysql_socket,
+                 NULL,
+                 RSRC_CONF,    "Default MySQL server socket" ),
+               
+   AP_INIT_TAKE1( "Auth_MySQL_General_DB",     set_auth_mysql_db,
+                 NULL,
+                 RSRC_CONF,    "default database for MySQL authentication" ),
+
+   AP_INIT_TAKE1( "AuthMySQL_DefaultDB",       set_auth_mysql_db,
+                 NULL,
+                 RSRC_CONF,    "default database for MySQL authentication" ),
+
+   AP_INIT_TAKE1( "AuthMySQL_Host",    ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, db_host),
+                 OR_AUTHCFG,   "database host" ),
+
+   AP_INIT_TAKE1( "Auth_MySQL_Host",   ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, db_host),
+                 OR_AUTHCFG,   "database host" ),
+
+   AP_INIT_TAKE1( "Auth_MySQL_Socket", ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, db_socket),
+                 OR_AUTHCFG,   "database host socket" ),
+
+   AP_INIT_TAKE1( "AuthMySQL_Socket",  ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, db_socket),
+                 OR_AUTHCFG,   "database host socket" ),
+
+   AP_INIT_TAKE1( "Auth_MySQL_Port",   ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, db_port),
+                 OR_AUTHCFG,   "database host port" ),
+
+   AP_INIT_TAKE1( "AuthMySQL_Port",    ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, db_port),
+                 OR_AUTHCFG,   "database host port" ),
+
+   AP_INIT_TAKE1( "Auth_MySQL_Username",       ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, db_user),
+                 OR_AUTHCFG,   "database user" ),
+
+   AP_INIT_TAKE1( "AuthMySQL_User",    ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, db_user),
+                 OR_AUTHCFG,   "database user" ),
+
+   AP_INIT_TAKE1( "Auth_MySQL_Password",       ap_set_string_slot,
+               (void*)APR_XtOffsetOf(mysql_auth_config_rec, db_pwd),
+                 OR_AUTHCFG,   "database password" ),
+
+   AP_INIT_TAKE1( "AuthMySQL_Password",                        ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, db_pwd),
+                 OR_AUTHCFG,   "database password" ),
+
+   AP_INIT_TAKE1( "Auth_MySQL_DB",             ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, db_name),
+                 OR_AUTHCFG,   "database name" ),
+
+   AP_INIT_TAKE1( "AuthMySQL_DB",      ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, db_name),
+                 OR_AUTHCFG,   "database name" ),
+
+   AP_INIT_TAKE1( "Auth_MySQL_Password_Table",         ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, user_table),
+                 OR_AUTHCFG,   "Name of the MySQL table containing the password/user-name combination" ),
+
+   AP_INIT_TAKE1( "AuthMySQL_Password_Table",          ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, user_table),
+                 OR_AUTHCFG,   "Name of the MySQL table containing the password/user-name combination" ),
+
+   AP_INIT_TAKE1( "Auth_MySQL_Group_Table",            ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, group_table),
+                 OR_AUTHCFG,   "Name of the MySQL table containing the group-name/user-name combination; can be the same as the password-table." ),
+
+   AP_INIT_TAKE1( "Auth_MySQL_Group_Clause",           ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, group_where_clause),
+                 OR_AUTHCFG,   "Additional WHERE clause for group/user-name lookup" ),
+
+   AP_INIT_TAKE1( "AuthMySQL_Group_Table",             ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, group_table),
+                 OR_AUTHCFG,   "Name of the MySQL table containing the group-name/user-name combination; can be the same as the password-table." ),
+
+   AP_INIT_TAKE1( "Auth_MySQL_Password_Field",         ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, password_field),
+                 OR_AUTHCFG,   "The name of the field in the MySQL password table" ),
+
+   AP_INIT_TAKE1( "AuthMySQL_Password_Field",          ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, password_field),
+                 OR_AUTHCFG,   "The name of the field in the MySQL password table" ),
+
+   AP_INIT_TAKE1( "Auth_MySQL_Password_Clause",                ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, password_where_clause),
+                 OR_AUTHCFG,   "Additional WHERE clause for group password/user-name lookup" ),
+
+   AP_INIT_TAKE1( "Auth_MySQL_Username_Field",         ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, user_field),
+                 OR_AUTHCFG,   "The name of the user-name field in the MySQL password (and possibly group) table(s)." ),
+
+   AP_INIT_TAKE1( "AuthMySQL_Username_Field",          ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, user_field),
+                 OR_AUTHCFG,   "The name of the user-name field in the MySQL password (and possibly group) table(s)." ),
+
+   AP_INIT_TAKE1( "Auth_MySQL_Group_Field",            ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, group_field),
+                 OR_AUTHCFG,   "The name of the group field in the MySQL group table; must be set if you want to use groups." ),
+
+   AP_INIT_TAKE1( "AuthMySQL_Group_Field",             ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, group_field),
+                 OR_AUTHCFG,   "The name of the group field in the MySQL group table; must be set if you want to use groups." ),
+
+   AP_INIT_TAKE1( "Auth_MySQL_Group_User_Field",       ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, group_user_field),
+                 OR_AUTHCFG,   "The name of the user-name field in the MySQL group table; defaults to the same as the username field for the password table." ),
+
+   AP_INIT_TAKE1( "AuthMySQL_Group_User_Field",                ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, group_user_field),
+                 OR_AUTHCFG,   "The name of the user-name field in the MySQL group table; defaults to the same as the username field for the password table." ),
+
+   AP_INIT_FLAG( "Auth_MySQL_Empty_Passwords",         ap_set_flag_slot,
+                (void*)APR_XtOffsetOf(mysql_auth_config_rec, allow_empty_passwords),
+                OR_AUTHCFG,    "Enable (on) or disable (off) empty password strings; in which case any user password is accepted." ),
+
+   AP_INIT_FLAG( "AuthMySQL_Empty_Passwords",          ap_set_flag_slot,
+                (void*)APR_XtOffsetOf(mysql_auth_config_rec, allow_empty_passwords),
+                OR_AUTHCFG,    "Enable (on) or disable (off) empty password strings; in which case any user password is accepted." ),
+
+   AP_INIT_FLAG( "Auth_MySQL_Authoritative",           ap_set_flag_slot,
+                (void*)APR_XtOffsetOf(mysql_auth_config_rec, authoritative),
+                OR_AUTHCFG,    "When 'on' the MySQL database is taken to be authoritative and access control is not passed along to other db or access modules." ),
+
+   AP_INIT_FLAG( "AuthMySQL_Authoritative",            ap_set_flag_slot,
+                (void*)APR_XtOffsetOf(mysql_auth_config_rec, authoritative),
+                OR_AUTHCFG,    "When 'on' the MySQL database is taken to be authoritative and access control is not passed along to other db or access modules." ),
+
+   AP_INIT_FLAG( "AuthMySQL_AllowOverride",            set_auth_mysql_override,
+                NULL,
+                RSRC_CONF,     "Allow directory overrides of configuration" ),
+
+   AP_INIT_FLAG( "Auth_MySQL_Encrypted_Passwords",     set_crypted_password_flag,
+                NULL,
+                OR_AUTHCFG,    "When 'on' the password in the password table are taken to be crypt()ed using your machines crypt() function." ),
+
+   AP_INIT_FLAG( "AuthMySQL_Encrypted_Passwords",      set_crypted_password_flag,
+                 NULL,
+                 OR_AUTHCFG,   "When 'on' the password in the password table are taken to be crypt()ed using your machines crypt() function." ),
+
+   AP_INIT_FLAG( "Auth_MySQL_Scrambled_Passwords",     set_scrambled_password_flag,
+                NULL,
+                OR_AUTHCFG,    "When 'on' the password in the password table are taken to be scramble()d using mySQL's password() function." ),
+
+   AP_INIT_FLAG( "AuthMySQL_Scrambled_Passwords",      set_scrambled_password_flag,
+                NULL,
+                OR_AUTHCFG,    "When 'on' the password in the password table are taken to be scramble()d using mySQL's password() function." ),
+
+   AP_INIT_ITERATE( "Auth_MySQL_Encryption_Types",     set_encryption_types,
+                 NULL,
+                 OR_AUTHCFG,   "Encryption types to use" ),
+
+   AP_INIT_ITERATE( "AuthMySQL_Encryption_Types",              set_encryption_types,
+                 NULL,
+                 OR_AUTHCFG,   "Encryption types to use" ),
+
+   AP_INIT_FLAG( "Auth_MySQL_Non_Persistent",          set_non_persistent,
+                NULL,
+                OR_AUTHCFG,    "Use non-persistent MySQL links" ),
+
+   AP_INIT_FLAG( "AuthMySQL_Persistent",               set_persistent,
+                NULL,
+                OR_AUTHCFG,    "Use non-persistent MySQL links" ),
+
+   AP_INIT_FLAG( "Auth_MySQL",         enable_mysql,
+                NULL,
+                OR_AUTHCFG,    "Enable MySQL authentication" ),
+
+   AP_INIT_FLAG( "AuthMySQL",          enable_mysql,
+                NULL,
+                OR_AUTHCFG,    "Enable MySQL authentication" ),
+
+   AP_INIT_TAKE1( "Auth_MySQL_Where",          ap_set_string_slot,
+                 (void*)APR_XtOffsetOf(mysql_auth_config_rec, password_where_clause),
+                 OR_AUTHCFG,   "Additional WHERE clause for group password/user-name lookup" ),
+
+  { NULL }
+};
+#else
+command_rec mysql_auth_cmds[] = {
+       { "Auth_MySQL_Info",                    set_auth_mysql_info,
+         NULL,
+         RSRC_CONF,    TAKE3,  "host, user and password of the MySQL database" },
+
+       { "AuthMySQL_DefaultHost",              set_auth_mysql_host,
+         NULL,
+         RSRC_CONF,    TAKE1,  "Default MySQL host" },
+
+       { "AuthMySQL_DefaultUser",              set_auth_mysql_user,
+         NULL,
+         RSRC_CONF,    TAKE1,  "Default MySQL user" },
+
+       { "AuthMySQL_DefaultPassword",          set_auth_mysql_pwd,
+         NULL,
+         RSRC_CONF,    TAKE1,  "Default MySQL password" },
+
+       { "Auth_MySQL_DefaultPort",             set_auth_mysql_port,
+         NULL,
+         RSRC_CONF,    TAKE1,  "Default MySQL server port" },
+       
+       { "Auth_MySQL_DefaultSocket",           set_auth_mysql_socket,
+         NULL,
+         RSRC_CONF,    TAKE1,  "Default MySQL server socket" },
+               
+       { "Auth_MySQL_General_DB",              set_auth_mysql_db,
+         NULL,
+         RSRC_CONF,    TAKE1,  "default database for MySQL authentication" },
+         
+       { "AuthMySQL_DefaultDB",                set_auth_mysql_db,
+         NULL,
+         RSRC_CONF,    TAKE1,  "default database for MySQL authentication" },
+
+       { "AuthMySQL_Host",                     ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, db_host),
+         OR_AUTHCFG,   TAKE1,  "database host" },
+
+       { "Auth_MySQL_Host",                    ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, db_host),
+         OR_AUTHCFG,   TAKE1,  "database host" },
+
+       { "Auth_MySQL_Socket",                  ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, db_socket),
+         OR_AUTHCFG,   TAKE1,  "database host socket" },
+
+       { "Auth_MySQL_Port",                    ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, db_port),
+         OR_AUTHCFG,   TAKE1,  "database host socket" },
+
+       { "Auth_MySQL_Username",                ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, db_user),
+         OR_AUTHCFG,   TAKE1,  "database user" },
+         
+       { "AuthMySQL_User",                     ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, db_user),
+         OR_AUTHCFG,   TAKE1,  "database user" },
+         
+       { "Auth_MySQL_Password",                ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, db_pwd),
+         OR_AUTHCFG,   TAKE1,  "database password" },
+         
+       { "AuthMySQL_Password",                 ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, db_pwd),
+         OR_AUTHCFG,   TAKE1,  "database password" },
+         
+       { "Auth_MySQL_DB",                      ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, db_name),
+         OR_AUTHCFG,   TAKE1,  "database name" },
+         
+       { "AuthMySQL_DB",                       ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, db_name),
+         OR_AUTHCFG,   TAKE1,  "database name" },
+         
+       { "Auth_MySQL_Password_Table",          ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, user_table),
+         OR_AUTHCFG,   TAKE1,  "Name of the MySQL table containing the password/user-name combination" },
+         
+       { "AuthMySQL_Password_Table",           ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, user_table),
+         OR_AUTHCFG,   TAKE1,  "Name of the MySQL table containing the password/user-name combination" },
+         
+       { "Auth_MySQL_Group_Table",             ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, group_table),
+         OR_AUTHCFG,   TAKE1,  "Name of the MySQL table containing the group-name/user-name combination; can be the same as the password-table." },
+         
+       { "Auth_MySQL_Group_Clause",            ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, group_where_clause),
+         OR_AUTHCFG,   TAKE1,  "Additional WHERE clause for group/user-name lookup" },
+         
+       { "AuthMySQL_Group_Table",              ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, group_table),
+         OR_AUTHCFG,   TAKE1,  "Name of the MySQL table containing the group-name/user-name combination; can be the same as the password-table." },
+
+       { "Auth_MySQL_Password_Field",          ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, password_field),
+         OR_AUTHCFG,   TAKE1,  "The name of the field in the MySQL password table" },
+
+       { "AuthMySQL_Password_Field",           ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, password_field),
+         OR_AUTHCFG,   TAKE1,  "The name of the field in the MySQL password table" },
+
+       { "Auth_MySQL_Password_Clause",         ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, password_where_clause),
+         OR_AUTHCFG,   TAKE1,  "Additional WHERE clause for group password/user-name lookup" },
+
+       { "Auth_MySQL_Username_Field",          ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, user_field),
+         OR_AUTHCFG,   TAKE1,  "The name of the user-name field in the MySQL password (and possibly group) table(s)." },
+         
+       { "AuthMySQL_Username_Field",           ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, user_field),
+         OR_AUTHCFG,   TAKE1,  "The name of the user-name field in the MySQL password (and possibly group) table(s)." },
+         
+       { "Auth_MySQL_Group_Field",             ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, group_field),
+         OR_AUTHCFG,   TAKE1,  "The name of the group field in the MySQL group table; must be set if you want to use groups." },
+
+       { "AuthMySQL_Group_Field",              ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, group_field),
+         OR_AUTHCFG,   TAKE1,  "The name of the group field in the MySQL group table; must be set if you want to use groups." },
+
+       { "Auth_MySQL_Group_User_Field",        ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, group_user_field),
+         OR_AUTHCFG,   TAKE1,  "The name of the user-name field in the MySQL group table; defaults to the same as the username field for the password table." },
+
+       { "AuthMySQL_Group_User_Field",         ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, group_user_field),
+         OR_AUTHCFG,   TAKE1,  "The name of the user-name field in the MySQL group table; defaults to the same as the username field for the password table." },
+
+       { "Auth_MySQL_Empty_Passwords",         ap_set_flag_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, allow_empty_passwords),
+         OR_AUTHCFG,   FLAG,   "Enable (on) or disable (off) empty password strings; in which case any user password is accepted." },
+
+       { "AuthMySQL_Empty_Passwords",          ap_set_flag_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, allow_empty_passwords),
+         OR_AUTHCFG,   FLAG,   "Enable (on) or disable (off) empty password strings; in which case any user password is accepted." },
+
+       { "Auth_MySQL_Authoritative",           ap_set_flag_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, authoritative),
+         OR_AUTHCFG,   FLAG,   "When 'on' the MySQL database is taken to be authoritative and access control is not passed along to other db or access modules." },
+
+       { "AuthMySQL_Authoritative",            ap_set_flag_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, authoritative),
+         OR_AUTHCFG,   FLAG,   "When 'on' the MySQL database is taken to be authoritative and access control is not passed along to other db or access modules." },
+
+       { "AuthMySQL_AllowOverride",            set_auth_mysql_override,
+         NULL,
+         RSRC_CONF,    FLAG,   "Allow directory overrides of configuration" },
+
+       { "Auth_MySQL_Encrypted_Passwords",     set_crypted_password_flag,
+         NULL,
+         OR_AUTHCFG,   FLAG,   "When 'on' the password in the password table are taken to be crypt()ed using your machines crypt() function." },
+
+       { "AuthMySQL_Encrypted_Passwords",      set_crypted_password_flag,
+         NULL,
+         OR_AUTHCFG,   FLAG,   "When 'on' the password in the password table are taken to be crypt()ed using your machines crypt() function." },
+
+       { "Auth_MySQL_Scrambled_Passwords",     set_scrambled_password_flag,
+         NULL,
+         OR_AUTHCFG,   FLAG,   "When 'on' the password in the password table are taken to be scramble()d using mySQL's password() function." },
+
+       { "AuthMySQL_Scrambled_Passwords",      set_scrambled_password_flag,
+         NULL,
+         OR_AUTHCFG,   FLAG,   "When 'on' the password in the password table are taken to be scramble()d using mySQL's password() function." },
+
+       { "Auth_MySQL_Encryption_Types",        set_encryption_types,
+         NULL,
+         OR_AUTHCFG,   ITERATE,"Encryption types to use" },
+
+       { "AuthMySQL_Encryption_Types",         set_encryption_types,
+         NULL,
+         OR_AUTHCFG,   ITERATE,"Encryption types to use" },
+
+       { "Auth_MySQL_Non_Persistent",          set_non_persistent,
+         NULL,
+         OR_AUTHCFG,   FLAG,   "Use non-persistent MySQL links" },
+
+       { "AuthMySQL_Persistent",               set_persistent,
+         NULL,
+         OR_AUTHCFG,   FLAG,   "Use non-persistent MySQL links" },
+
+       { "Auth_MySQL",                         enable_mysql,
+         NULL,
+         OR_AUTHCFG,   FLAG,   "Enable MySQL authentication" },
+
+       { "AuthMySQL",                          enable_mysql,
+         NULL,
+         OR_AUTHCFG,   FLAG,   "Enable MySQL authentication" },
+
+       { "Auth_MySQL_Where",                   ap_set_string_slot,
+         (void *) XtOffsetOf(mysql_auth_config_rec, password_where_clause),
+         OR_AUTHCFG,   TAKE1,  "Additional WHERE clause for group password/user-name lookup" },
+
+       { NULL }
+};
+
+/*     { "Auth_MySQL",                         ap_set_flag_slot,               (void *) XtOffsetOf(mysql_auth_config_rec, enable_mysql_auth),          OR_AUTHCFG,     FLAG,   "Enable (on) or disable (off) MySQL authentication." },
+       { "AuthMySQL",                          ap_set_flag_slot,               (void *) XtOffsetOf(mysql_auth_config_rec, enable_mysql_auth),          OR_AUTHCFG,     FLAG,   "Enable (on) or disable (off) MySQL authentication." },
+*/
+
+
+#endif
+
+#ifdef APACHE2
+static apr_status_t
+#else
+static void
+#endif
+auth_mysql_result_cleanup(void *result)
+{
+       mysql_free_result((MYSQL_RES *) result);
+}
+
+#ifdef APACHE2
+static void note_cleanups_for_mysql_auth_result(apr_pool_t *p, MYSQL_RES * result)
+#else
+static void note_cleanups_for_mysql_auth_result(pool *p, MYSQL_RES * result)
+#endif
+{
+#ifdef APACHE2
+       apr_pool_cleanup_register(p, (void *) result, auth_mysql_result_cleanup, auth_mysql_result_cleanup);
+#else
+       ap_register_cleanup(p, (void *) result, auth_mysql_result_cleanup, auth_mysql_result_cleanup);
+#endif
+
+}
+
+/* Make a MySQL database link open and ready for business.  Returns 0 on
+ * success, or the MySQL error number which caused the failure if there was
+ * some sort of problem.
+ */
+static int open_auth_dblink(request_rec *r, mysql_auth_config_rec *sec)
+{
+       char *host = "localhost", *socket = NULL;
+       unsigned int port = 3306;
+       char *dbname = auth_db_name, *user = auth_db_user, *pwd = auth_db_pwd;
+       void (*sigpipe_handler)();
+       unsigned long client_flag = 0;
+
+       APACHELOG(APLOG_DEBUG, r, "Opening DB connection for %s", sec->dir);
+       
+       if (auth_db_host) {
+               host = auth_db_host;
+       }
+
+       if (auth_db_socket)
+       {
+               socket = auth_db_socket;
+       }
+
+       if (auth_db_port != -1)
+       {
+               port = auth_db_port;
+       }
+       
+       if (auth_db_override)
+       {
+               if (sec->db_socket)
+               {
+                       socket = sec->db_socket;
+               }
+       
+               if (sec->db_port != -1)
+               {
+                       port = sec->db_port;
+               }
+               
+               if (sec->db_host)
+               {
+                       host = sec->db_host;
+               }
+
+               if (sec->db_user) {
+                       user = sec->db_user;
+               }
+
+               if (sec->db_pwd) {
+                       pwd = sec->db_pwd;
+               }
+
+               if (sec->db_name) {
+                       dbname = sec->db_name;
+               }
+       }
+
+       if (!dbname || !dbname[0]) {
+               /* It would be preferred if we had somewhere to connect to... */
+               APACHELOG(APLOG_CRIT, r,
+                       "No database given - rather a problem.  Bailing out.");
+               return CR_WRONG_HOST_INFO;
+       }
+
+       /* MySQL likes to throw the odd SIGPIPE now and then - ignore it for now */
+       sigpipe_handler = signal(SIGPIPE, SIG_IGN);
+               
+       sec->dbh = mysql_init(NULL);
+       
+       if (!mysql_real_connect(sec->dbh, host, user, pwd, dbname, port, socket, client_flag)) {
+               APACHELOG(APLOG_ERR, r,
+                        "Connection error: %s", mysql_error(sec->dbh));
+               errno = mysql_errno(sec->dbh);
+               mysql_close(sec->dbh);
+               sec->dbh = NULL;
+               return errno;
+       }
+
+       signal(SIGPIPE, sigpipe_handler);
+       
+       APACHELOG(APLOG_DEBUG, r, "Persistent in %s is %i", sec->dir, sec->persistent);
+
+       if (!sec->persistent) {
+               APACHELOG(APLOG_DEBUG, r, "Registering non-persistent for %s", sec->dir);
+#ifdef APACHE2
+               apr_pool_cleanup_register(r->pool, sec, auth_mysql_cleanup, apr_pool_cleanup_null);
+#else
+               ap_block_alarms();
+               ap_register_cleanup(r->pool, sec, auth_mysql_cleanup, ap_null_cleanup);
+               ap_unblock_alarms();
+#endif
+       }
+
+       /* W00t!  We made it! */
+       return 0;
+}
+
+/* Run a query against the database.  Doesn't assume nearly anything about
+ * the state of affairs regarding the database connection.
+ * Returns 0 on a successful query run, or the MySQL error number on
+ * error.  It is the responsibility of the calling function to retrieve any
+ * data which may have been obtained through the running of this function.
+ */
+static int safe_mysql_query(request_rec *r, char *query, mysql_auth_config_rec *sec)
+{
+       int error = CR_UNKNOWN_ERROR;
+
+       APACHELOG(APLOG_DEBUG, r, "sec->dbh in %s is %p", sec->dir, sec->dbh);
+       if (sec->dbh_error_lastchance)
+       {
+               APACHELOG(APLOG_DEBUG, r, "Last chance, bub");
+       }
+       else
+       {
+               APACHELOG(APLOG_DEBUG, r, "Ordinary query");
+       }
+       
+       if (!sec->dbh) {
+               APACHELOG(APLOG_DEBUG, r,
+                       "No DB connection open - firing one up");
+               if ((error = open_auth_dblink(r, sec))) {
+                       APACHELOG(APLOG_DEBUG, r,
+                               "open_auth_dblink returned %i", error);
+                       return error;
+               }
+
+               APACHELOG(APLOG_DEBUG, r,
+                       "Correctly opened a new DB connection");
+       }
+
+       APACHELOG(APLOG_DEBUG, r,
+               "Running query: [%s]", query);
+
+       if (mysql_query(sec->dbh, query)) {
+               error = mysql_errno(sec->dbh);
+               
+               APACHELOG(APLOG_DEBUG, r, 
+                       "Query maybe-failed: %s (%i), lastchance=%i", mysql_error(sec->dbh), error, sec->dbh_error_lastchance);
+               APACHELOG(APLOG_DEBUG, r,
+                       "Error numbers of interest are %i (SG) and %i (SL)",
+                       CR_SERVER_GONE_ERROR, CR_SERVER_LOST);
+               if (sec->dbh_error_lastchance)
+               {
+                       /* No matter what error, we're moving out */
+                       return error;
+               }
+               else if (error == CR_SERVER_LOST || error == CR_SERVER_GONE_ERROR)
+               {
+                       /* Try again, once more only */
+                       sec->dbh_error_lastchance = 1;
+                       sec->dbh = NULL;
+                       APACHELOG(APLOG_DEBUG, r, "Retrying query");
+                       return safe_mysql_query(r, query, sec);
+               }
+               else
+               {
+                       return error;
+               }
+       }
+
+       return 0;
+}
+
+/* Store the result of a query in a result structure, and return it.  It's
+ * "safe" in the fact that a cleanup function is registered for the structure
+ * so it will be tidied up after the request.
+ * Returns the result data on success, or NULL if there was no data to retrieve.
+ */
+#ifdef APACHE2
+static MYSQL_RES *safe_mysql_store_result(apr_pool_t *p, mysql_auth_config_rec *sec)
+#else
+static MYSQL_RES *safe_mysql_store_result(pool *p, mysql_auth_config_rec *sec)
+#endif
+{
+       MYSQL_RES *result;
+#ifdef APACHE2
+#else  
+       ap_block_alarms();
+#endif
+
+       result = mysql_store_result(sec->dbh);
+#ifdef DEBUG
+       syslog(LOG_DEBUG, "MAMDEBUG: Got %p for result", result);
+#endif
+
+       if (result) {
+               note_cleanups_for_mysql_auth_result(p, result);
+       }
+#ifdef APACHE2
+#else
+       ap_unblock_alarms();
+#endif
+
+       return result;
+}
+
+/* Check the plaintext password given against the hashed version.  Go
+ * through all configured encryption types looking for a match.
+ * Returns 1 on a match, 0 on no match, and -1 on error.
+ */
+static int check_password(const char *plaintext, char *hashed, request_rec *r, mysql_auth_config_rec *sec)
+{
+       encryption_type_entry *ete;
+       
+       /* empty password support */
+       if (sec->allow_empty_passwords && !strlen(hashed)) {
+               APACHELOG(APLOG_INFO, r, "User successful on empty password");
+               return 1;
+       }
+                       
+       for (ete=supported_encryption_types; ete->name; ete++) {
+               if (sec->encryption_types & ete->flag) {
+                       APACHELOG(APLOG_DEBUG, r,
+                               "Checking with %s", ete->name);
+                       if (ete->check_function(plaintext, hashed)) {
+                               APACHELOG(APLOG_DEBUG, r, "Auth succeeded");
+                               return 1;
+                       }
+               }
+       }
+       APACHELOG(APLOG_DEBUG, r, "User failed all encryption types");
+       return 0;
+}
+
+/* Checks whether the username and plaintext password match the user data
+ * stored in the database, against all configured encryption schemes.
+ * Returns 1 on successful match, 0 unsuccessful match, -1 on error.
+ */
+static int mysql_check_user_password(request_rec *r, char *user, const char *password, mysql_auth_config_rec *sec)
+{
+       char *auth_table = "mysql_auth", *auth_user_field = "username",
+               *auth_password_field = "passwd", *auth_password_clause = "";
+       char *query;
+       char *esc_user = mysql_escape(user, r->pool);
+       MYSQL_RES *result;
+       MYSQL_ROW sql_row;
+       int rv;
+               
+       if (sec->user_table) {
+               auth_table = sec->user_table;
+       }
+       if (sec->user_field) {
+               auth_user_field = sec->user_field;
+       }
+       if (sec->password_field) {
+               auth_password_field = sec->password_field;
+       }
+       if (sec->password_where_clause) {
+               auth_password_clause = sec->password_where_clause;
+       }
+       APACHELOG(APLOG_DEBUG, r,
+               "Constructing password collection query with "
+               "passfield=[%s], table=[%s], userfield=[%s], where_clause=[%s]", auth_password_field
+                                                       , auth_table, esc_user,auth_password_clause);
+
+       query = (char *) PSTRCAT(r->pool, "SELECT ", auth_password_field,
+                                       " FROM ", auth_table, " WHERE ",
+                                       auth_user_field, "='", esc_user, "'",
+                                       auth_password_clause, NULL);
+       if (!query) {
+               APACHELOG(APLOG_ERR, r,
+                       "Failed to create query string - we're in deep poopy");
+               return -1;
+       }
+
+       if ((rv = safe_mysql_query(r, query, sec))) {
+               if (sec->dbh)
+               {
+                       APACHELOG(APLOG_ERR, r,
+                               "Query call failed: %s (%i)", mysql_error(sec->dbh), rv);
+               }
+
+               APACHELOG(APLOG_DEBUG, r, "Failed query was: [%s]", query);
+               return -1;
+       }
+
+       result = safe_mysql_store_result(r->pool, sec);
+       if (!result) {
+               APACHELOG(APLOG_ERR, r,
+                       "Failed to get MySQL result structure : %s", mysql_error(sec->dbh));
+               return -1;
+       }
+       switch (mysql_num_rows(result)) {
+               case 0:
+                       APACHELOG(APLOG_INFO, r, "User not found");
+                       return 0;
+                       break;
+               case 1:
+                       sql_row = mysql_fetch_row(result);
+                       /* ensure we have a row, and non NULL value */
+                       if (!sql_row || !sql_row[0]) {
+                               APACHELOG(APLOG_INFO, r,
+                                       "No row returned or NULL value: %s", mysql_error(sec->dbh));
+                               return -1;
+                       }
+                       
+                       rv = check_password(password, sql_row[0], r, sec);
+                       if (rv == 0)
+                       {
+                               APACHELOG(APLOG_INFO, r,
+                                       "Authentication failed for user %s", user);
+                       }
+                       return rv;
+                       break;
+
+               default:
+                       APACHELOG(APLOG_ERR, r,
+                               "Multiple password rows returned - this is what is known, in the industry, as a Bad Thing");
+                       return -1;
+                       break;
+       }
+
+       APACHELOG(APLOG_CRIT, r, "Can't happen - dropped out of switch!");
+       return -1;
+}
+
+/* Has a look to see if the given user is a member of the named group.
+ * Returns 0 if user is not a part of the group, 1 if he is, -1 on error.
+ */
+static int mysql_check_group(request_rec *r, char *user, char *group, mysql_auth_config_rec *sec)
+{
+       char *auth_table = "mysql_auth", *auth_group_field="groups", *auth_group_clause="";
+       char *query;
+       char *esc_user = mysql_escape(user, r->pool);
+       char *esc_group = mysql_escape(group, r->pool);
+       MYSQL_RES *result;
+       MYSQL_ROW row;
+       char *auth_user_field = "username";
+
+       if (!group) {
+               APACHELOG(APLOG_ERR, r, "No group specified");
+               return 0;
+       }
+       
+       if (sec->group_table) {
+               auth_table = sec->group_table;
+       }
+
+       if (sec->user_field)
+       {
+               auth_user_field = sec->user_field;
+       }
+
+       if (sec->group_user_field) {
+               auth_user_field = sec->group_user_field;
+       }
+               
+       if (sec->group_field) {
+               auth_group_field = sec->group_field;
+       }
+       if (sec->group_where_clause) {
+               auth_group_clause = sec->group_where_clause;
+       }
+
+       APACHELOG(APLOG_DEBUG, r,
+               "Making group query with auth_table=[%s], auth_user_field=[%s], "
+               "esc_user=[%s], esc_group=[%s], auth_group_field=[%s], where_clause=[%s]",
+               auth_table, auth_user_field, esc_user, esc_group, auth_group_field,auth_group_clause);
+
+       query = (char *) PSTRCAT(r->pool, "SELECT count(*) FROM ", auth_table,
+               " WHERE ", auth_user_field, "='", esc_user, "'",
+               " and FIND_IN_SET('", esc_group, "',", auth_group_field, ")",
+               auth_group_clause, NULL);
+
+       APACHELOG(APLOG_DEBUG, r, "Group query created; [%s]", query);
+               
+       if (!query) {
+               APACHELOG(APLOG_CRIT, r,
+                       "Failed to create group-check query - ran out of memory!");
+               return -1;
+       }
+       if (safe_mysql_query(r, query, sec)) {
+               APACHELOG(APLOG_CRIT, r, "Group query failed!");
+               return -1;
+       }
+       result = safe_mysql_store_result(r->pool, sec);
+       if (!result || (row=mysql_fetch_row(result))==NULL || !row[0]) {
+               APACHELOG(APLOG_CRIT, r, "Store result failed - erp!");
+               return -1;
+       }
+
+       return atoi(row[0]);
+}
+
+/* The apache-called function.  Note that this function says nothing about
+ * what the user should be allowed to do - merely that they have proved they
+ * are who they say they are.  Return OK if the user has proved their
+ * identity, DECLINED if we are not taking any responsibility for them, or
+ * some Apache error if there was a problem.
+ */
+int mysql_authenticate_basic_user(request_rec *r)
+{
+       mysql_auth_config_rec *sec = (mysql_auth_config_rec *) ap_get_module_config(r->per_dir_config, &auth_mysql_module);
+       conn_rec *c = r->connection;
+       const char *sent_pw;
+       int res;
+
+       APACHELOG(APLOG_DEBUG, r, "Handling an authentication request for section %s", sec->dir);
+
+#ifdef DEBUG
+       for (res = 0; res < 512; res++)
+       {
+               if (sec->sacrificial_lamb[res] == '\0')
+               {
+                       sec->sacrificial_lamb[res] = 'n';
+               }
+               if (!isgraph(sec->sacrificial_lamb[res]))
+               {
+                       sec->sacrificial_lamb[res] = ' ';
+               }
+       }
+       sec->sacrificial_lamb[511] = '\0';
+       
+       syslog(LOG_DEBUG, "The contents of the lamb are %s", sec->sacrificial_lamb);
+#endif
+
+       if (!sec->enable_mysql_auth) {
+               APACHELOG(APLOG_DEBUG, r,
+                       "Not running mod-auth-mysql for %s - disabled", r->unparsed_uri);
+               return DECLINED;
+       }
+
+       /* use MySQL auth only if we have a database */
+       if (!auth_db_name && !sec->db_name) {
+               APACHELOG(APLOG_ERR, r,
+                       "Failed to run mod-auth-mysql for %s: No database name specified", r->unparsed_uri);
+               return DECLINED;
+       }
+
+       /* obtain sent password */
+       if ((res = ap_get_basic_auth_pw(r, &sent_pw))) {
+               return res;
+       }
+
+#ifdef APACHE2
+       APACHELOG(APLOG_DEBUG, r,
+               "Starting basic user auth for [%s] in %s, child pid %i",
+               r->user,
+               sec->dir, getpid());
+#else
+       APACHELOG(APLOG_DEBUG, r,
+               "Starting basic user auth for [%s] in %s, child pid %i",
+               c->user,
+               sec->dir, getpid());
+#endif
+
+#ifdef APACHE2
+       switch (mysql_check_user_password(r, r->user, sent_pw, sec)) {
+#else
+       switch (mysql_check_user_password(r, c->user, sent_pw, sec)) {
+#endif
+               case 0:
+                       ap_note_basic_auth_failure(r);
+                       return HTTP_UNAUTHORIZED;
+                       break;
+               case 1:
+                       return OK;
+                       break;
+               case -1:
+               default:
+                       APACHELOG(APLOG_DEBUG, r,
+                               "mysql_check_user_password returned error");
+                       return HTTP_INTERNAL_SERVER_ERROR;
+                       break;
+       }
+}
+
+/* Go through a 'requires' line configured for the module, and return OK
+ * if the user satisfies the line, or some sort of failure return code
+ * otherwise.
+ */
+int check_mysql_auth_require(char *user, const char *t, request_rec *r)
+{
+       mysql_auth_config_rec *sec = (mysql_auth_config_rec *) ap_get_module_config(r->per_dir_config, &auth_mysql_module);
+       const char *w;
+       int rv;
+       
+       w = ap_getword(r->pool, &t, ' ');
+       /* If they're letting any old authenticated user, we're off the
+        * hook!
+        */
+       if (!strcmp(w, "valid-user")) {
+               return OK;
+       }
+
+       /* Checking a list of usernames */
+       if (!strcmp(w, "user")) {
+               while (t[0]) {
+                       w = ap_getword_conf(r->pool, &t);
+                       if (!strcmp(user, w)) {
+                               return OK;
+                       }
+               }
+               /* Not found */
+               return HTTP_UNAUTHORIZED;
+       } else if (!strcmp(w, "group")) {
+               /* This is the prickly one; checking whether the
+                * user is a member of a listed group.
+                */
+               while (t[0])
+               {
+                       w = ap_getword_conf(r->pool, &t);
+                       rv = mysql_check_group(r, user, (char *)w, sec);
+                       
+                       if (rv == 1)
+                       {
+                               /* Yep, we're all good */
+                               return OK;
+                       }
+                       else if (rv == -1)
+                       {
+                               return HTTP_INTERNAL_SERVER_ERROR;
+                       }
+               }
+               /* Distinct lack of foundage */
+               return HTTP_UNAUTHORIZED;
+       }
+       else
+       {
+               APACHELOG(APLOG_ERR, r, "Invalid argument to require: %s", w);
+               return HTTP_INTERNAL_SERVER_ERROR;
+       }
+
+       APACHELOG(APLOG_ERR, r, "CAN'T HAPPEN: Dropped out of the bottom of check_mysql_auth_require!");
+       return HTTP_INTERNAL_SERVER_ERROR;
+}
+
+/* This is the authorization step.  We're presuming that the user has
+ * successfully negotiated the step of "I am who I say I am", now we're
+ * checking to see if the user has permission to access this particular
+ * resource.  As with mysql_authenticate_basic_user, above, we return OK if
+ * the user is fit to proceed, DECLINED if we don't want to make a decision
+ * either way, HTTP_UNAUTHORIZED if the user is not allowed, or some apache
+ * error if there was a major problem.
+ */
+int mysql_check_auth(request_rec *r)
+{
+       mysql_auth_config_rec *sec = (mysql_auth_config_rec *) ap_get_module_config(r->per_dir_config, &auth_mysql_module);
+#ifdef APACHE2
+       char *user = r->user;
+#else
+       char *user = r->connection->user;
+#endif
+       int m = r->method_number;
+       int rv;
+       register int x;
+       const char *t;
+#ifdef APACHE2
+       const apr_array_header_t *reqs_arr = ap_requires(r);
+#else
+       const array_header *reqs_arr = ap_requires(r);
+#endif
+       require_line *reqs;
+
+       /* use MySQL auth only if we have a database */
+       if (!auth_db_name && !sec->db_name) {
+               return DECLINED;
+       }
+
+       /* What do we do if there's no requires line available?  Either say
+        * "bad puppy" if we're king shit, or say "not my problem" otherwise.
+        */
+       if (!reqs_arr) {
+               if (sec->authoritative) {
+                       APACHELOG(APLOG_ERR, r, "No requires line available");
+                       return HTTP_UNAUTHORIZED;
+               } else {
+                       return DECLINED;
+               }
+       }
+
+       /* This is an array of all the requires lines which apply to us.
+        * There may be several, as in the case of something like:
+        * require user foo bar
+        * require group wombat
+        * That is, the user either has to belong to the group 'wombat' or
+        * be 'foo' or 'bar'.
+        * We have to check them all.  Yuck.
+        */
+       reqs = (require_line *) reqs_arr->elts;
+
+       for (x = 0; x < reqs_arr->nelts; x++) {
+               /* mjp: WTF is this? */
+               if (!(reqs[x].method_mask & (1 << m))) {
+                       continue;
+               }
+
+               t = reqs[x].requirement;
+
+               /* OK, this might seem a little weird.  The logic is that,
+                * if the user is approved, that's sufficient, so we can
+                * return OK straight away.  Alternately, if there's an
+                * error, we bomb the check and die.  The only circumstance
+                * where we continue looping is when the user didn't pass this
+                * check, but might pass a future one, so keep looking.
+                */
+               if ((rv = check_mysql_auth_require(user, t, r))
+                       != HTTP_UNAUTHORIZED)
+               {
+                       return rv;
+               }
+       }
+
+       /* We don't know, and we don't really care */
+       if (!(sec->authoritative)) {
+               return DECLINED;
+       }
+
+       ap_note_basic_auth_failure(r);
+       return HTTP_UNAUTHORIZED;
+}
+
+
+
+#ifdef APACHE2
+static void register_hooks(apr_pool_t *p)
+{
+       ap_hook_check_user_id(mysql_authenticate_basic_user, NULL, NULL, APR_HOOK_MIDDLE);
+       ap_hook_auth_checker(mysql_check_auth, NULL, NULL, APR_HOOK_MIDDLE);
+}
+#endif
+
+#ifdef APACHE2
+module AP_MODULE_DECLARE_DATA auth_mysql_module =
+{
+STANDARD20_MODULE_STUFF,
+create_mysql_auth_dir_config, /* dir config creater */
+NULL,                       /* dir merger --- default is to override */
+NULL,                       /* server config */
+NULL,                       /* merge server config */
+mysql_auth_cmds,              /* command apr_table_t */
+register_hooks              /* register hooks */
+};
+#else
+module auth_mysql_module =
+{
+       STANDARD_MODULE_STUFF,
+       mysql_auth_init_handler,        /* initializer */
+       create_mysql_auth_dir_config,   /* dir config creater */
+       NULL,                           /* dir merger --- default is to override */
+       NULL,                           /* server config */
+       NULL,                           /* merge server config */
+       mysql_auth_cmds,                /* command table */
+       NULL,                           /* handlers */
+       NULL,                           /* filename translation */
+       mysql_authenticate_basic_user,  /* check_user_id */
+       mysql_check_auth,               /* check auth */
+       NULL,                           /* check access */
+       NULL,                           /* type_checker */
+       NULL,                           /* pre-run fixups */
+       NULL                            /* logger */
+#if MODULE_MAGIC_NUMBER >= 19970103
+       ,NULL                           /* header parser */
+#endif
+#if MODULE_MAGIC_NUMBER >= 19970719
+       ,NULL                           /* child_init */
+#endif
+#if MODULE_MAGIC_NUMBER >= 19970728
+       ,NULL                           /* child_exit */
+#endif
+#if MODULE_MAGIC_NUMBER >= 19970902
+       ,NULL                           /* post read-request */
+#endif
+};
+#endif