mod-auth-mysql-4.3.9/0000755000175000017500000000000010162545562015532 5ustar mpalmermpalmer00000000000000mod-auth-mysql-4.3.9/USAGE0000644000175000017500000000751710162545562016333 0ustar mpalmermpalmer00000000000000OK, 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 or AuthMySQL_DefaultHost AuthMySQL_DefaultUser AuthMySQL_DefaultPassword 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 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. mod-auth-mysql-4.3.9/configure0000755000175000017500000040702310162545562017447 0ustar mpalmermpalmer00000000000000#! /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 #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #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 if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory 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 &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &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 #include #include #include /* 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 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 to if __STDC__ is defined, since # 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 #else # include #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 _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 to if __STDC__ is defined, since # 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 #else # include #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 _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 #include #include #include 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 _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 _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 #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 #include 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 #include 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 #include #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 ." _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 <>$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 <>$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 mod-auth-mysql-4.3.9/500mod_auth_mysql.info0000644000175000017500000000205110162545562021657 0ustar mpalmermpalmer00000000000000LoadModule: 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 mod-auth-mysql-4.3.9/configure.ac0000644000175000017500000000767410162545562020036 0ustar mpalmermpalmer00000000000000# 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 #include 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 #include 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 mod-auth-mysql-4.3.9/install-sh0000755000175000017500000000010210162545562017527 0ustar mpalmermpalmer00000000000000#!/bin/sh # Dummy file to make configure happy. exit 0 mod-auth-mysql-4.3.9/Makefile.in0000644000175000017500000000117310162545562017601 0ustar mpalmermpalmer00000000000000APXS = @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 mod-auth-mysql-4.3.9/config.h.in0000644000175000017500000000244710162545562017564 0ustar mpalmermpalmer00000000000000/* 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 header file. */ #undef HAVE_CRYPT_H /* Define to 1 if you have the 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 header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the 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 mod-auth-mysql-4.3.9/DIRECTIVES0000644000175000017500000002265010162545562017123 0ustar mpalmermpalmer00000000000000All 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 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 Specifies the MySQL server to use for authentication. This option affects all directories which do not override it via AuthMySQL_Host. AuthMySQL_Host Synonym for AuthMySQL_DefaultHost, to be used in .htaccess files and directory-specific entries. Auth_MySQL_DefaultPort 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 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 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 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 Specifies the username for connection to the MySQL server. AuthMySQL_User Synonym for AuthMySQL_DefaultUser, to be used in .htaccess files and directory-specific entries. AuthMySQL_DefaultPassword Specifies the password user together with the above user. AuthMySQL_Password Synonym for AuthMySQL_Password, to be used in .htaccess files and directory-specific entries. Auth_MySQL_General_DB Server-wide, specifies a default database name to use. Auth_MySQL_DB Synonym for Auth_MySQL_General_DB, to be used in .htaccess files and directory-specific entries. AuthMySQL_DefaultDB Synonym for Auth_MySQL_General_DB. AuthMySQL_DB Synonym for Auth_MySQL_General_DB, to be used in .htaccess files and directory-specific entries. AuthName "" Describes the data you're guarding. AuthType The authentication process used in the transaction. Stick with Basic, no others work at present. require Specify what is considered a valid authentication. 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 The name of the MySQL table in the specified database which stores username:password pairs. By default, it is 'mysql_auth'. AuthMySQL_Password_Table Synonym for Auth_MySQL_Password_Table. Auth_MySQL_Group_Table 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 Synonym for Auth_MySQL_Group_Table. Auth_MySQL_Username_Field 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 Synonym for Auth_MySQL_Username_Field. Auth_MySQL_Password_Field As per ...Username_Field above, but for passwords. Same MySQL access privileges. Defaults to 'password'. AuthMySQL_Password_Field Synonym for Auth_MySQL_Password_Field. Auth_MySQL_Group_Field As per ...Username_Field above. Defaults to 'groups'. AuthMySQL_Group_Field Synonym for Auth_MySQL_Group_Field. Auth_MySQL_Group_User_Field 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 Synonym for Auth_MySQL_Group_User_Field. Auth_MySQL_Password_Clause 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 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 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 Synonym for Auth_MySQL_Empty_Passwords. Auth_MySQL_Encryption_Types 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 Synonym for Auth_MySQL_Encryption_Types. Auth_MySQL_Encrypted_Passwords (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 (DEPRECATED) Synonym for Auth_MySQL_Encrypted_Passwords. Auth_MySQL_Scrambled_Passwords (DEPRECATED) Equivalent to: Auth_MySQL_Encryption_Types MySQL The same restrictions apply to this directive as to ...Encrypted_Passwords. AuthMySQL_Scrambled_Passwords (DEPRECATED) Synonym for Auth_MySQL_Scrambled_Passwords. Auth_MySQL_Authoritative 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 Synonym for Auth_MySQL_Authoritative. Auth_MySQL_Non_Persistent 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 An antonym for Auth_MySQL_Non_Persistent. AuthMySQL_AllowOverride 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 Whether or not to enable MySQL authentication. If it's off, the MySQL authentication will simply pass authentication off to other modules defined. AuthMySQL Synonym for Auth_MYSQL. mod-auth-mysql-4.3.9/auth_mysql.load0000644000175000017500000000011010162545562020551 0ustar mpalmermpalmer00000000000000LoadModule auth_mysql_module /usr/lib/apache2/modules/mod_auth_mysql.so mod-auth-mysql-4.3.9/INSTALL0000644000175000017500000000100510162545562016557 0ustar mpalmermpalmer00000000000000You'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. mod-auth-mysql-4.3.9/mod_auth_mysql.c0000644000175000017500000014752210162545562020736 0ustar mpalmermpalmer00000000000000/* * Copyright (c) 2001 by J. R. Westmoreland * Portions Copyright (c) 2002-2004 by Matthew Palmer * * Original module/version: mod_auth_mysql v2.20 * Originally written and maintained by Zeev Suraski * A couple of fixes by Marschall Peter * and Brent Metz * MySQL/PHP style MD5 hashes, and an integration with the mod-auth-mysql * maintained by Bill Joned by Matthew Palmer * * This version maintained by Matthew Palmer * * Please read the INSTALL and USAGE files for further information. * * 2004-02-01 MURAKAMI, takeshi * add port, socket * 2004-02-07 MURAKAMI, takeshi * apache2 * 2004-09-20 Joseph Walton * 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 #include #include #include #include #ifdef APACHE2 #include "http_request.h" /* for ap_hook_(check_user_id | auth_checker)*/ #include #include #else #include #include #endif #include #include #include #ifdef HAVE_CRYPT_H #include #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 * ... 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