diff -Nru dns2tcp-0.4.dfsg/aclocal.m4 dns2tcp-0.5.2/aclocal.m4 --- dns2tcp-0.4.dfsg/aclocal.m4 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/aclocal.m4 2010-06-16 09:52:38.000000000 +0100 @@ -1,7 +1,7 @@ -# generated automatically by aclocal 1.10 -*- Autoconf -*- +# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006 Free Software Foundation, Inc. +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -11,12 +11,15 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. -m4_if(m4_PACKAGE_VERSION, [2.61],, -[m4_fatal([this file was generated for autoconf 2.61. -You have another version of autoconf. If you want to use that, -you should regenerate the build system entirely.], [63])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, +[m4_warning([this file was generated for autoconf 2.65. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) -# Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc. +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -28,10 +31,10 @@ # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.10' +[am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.10], [], +m4_if([$1], [1.11.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -45,10 +48,12 @@ # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. -# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.10])dnl -_AM_AUTOCONF_VERSION(m4_PACKAGE_VERSION)]) +[AM_AUTOMAKE_VERSION([1.11.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- @@ -105,14 +110,14 @@ # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006 +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 8 +# serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- @@ -125,6 +130,7 @@ AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' @@ -138,14 +144,14 @@ Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 9 +# serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, @@ -202,6 +208,16 @@ if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -219,7 +235,17 @@ done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -229,19 +255,23 @@ break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -298,57 +328,68 @@ # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -#serial 3 +#serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done done -done +} ])# _AM_OUTPUT_DEPENDENCY_COMMANDS @@ -368,13 +409,13 @@ # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006 Free Software Foundation, Inc. +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 12 +# serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. @@ -391,7 +432,7 @@ # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.60])dnl +[AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl @@ -442,8 +483,8 @@ AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) -AM_PROG_INSTALL_SH -AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. @@ -451,23 +492,36 @@ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES(OBJC)], - [define([AC_PROG_OBJC], - defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl -]) -]) + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. @@ -479,18 +533,19 @@ # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. +_am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in - $1 | $1:* ) + $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done -echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -501,7 +556,14 @@ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. @@ -527,13 +589,13 @@ # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # AM_MAKE_INCLUDE() # ----------------- @@ -542,7 +604,7 @@ [am_make=${MAKE-make} cat > confinc << 'END' am__doit: - @echo done + @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. @@ -552,24 +614,24 @@ _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) @@ -579,14 +641,14 @@ # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005 +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 5 +# serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ @@ -603,7 +665,14 @@ AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " @@ -641,13 +710,13 @@ # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- @@ -664,7 +733,7 @@ # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], -[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- @@ -674,14 +743,14 @@ # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 5 # AM_SANITY_CHECK # --------------- @@ -690,16 +759,29 @@ # Just in case sleep 1 echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` + set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ @@ -752,18 +834,25 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006 Free Software Foundation, Inc. +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 2 + # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- -# Prevent Automake from outputing VARIABLE = @VARIABLE@ in Makefile.in. +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. diff -Nru dns2tcp-0.4.dfsg/ChangeLog dns2tcp-0.5.2/ChangeLog --- dns2tcp-0.4.dfsg/ChangeLog 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/ChangeLog 2010-06-16 09:40:09.000000000 +0100 @@ -1,7 +1,45 @@ +Version 0.5.2 + Removal of left OpenSSL includes + +Version 0.5.1 + Remove OpenSSL library due to GPL conflicts + - Add specific PolarSSL hmac functions in dns2tcp + - No more external library needed + Kill child when authentication fails + Remove useless '=' padding + +Version 0.5 + Typo fixed in config file : + resource is know correctly written (with one 's') + + Client now compiles and works under Windows (by Nicolas Collignon) + find the first DNS if server not specified + add --disable-{client,server} option in Makefile + Request type are now independant (TXT, KEY) + Add a client authentication (identification) + Fix bind problem and typo (Thanks Taylor R Campbell) + Server now put the AA flag in reply (Thanks Taylor R Campbell) + Client can execute command (for reverse connection) + dns2tcpc can be used as a proxy (like ProxyCommand for SSH) + pid file can be defined in the config file (patch from Michael Scherer) + +Version 0.4.3 + Fix buffer overflow and error in dns_decode (John Lampe) + Fix drop privileges problems (Solar Designer) + Add limit to prevent fork() (Idea from Solar Designer) + +Version 0.4.2 + Suppressed + +Version 0.4.1 + Fix buffer overflow in dns_decode + Fix bind Problem (thanks Taylor R Campbell) + Fix compilation problem in FreeBSD + Version 0.4 Typo fixed in README, manpages 64 bits architectures now working - Fix bind on 0.0.0.0 in server + Fix bind on 0.0.0.0 in server (Thanks Charlie Von Metzradt) client more reliable Version 0.3 diff -Nru dns2tcp-0.4.dfsg/client/auth.c dns2tcp-0.5.2/client/auth.c --- dns2tcp-0.4.dfsg/client/auth.c 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/client/auth.c 2010-01-06 12:50:40.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: auth.c,v 1.11 2007/06/28 12:39:47 dembour Exp $ +** $Id: auth.c,v 1.19.4.3 2010/01/06 12:50:40 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -20,9 +20,6 @@ #include #include -#ifndef _WIN32 -#include -#endif #include "client.h" #include "dns.h" @@ -32,137 +29,77 @@ #include "socket.h" #include "base64.h" #include "myrand.h" +#include "session.h" +#include "myerror.h" +#include "debug.h" +#include "rr.h" -int dump_ressource(void *req, int len) -{ - char buffer[MAX_REQ_LEN]; - struct rr_hdr *answer; - struct dns_hdr *hdr; - int count; - void *ptr; - char *name; - - hdr = req; - if (!(ptr = jump_end_query(req, GET_16(&hdr->qdcount), len))) - return (-1); - name = ptr; - printf("Available connection(s) : \n"); - for (count = GET_16(&hdr->ancount); count ; count--) - { - answer = jump_qname(ptr); - if (result2data(JUMP_RR_HDR(answer), buffer, GET_16(&answer->rdlength))) - printf("\t%s\n", buffer); - ptr =(void *)(JUMP_RR_HDR(answer) + GET_16(&answer->rdlength)); - } - if (!((*name & COMPRESS_FLAG_CHAR) == COMPRESS_FLAG_CHAR)) - printf("\nNote : Compression NOT available !\n"); - return (0); -} +/** + * @brief ask and list remote resource available + * @param[in] conf configuration + * @retval 0 on success + * @retval -1 on error + **/ -int list_ressources(t_conf *conf, struct sockaddr_in *sa) +int list_resources(t_conf *conf) { - t_packet query; - char buffer[MAX_REQ_LEN]; - char name[MAX_HOST_NAME_ENCODED + 1]; + char domain[MAX_DNS_LEN + 1]; + char buffer[MAX_DNS_LEN + 1]; int len; - struct dns_hdr *hdr; - - query.type = 0; - query.cookie = myrand(); - query.ack_seq = myrand(); - query.seq = myrand(); - hdr = (struct dns_hdr *) buffer; - create_req_hdr(&buffer, conf); - data2qname(&query, PACKET_LEN, &name, conf); - if (strlen(name) + strlen(conf->domain) >= MAX_HOST_NAME_DECODED) - { - MYERROR("Request too long"); - return (-1); - } - len = add_query((struct dns_hdr *)&buffer, JUMP_DNS_HDR(hdr), name, conf, TYPE_KEY); - if ((len = sendto(conf->sd_udp, buffer, len,0, (struct sockaddr *)sa, sizeof(struct sockaddr))) == -1) - { - MYERROR("Connect error"); - return (-1); - } - if ((len = get_simple_reply(conf, &buffer, hdr->id)) > 0) - { - hdr = (struct dns_hdr *)&buffer; - if (hdr->rcode) - { - printf("Auth error = %s\n", dns_error[hdr->rcode % (MAX_DNS_ERROR-1)]); - return (-1); - } - if (dump_ressource(buffer, len)) - return (0); - } - return (-1); -} - -uint16_t get_cookie(t_conf *conf, void *req, int max_len) -{ - struct rr_hdr *answer; - struct dns_hdr *hdr; - void *ptr; - t_packet *packet; - char buffer[BASE64_SIZE(MAX_ERROR_SIZE + PACKET_LEN) +1]; + uint16_t id, session_id; + t_request request; + uint32_t count = 0; + uint8_t compress; - hdr = req; - if (!(ptr = jump_end_query(req, GET_16(&hdr->qdcount), max_len))) + if (!((session_id = create_session(conf)))) + return (-1); + if (create_simple_req(conf, &request, RESOURCE, (char *)&domain, session_id)) + return (-1); + DPRINTF(1, "Requesting resource\n"); + if ((id = send_query(conf, &request)) == 0) return (-1); - answer = jump_qname(ptr); - packet = (t_packet *) buffer; - if (result2data(JUMP_RR_HDR(answer), buffer, MIN(sizeof(buffer),GET_16(&answer->rdlength)))) + if (!(request.len = get_simple_reply(conf, (char *)&request.req_data, id))) + return (-1); + printf("Available connection(s) : \n"); + while ((len = request.request_functions->rr_decode_next_reply(&request, (char *)&buffer, MAX_DNS_LEN , count++))) { - if (packet->type == (AUTH|OK)) - return (packet->cookie); - else - { - buffer[sizeof(buffer)-1] = 0; - printf("Authentication failed remote host said : %s\n", buffer+PACKET_LEN); - } + buffer[len] = 0; + printf("\t%s\n", &buffer[PACKET_LEN]); } + compress = query_is_compressed((char *)&(request.req_data), request.len); + printf("\nNote : Compression %s available !\n", compress ? "SEEMS" : "NOT"); return (0); } -uint16_t connect_ressource(t_conf *conf, struct sockaddr *sa) +/** + * @brief connect to a specific ressource + * @param[in] conf configuration + * @param[in] session_id session identifier + * @retval 0 on success + * @retval 1 on error + **/ + +uint16_t connect_resource(t_conf *conf, uint16_t session_id) { - t_packet *query; - char buffer[MAX_REQ_LEN]; - char name[MAX_HOST_NAME_ENCODED + 1]; + char domain[MAX_DNS_LEN + 1]; + char *resource; + char buffer[MAX_DNS_LEN + 1]; int len; - struct dns_hdr *hdr; - char *ptr; - - query = (t_packet *)&buffer; - query->type = AUTH; - if (conf->use_compression) - { - query->type |= USE_COMPRESS; - printf("want compress\n"); - } - query->cookie = conf->id; - query->seq = myrand(); - ptr = (char *)query + PACKET_LEN; - strcpy(ptr, conf->ressource); - data2qname(buffer, (int) (PACKET_LEN + strlen(ptr)), &name, conf); - hdr = (struct dns_hdr *) &buffer; - create_req_hdr(&buffer, conf); - if (strlen(name) >= MAX_HOST_NAME_DECODED) - { - MYERROR("Request too long"); - return (-1); - } - len = add_query(hdr, JUMP_DNS_HDR(hdr), name, conf, TYPE_KEY); - if ((len = sendto(conf->sd_udp, buffer, len,0, sa, sizeof(struct sockaddr))) == -1) - { - MYERROR("Connect error"); - return (-1); - } - if ((len = get_simple_reply(conf, &buffer, hdr->id)) > 0) - return (get_cookie(conf, &buffer, len)); - //MYERROR("sending error"); - // perror(""); - return (0); + t_request request; + t_packet *packet; + + if (create_simple_req(conf, &request, CONNECT, (char *)&domain, session_id)) + return(-1); + resource = &request.req_data[PACKET_LEN]; + DPRINTF(1, "Connect to resource \"%s\"\n", conf->resource); + strncpy(resource, conf->resource, sizeof(request.req_data) - PACKET_LEN - 1); + request.len = PACKET_LEN + strlen(conf->resource); + if ((len = transceive_query(conf, &request, (char *)&buffer, sizeof(buffer)-1 )) == -1) + return (1); + buffer[len] = 0; + packet = (t_packet *)&buffer; + if (packet->type != OK) + fprintf(stderr, "Error : %s\n", (char *) (packet+1)); + return (packet->type != OK); } diff -Nru dns2tcp-0.4.dfsg/client/client.c dns2tcp-0.5.2/client/client.c --- dns2tcp-0.4.dfsg/client/client.c 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/client/client.c 2010-01-06 12:50:40.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: client.c,v 1.11 2007/05/22 10:15:13 dembour Exp $ +** $Id: client.c,v 1.22.4.7 2010/01/06 12:50:40 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -18,12 +18,23 @@ ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/** + * @file client.c + * @brief clients management + */ + #include #include #include +#include +#include +#include +#include +#include +#include + #ifndef _WIN32 -#include -#include +#include #else #include "mywin32.h" #endif @@ -36,74 +47,98 @@ #include "queue.h" #include "auth.h" #include "debug.h" - - -static int prepare_select(t_conf *conf,fd_set *rfds, struct timeval *tv) -{ - socket_t max_fd = 0; - t_simple_list *client; - - FD_ZERO(rfds); - client = conf->client; - - while (client) - { - if (client->sd_tcp != -1) - { - queue_put_nop(conf, client); - if (!(client->control.data_pending >= MAX_DATA_SIZE) - && (!(client->control.data_pending + client->control.nop_pending >= WINDOW_SIZE))) - { - FD_SET(client->sd_tcp, rfds); - max_fd = MAX(max_fd, client->sd_tcp); - } - } - client = client->next; - } - FD_SET(conf->sd_udp, rfds); - FD_SET(0, rfds); - FD_SET(conf->sd_tcp, rfds); - max_fd = MAX(max_fd, conf->sd_udp); - max_fd = MAX(max_fd, conf->sd_tcp); - tv->tv_sec = SOCKET_TIMEOUT; - tv->tv_usec = 0; - return (int) (max_fd); -} +#include "command.h" +#include "socket.h" +#include "select.h" + +/** + * @brief disconnect client + * @param[in] conf configuration + * @param[in] client list item + * @retval 0 on success + * @retval -1 on error or finish request + **/ int delete_client(t_conf *conf, t_simple_list *client) { t_simple_list *tmp; - +#ifndef _WIN32 + int status; +#endif + DPRINTF(1, "free client \n"); +#ifndef _WIN32 + if (client->pid > 0) + kill(client->pid, SIGKILL); + if (conf->sd_tcp) + waitpid(-1, &status, WNOHANG); +#else + if (client->pid != (process_t)-1) + { + TerminateProcess(client->pid, 0); + CloseHandle(client->pid); + client->pid = (process_t) -1; + } +#endif if (conf->client == client) { - close(client->sd_tcp); + if ((client->fd_ro != client->fd_wo) && (client->fd_ro != -1)) + close (client->fd_wo); + if (!(client->fd_ro < 0)) + close (client->fd_ro); tmp = client->next; - delete_queue(client->queue); + delete_queue(client->saved_queue); list_destroy_simple_cell(conf->client); conf->client = tmp; - return (0); + /* Exit no listenning port and no valid socket */ + return ( !conf->local_port && !socket_is_valid(conf->sd_tcp)); } for (tmp = conf->client; tmp; tmp = tmp->next) { if (tmp->next == client) { tmp->next = client->next; - delete_queue(client->queue); - return (list_destroy_simple_cell(client)); + delete_queue(client->saved_queue); + return (list_destroy_simple_cell(client) && + /* Exit no listenning port and no valid socket */ + (!conf->local_port) && !socket_is_valid(conf->sd_tcp)); } } return (-1); } -int add_client(t_conf *conf, socket_t sd, struct sockaddr_in *sa) +static int delete_all_client(t_conf *conf) { - uint16_t cookie; t_simple_list *client; - if (!(cookie = connect_ressource(conf, sa))) - return (-1); - DPRINTF(1, "Adding client auth OK: 0x%hx\n", cookie); + while ((client = conf->client)) + delete_client(conf, client); + return (0); +} + +/** + * @brief register new client session + * @param[in] conf configuration + * @param[in] fd_ro read file descriptor + * @param[in] fd_wo write file descriptor (may be same as fd_ro) + * @param[in] pid process id related to this session (-1 if no fork) + * @retval 0 on success + * @retval -1 on error + */ +int add_client(t_conf *conf, socket_t fd_ro, + socket_t fd_wo, process_t pid) +{ + uint16_t session_id; + t_simple_list *client; +#ifdef _WIN32 + HANDLE evt; +#endif + + if (!((session_id = create_session(conf)))) + return (-1); + if (connect_resource(conf, session_id)) + return (-1); + DPRINTF(1, "Adding client auth OK: 0x%hx\n", session_id); if (!(conf->client)) { if (!(conf->client = list_create_simple_cell())) @@ -119,26 +154,149 @@ return (-1); client = client->next; } - client->cookie = cookie; - client->sd_tcp = sd; +#ifdef _WIN32 + if (pid == (process_t) -1) + { + if ((!((client->control.event = WSACreateEvent()))) + || (WSAEventSelect(fd_ro, client->control.event, FD_READ |FD_ACCEPT|FD_CLOSE) == SOCKET_ERROR)) + { + MYERROR("WSAEvent error\n"); + return (-1); + } + DPRINTF(1, "Client event = 0x%p\n", client->control.event); + } else { + evt = CreateEvent(NULL, FALSE, TRUE, NULL); + if (!evt) { + MYERROR("CreateEvent error\n"); + return (-1); + } + DPRINTF(1, "Pipe event = 0x%x\n", (unsigned int ) evt); + ZeroMemory(&client->control.aio, sizeof(OVERLAPPED)); + client->control.aio.hEvent = evt; + client->control.event = NULL; + client->control.io_pending = 0; + } +#endif + client->session_id = session_id; + client->fd_ro = fd_ro; + client->fd_wo = fd_wo; + client->pid = pid; client->control.data_pending = 0; client->control.nop_pending = 0; client->num_seq = 0; - memcpy(&(client->control.peer), sa, sizeof(struct sockaddr_in)); + client->saved_queue = 0; if (! (client->queue = init_queue())) return (-1); + client->saved_queue = client->queue; return (0); } -#define MINI_BUFF 64 -int get_socket_data(t_conf *conf, fd_set *rfds, struct sockaddr_in *sa) +static int check_incoming_ns_reply(t_conf *conf, char *buffer) +{ + int len = 0; + + /* Can be blocking here */ + while ((len = read(conf->sd_udp, buffer, MAX_DNS_LEN)) > 0) + { + if ((conf->client) && (queue_get_udp_data(conf, buffer, len))) + { + DPRINTF(2, "Error in queue_get_udp_data\n"); + return (-1); + } + } +#ifdef _WIN32 + if (len < 0) + { + if (GetLastError() != WSAEWOULDBLOCK) + { + DPRINTF(1, "failed to recv UDP data (%lu)\n", GetLastError()); + return (-1); + } + } + /* We can clear the event, we've read all data available */ + ResetEvent(conf->event_udp); +#endif + return (0); +} + +static int check_incoming_client_data(t_conf *conf, t_fd_event *descriptors, int offset) { - socket_t sd; t_simple_list *client; - char buffer[MINI_BUFF]; - if (FD_ISSET(0, rfds)) + for (client = conf->client; client; client = client->next) + { + if (socket_is_valid(client->fd_ro)) + { + if (IS_THIS_SOCKET(client->fd_ro, client->control.event, descriptors, offset)) + { + if (queue_get_tcp_data(conf, client)) + return (delete_client(conf, client)); + return (0); +#ifdef _WIN32 + } + else if (IS_THIS_SOCKET(0, client->control.aio.hEvent, descriptors, offset)) + { + if (queue_get_tcp_data(conf, client)) + return (delete_client(conf, client)); + return (0); +#endif + } + } + } + return (1); +} + +static int check_incoming_client(t_conf *conf, t_fd_event *descriptors, int offset) +{ + socket_t sd; + + /* New client */ + if (!(conf->use_stdin)) + { + if (socket_is_valid(conf->sd_tcp) + && (IS_THIS_SOCKET(conf->sd_tcp, conf->event_tcp, descriptors, offset))) + { + if ((sd = accept(conf->sd_tcp, 0, 0)) == -1) + { + MYERROR("accept"); + return (-1); + } +#ifdef _WIN32 + ResetEvent(conf->event_tcp); +#endif + if (add_client(conf, sd, sd, (process_t)-1)) + { + close(sd); + return (-1); + } + return (0); + } + } + return (1); +} + +/** + * @brief read data from an socket (TCP or UDP) + * @param[in] conf configuration + * @param[in] rfds file descriptor table + * @retval 0 on success + * @retval -1 on error + **/ + +#define MINI_BUFF 64 + +static int get_socket_data(t_conf *conf, t_fd_event *descriptors, int offset) +{ + char buffer[MAX_EDNS_LEN+1]; + int res; + + buffer[MAX_EDNS_LEN] = 0; + +#ifdef DEBUG + t_simple_list *client; + + if ((debug > 0) && ((!conf->use_stdin) && (IS_THIS_SOCKET(0, 0, descriptors, offset)))) { read(0, buffer, MINI_BUFF); if ((client = conf->client)) @@ -150,67 +308,171 @@ DPRINTF(2, "No more client\n"); return (0); } - client = conf->client; - if (FD_ISSET(conf->sd_udp, rfds)) +#endif + + /* Incoming NS packet */ + if (IS_THIS_SOCKET(conf->sd_udp, conf->event_udp, descriptors, offset)) + return (check_incoming_ns_reply(conf, (char *) buffer)); + + /* Incoming client packet */ + if ((res = check_incoming_client_data(conf, descriptors, offset)) != 1) + return (res); + + /* Incoming TCP client */ + if ((res = check_incoming_client(conf,descriptors, offset)) != 1) + return (res); + + return (-1); +} + +/** + * @brief open a local file and wait for data from DNS stream + * @param[in] conf configuration + * @retval 0 on success + * @retval -1 on error + * @note + * copy-over-DNS + */ + +int open_file(t_conf *conf) +{ + int fd; + + DPRINTF(1, "Output file is %s\n", (conf->output_file)); + + fd = open(conf->output_file,O_CREAT|O_WRONLY|O_TRUNC, 0700); + if ( fd == -1) + { + perror("In open file"); + return (-1); + } + /* read will be done in STDIN (unused) */ + if (add_client(conf, -2, fd, (process_t)-1)) { - if (!client) - read(conf->sd_udp, buffer, MINI_BUFF); - if ((client) && (queue_get_udp_data(conf, client))) + close(fd); + return (-1); + } + return (0); +} + +/** + * @brief main client loop (wait & process data) + * @param[in] conf configuration + * @retval -1 on error + * @retval 0 when finished + */ +int check_child(t_conf *conf) +{ +#ifndef _WIN32 + int status; + + if (waitpid(-1, &status, WNOHANG) > 0) + { + DPRINTF(1, "Child finished\n"); + delete_all_client(conf); + return (1); + } +#endif + return (0); +} + +#ifndef _WIN32 +int unix_check_for_data(t_conf *conf, fd_set *rfds, int max_fd, struct timeval *tv) +{ + int retval; + + if ((retval = select(max_fd+1, rfds, 0, 0, tv)) == -1) + { + DPRINTF(1, "Select error ..\n"); + return (-1); + } + if (retval) + { + if ((get_socket_data(conf, rfds, 0)) && (!conf->local_port)) { - MYERROR("getting data\n"); + DPRINTF(1, "Exiting ..\n"); + delete_all_client(conf); return (-1); } - return (0); } - for (client = conf->client; client; client = client->next) - { - if (client->sd_tcp != -1) - if (FD_ISSET(client->sd_tcp, rfds)) - { - if (queue_get_tcp_data(conf, client)) - return (delete_client(conf, client)); - return (0); - } + return (0); +} + +#else + +int win_check_for_data(t_conf *conf, WSAEVENT *descriptors, int max_fd, struct timeval *tv) +{ + DWORD retval; + + retval = WaitForMultipleObjects(max_fd, descriptors, FALSE, tv->tv_sec * 1000); + if (retval == WAIT_FAILED) + { + DPRINTF(1, "WaitForMultipleObjects error (%li)\n", GetLastError()); + return (-1); } - if (FD_ISSET(conf->sd_tcp, rfds)) + if ((retval != WAIT_TIMEOUT) && (retval >= WAIT_OBJECT_0)) { - if ((sd = accept(conf->sd_tcp, 0, 0)) == -1) + if ((get_socket_data(conf, descriptors, (int)(retval - WAIT_OBJECT_0))) + && (!conf->local_port)) { - MYERROR("accept"); + DPRINTF(1, "Exiting ..\n"); + delete_all_client(conf); return (-1); } - if (add_client(conf, sd, sa)) - close(sd); - return (0); } - return (-1); + return (0); +} + +#endif + +int check_for_data(t_conf *conf, t_fd_event *rfds, int max_fd, struct timeval *tv) +{ +#ifdef _WIN32 + return (win_check_for_data(conf, rfds, max_fd, tv)); +#else + return (unix_check_for_data(conf, rfds, max_fd, tv)); +#endif } -int do_client(t_conf *conf, struct sockaddr_in *sa) +/** + * @brief main client loop (wait & process data) + * @param[in] conf configuration + * @retval -1 on error + * @retval 0 when finished + */ +int do_client(t_conf *conf) { +#ifndef _WIN32 fd_set rfds; +#else + WSAEVENT rfds[HANDLE_SIZE]; +#endif struct timeval tv; int retval; int max_fd; - + if (debug >= 2) fprintf(stderr, "When connected press enter at any time to dump the queue\n"); + if ((conf->cmdline) && ((retval = create_process(conf)))) + return (-1); + if ((conf->use_stdin) && ((retval = add_client(conf, 0, 1, (process_t)-1)))) + return (-1); + if ((conf->output_file) && ((retval = open_file(conf)))) + return (-1); while (1) { +#ifndef _WIN32 + /* Check for defunc child */ + if (check_child(conf)) + return (0); max_fd = prepare_select(conf, &rfds, &tv); - if ((retval = select(max_fd+1, &rfds, 0, 0, &tv)) == -1) - { - MYERROR("select error"); - return (-1); - } - if (retval) - { - if (get_socket_data(conf, &rfds, sa)) - { - MYERROR("Error in select"); - return (-1); - } - } + if (check_for_data(conf, &rfds, max_fd, &tv)) + return (-1); +#else + max_fd = prepare_select(conf, rfds, &tv); + if (check_for_data(conf, rfds, max_fd, &tv)) + return (-1); +#endif check_for_resent(conf); } return (-1); diff -Nru dns2tcp-0.4.dfsg/client/command.c dns2tcp-0.5.2/client/command.c --- dns2tcp-0.4.dfsg/client/command.c 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/client/command.c 2010-06-01 16:25:29.000000000 +0100 @@ -0,0 +1,259 @@ +/* +** Copyright (C) 2006 Olivier DEMBOUR +** $Id: command.c,v 1.4.4.4 2010/06/01 15:25:29 collignon Exp $ +** +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with This program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef _WIN32 +#include +#include +#include +#else +#include "mywin32.h" +#endif + +#include +#include +#include + +#include "myerror.h" +#include "list.h" +#include "client.h" +#include "debug.h" + +#define IS_SEPARATOR(c) ((c == ' ') || (c == '\t') || (c == '\n')) +#define MAX_ARG_SIZE 64 + +#ifndef _WIN32 + +/** + * @brief find numbers of arguments + * @param[in] cmdline command to execute + * @retval numbers of arguments + **/ + +int count_arg(char *cmdline) +{ + int i = 0; + + while (*cmdline) + if (IS_SEPARATOR(*cmdline++)) + i++; + return (i); +} + +/** + * @brief convert command line into argv + * @param[in] line command line + * @param[in] argv table + **/ + +void line_to_argv(char *line, char **argv) +{ + int i = 0; + + if (!IS_SEPARATOR(*line)) + argv[i++] = line; + while (*line) + { + while ((*line) && (!IS_SEPARATOR(*line))) + line++; + while ((*line) && (IS_SEPARATOR(*line))) + *line++ = 0; + argv[i++] = *line? line: 0; + } +} + +/** + * @brief create a process, add it into client list + * @param[in] conf configuration + * @retval 0 on success + * @retval -1 on error + **/ + +int create_process(t_conf *conf) +{ + int from_child[2]; + int to_child[2]; + int status; + pid_t pid; + + if ((pipe(from_child) == -1) || (pipe(to_child) == -1)) + { + perror("pipe"); + exit(-1); + } + pid = fork(); + if (!pid) + { + char *argv[MAX_ARG_SIZE]; + + line_to_argv(conf->cmdline, argv); + if (count_arg(conf->cmdline) > MAX_ARG_SIZE) + { + fprintf(stderr, "Arg size > MAX_ARG_SIZE\n"); + exit (-1); + } + if (dup2(to_child[0], STDIN_FILENO) == -1) + return (-1); + if (dup2(from_child[1], STDOUT_FILENO) == -1) + return (-1); + if (dup2(from_child[1], STDERR_FILENO) == -1) + return (-1); + close(from_child[0]); + close(to_child[0]); + execv(argv[0],argv); + fprintf(stderr, "execv error (%d) for '%s'\n", errno, conf->cmdline); + exit(1); + } + DPRINTF(1, "Executing %s (Pid %d)\n", conf->cmdline, (int)pid); + close(from_child[1]); + close(to_child[0]); + if (add_client(conf, from_child[0], to_child[1] , pid)) + { + /* BUGFIX: child process not killed if auth has failed (with -e) */ + kill(pid, SIGKILL); + waitpid(-1, &status, WNOHANG); + close(from_child[0]); close(to_child[1]); + return (-1); + } + return (0); +} + +#else +/* + * Windows pipe handling simply *SUX* + * It doesn't seem possible to perform asynchronous I/O on anonymous pipes. + * ReadFile() will block if there is no pending data. We don't want to use + * any additional thread. + * So we have to use named pipe... nasty ugly trick ... + */ +static int create_pipe(HANDLE *rfd, HANDLE *wfd, int async_read, SECURITY_ATTRIBUTES *attr) +{ + char name[128]; + + sprintf(name, "\\\\.\\pipe\\win-sux-no-async-anon-pipe-%lu-%i", + GetCurrentProcessId(), rand()); + DPRINTF(2, "using pipe %s\n", name); + + *rfd = CreateNamedPipe(name, + PIPE_ACCESS_INBOUND|(async_read ? FILE_FLAG_OVERLAPPED : 0), + PIPE_TYPE_BYTE|PIPE_WAIT, 2, 4096, 4096, + 5000 /*msec*/, attr); + if (*rfd == INVALID_HANDLE_VALUE) + { + MYERROR("error: failed to create pipe\n"); + return -1; + } + + *wfd = CreateFile(name, GENERIC_WRITE, 0, attr, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (*wfd == INVALID_HANDLE_VALUE) { + MYERROR("error: failed to create pipe\n"); + CloseHandle(*rfd); + return -1; + } + return 0; +} + +int create_process(t_conf *conf) +{ + + BOOL res; + HANDLE stdin_child, stdin_parent, stdout_parent, stdout_child, stderr_child; + DWORD pid; + SECURITY_ATTRIBUTES sattr; + PROCESS_INFORMATION pi; + STARTUPINFO si; + + ZeroMemory(&sattr, sizeof(sattr)); + ZeroMemory(&pi, sizeof(pi)); + ZeroMemory(&si, sizeof(si)); + + sattr.nLength = sizeof(sattr); + sattr.bInheritHandle = TRUE; + + // stdin pipe + if (create_pipe(&stdin_child, &stdin_parent, 0, &sattr)) + return -1; + + // stdout pipe + if (create_pipe(&stdout_parent, &stdout_child, 1, &sattr)) + { + CloseHandle(stdin_child); + CloseHandle(stdin_parent); + return -1; + } + + // stderr pipe + if (!DuplicateHandle(GetCurrentProcess(), stdout_child, + GetCurrentProcess(), &stderr_child, + 0, TRUE, DUPLICATE_SAME_ACCESS)) + { + MYERROR("error: failed to duplicate pipe handle\n"); + CloseHandle(stdin_child); + CloseHandle(stdin_parent); + CloseHandle(stdout_child); + CloseHandle(stdout_parent); + return -1; + } + + SetHandleInformation(stdin_parent, HANDLE_FLAG_INHERIT, 0); + SetHandleInformation(stdout_parent, HANDLE_FLAG_INHERIT, 0); + + si.cb = sizeof(si); + si.dwFlags = STARTF_USESTDHANDLES; + si.hStdInput = stdin_child; + si.hStdOutput = stdout_child; + si.hStdError = stderr_child; + + //FIXME print error + res = CreateProcess(NULL, conf->cmdline, NULL, NULL, TRUE, 0, + NULL, NULL, &si, &pi); + + CloseHandle(stdin_child); + CloseHandle(stdout_child); + CloseHandle(stderr_child); + + if (!res) + { + MYERROR("error: failed to create process (%lu)\n", GetLastError()); + CloseHandle(stdin_parent); + CloseHandle(stdout_parent); + return -1; + } + + pid = GetProcessId(pi.hProcess); + CloseHandle(pi.hThread); + + DPRINTF(3, "===============================\n"); + DPRINTF(3, "pipes: %lx/%lx\n", (long)stdin_parent, (long)stdout_parent); + DPRINTF(3, "proc: %lx\n", (long)pi.hProcess); + DPRINTF(3, "===============================\n"); + + if (add_client(conf, (socket_t)stdout_parent, + (socket_t)stdin_parent, pi.hProcess)) + { + CloseHandle(stdin_parent); + CloseHandle(stdout_parent); + TerminateProcess(pi.hProcess, 0); + CloseHandle(pi.hProcess); + return -1; + } + return 0; +} +#endif diff -Nru dns2tcp-0.4.dfsg/client/dns2tcprc dns2tcp-0.5.2/client/dns2tcprc --- dns2tcp-0.4.dfsg/client/dns2tcprc 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/client/dns2tcprc 2009-01-22 14:42:11.000000000 +0000 @@ -3,7 +3,8 @@ # domain = dns2tcp.hsc.fr -ressource = ssltunnel +resource = ssltunnel local_port = 4430 +key = blah debug_level=1 # server = my_dns diff -Nru dns2tcp-0.4.dfsg/client/includes/auth.h dns2tcp-0.5.2/client/includes/auth.h --- dns2tcp-0.4.dfsg/client/includes/auth.h 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/client/includes/auth.h 2008-08-26 16:49:59.000000000 +0100 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: auth.h,v 1.1.1.1 2006/01/06 13:53:23 dembour Exp $ +** $Id: auth.h,v 1.4 2008/08/26 15:49:59 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -21,7 +21,9 @@ #ifndef __AUTH_H__ #define __AUTH_H__ -int list_ressources(t_conf *conf, struct sockaddr_in *); -uint16_t connect_ressource(t_conf *conf, struct sockaddr_in *); +int list_resources(t_conf *conf); +uint16_t connect_resource(t_conf *conf, uint16_t); +uint16_t create_session(t_conf *conf); + #endif diff -Nru dns2tcp-0.4.dfsg/client/includes/client.h dns2tcp-0.5.2/client/includes/client.h --- dns2tcp-0.4.dfsg/client/includes/client.h 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/client/includes/client.h 2010-06-01 17:02:46.000000000 +0100 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: client.h,v 1.7 2007/01/26 16:13:44 collignon Exp $ +** $Id: client.h,v 1.15.4.6 2010/06/01 16:02:46 collignon Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -25,6 +25,8 @@ /* QUEUE_SIZE must the same that server value */ + +#define RESOLV_CONF "/etc/resolv.conf" #define QUEUE_SIZE 48 #define WINDOW_SIZE (QUEUE_SIZE / 2) @@ -39,19 +41,39 @@ #include "packet.h" typedef struct s_conf { - uint16_t local_port; + struct s_simple_list *client; + struct sockaddr_in sa; + char *dns_server; + char *cmdline; + char *output_file; +#ifdef _WIN32 + WSAEVENT event_tcp; + WSAEVENT event_udp; +#endif socket_t sd_udp; socket_t sd_tcp; + uint16_t local_port; + uint8_t use_stdin; uint16_t id; char *domain; - char *secret; - char *ressource; - uint8_t use_compression; - char *dns_server; - struct s_simple_list *client; + char *key; + struct s_rr_functions *query_functions; + uint16_t query_size; + char *resource; + uint8_t disable_compression; + uint8_t conn_timeout; } t_conf; +int add_client(t_conf *conf, socket_t fd_ro, + socket_t fd_wo, process_t pid); + int delete_client(t_conf *conf, struct s_simple_list *client); -int do_client(t_conf *, struct sockaddr_in *); +int do_client(t_conf *); + +#ifdef _WIN32 +typedef WSAEVENT t_fd_event ; +#else +typedef fd_set t_fd_event; +#endif #endif diff -Nru dns2tcp-0.4.dfsg/client/includes/command.h dns2tcp-0.5.2/client/includes/command.h --- dns2tcp-0.4.dfsg/client/includes/command.h 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/client/includes/command.h 2008-03-14 08:49:17.000000000 +0000 @@ -0,0 +1,26 @@ +/* +** Copyright (C) 2006 Olivier DEMBOUR +** $Id: command.h,v 1.2 2008/03/14 08:49:17 dembour Exp $ +** +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with This program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __COMMAND_H__ +#define __COMMAND_H__ + +int create_process(t_conf *conf); + +#endif diff -Nru dns2tcp-0.4.dfsg/client/includes/control.h dns2tcp-0.5.2/client/includes/control.h --- dns2tcp-0.4.dfsg/client/includes/control.h 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/client/includes/control.h 2009-12-28 15:11:16.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: control.h,v 1.5 2007/05/22 14:50:28 dembour Exp $ +** $Id: control.h,v 1.6.4.1 2009/12/28 15:11:16 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -34,12 +34,18 @@ uint16_t nop_pending; uint16_t data_pending; uint8_t cumul_errors; +#ifdef _WIN32 + WSAEVENT event; + OVERLAPPED aio; + int io_pending; +#endif struct sockaddr_in peer; } t_control; typedef struct s_control_peer { uint16_t ack_seq; uint16_t id; + uint16_t old_id; uint8_t type; } t_control_peer; diff -Nru dns2tcp-0.4.dfsg/client/includes/queue.h dns2tcp-0.5.2/client/includes/queue.h --- dns2tcp-0.4.dfsg/client/includes/queue.h 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/client/includes/queue.h 2008-08-26 16:49:59.000000000 +0100 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: queue.h,v 1.2 2006/01/09 08:41:19 dembour Exp $ +** $Id: queue.h,v 1.3 2008/08/26 15:49:59 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -23,7 +23,7 @@ t_list *init_queue(); int delete_queue(t_list *queue); -int queue_get_udp_data(t_conf *conf, struct s_simple_list *client); +int queue_get_udp_data(t_conf *conf, char *buffer, int len); int queue_get_tcp_data(t_conf *conf, struct s_simple_list *client); int check_for_resent(t_conf *conf); int queue_put_nop(t_conf *conf, struct s_simple_list *client); diff -Nru dns2tcp-0.4.dfsg/client/includes/requests.h dns2tcp-0.5.2/client/includes/requests.h --- dns2tcp-0.4.dfsg/client/includes/requests.h 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/client/includes/requests.h 2010-06-02 15:30:25.000000000 +0100 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: requests.h,v 1.2 2006/01/09 08:41:19 dembour Exp $ +** $Id: requests.h,v 1.6.4.2 2010/06/02 14:30:25 collignon Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -21,15 +21,24 @@ #ifndef __REQUESTS_H__ #define __REQUESTS_H__ -void create_req_hdr(void *, t_conf *); -int add_query(struct dns_hdr *, void *, char *, - t_conf *, uint16_t ); -void data2qname(void *,int , void *, t_conf *); -int result2data(void *, char *, int); -void *jump_qname(void *); +typedef struct s_request { + union { + char data[MAX_EDNS_LEN]; + t_packet packet; + } u; +#define req_data u.data + int len; + uint16_t type; + char *domain; + struct s_rr_functions *request_functions; +} t_request; -int create_req_data(t_conf *conf, struct s_simple_list *client, struct s_list *queue, char *data, int len); - -struct rr_hdr *get_reply(void *data, int len); +int add_edns(t_conf *conf, void *buffer, int len); +int push_req_data(t_conf *conf, struct s_simple_list *client, struct s_list *queue, t_request *req); +int transceive_query(t_conf *, t_request *, char *, int ); +uint16_t send_query(t_conf *conf, struct s_request *); +int decode_reply(char *query, int in_len, char *output, int max_len); +int create_simple_req(t_conf *, t_request *, char *, char *, uint16_t); +uint8_t query_is_compressed(char *buffer, uint16_t len); #endif diff -Nru dns2tcp-0.4.dfsg/client/includes/rr.h dns2tcp-0.5.2/client/includes/rr.h --- dns2tcp-0.4.dfsg/client/includes/rr.h 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/client/includes/rr.h 2008-08-26 16:49:59.000000000 +0100 @@ -0,0 +1,106 @@ +/* +** Copyright (C) 2006 Olivier DEMBOUR +** $Id: rr.h,v 1.2 2008/08/26 15:49:59 dembour Exp $ +** +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with This program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __RR_H__ +#define __RR_H__ + +#include "dns.h" +#include "requests.h" + +typedef struct s_rr_functions { + char *name; + uint16_t type; + void *(*rr_add_reply)(struct dns_hdr *, void *, uint16_t , char *); + int (*rr_decode_next_reply)(t_request *, char *, int, int); + int (*rr_available_len)(); +} t_rr_functions; + +#define TYPE_A 1 +#define TYPE_NS 2 +#define TYPE_MD 3 +#define TYPE_MF 4 +#define TYPE_CNAME 5 +#define TYPE_SOA 6 +#define TYPE_MB 7 +#define TYPE_MG 8 +#define TYPE_MR 9 +#define TYPE_NULL 10 +#define TYPE_WKS 11 +#define TYPE_PTR 12 +#define TYPE_HINFO 13 +#define TYPE_MINFO 14 +#define TYPE_MX 15 +#define TYPE_TXT 16 +#define TYPE_RP 17 +#define TYPE_AFSDB 18 +#define TYPE_X25 19 +#define TYPE_ISDN 20 +#define TYPE_RT 21 +#define TYPE_NSAP 22 +#define TYPE_NSAP_PTR 23 +#define TYPE_SIG 24 +#define TYPE_KEY 25 +#define TYPE_PX 26 +#define TYPE_GPOS 27 +#define TYPE_AAAA 28 +#define TYPE_LOC 29 +#define TYPE_NXT 30 +#define TYPE_EID 31 +#define TYPE_NIMLOC 32 +#define TYPE_SRV 33 +#define TYPE_ATMA 34 +#define TYPE_NAPTR 35 +#define TYPE_KX 36 +#define TYPE_CERT 37 +#define TYPE_A6 38 +#define TYPE_DNAME 39 +#define TYPE_SINK 40 +#define TYPE_OPT 41 +#define TYPE_APL 42 +#define TYPE_DS 43 +#define TYPE_SSHFP 44 +#define TYPE_IPSECKEY 45 +#define TYPE_RRSIG 46 +#define TYPE_NSEC 47 +#define TYPE_DNSKEY 48 +#define TYPE_DHCID 49 +#define TYPE_NSEC3 50 +#define TYPE_NSEC3PARAM 51 +#define TYPE_HIP 55 +#define TYPE_SPF 99 +#define TYPE_UINFO 100 +#define TYPE_UID 101 +#define TYPE_GID 102 +#define TYPE_UNSPEC 103 +#define TYPE_TKEY 249 +#define TYPE_TSIG 250 +#define TYPE_IXFR 251 +#define TYPE_AXFR 252 +#define TYPE_MAILB 253 +#define TYPE_MAILA 254 + +t_rr_functions *get_rr_function_by_type(uint16_t ); +t_rr_functions *get_rr_function_by_name(char *); + +int rr_decode_next_reply_encode(t_request *, char *, int , int); +int rr_decode_next_reply_raw(t_request *, char *, int , int); + +#endif /* __RR_H__ */ + diff -Nru dns2tcp-0.4.dfsg/client/includes/select.h dns2tcp-0.5.2/client/includes/select.h --- dns2tcp-0.4.dfsg/client/includes/select.h 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/client/includes/select.h 2009-12-09 15:50:09.000000000 +0000 @@ -0,0 +1,32 @@ +/* +** Copyright (C) 2006 Olivier DEMBOUR +** $Id: select.h,v 1.1.2.1 2009/12/09 15:50:09 dembour Exp $ +** +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with This program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __SELECT_H__ +#define __SELECT_H__ + +int prepare_select(t_conf *, void *, struct timeval *); + +#ifdef _WIN32 +int add_event(WSAEVENT event, HANDLE *rfds, int max_fd); +#else +int add_socket(socket_t socket, fd_set *rfds, socket_t max_fd); +#endif + +#endif diff -Nru dns2tcp-0.4.dfsg/client/includes/session.h dns2tcp-0.5.2/client/includes/session.h --- dns2tcp-0.4.dfsg/client/includes/session.h 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/client/includes/session.h 2008-03-14 08:49:17.000000000 +0000 @@ -0,0 +1,26 @@ +/* +** Copyright (C) 2006 Olivier DEMBOUR +** $Id: session.h,v 1.1 2008/03/14 08:49:17 dembour Exp $ +** +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with This program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __SESSION_H__ +#define __SESSION_H__ + +uint16_t create_session(t_conf *conf); + +#endif diff -Nru dns2tcp-0.4.dfsg/client/includes/socket.h dns2tcp-0.5.2/client/includes/socket.h --- dns2tcp-0.4.dfsg/client/includes/socket.h 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/client/includes/socket.h 2009-12-28 15:11:16.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: socket.h,v 1.2 2006/01/17 13:01:58 dembour Exp $ +** $Id: socket.h,v 1.4.4.3 2009/12/28 15:11:16 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -21,8 +21,16 @@ #ifndef __SOCKET_H__ #define __SOCKET_H__ -int bind_socket(t_conf *); -int create_socket(t_conf *, struct sockaddr_in *); -int get_simple_reply(t_conf *, void *, uint16_t); + +#ifndef _WIN32 +#define IS_THIS_SOCKET(sd, handle, descriptors, offset) FD_ISSET((sd), (descriptors)) +#else +#define IS_THIS_SOCKET(sd, handle, descriptors, offset) (((offset) <= HANDLE_SIZE) && (descriptors[offset] == handle)) +#endif + +int socket_is_valid(socket_t ); +int bind_socket(t_conf *); +socket_t create_socket(t_conf *); +uint16_t get_simple_reply(t_conf *, char *, uint16_t); #endif diff -Nru dns2tcp-0.4.dfsg/client/main.c dns2tcp-0.5.2/client/main.c --- dns2tcp-0.4.dfsg/client/main.c 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/client/main.c 2009-12-28 15:11:15.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: main.c,v 1.6 2007/05/30 13:04:45 dembour Exp $ +** $Id: main.c,v 1.12.4.4 2009/12/28 15:11:15 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -24,7 +24,6 @@ #include #ifndef _WIN32 -#include #include #else #include "mywin32.h" @@ -37,19 +36,31 @@ #include "myerror.h" #include "dns.h" +/** + * @brief main part + * @retval 0 on success + * @retval -1 on error + **/ int main(int argc, char **argv) { t_conf conf; - struct sockaddr_in sa; - + if ((get_option(argc, argv, &conf)) || - ((conf.sd_udp = create_socket(&conf, &sa)) < 0)) - return (-1); + ((conf.sd_udp = create_socket(&conf)) == -1)) + return (-1); srand(getpid() ^ (unsigned int) time(0)); - if (!conf.ressource) - return (list_ressources(&conf, &sa)); - if (! bind_socket(&conf)) - do_client(&conf, &sa); +#ifdef _WIN32 + if (!(conf.event_udp = WSACreateEvent())) + { + MYERROR("WSACreateEvent error\n"); + return (-1); + } + WSAEventSelect(conf.sd_udp, conf.event_udp, FD_READ); +#endif + if (!conf.resource) + return (list_resources(&conf)); + if ((!conf.local_port) || (!bind_socket(&conf))) + do_client(&conf); return (0); } diff -Nru dns2tcp-0.4.dfsg/client/Makefile.am dns2tcp-0.5.2/client/Makefile.am --- dns2tcp-0.4.dfsg/client/Makefile.am 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/client/Makefile.am 2010-05-19 12:40:42.000000000 +0100 @@ -1,8 +1,15 @@ bin_PROGRAMS = dns2tcpc INCLUDES = -I./includes/ -I../common/includes -CLEANFILES=*~ +CLEANFILES= *~ *.~ \#* EXTRA_DIST = includes dns2tcprc dns2tcpc_SOURCES = \ + ../common/hmac_sha1.c \ + select.c \ + ../common/crc16.c \ + rr.c \ + ../common/mycrypto.c \ + command.c \ + session.c \ ../common/config.c \ queue.c \ client.c \ diff -Nru dns2tcp-0.4.dfsg/client/Makefile.in dns2tcp-0.5.2/client/Makefile.in --- dns2tcp-0.4.dfsg/client/Makefile.in 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/client/Makefile.in 2010-06-16 09:52:40.000000000 +0100 @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.10 from Makefile.am. +# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -16,8 +17,9 @@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c @@ -30,6 +32,8 @@ NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ bin_PROGRAMS = dns2tcpc$(EXEEXT) subdir = client DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in @@ -40,19 +44,23 @@ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" -binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) -am_dns2tcpc_OBJECTS = config.$(OBJEXT) queue.$(OBJEXT) \ - client.$(OBJEXT) list.$(OBJEXT) myrand.$(OBJEXT) \ - auth.$(OBJEXT) dns.$(OBJEXT) mystrnlen.$(OBJEXT) \ - requests.$(OBJEXT) memdump.$(OBJEXT) base64.$(OBJEXT) \ - socket.$(OBJEXT) options.$(OBJEXT) main.$(OBJEXT) +am_dns2tcpc_OBJECTS = hmac_sha1.$(OBJEXT) select.$(OBJEXT) \ + crc16.$(OBJEXT) rr.$(OBJEXT) mycrypto.$(OBJEXT) \ + command.$(OBJEXT) session.$(OBJEXT) config.$(OBJEXT) \ + queue.$(OBJEXT) client.$(OBJEXT) list.$(OBJEXT) \ + myrand.$(OBJEXT) auth.$(OBJEXT) dns.$(OBJEXT) \ + mystrnlen.$(OBJEXT) requests.$(OBJEXT) memdump.$(OBJEXT) \ + base64.$(OBJEXT) socket.$(OBJEXT) options.$(OBJEXT) \ + main.$(OBJEXT) dns2tcpc_OBJECTS = $(am_dns2tcpc_OBJECTS) dns2tcpc_LDADD = $(LDADD) -DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles +am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) @@ -76,6 +84,7 @@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ +DIRECTORIES = @DIRECTORIES@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ @@ -92,6 +101,7 @@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ +MAN_PAGES = @MAN_PAGES@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ @@ -99,6 +109,7 @@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ @@ -116,14 +127,22 @@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ +build = @build@ build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ +host = @host@ host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ @@ -144,12 +163,20 @@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ INCLUDES = -I./includes/ -I../common/includes -CLEANFILES = *~ +CLEANFILES = *~ *.~ \#* EXTRA_DIST = includes dns2tcprc dns2tcpc_SOURCES = \ + ../common/hmac_sha1.c \ + select.c \ + ../common/crc16.c \ + rr.c \ + ../common/mycrypto.c \ + command.c \ + session.c \ ../common/config.c \ queue.c \ client.c \ @@ -173,14 +200,14 @@ @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu client/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu client/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu client/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu client/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -198,26 +225,41 @@ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - if test -f $$p \ - ; then \ - f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ - $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ - else :; fi; \ - done + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ - rm -f "$(DESTDIR)$(bindir)/$$f"; \ - done + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) @@ -234,126 +276,175 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base64.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/client.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/command.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/config.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crc16.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dns.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hmac_sha1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memdump.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mycrypto.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/myrand.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mystrnlen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/options.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/queue.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/requests.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/select.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/session.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/socket.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +hmac_sha1.o: ../common/hmac_sha1.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT hmac_sha1.o -MD -MP -MF $(DEPDIR)/hmac_sha1.Tpo -c -o hmac_sha1.o `test -f '../common/hmac_sha1.c' || echo '$(srcdir)/'`../common/hmac_sha1.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hmac_sha1.Tpo $(DEPDIR)/hmac_sha1.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/hmac_sha1.c' object='hmac_sha1.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o hmac_sha1.o `test -f '../common/hmac_sha1.c' || echo '$(srcdir)/'`../common/hmac_sha1.c + +hmac_sha1.obj: ../common/hmac_sha1.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT hmac_sha1.obj -MD -MP -MF $(DEPDIR)/hmac_sha1.Tpo -c -o hmac_sha1.obj `if test -f '../common/hmac_sha1.c'; then $(CYGPATH_W) '../common/hmac_sha1.c'; else $(CYGPATH_W) '$(srcdir)/../common/hmac_sha1.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hmac_sha1.Tpo $(DEPDIR)/hmac_sha1.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/hmac_sha1.c' object='hmac_sha1.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o hmac_sha1.obj `if test -f '../common/hmac_sha1.c'; then $(CYGPATH_W) '../common/hmac_sha1.c'; else $(CYGPATH_W) '$(srcdir)/../common/hmac_sha1.c'; fi` + +crc16.o: ../common/crc16.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crc16.o -MD -MP -MF $(DEPDIR)/crc16.Tpo -c -o crc16.o `test -f '../common/crc16.c' || echo '$(srcdir)/'`../common/crc16.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/crc16.Tpo $(DEPDIR)/crc16.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/crc16.c' object='crc16.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crc16.o `test -f '../common/crc16.c' || echo '$(srcdir)/'`../common/crc16.c + +crc16.obj: ../common/crc16.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crc16.obj -MD -MP -MF $(DEPDIR)/crc16.Tpo -c -o crc16.obj `if test -f '../common/crc16.c'; then $(CYGPATH_W) '../common/crc16.c'; else $(CYGPATH_W) '$(srcdir)/../common/crc16.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/crc16.Tpo $(DEPDIR)/crc16.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/crc16.c' object='crc16.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crc16.obj `if test -f '../common/crc16.c'; then $(CYGPATH_W) '../common/crc16.c'; else $(CYGPATH_W) '$(srcdir)/../common/crc16.c'; fi` + +mycrypto.o: ../common/mycrypto.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mycrypto.o -MD -MP -MF $(DEPDIR)/mycrypto.Tpo -c -o mycrypto.o `test -f '../common/mycrypto.c' || echo '$(srcdir)/'`../common/mycrypto.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mycrypto.Tpo $(DEPDIR)/mycrypto.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/mycrypto.c' object='mycrypto.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mycrypto.o `test -f '../common/mycrypto.c' || echo '$(srcdir)/'`../common/mycrypto.c + +mycrypto.obj: ../common/mycrypto.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mycrypto.obj -MD -MP -MF $(DEPDIR)/mycrypto.Tpo -c -o mycrypto.obj `if test -f '../common/mycrypto.c'; then $(CYGPATH_W) '../common/mycrypto.c'; else $(CYGPATH_W) '$(srcdir)/../common/mycrypto.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mycrypto.Tpo $(DEPDIR)/mycrypto.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/mycrypto.c' object='mycrypto.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mycrypto.obj `if test -f '../common/mycrypto.c'; then $(CYGPATH_W) '../common/mycrypto.c'; else $(CYGPATH_W) '$(srcdir)/../common/mycrypto.c'; fi` + config.o: ../common/config.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT config.o -MD -MP -MF $(DEPDIR)/config.Tpo -c -o config.o `test -f '../common/config.c' || echo '$(srcdir)/'`../common/config.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/config.Tpo $(DEPDIR)/config.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/config.Tpo $(DEPDIR)/config.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/config.c' object='config.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o config.o `test -f '../common/config.c' || echo '$(srcdir)/'`../common/config.c config.obj: ../common/config.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT config.obj -MD -MP -MF $(DEPDIR)/config.Tpo -c -o config.obj `if test -f '../common/config.c'; then $(CYGPATH_W) '../common/config.c'; else $(CYGPATH_W) '$(srcdir)/../common/config.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/config.Tpo $(DEPDIR)/config.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/config.Tpo $(DEPDIR)/config.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/config.c' object='config.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o config.obj `if test -f '../common/config.c'; then $(CYGPATH_W) '../common/config.c'; else $(CYGPATH_W) '$(srcdir)/../common/config.c'; fi` list.o: ../common/list.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT list.o -MD -MP -MF $(DEPDIR)/list.Tpo -c -o list.o `test -f '../common/list.c' || echo '$(srcdir)/'`../common/list.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/list.Tpo $(DEPDIR)/list.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/list.Tpo $(DEPDIR)/list.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/list.c' object='list.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o list.o `test -f '../common/list.c' || echo '$(srcdir)/'`../common/list.c list.obj: ../common/list.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT list.obj -MD -MP -MF $(DEPDIR)/list.Tpo -c -o list.obj `if test -f '../common/list.c'; then $(CYGPATH_W) '../common/list.c'; else $(CYGPATH_W) '$(srcdir)/../common/list.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/list.Tpo $(DEPDIR)/list.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/list.Tpo $(DEPDIR)/list.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/list.c' object='list.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o list.obj `if test -f '../common/list.c'; then $(CYGPATH_W) '../common/list.c'; else $(CYGPATH_W) '$(srcdir)/../common/list.c'; fi` myrand.o: ../common/myrand.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT myrand.o -MD -MP -MF $(DEPDIR)/myrand.Tpo -c -o myrand.o `test -f '../common/myrand.c' || echo '$(srcdir)/'`../common/myrand.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/myrand.Tpo $(DEPDIR)/myrand.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/myrand.Tpo $(DEPDIR)/myrand.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/myrand.c' object='myrand.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o myrand.o `test -f '../common/myrand.c' || echo '$(srcdir)/'`../common/myrand.c myrand.obj: ../common/myrand.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT myrand.obj -MD -MP -MF $(DEPDIR)/myrand.Tpo -c -o myrand.obj `if test -f '../common/myrand.c'; then $(CYGPATH_W) '../common/myrand.c'; else $(CYGPATH_W) '$(srcdir)/../common/myrand.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/myrand.Tpo $(DEPDIR)/myrand.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/myrand.Tpo $(DEPDIR)/myrand.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/myrand.c' object='myrand.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o myrand.obj `if test -f '../common/myrand.c'; then $(CYGPATH_W) '../common/myrand.c'; else $(CYGPATH_W) '$(srcdir)/../common/myrand.c'; fi` dns.o: ../common/dns.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dns.o -MD -MP -MF $(DEPDIR)/dns.Tpo -c -o dns.o `test -f '../common/dns.c' || echo '$(srcdir)/'`../common/dns.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/dns.Tpo $(DEPDIR)/dns.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dns.Tpo $(DEPDIR)/dns.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/dns.c' object='dns.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dns.o `test -f '../common/dns.c' || echo '$(srcdir)/'`../common/dns.c dns.obj: ../common/dns.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dns.obj -MD -MP -MF $(DEPDIR)/dns.Tpo -c -o dns.obj `if test -f '../common/dns.c'; then $(CYGPATH_W) '../common/dns.c'; else $(CYGPATH_W) '$(srcdir)/../common/dns.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/dns.Tpo $(DEPDIR)/dns.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dns.Tpo $(DEPDIR)/dns.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/dns.c' object='dns.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dns.obj `if test -f '../common/dns.c'; then $(CYGPATH_W) '../common/dns.c'; else $(CYGPATH_W) '$(srcdir)/../common/dns.c'; fi` mystrnlen.o: ../common/mystrnlen.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mystrnlen.o -MD -MP -MF $(DEPDIR)/mystrnlen.Tpo -c -o mystrnlen.o `test -f '../common/mystrnlen.c' || echo '$(srcdir)/'`../common/mystrnlen.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mystrnlen.Tpo $(DEPDIR)/mystrnlen.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mystrnlen.Tpo $(DEPDIR)/mystrnlen.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/mystrnlen.c' object='mystrnlen.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mystrnlen.o `test -f '../common/mystrnlen.c' || echo '$(srcdir)/'`../common/mystrnlen.c mystrnlen.obj: ../common/mystrnlen.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mystrnlen.obj -MD -MP -MF $(DEPDIR)/mystrnlen.Tpo -c -o mystrnlen.obj `if test -f '../common/mystrnlen.c'; then $(CYGPATH_W) '../common/mystrnlen.c'; else $(CYGPATH_W) '$(srcdir)/../common/mystrnlen.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mystrnlen.Tpo $(DEPDIR)/mystrnlen.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mystrnlen.Tpo $(DEPDIR)/mystrnlen.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/mystrnlen.c' object='mystrnlen.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mystrnlen.obj `if test -f '../common/mystrnlen.c'; then $(CYGPATH_W) '../common/mystrnlen.c'; else $(CYGPATH_W) '$(srcdir)/../common/mystrnlen.c'; fi` memdump.o: ../common/memdump.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT memdump.o -MD -MP -MF $(DEPDIR)/memdump.Tpo -c -o memdump.o `test -f '../common/memdump.c' || echo '$(srcdir)/'`../common/memdump.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/memdump.Tpo $(DEPDIR)/memdump.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/memdump.Tpo $(DEPDIR)/memdump.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/memdump.c' object='memdump.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o memdump.o `test -f '../common/memdump.c' || echo '$(srcdir)/'`../common/memdump.c memdump.obj: ../common/memdump.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT memdump.obj -MD -MP -MF $(DEPDIR)/memdump.Tpo -c -o memdump.obj `if test -f '../common/memdump.c'; then $(CYGPATH_W) '../common/memdump.c'; else $(CYGPATH_W) '$(srcdir)/../common/memdump.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/memdump.Tpo $(DEPDIR)/memdump.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/memdump.Tpo $(DEPDIR)/memdump.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/memdump.c' object='memdump.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o memdump.obj `if test -f '../common/memdump.c'; then $(CYGPATH_W) '../common/memdump.c'; else $(CYGPATH_W) '$(srcdir)/../common/memdump.c'; fi` base64.o: ../common/base64.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT base64.o -MD -MP -MF $(DEPDIR)/base64.Tpo -c -o base64.o `test -f '../common/base64.c' || echo '$(srcdir)/'`../common/base64.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/base64.Tpo $(DEPDIR)/base64.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/base64.Tpo $(DEPDIR)/base64.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/base64.c' object='base64.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o base64.o `test -f '../common/base64.c' || echo '$(srcdir)/'`../common/base64.c base64.obj: ../common/base64.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT base64.obj -MD -MP -MF $(DEPDIR)/base64.Tpo -c -o base64.obj `if test -f '../common/base64.c'; then $(CYGPATH_W) '../common/base64.c'; else $(CYGPATH_W) '$(srcdir)/../common/base64.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/base64.Tpo $(DEPDIR)/base64.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/base64.Tpo $(DEPDIR)/base64.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/base64.c' object='base64.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o base64.obj `if test -f '../common/base64.c'; then $(CYGPATH_W) '../common/base64.c'; else $(CYGPATH_W) '$(srcdir)/../common/base64.c'; fi` @@ -363,45 +454,49 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -422,13 +517,17 @@ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -460,6 +559,7 @@ distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -480,6 +580,8 @@ html: html-am +html-am: + info: info-am info-am: @@ -488,18 +590,28 @@ install-dvi: install-dvi-am +install-dvi-am: + install-exec-am: install-binPROGRAMS install-html: install-html-am +install-html-am: + install-info: install-info-am +install-info-am: + install-man: install-pdf: install-pdf-am +install-pdf-am: + install-ps: install-ps-am +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -536,6 +648,7 @@ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-binPROGRAMS + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru dns2tcp-0.4.dfsg/client/options.c dns2tcp-0.5.2/client/options.c --- dns2tcp-0.4.dfsg/client/options.c 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/client/options.c 2010-06-02 14:30:32.000000000 +0100 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: options.c,v 1.13 2007/05/29 16:46:50 dembour Exp $ +** $Id: options.c,v 1.26.4.8 2010/06/02 13:30:32 collignon Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -18,35 +18,71 @@ ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/** + * @file options.c + * @brief deal command line options + */ + #include #include #include + #ifndef _WIN32 #include #include +#else +#include "mywin32.h" +#include +extern int optind; +extern char *optarg; +int getopt(int, char * const *, const char *); #endif + #include "client.h" #include "my_config.h" #include "debug.h" +#include "rr.h" + +#define MAX_LINE_LEN 512 +/** + * @brief Usage + * @param[in] program name + **/ static void usage(char *name) { fprintf(stderr, "dns2tcp v%s ( http://www.hsc.fr/ )\n" - "Usage :%s [-c] [-z zone] [-d debug_level] [-l local-port] [-r ressource] [-f config] [server] \n" - "\t-c\t: force use of compression\n" - "\t-z\t: domain to use (mandatory)\n" - "\t-d\t: debug_level (1, 2 or 3)\n" - "\t-r\t: ressource to access\n" - "\t-f\t: configuration file\n" - "\t-l\t: local port to bind (mandatory if ressource defined)\n" - "\tserver\t: DNS server to use (mandatory)\n" - "\tIf no ressources are specified, available ressources will be printed\n", + "Usage : %s [options] [server] \n" + "\t-c \t: enable compression\n" + "\t-z \t: domain to use (mandatory)\n" + "\t-d <1|2|3>\t: debug_level (1, 2 or 3)\n" + "\t-r \t: resource to access\n" + "\t-k \t: pre-shared key\n" + "\t-f \t: configuration file\n" +#ifdef _WIN32 + "\t-l \t: local port to bind (mandatory if resource defined without program )\n" +#else + "\t-l \t: local port to bind, '-' is for stdin (mandatory if resource defined without program )\n" +#endif + "\t-e \t: program to execute\n" + "\t-t \t: max DNS server's answer delay in seconds (default is 3)\n" + "\t-T \t: DNS request type (default is TXT)\n" + "\tserver\t: DNS server to use\n" + "\tIf no resources are specified, available resources will be printed\n", VERSION, name); } +/** + * @brief check for missing parameters + * @param[in] conf configuration + * @retval 0 on success + * @retval -1 on error + **/ + static int check_mandatory_param(t_conf *conf) { if (!conf->dns_server) @@ -59,14 +95,23 @@ fprintf(stderr, "Missing parameter : need a dns zone \n"); return (-1); } - if ((conf->ressource) && (!conf->local_port)) - { - fprintf(stderr, "Missing parameter : need a local port \n"); - return (-1); - } + if (conf->resource) + if (! (conf->local_port || conf->cmdline || conf->output_file || conf->use_stdin)) + { + fprintf(stderr, "Missing parameter : need a local port or a program to execute\n"); + return (-1); + } return (0); } +/** + * @brief copy a parameter into conf structure + * @param[in] conf configuration + * @param[in] token parameter + * @param[in] value value + * @retval 0 on success + * @retval -1 on error + **/ static int client_copy_param(void *my_conf, char *token, char *value) { @@ -77,32 +122,115 @@ if (token) { if (!strcmp(token, "local_port")) - return ((conf->local_port)? 0 : (conf->local_port = atoi(value))); - if (!strcmp(token, "compression")) - return ((conf->use_compression) ? 0 : (conf->use_compression = atoi(value))); + { + if (*value != '-') + return ((conf->local_port)? 0 : (conf->local_port = atoi(value))); + return ((conf->local_port)? 0 : (conf->use_stdin = 1)); + } + if (!strcmp(token, "enable_compression")) + return ((conf->disable_compression) ? 0 : (conf->disable_compression = !atoi(value))); if (!strcmp(token, "debug_level")) return (debug ? 0 : (debug = atoi(value))); - if (!(buffer = malloc(strlen(value)+1))) + if (!strcmp(token, "query_size")) + return (conf->query_size ? 0 : (debug = atoi(value))); + if (!(buffer = strdup(value))) { fprintf(stderr, "Memory error\n"); exit (-1); } - strcpy(buffer, value); if (!strcmp(token, "server")) return ((int) (conf->dns_server ? 0 : !!(conf->dns_server = buffer))); if (!strcmp(token, "domain")) return ((int) (conf->domain ? 0 : !!(conf->domain = buffer))); - if (!strcmp(token, "secret")) - return ((int) (conf->secret ? 0 : !!(conf->secret = buffer))); + if (!strcmp(token, "key")) + return ((int) (conf->key ? 0 : !!(conf->key = buffer))); + if (!strcmp(token, "resource")) + return ((int) (conf->resource ? 0 : !!(conf->resource = buffer))); if (!strcmp(token, "ressource")) - return ((int) (conf->ressource ? 0 : !!(conf->ressource = buffer))); + { + fprintf(stderr, "Warning : Incorrect ressource syntax in config file (should be resource)\n"); + return ((int) (conf->resource ? 0 : !!(conf->resource = buffer))); + } } if (buffer) free(buffer); return (-1); } +/** + * @brief get DNS from resolv.conf + * @param[in] conf configuration + * @retval 0 on success + * @retval -1 on error (actually not used) + **/ + +#ifndef _WIN32 +static int read_resolv(t_conf *conf) +{ + FILE *resolv; + char buffer[MAX_LINE_LEN+1]; + + if (!(resolv = fopen(RESOLV_CONF, "r"))) + return (-1); + while (get_next_line(buffer, MAX_LINE_LEN, resolv) != -1) + { + if (!strncmp("nameserver", buffer, 10)) + { + conf->dns_server = strdup(buffer + 10); + fprintf(stderr, "No DNS given, using %s (first entry found in resolv.conf)\n", conf->dns_server); + return (fclose(resolv)); + } + } + fclose(resolv); + return (-1); +} +#else +static int read_resolv(t_conf *conf) +{ + ULONG size; + FIXED_INFO fi, *pfi; + + size = sizeof(fi); + if (GetNetworkParams(&fi, &size) != ERROR_BUFFER_OVERFLOW) + { + pfi = &fi; + } + else + { + pfi = malloc(size); + if (!pfi) + return -1; + } + + if (GetNetworkParams(pfi, &size) != NO_ERROR) + { + fprintf(stderr, "error: failed to get network parameters (%lu)\n", + GetLastError()); + if (pfi != &fi) + free(pfi); + return -1; + } + if (strlen(pfi->DnsServerList.IpAddress.String) > 0) + { + conf->dns_server = strdup(pfi->DnsServerList.IpAddress.String); + fprintf(stderr, "No DNS given, using %s (first system preferred DNS server)\n", conf->dns_server); + } + else + fprintf(stderr, "No DNS configured in the system\n"); + if (pfi != &fi) + free(pfi); + return 0; +} +#endif +/** + * @brief get options for command line and file configuration + * @param[in] argc number command line arguments + * @param[in] argv command line arguments + * @param[in] conf configuration + * @retval 0 on success + * @retval -1 on error + **/ int get_option(int argc, char **argv, t_conf *conf) { @@ -112,16 +240,20 @@ memset(conf, 0, sizeof(t_conf)); memset(config_file, 0, sizeof(config_file)); debug = 0; + conf->conn_timeout = 3; + conf->sd_tcp = -1; + conf->disable_compression = 1; + conf->query_functions = get_rr_function_by_name("TXT"); while (1) { - c = getopt (argc, argv, "chv:z:s:d:l:r:f:"); + c = getopt (argc, argv, "ch:z:T:t:s:d:l:r:f:e:o:k:"); if (c == -1) break; switch (c) { case 'f': if (strlen(optarg) > (CONFIG_FILE_LEN - 10)) return (-1); - strcpy(config_file, optarg); + strncpy(config_file, optarg, CONFIG_FILE_LEN-1); break; case 'z': conf->domain = optarg; @@ -129,33 +261,63 @@ case 'd': debug = atoi(optarg); break; + case 'e': + conf->cmdline = optarg; + break; + case 'o': + conf->output_file = optarg; + break; + case 'k': + conf->key = optarg; + break; case 's': - conf->secret = optarg; + conf->query_size = atoi(optarg); break; case 'r': - conf->ressource = optarg; + conf->resource = optarg; break; case 'l': +#ifndef _WIN32 + if (*optarg == '-') + conf->use_stdin = 1; + else +#endif conf->local_port = atoi(optarg); - break; + break; case 'c': - conf->use_compression = 1; + conf->disable_compression = 0; break; - case 'v': - usage(argv[0]); - return (-1); + case 'T': + if (!(conf->query_functions = get_rr_function_by_name(optarg))) + { + fprintf(stderr, "Invalid query type %s\n", optarg); + return (-1); + } + break; + case 't': + c = atoi(optarg); + if ((c <= 0) || (c > 4*60)) + { + fprintf(stderr, + "connection timeout must be within [1..240] seconds\n"); + return (-1); + } + conf->conn_timeout = (uint8_t) c; break; case 'h': default: - usage(argv[0]); - return (-1); + usage(argv[0]); + return (-1); } } if (optind < argc) conf->dns_server = argv[optind]; - if ((*config_file) || (!conf->domain)) - /* we don't care if this fails if options are passed with argv[] */ + if ((*config_file) || (!conf->domain)) + /* we don't care if it read_config fails, config file may not + exist */ read_config(config_file, conf, client_copy_param, ".dns2tcprc"); + if (!conf->dns_server) + read_resolv(conf); if (check_mandatory_param(conf) == -1) { usage(argv[0]); diff -Nru dns2tcp-0.4.dfsg/client/queue.c dns2tcp-0.5.2/client/queue.c --- dns2tcp-0.4.dfsg/client/queue.c 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/client/queue.c 2010-06-02 14:54:29.000000000 +0100 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: queue.c,v 1.17 2007/06/18 09:08:34 dembour Exp $ +** $Id: queue.c,v 1.31.4.8 2010/06/02 13:54:29 collignon Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -18,16 +18,15 @@ ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/** + * @file client/queue.c + * @brief messages queue management + */ + #include #include #include #include -#ifndef _WIN32 -#include -#include -#else -#include "mywin32.h" -#endif #include "dns.h" #include "list.h" @@ -36,57 +35,77 @@ #include "requests.h" #include "myrand.h" #include "debug.h" +#include "rr.h" +#include "crc16.h" +#include "socket.h" + +#ifdef _WIN32 +static int gettimeofday(struct timeval *tv, void *bla) +{ + tv->tv_sec = (long) time(NULL); + tv->tv_usec = 0; + return 0; +} +#endif -t_list *init_queue() +/** + * @brief initialize client messages queue + */ +t_list *init_queue(void) { - int nb; - t_list *first; - t_list *queue; + int nb; + t_list *queue; - if (!(first = malloc(sizeof(t_list)))) + if (!(queue = calloc(QUEUE_SIZE, sizeof(t_list)))) return (0); - queue = first; - memset(first, 0, sizeof(t_list)); - for (nb = QUEUE_SIZE - 1; nb; nb--) - { - if (!(queue->next = malloc(sizeof(t_list)))) - return (0); - memset(queue->next, 0, sizeof(t_list)); - queue->next->next = 0; - queue = queue->next; - } - return (first); + for (nb=0; nb < QUEUE_SIZE-1; nb++) + queue[nb].next = &queue[nb+1]; + queue[QUEUE_SIZE-1].next = NULL; + + return (queue); } -int delete_queue(t_list *queue) -{ - t_list *tmp; - t_list *tmp2; +/** + * @brief delete client messages queue + * @param[in] queue client queue + * @retval 0 on success + * @retval -1 on error + */ +int delete_queue(t_list *queue) +{ if (!queue) return (-1); - tmp = queue; - while (tmp) - { - tmp2 = tmp; - tmp = tmp2->next; - free(tmp2); - } + free(queue); return (0); } + +/** + * @brief send an specific DNS request from the queue + * @param[in] conf configuration + * @param[in] client list item + * @param[in] queue item to send + * @retval 0 on success + * @retval -1 on error + * @note update the timeout timer + **/ + int queue_send(t_conf *conf, t_simple_list *client, t_list *queue) { int out_len; struct timeval tv; +#if 0 + if (conf->query_size) + queue->len = add_edns(conf, queue->data, queue->len); +#endif if ((out_len = sendto(conf->sd_udp, queue->data, queue->len, - 0, (struct sockaddr *)&(client->control.peer), + 0, (struct sockaddr *)&(conf->sa), sizeof(struct sockaddr))) == -1) { queue->status = FREE; MYERROR("send error\n"); - // perror(""); return (-1); } if (gettimeofday(&tv, NULL)) @@ -99,52 +118,86 @@ return (0); } + + +/** + * @brief resend an specific DNS request from the queue + * @param[in] conf configuration + * @param[in] client list item + * @param[in] queue item to send + * @retval 0 on success + * @retval -1 on error + * @note update the request ID but keep the previous one for delayed reply + **/ + int queue_resend(t_conf *conf, t_simple_list *client, t_list *queue) { struct dns_hdr *hdr; hdr = (struct dns_hdr *)queue->data; hdr->id = myrand(); + queue->peer.old_id = queue->peer.id; queue->peer.id = hdr->id; - DPRINTF(3, "Queue resend seq %d id = 0x%x \n", queue->info.num_seq, queue->peer.id); + DPRINTF(2, "Queue resend seq %d id = 0x%x \n", queue->info.num_seq, ntohs(queue->peer.id)); queue_send(conf, client, queue); return (0); } + +/** + * @brief check for unanswered queries, resend them + * @param[in] conf configuration + * @retval 0 on success + * @retval -1 on error + **/ int check_for_resent(t_conf *conf) { t_simple_list *client; struct timeval tv; t_list *queue; - +#ifdef _WIN32 + int need_event = 0; +#endif if (gettimeofday(&tv, NULL)) { MYERROR("Timer error"); return (-1); } + for (client = conf->client; client; client = client->next) for (queue = client->queue; queue; queue = queue->next) { - if (queue->status == SENT) + if ((queue->status == SENT) && (queue->timeout.tv_sec < tv.tv_sec)) { - if (queue->timeout.tv_sec < tv.tv_sec) - // (queue->timeout.tv_usec < tv.tv_usec)) - { - queue_resend(conf, client, queue); - } +#ifdef _WIN32 + need_event = 1; +#endif + queue_resend(conf, client, queue); } } +#ifdef _WIN32 + if (need_event) + SetEvent(conf->event_udp); +#endif return (0); } +/** + * @brief dump the queue + * @param[in] client list item + * @retval 0 on success + * @retval -1 on error + * @note for debug only + **/ + void queue_dump(t_simple_list *client) { t_list *queue; if (debug > 1) { - printf("Client 0x%x :\n", client->cookie); + printf("Client 0x%x :\n", client->session_id); printf ("queue dump :"); printf ("n.pen :%d d.pend %d {seq:seq_ack:status}\n", client->control.nop_pending, @@ -161,6 +214,14 @@ } } +/** + * @brief rotate the circular buffer + * @param[in] client list item + * @param[in] new_root where to rotate + * @retval 0 on success + * @retval -1 on error + **/ + int queue_change_root(t_simple_list *client, t_list *new_root) { t_list *end; @@ -187,29 +248,80 @@ end->status = FREE; end->peer.ack_seq = 0; } - return (0); + return (0); } -/* should analyse data before copy */ +int write_to_client(t_conf *conf, t_simple_list *client, const char *buffer, int total_len) +{ + ssize_t ret; +#ifdef _WIN32 + DWORD w; +#endif + +#ifndef _WIN32 + ret = write(client->fd_wo, &buffer[PACKET_LEN], total_len - PACKET_LEN); + if (ret != total_len - PACKET_LEN) + { + MYERROR("Fail to send data )\n"); + delete_client(conf, client); + return (-1); + } +#else + if (client->pid == (process_t)-1) + { + ret = write(client->fd_wo, &buffer[PACKET_LEN], total_len - PACKET_LEN); + if (ret != total_len - PACKET_LEN) + { + MYERROR("Fail to send data (err=%lu, handle=%x)\n", GetLastError(), client->fd_wo); + delete_client(conf, client); + return (-1); + } + } + else + { + w = 0; + if (!WriteFile((HANDLE)client->fd_wo, &buffer[PACKET_LEN], total_len - PACKET_LEN, &w, NULL)) + { + DPRINTF(1, "Fail to send data (err=%lu, handle=%x, w=%lu)\n", GetLastError(), client->fd_wo, w); + return (-1); + } + } +#endif + return (0); + +} +/** + * @brief extract data from a DNS reply and write it to the correct socket + * @param[in] conf configuration + * @param[in] client list item + * @param[in] queue element to decode + * @retval 0 on success + * @retval -1 on error + **/ int extract_data(t_conf *conf, t_simple_list *client, t_list *queue) { - char buffer[MAX_REQ_LEN - DNS_HDR_SIZE - REQ_HDR_SIZE]; - char name[MAX_REQ_LEN - DNS_HDR_SIZE - REQ_HDR_SIZE]; - struct rr_hdr *reply; + char buffer[MAX_DNS_LEN + 1 - DNS_HDR_SIZE - RR_HDR_SIZE]; t_packet *packet; int len; uint16_t seq_tmp; + t_request req; + int count = 0, total_len = 0; - if (!(reply = get_reply(queue->data, queue->len))) - return (-1); - dns_simple_decode(JUMP_RR_HDR(reply), buffer, - DECODED_LEN((queue->len - (int) (JUMP_RR_HDR(reply) - queue->data)) + 1)); - - DPRINTF(3, "dns_decode [%d] = %s\n",queue->info.num_seq, buffer); - if ((len = base64_decode((unsigned char *)name, buffer))) + /* + TODO put t_request in queue ? + */ + memcpy(req.req_data, queue->data, queue->len); + req.len = queue->len; + req.req_data[req.len]=0; + req.request_functions = conf->query_functions; + + DPRINTF(3, "decoding seq [%d]\n",queue->info.num_seq); + while ((len = req.request_functions->rr_decode_next_reply(&req, &buffer[total_len], sizeof(buffer) - total_len, count++))) + total_len += len; + if (total_len) { - packet = (t_packet *)name; + packet = (t_packet *)buffer; seq_tmp = ntohs(packet->seq); packet->seq = seq_tmp; queue->info.num_seq = packet->seq; if (packet->type == DESAUTH) @@ -224,25 +336,34 @@ client->control.nop_pending--; if ((packet->type & DATA) != DATA) return (0); - if ((len - PACKET_LEN) < 0) + if (total_len < PACKET_LEN) { - MYERROR("bug ! reply len = %d\n", len); - printf("encode = %s -> %s\n ... dumping reply and calling while(1); \n", - (char *)(JUMP_RR_HDR(reply)), (char *)buffer); + MYERROR("bug ! reply len = %d\n", total_len); memdump(queue->data, queue->len); while(1); } - DPRINTF(2, "Write [%d] %d\n", packet->seq, len - PACKET_LEN); - write(client->sd_tcp, &name[PACKET_LEN], len - PACKET_LEN); + DPRINTF(2, "Client 0x%x : write [%d] %d on fd %d, crc = 0x%x \n", + client->session_id, packet->seq, total_len - (int)PACKET_LEN, client->fd_wo, + crc16( (const char *)&buffer[PACKET_LEN], total_len - PACKET_LEN) + ); + return (write_to_client(conf, client, (const char *) buffer, total_len)); } return (0); } +/** + * @brief find next space in the circular buffer + * @param[in] client list item + * @retval element found + * @retval -1 on error + **/ + t_list *queue_find_empty_data_cell(t_simple_list *client) { t_list *queue; queue = client->queue; + DPRINTF(2, "queue = 0x%p\n", queue); while ((queue) && (queue->status != FREE)) queue = queue->next; if (!queue) @@ -254,6 +375,14 @@ return (queue); } +/** + * @brief put ACK flag in a free future request + * @param[in] queue + * @param[in] seq seq number to acknoledge + * @retval seq number on success + * @retval -1 on error + **/ + int queue_prepare_ack(t_list *queue, uint16_t seq) { while (queue) @@ -265,6 +394,16 @@ return (0); } + +/** + * @brief flush incoming reply + * @param[in] conf configuration + * @param[in] client list item + * @retval 0 on success + * @retval -1 on error + * @note rotate the circular buffer when done + **/ + int queue_flush(t_conf *conf, t_simple_list *client) { t_list *queue; @@ -288,24 +427,36 @@ queue = queue->next; free_cell = free_cell->next; } - if (queue == client->queue) + /* FIXME queue can be null ? */ + if ((!queue) || (queue == client->queue)) return (-1); return (queue_change_root(client, queue)); } +/** + * @brief put NOP in future requests + * @param[in] conf configuration + * @param[in] client list item + * @retval 0 on success + * @retval -1 on error + **/ int queue_put_nop(t_conf *conf, t_simple_list *client) { t_list *queue; int len; struct dns_hdr *hdr; + t_request req; + req.len = 0; while (client->control.nop_pending < NOP_SIZE) { if ((queue = queue_find_empty_data_cell(client))) { - client->num_seq++; - len = create_req_data(conf, client, queue, 0, 0); + /* num seq must not be null */ + if (!++client->num_seq) + client->num_seq++; + len = push_req_data(conf, client, queue, &req); if (queue_send(conf, client, queue) == -1) { client->num_seq--; @@ -316,75 +467,173 @@ queue->status = SENT; hdr = (struct dns_hdr *)queue->data; queue->peer.id = hdr->id; + queue->peer.old_id = 0; return (0); } } return (-1); } - /* TODO check packet validity */ -int queue_get_udp_data(t_conf *conf, t_simple_list *client) +/** + * @brief deal a DNS answer + * @param[in] conf configuration + * @param[in] buffer DNS request + * @param[in] len size of the request + * @retval 0 on success + * @retval -1 on error + **/ + +int queue_get_udp_data(t_conf *conf, char *buffer, int len) { - char buffer[MAX_REQ_LEN + 1]; struct dns_hdr *hdr; - int len; t_list *queue; + t_simple_list *client; - buffer[MAX_REQ_LEN] = 0; - len = read(conf->sd_udp, buffer, MAX_REQ_LEN); + client = conf->client; hdr = (struct dns_hdr *) buffer; for (; client; client = client->next) { for (queue = client->queue; queue; queue = queue->next) { - if ((queue->status == SENT) && (queue->peer.id == hdr->id)) + if ( (queue->status == SENT) && ( (queue->peer.id == hdr->id) + || (queue->peer.old_id && (queue->peer.old_id == hdr->id)))) { if (hdr->rcode) { - if (hdr->rcode == RCODE_NAME_ERR) + if ((hdr->rcode == RCODE_NAME_ERR) || (hdr->rcode == RCODE_SRV_FAILURE)) { /* Reply already sent and acked by server Bug ? */ if (client->control.cumul_errors++ > MAX_CLIENT_ERROR) { - DPRINTF(1, "Too many packet lost by server. Reseting connection ...\n"); + DPRINTF(1, "Too many packets lost. Reseting connection ...\n"); return (delete_client(conf, client)); } } - DPRINTF(2, "Connection reject code %d id = 0x%x (%s)\n", hdr->rcode, hdr->id, + DPRINTF(2, "Connection reject code %d id = 0x%x (%s) trying to continue\n", hdr->rcode, ntohs(hdr->id), (hdr->rcode == RCODE_REFUSED) ? "Connection Lost" : /* state not found */ + (hdr->rcode == RCODE_SRV_FAILURE) ? "Server failure" : /* state not found */ (hdr->rcode == RCODE_NAME_ERR) ? "Query not found or already done" : "" /* already replied */ ); return (0); } - DPRINTF(2, "Received [%d] id=0x%x\n", queue->info.num_seq, hdr->id); + DPRINTF(2, "Received [%d]%s id=0x%x\n", queue->info.num_seq, (queue->peer.id == hdr->id) ? "" :" old", + ntohs(hdr->id)); client->control.cumul_errors = 0; memcpy(queue->data, buffer, len); - queue->data[len] = 0; queue->status = RECEIVED; + queue->data[len] = 0; queue->len = len; - queue_flush(conf, client); + if (queue_flush(conf, client) && conf->local_port) + /* check TCP socket only if we have bind a port */ + return (!socket_is_valid(conf->sd_tcp)); return (0); } } } - DPRINTF(2, "received reply for unknow request 0x%x \n", hdr->id); + DPRINTF(2, "received reply for unknow request 0x%x \n", ntohs(hdr->id)); return (0); } +#ifdef _WIN32 +static int windows_read_pipe(t_conf *conf, t_simple_list *client, t_list *queue, t_request *req, size_t max_len) +{ + DWORD len; + + len = 0; + if (client->control.io_pending) + { + if (!GetOverlappedResult((HANDLE)client->fd_ro, &client->control.aio, &len, FALSE)) + { + DPRINTF(1, "failed to complete async read (%lu)\n", GetLastError()); + req->len = -1; + push_req_data(conf, client, queue, req); + queue_send(conf, client, queue); + return -1; + } + // previous read has completed + client->control.io_pending = 0; + SetEvent(client->control.aio.hEvent); + } + else + { + ZeroMemory(req, sizeof(t_request)); + if (!ReadFile((HANDLE)client->fd_ro, &req->req_data[PACKET_LEN], + max_len, &len, &client->control.aio)) + { + if (GetLastError() == ERROR_IO_PENDING) { + // read would block + client->control.io_pending = 1; + return 0; + } + DPRINTF(1, "failed to read pipe data (%lu)\n", GetLastError()); + // req->len = -1; + // push_req_data(conf, client, queue, req); + // queue_send(conf, client, queue); + return -1; + } + // read has completed right now + client->control.io_pending = 0; + SetEvent(client->control.aio.hEvent); + } + if (!len) + { + DPRINTF(1, "THIS IS A FUCKING BUG!\n"); + exit (0); + } + return (len); +} +#endif + +#ifdef _WIN32 +static int windows_client_read(t_conf *conf, t_simple_list *client, t_list *queue, t_request *req, size_t max_len) +{ + int len; + + if (client->pid != (process_t)-1) + return (windows_read_pipe(conf, client, queue, req, max_len)); + + if ((len = read(client->fd_ro, &req->req_data[PACKET_LEN], max_len)) <= 0) + { + if (GetLastError() == WSAEWOULDBLOCK) + { + ResetEvent(client->control.event); + return (0); + } + return (-1); + } + return (len); +} +#endif + +/** + * @brief convert incoming TCP data to a DNS request + * @param[in] conf configuration + * @param[in] client list item + * @retval 0 on success + * @retval -1 on error + **/ + + int queue_get_tcp_data(t_conf *conf, t_simple_list *client) { t_list *queue; int len; - char buffer[MAX_HOST_NAME_ENCODED + 1]; size_t max_len; struct dns_hdr *hdr; - - max_len = MAX_QNAME_DATA(conf->domain) - PACKET_LEN; +#ifndef _WIN32 + t_request req; +#else + static t_request req; +#endif + + + /* 3 octets reserved for alter packet */ + max_len = MAX_QNAME_DATA(conf->domain) - PACKET_LEN - 3; /* Should exit if !queue */ if ((queue = queue_find_empty_data_cell(client))) { @@ -394,21 +643,35 @@ DPRINTF(1, "Warning Window size full waiting to flush ...\n"); return (0); } - client->num_seq++; - if (!((len = read(client->sd_tcp, buffer, max_len)) > 0)) +#ifdef _WIN32 + + if ((req.len = windows_client_read(conf, client, queue, &req, max_len)) == 0) + return (0); +#else + req.len = read(client->fd_ro, &req.req_data[PACKET_LEN], max_len); +#endif + if (req.len <= 0) { - create_req_data(conf, client, queue, 0, -1); + req.len = -1; + push_req_data(conf, client, queue, &req); queue_send(conf, client, queue); return (-1); } - DPRINTF(3, "Read tcp %d bytes on sd %d\n", len, client->sd_tcp); - len = create_req_data(conf, client, queue, buffer, len); + /* num_seq must not be null */ + if (!++client->num_seq) + client->num_seq++; + + DPRINTF(3, "Read tcp %d bytes on sd %d, crc = 0x%x\n", req.len, client->fd_ro, + crc16((const char *)&req.req_data[PACKET_LEN], req.len) + ); + len = push_req_data(conf, client, queue, &req); if (queue_send(conf, client, queue) == -1) return (-1); client->control.data_pending++; queue->peer.type = DATA; hdr = (struct dns_hdr *) queue->data; queue->peer.id = hdr->id; + queue->peer.old_id = 0; queue->status = SENT; } return (0); diff -Nru dns2tcp-0.4.dfsg/client/requests.c dns2tcp-0.5.2/client/requests.c --- dns2tcp-0.4.dfsg/client/requests.c 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/client/requests.c 2010-06-02 15:30:00.000000000 +0100 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: requests.c,v 1.13 2007/06/18 09:08:34 dembour Exp $ +** $Id: requests.c,v 1.20.4.7 2010/06/02 14:30:00 collignon Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -31,125 +31,260 @@ #include "myerror.h" #include "requests.h" #include "debug.h" +#include "socket.h" +#include "dns.h" +#include "rr.h" + +/** + * @brief create the DNS header + * @param[in] conf configuration + * @param[in] hdr DNS header + **/ -void create_req_hdr(void *buffer, t_conf *conf) -{ - struct dns_hdr *hdr; - hdr = (struct dns_hdr *)buffer; - memset(buffer, 0, sizeof(struct dns_hdr)); +static void create_req_hdr(t_conf *conf, struct dns_hdr *hdr) +{ + memset(hdr, 0, sizeof(struct dns_hdr)); hdr->id = myrand(); hdr->rd = 1; } -int add_query(struct dns_hdr *hdr, void *end, char *name, +/** + * @brief Add a request into the DNS packet + * @param[in] hdr DNS header address + * @param[out] where memory address to write + * @param[in] name data to copy + * @param[in] conf configuration + * @param[in] type request type + * @retval 0 on success + * @retval -1 on error + **/ + +static int add_query(struct dns_hdr *hdr, void *where, char *name, t_conf *conf, uint16_t type) { struct req_hdr *req; - size_t len; + size_t query_len; + int actual_len; - len = strlen(name); - if ((len > MAX_HOST_NAME_ENCODED) - || ( (((char *)end) + len + REQ_HDR_SIZE + 1) > ((char *)hdr + MAX_REQ_LEN))) - return (-1); - if (MAX_REQ_LEN < (sizeof(struct dns_hdr) + - sizeof (struct req_hdr) + len + len/63 + 1)) + + query_len = strlen(name) + 1; + actual_len = where - (void *)hdr; + if ((query_len + actual_len + RR_HDR_SIZE) > MAX_DNS_LEN) return (-1); PUT_16(&hdr->qdcount, GET_16(&hdr->qdcount)+1); - strcpy(end , name); - req = (struct req_hdr *) (((char *) end) + strlen(end) + 1); + strcpy(where , name); + req = (struct req_hdr *) (where + query_len); PUT_16(&req->qtype, type); PUT_16(&req->qclass, CLASS_IN); - return ((int) (JUMP_REQ_HDR(req) - (char *)(hdr))); } -void data2qname(void *data,int len, void *output, t_conf *conf) +/** + * @brief encode data in qname format + * @param[in] req request + * @param[out] output adress to write + **/ + +static void data2qname(t_request *req, void *output) { - base64_encode((char *)data,output, len); + base64_encode((char *)req->req_data, output, req->len); strcat(output, "."); - strcat(output, conf->domain); - DPRINTF(3, "Data was %s\n", (char *)output); + strcat(output, req->domain); +#ifndef _WIN32 + DPRINTF(3, "Query is %s len %zd\n", (char *)output, strlen(output)); +#else + DPRINTF(3, "Query is %s len %d\n", (char *)output, strlen(output)); +#endif dns_encode(output); } -int result2data(void *data, char *output, int len) +/** + * @brief check if query is compressed + * @param[in] DNS request + * @param[in] len request size + * @retval if it's compressed + **/ + +uint8_t query_is_compressed(char *buffer, uint16_t len) { - char buffer[MAX_REQ_LEN + 1]; - - if (len > MAX_REQ_LEN) - return (-1); - strncpy(buffer,data, len); - buffer[len] = 0; - len = base64_decode((unsigned char *)output, buffer); - output[len] = 0; - return (len); + char *name; + struct dns_hdr *hdr; + + hdr = (struct dns_hdr *) buffer; + if (!(name = jump_end_query(buffer, GET_16(&hdr->qdcount), len))) + return (0); + return ((*name & COMPRESS_FLAG_CHAR) == COMPRESS_FLAG_CHAR); } -struct rr_hdr *get_reply(void *data, int len) +/** + * @brief create a DNS request + * @param[in] conf configuration + * @param[out] output address to write + * @param[in] req DNS request + * @retval size written + **/ + +static int create_request(t_conf *conf, void *output, t_request *req) { + char name[MAX_HOST_NAME_ENCODED + 1]; struct dns_hdr *hdr; - struct rr_hdr *reply; - char *ptr; - - hdr = (struct dns_hdr *) data; - if (!(reply = jump_end_query(data, GET_16(&hdr->qdcount), len))) + int len; + + hdr = (struct dns_hdr *) output; + create_req_hdr(conf, hdr); + if ((ENCODED_LEN(BASE64_SIZE(req->len)) + strlen(req->domain) + 2 ) > (MAX_HOST_NAME_ENCODED)) { - MYERROR("parsing error"); +#ifndef _WIN32 + fprintf(stderr, "send_query : data too long (%d bytes -> %zd bytes)\n", +#else + fprintf(stderr, "send_query : data too long (%d bytes -> %d bytes)\n", +#endif + req->len, ENCODED_LEN(BASE64_SIZE(req->len)) + strlen(req->domain) + 2 ); return (0); } - reply = jump_qname(reply); - ptr = (char *)(JUMP_RR_HDR(reply)); - if (((ptr - (char *) hdr) + GET_16(&reply->rdlength)) > len) + DPRINTF(3, "Sending dns id = 0x%x\n", ntohs(hdr->id)); + data2qname(req, &name); + if ((len = add_query((struct dns_hdr *)output, JUMP_DNS_HDR(hdr), name, conf, req->type)) == -1) + return (0); + return (len); +} + + +/** + * @brief send a query + * @param[in] conf configuration + * @param[in] req request to send + **/ + +uint16_t send_query(t_conf *conf, t_request *req) +{ + char buffer[MAX_DNS_LEN + 1]; + int len; + struct dns_hdr *hdr; + + hdr = (struct dns_hdr*) &buffer; + len = create_request(conf, buffer, req); + if ((sendto(conf->sd_udp, buffer, len, 0, (struct sockaddr *)&(conf->sa), sizeof(struct sockaddr))) == -1) { - MYERROR("Packet malformed truncated ?\n"); - memdump(data, len); + perror(""); + MYERROR("Sendto error (len = %d)", len); return (0); } - ptr[GET_16(&reply->rdlength)] = 0; - return (reply); + return (hdr->id); } -int create_req_data(t_conf *conf, t_simple_list *client, t_list *queue, char *data, int len) +/** + * @brief transmit an receive a request + * @param[in] conf configuration + * @param[in] request request to send + * @param[out] output where to write decoded answer + * @param[in] max_len maximum answer len + * @retval size written + * @retval -1 on error + **/ + +int transceive_query(t_conf *conf, t_request *request, char *output, int max_len) { - t_packet *query; struct dns_hdr *hdr; + uint16_t id; + uint32_t count = 0; + int len, total_len = 0; + + if ((id = send_query(conf, request)) == 0) + return (-1); + if ((request->len = get_simple_reply(conf, (char *)&(request->req_data), id))) + { + request->req_data[request->len] = 0; + hdr = (struct dns_hdr *)&(request->req_data); + if (hdr->rcode) + { + MYERROR("Auth error = %s\n", dns_error[hdr->rcode % (MAX_DNS_ERROR-1)]); + return (-1); + } + while ((len = request->request_functions->rr_decode_next_reply(request, &output[total_len], + max_len - total_len, count++))) + { + total_len += len; + } + return (total_len); + } + return (-1); +} + + +/** + * @brief send a simple request + * @param[in] conf configuration + * @param[in] request request to send + * @param[in] subdomain destination subdomain + * @param[in] domain destination domain + * @param[in] session_id session to use + * @retval 0 on success + * @retval -1 on error + **/ + +int create_simple_req(t_conf *conf, t_request *request, + char *subdomain, char *domain, uint16_t session_id) +{ + t_packet *packet; + + packet = (t_packet *)&request->u.packet; + memset(packet, 0 , sizeof(t_packet)); + packet->session_id = session_id; + packet->ack_seq = myrand(); + packet->seq = myrand(); + request->len = PACKET_LEN; + request->type = conf->query_functions->type; + request->request_functions = conf->query_functions; + if ((strlen(conf->domain) + strlen(subdomain)) > MAX_DNS_LEN) + return (-1); + request->domain = domain; + strcpy(request->domain, subdomain); + strcat(request->domain, conf->domain); + return (0); +} + +/** + * @brief put a specific data in the request + * @param[in] conf configuration + * @param[in] client client queue + * @param[in] request request to send + * @retval request len send + */ + +int push_req_data(t_conf *conf, t_simple_list *client, t_list *queue, t_request *req) +{ + t_packet *query; char *ptr; - char name[MAX_HOST_NAME_ENCODED]; - query = (t_packet *) (queue->data); - if (!len) + req->domain = conf->domain; + req->request_functions = conf->query_functions; + req->type = conf->query_functions->type; + + query = (t_packet *)&(req->u.packet); + if (!req->len) query->type = NOP; else { - if (len > 0) + if (req->len > 0) query->type = DATA; else { DPRINTF(1, "send desauth\n"); query->type = DESAUTH; - len = 0; + req->len = 0; } } - query->cookie = client->cookie; + req->len += PACKET_LEN; + query->session_id = client->session_id; PUT_16(&query->seq,client->num_seq); PUT_16(&query->ack_seq,queue->peer.ack_seq); - queue->info.num_seq = client->num_seq; ptr = ((char *)query) + PACKET_LEN; - memcpy(ptr, data, len); - data2qname(query, PACKET_LEN + len, &name, conf); - hdr = (struct dns_hdr *) queue->data; - create_req_hdr(hdr, conf); - DPRINTF(2, "Send data [%d] ack [%d] len = %d id = 0x%x\n", client->num_seq, - queue->peer.ack_seq, len, hdr->id); - if (strlen(name) > MAX_HOST_NAME_ENCODED) - { - MYERROR("Request too long %u pour %s" , (unsigned int) strlen(name), - name); - return (0); - } - if ((queue->len = add_query(hdr, JUMP_DNS_HDR(hdr), name , conf, TYPE_TXT))) - return (len); + DPRINTF(2, "Client 0x%x : push data [%d] ack [%d] len = %d\n", client->session_id, client->num_seq, + queue->peer.ack_seq, req->len-(int)PACKET_LEN); + if ((queue->len = create_request(conf, &(queue->data), req))) + return (queue->len); return (0); } diff -Nru dns2tcp-0.4.dfsg/client/rr.c dns2tcp-0.5.2/client/rr.c --- dns2tcp-0.4.dfsg/client/rr.c 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/client/rr.c 2010-02-11 16:06:37.000000000 +0000 @@ -0,0 +1,125 @@ +/* +** Copyright (C) 2006 Olivier DEMBOUR +** $Id: rr.c,v 1.4.4.4 2010/02/11 16:06:37 dembour Exp $ +** +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with This program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include + +#include "dns.h" +#include "client.h" +#include "requests.h" +#include "rr.h" +#include "debug.h" + + +t_rr_functions rr_function[] = { + { "TXT", TYPE_TXT, 0, &rr_decode_next_reply_encode, 0 /* UNUSED */}, + { "KEY", TYPE_KEY, 0, &rr_decode_next_reply_raw, 0 /* UNUSED */}, + {0,0,0,0,0} + /* + { "A", TYPE_A, 0, &rr_decode_next_reply_encode, 0 }, + { "SIG", TYPE_SIG, 0, &rr_decode_next_reply_raw, 0 }, + { "NS", TYPE_NS, 0, 0, 0}, +*/ +}; + + +t_rr_functions *get_rr_function_by_type(uint16_t type) +{ + int i = 0; + + while (rr_function[i].type + && (rr_function[i].type != type)) + i++; + return (rr_function[i].type ? &rr_function[i] : 0); +} + +t_rr_functions *get_rr_function_by_name(char *name) +{ + int i = 0; + + while (rr_function[i].name + && (strcmp(rr_function[i].name, name))) + i++; + return (rr_function[i].name ? &rr_function[i] : 0); +} + + + struct rr_hdr *jump_next_reply(t_request *req, char *output, int max_len, int idx, uint8_t is_encode) +{ + void *ptr; + uint32_t count; + struct rr_hdr *answer; + struct dns_hdr *hdr; + + hdr = (struct dns_hdr *) &(req->req_data); + if (!(ptr = jump_end_query(&(req->req_data), GET_16(&hdr->qdcount), req->len))) + { + fprintf(stderr, "invalid reply\n"); + return (0); + } + for (count = GET_16(&hdr->ancount); count ; count--) + { + if (idx + 1 > GET_16(&hdr->ancount)) + return (0); + if ((answer = jump_qname(ptr, req->len - (int) ((unsigned long) ptr - (unsigned long) hdr))) == 0) + return (0); + if ((GET_16(&answer->rdlength) + (uint16_t)((unsigned long)answer-(unsigned long)hdr)) > req->len) + return (0); + if ( (JUMP_RR_HDR(answer)[0 + is_encode] - idx) == 'A') + return (answer); + ptr = (void *)(JUMP_RR_HDR(answer) + GET_16(&answer->rdlength)); + } + return (0); +} + +int rr_decode_next_reply_encode(t_request *req, char *output, int max_len, int idx) +{ + struct rr_hdr *reply; + char buffer[MAX_EDNS_LEN - DNS_HDR_SIZE - RR_HDR_SIZE]; + + if (!(reply = jump_next_reply(req, output, max_len, idx, 1))) + return (0); + + if (ENCODED_LEN(DECODED_BASE64_SIZE(strlen(JUMP_RR_HDR(reply)))) > max_len) + { + DPRINTF(1,"Packet seems too big, this part is drop"); + return (0); + } + dns_simple_decode_strip_dot(JUMP_RR_HDR(reply), buffer, GET_16(&(reply->rdlength))); + DPRINTF(3, "%s base64 data was = %s (reply len = %d)\n", __FUNCTION__, &buffer[1], GET_16(&(reply->rdlength))); + /* jump idx -> &buffer[1] */ + return (base64_decode((unsigned char *)output, &buffer[1])); +} + +int rr_decode_next_reply_raw(t_request *req, char *output, int max_len, int idx) +{ + struct rr_hdr *reply; + char buffer[MAX_EDNS_LEN - DNS_HDR_SIZE - RR_HDR_SIZE]; + + if (!(reply = jump_next_reply(req, output, max_len, idx, 0))) + return (0); + memset(buffer, 0, sizeof(buffer)); + strncpy(buffer, JUMP_RR_HDR(reply), GET_16(&(reply->rdlength))); + DPRINTF(3, "%s base64 data was = %s (reply len = %d)\n", __FUNCTION__, buffer, GET_16(&(reply->rdlength))); + if (DECODED_BASE64_SIZE(strlen(buffer)) > max_len) + return (0); + /* jump idx -> &buffer[1] */ + return (base64_decode((unsigned char *)output, &buffer[1])); + } diff -Nru dns2tcp-0.4.dfsg/client/select.c dns2tcp-0.5.2/client/select.c --- dns2tcp-0.4.dfsg/client/select.c 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/client/select.c 2010-01-20 15:42:56.000000000 +0000 @@ -0,0 +1,152 @@ +/* +** Copyright (C) 2006 Olivier DEMBOUR +** $Id: select.c,v 1.1.2.4 2010/01/20 15:42:56 dembour Exp $ +** +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with This program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +#ifndef _WIN32 +#include +#include +#include +#else +#include "mywin32.h" +#endif + +#include "dns.h" +#include "list.h" +#include "myerror.h" +#include "client.h" +#include "debug.h" +#include "queue.h" +#include "socket.h" + +#ifdef _WIN32 +int add_event(WSAEVENT event, HANDLE *rfds, int max_fd) +{ + rfds[max_fd] = event; + return ((int) (max_fd+1)); +} +#else +int add_socket(socket_t socket, fd_set *rfds, socket_t max_fd) +{ + FD_SET(socket, rfds); + return ((int)(MAX(max_fd, socket))); +} +#endif + +#ifdef _WIN32 +int win_prepare_select(t_conf *conf, WSAEVENT *rfds, struct timeval *tv) +{ + int max_fd = 0; + t_simple_list *client; + + max_fd = add_event(conf->event_udp, rfds, max_fd); + + for (client = conf->client; client; client = client->next) + { + if (socket_is_valid(client->fd_ro)) + { + queue_put_nop(conf, client); + if ((client->control.data_pending < MAX_DATA_SIZE) + && ((client->control.data_pending + client->control.nop_pending < WINDOW_SIZE))) + { + if (client->control.event && socket_is_valid(client->fd_ro)) + max_fd = add_event(client->control.event, rfds, max_fd); + else + { + if (client->pid != (process_t)-1) { + // watch for pipe I/O completion + max_fd = add_event(client->control.aio.hEvent, rfds, max_fd); + } + } + } + else + { + if (client->control.nop_pending == 0xffff) + { + DPRINTF(1, "WTF !\n"); + exit(0); + } + SetEvent(conf->event_udp); + } + if (client->pid != (process_t)-1) { + // watch for process event (dead) + max_fd = add_event(client->pid, rfds, max_fd); + } + } + } + /* select only if sd_tcp is alive */ + if (socket_is_valid(conf->sd_tcp)) + max_fd = add_event(conf->event_tcp, rfds, max_fd); + tv->tv_sec = SOCKET_TIMEOUT; + tv->tv_usec = 0; + return (max_fd); +} + +#else + +int unix_prepare_select(t_conf *conf, fd_set *rfds, struct timeval *tv) +{ + int max_fd = 0; + t_simple_list *client; + + FD_ZERO(rfds); + for (client = conf->client; client; client = client->next) + { + if (socket_is_valid(client->fd_ro)) + { + queue_put_nop(conf, client); + if (!(client->control.data_pending >= MAX_DATA_SIZE) + && (!(client->control.data_pending + client->control.nop_pending >= WINDOW_SIZE))) + { + if (socket_is_valid(client->fd_ro)) + max_fd = add_socket(client->fd_ro, rfds, max_fd); + } + } + } + max_fd = add_socket(conf->sd_udp, rfds, max_fd); + // fuck Windows, not queue debug + if ((!conf->use_stdin) && (debug > 1)) + max_fd = add_socket(0, rfds, max_fd); + + /* select only if sd_tcp is alive */ + if (socket_is_valid(conf->sd_tcp)) + max_fd = add_socket(conf->sd_tcp, rfds, max_fd); + tv->tv_sec = SOCKET_TIMEOUT; + tv->tv_usec = 0; + return (max_fd); +} +#endif + +/** + * @brief prepare the fd_set for select or HANDLE for Windows + * @param[in] conf configuration + * @param[in] rfds the fd_set + * @param[in] tv timeval structure + * @retval last file descriptor + */ + +int prepare_select(t_conf *conf, fd_set *rfds, struct timeval *tv) +{ +#ifndef _WIN32 + return (unix_prepare_select(conf, rfds, tv)); +#else + return (win_prepare_select(conf, (WSAEVENT *)rfds, tv)); +#endif +} diff -Nru dns2tcp-0.4.dfsg/client/session.c dns2tcp-0.5.2/client/session.c --- dns2tcp-0.4.dfsg/client/session.c 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/client/session.c 2010-06-02 15:38:23.000000000 +0100 @@ -0,0 +1,128 @@ +/* +** Copyright (C) 2006 Olivier DEMBOUR +** $Id: session.c,v 1.5.4.3 2010/06/02 14:38:23 collignon Exp $ +** +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with This program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +#include "mycrypto.h" +#include "client.h" +#include "myerror.h" +#include "requests.h" +#include "debug.h" +#include "rr.h" +#include "myrand.h" + + + +/** + * @brief ask for a challenge + * @param[in] conf configuration + * @param[in] request request to use + * @param[out] buffer packet received + * @retval session id + **/ + +uint16_t request_challenge(t_conf *conf, t_request *request, char *buffer) +{ + t_packet *packet; + int len; + + DPRINTF(2, "Request challenge\n"); + if ((len = transceive_query(conf, request, buffer, MAX_DNS_LEN )) == -1) + return (0); + packet = (t_packet *)buffer; + if (packet->type != OK) + return (0); + buffer[len] = 0; + DPRINTF(2,"Challenge = \'%s\'\n", (char *)(packet+1)); + DPRINTF(1,"Session created (0x%x)\n", packet->session_id); + return (packet->session_id); /* Not my challenge */ +} + + +/** + * @brief send the challenge response + * @param[in] conf configuration + * @param[out] request where to create the request + * @param[in] challenge challenge + * @retval 0 on success + * @retval -1 on error + **/ + +uint8_t send_response(t_conf *conf, t_request *request, char *challenge) +{ + char buffer[MAX_DNS_LEN + 1]; + t_packet *packet; + int len; + + packet = (t_packet *) &(request->u.packet); + request->len = sign_challenge(challenge, CHALLENGE_SIZE, conf->key, (char *)(packet+1), + MAX_DNS_LEN - sizeof(t_packet)) + PACKET_LEN; + DPRINTF(2, "Sending response : '%s' (key = %s) \n", (char *)(packet+1), conf->key) + if ((len = transceive_query(conf, request, buffer, sizeof(buffer) -1)) == -1) + return (-1); + packet = (t_packet *) &buffer; + if (packet->type == OK) + return (0); + return (-1); +} + +/** + * @brief try to open a session + * @param[in] conf configuration + * @retval 0 on error + * @retval session id + **/ + +uint16_t create_session(t_conf *conf) +{ + char domain[MAX_DNS_LEN + 1]; + t_request request; + t_packet *packet; + uint16_t session_id; + char challenge[MAX_DNS_LEN + 1]; + + if ((strlen(conf->domain) + sizeof(AUTH)) > MAX_DNS_LEN) + return (0); + + strcpy(domain, AUTH); + strcat(domain, conf->domain); + request.domain = (char *)&domain; + request.type = conf->query_functions->type; + request.request_functions = conf->query_functions; + request.len = PACKET_LEN; + packet = &(request.u.packet); + packet->session_id = 0; + packet->ack_seq = 0; + packet->type = 0; + packet->seq = myrand(); + if (!conf->disable_compression) + packet->type |= USE_COMPRESS; + if (!(session_id = request_challenge(conf, &request, (char *)&challenge))) + return (0); + packet->session_id = session_id; + if (send_response(conf, &request, &challenge[PACKET_LEN])) + { + fprintf(stderr, "Authentication failed\n"); + return (0); + } + return (session_id); +} + + diff -Nru dns2tcp-0.4.dfsg/client/socket.c dns2tcp-0.5.2/client/socket.c --- dns2tcp-0.4.dfsg/client/socket.c 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/client/socket.c 2009-12-28 15:11:16.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: socket.c,v 1.9 2007/05/29 13:58:41 dembour Exp $ +** $Id: socket.c,v 1.17.4.4 2009/12/28 15:11:16 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -21,55 +21,126 @@ #include #include #include + #ifndef _WIN32 -#include #include #include #include -#else -#include "mywin32.h" #endif #include "client.h" #include "dns.h" #include "myerror.h" #include "debug.h" +#include "queue.h" +#include "socket.h" +#include "select.h" +int socket_is_valid(socket_t socket) +{ +#ifndef _WIN32 + return (socket != -1); +#else + // TODO + return (socket != -1); +#endif +} -int get_simple_reply(t_conf *conf, void *buffer, uint16_t id) +#ifndef _WIN32 + +uint16_t unix_get_simple_reply(t_conf *conf, char *buffer, uint16_t id) { fd_set rfds; - struct timeval tv; int retval; + struct timeval tv; struct dns_hdr *hdr; int len = 0; - - FD_ZERO(&rfds); - FD_SET(conf->sd_udp, &rfds); - tv.tv_sec = 3; + + tv.tv_sec = (time_t) conf->conn_timeout; tv.tv_usec = 0; - hdr = buffer; + hdr = (struct dns_hdr *) buffer; + FD_ZERO(&rfds); + add_socket(conf->sd_udp, &rfds, 0); while ((retval = select(conf->sd_udp+1, &rfds, NULL, NULL, &tv)) != -1) { if (!retval) { fprintf(stderr, "No response from DNS %s\n", conf->dns_server); - return (-1); + return (0); } - if (FD_ISSET(conf->sd_udp, &rfds)) + if ((IS_THIS_SOCKET(conf->sd_udp, conf->event_udp, &rfds, retval)) + && ((len = read(conf->sd_udp, buffer, MAX_DNS_LEN)) > 0)) { - len = read(conf->sd_udp, buffer, MAX_REQ_LEN); if (hdr->id == id) return (len); + else + queue_get_udp_data(conf, buffer, len); } - FD_SET(conf->sd_udp, &rfds); - tv.tv_sec = 3; + add_socket(conf->sd_udp, &rfds, 0); + tv.tv_sec = (time_t) conf->conn_timeout; } MYERROR("Select error"); - return (-1); + return (0); } +#else + +uint16_t win_get_simple_reply(t_conf *conf, char *buffer, uint16_t id) +{ + DWORD retval; + struct dns_hdr *hdr; + int len = 0; + + hdr = (struct dns_hdr *) buffer; + + while ((retval = WaitForSingleObject(conf->event_udp, conf->conn_timeout*1000)) != WAIT_FAILED) + { + if (retval != WAIT_OBJECT_0) + { + fprintf(stderr, "No response from DNS %s\n", conf->dns_server); + return (0); + } + if ((len = read(conf->sd_udp, buffer, MAX_DNS_LEN)) > 0) + { + if (hdr->id == id) + return (len); + else + queue_get_udp_data(conf, buffer, len); + } + } + MYERROR("Select error"); + return (0); +} +#endif + +/** + * @brief get a reply based on the DNS transaction ID + * @param[in] conf configuration + * @param[in] buffer where to write the reply + * @param[in] id DNS transaction id + * @retval 0 on error + * @retval len on success + **/ + +uint16_t get_simple_reply(t_conf *conf, char *buffer, uint16_t id) +{ +#ifndef _WIN32 + return (unix_get_simple_reply(conf, buffer, id)); +#else + return (win_get_simple_reply(conf, buffer, id)); +#endif + +} + + +/** + * @brief non blocking IO + * @param[in] sd socket + * @retval 0 on success + * @retval -1 on error + **/ + static int set_nonblock(socket_t sd) { #ifndef _WIN32 @@ -83,11 +154,22 @@ return (0); } +/** + * @brief listen on wanted interfaces + * @param[in] conf configuration + * @retval 0 on success + * @retval -1 on error + **/ + int bind_socket(t_conf *conf) { struct sockaddr_in sa; +#ifndef _WIN32 int optval = 1; - +#else + const char optval = 1; +#endif + memset(&sa,0,sizeof(struct sockaddr_in)); sa.sin_port = htons(conf->local_port); sa.sin_addr.s_addr = htonl(INADDR_LOOPBACK); @@ -104,10 +186,15 @@ perror("bind error"); return (-1); } +#ifdef _WIN32 + if (!(conf->event_tcp = WSACreateEvent()) + || (WSAEventSelect(conf->sd_tcp, conf->event_tcp, FD_ACCEPT) == SOCKET_ERROR)) + MYERROR("WSAEvent error\n"); +#endif if ((!set_nonblock(conf->sd_tcp)) && (!listen(conf->sd_tcp, 10))) { - fprintf(stderr, "Listenning on port : %d\n", conf->local_port); + fprintf(stderr, "Listening on port : %d\n", conf->local_port); return (0); } } @@ -115,20 +202,30 @@ return (-1); } -socket_t create_socket(t_conf *conf, struct sockaddr_in *sa) +/** + * @brief bind fake DNS server + * @param[in] conf configuration + **/ + +socket_t create_socket(t_conf *conf) { struct hostent *hostent; socket_t sd; +#ifdef _WIN32 + WSADATA wsa; + WSAStartup(MAKEWORD(2,2), &wsa); +#endif if (!(hostent = gethostbyname(conf->dns_server))) { MYERROR("Gethostbyname \'%s\'",conf->dns_server); return (-1); } - sa->sin_port = htons(53); - memcpy(&sa->sin_addr.s_addr, hostent->h_addr, sizeof(sa->sin_addr.s_addr)); - sa->sin_family = AF_INET; - if ((sd = socket(PF_INET, SOCK_DGRAM, 0)) < 0) + conf->sa.sin_port = htons(53); + memcpy(&conf->sa.sin_addr.s_addr, hostent->h_addr, sizeof(conf->sa.sin_addr.s_addr)); + conf->sa.sin_family = AF_INET; + if ( ((sd = socket(PF_INET, SOCK_DGRAM, 0)) < 0) + || (set_nonblock(sd)) ) { MYERROR("socket error"); return (-1); diff -Nru dns2tcp-0.4.dfsg/common/base64.c dns2tcp-0.5.2/common/base64.c --- dns2tcp-0.4.dfsg/common/base64.c 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/common/base64.c 2010-06-07 14:36:25.000000000 +0100 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: base64.c,v 1.3 2007/02/13 10:31:14 collignon Exp $ +** $Id: base64.c,v 1.4.4.5 2010/06/07 13:36:25 dembour Exp $ ** ** This file is part of Brute ike ** @@ -28,6 +28,8 @@ #include "mywin32.h" #endif +/*char base64_padding = '=';*/ + static const char basis_64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; @@ -70,14 +72,14 @@ *p++ = basis_64[(string[i] >> 2) & 0x3F]; if (i == (len - 1)) { *p++ = basis_64[((string[i] & 0x3) << 4)]; - *p++ = '='; + /**p++ = base64_padding;*/ } else { *p++ = basis_64[((string[i] & 0x3) << 4) | ((int) (string[i + 1] & 0xF0) >> 4)]; *p++ = basis_64[((string[i + 1] & 0xF) << 2)]; } - *p++ = '='; + /**p++ = base64_padding;*/ } *p++ = '\0'; @@ -128,73 +130,3 @@ return nbytesdecoded; } - -#ifndef HAVE_STRCASESTR - -/* Replacement for strcasestr on systems without - stolen from FreeBSD 5.1 */ - -/*- - * Copyright (c) 1990, 1993 - * The Regents of the University of California. All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * Chris Torek. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * Find the first occurrence of find in s, ignore case. - */ -char * -strcasestr(s, find) - const char *s, *find; -{ - char c, sc; - size_t len; - - if ((c = *find++) != 0) { - c = tolower((unsigned char)c); - len = strlen(find); - do { - do { - if ((sc = *s++) == 0) - return (NULL); - } while ((char)tolower((unsigned char)sc) != c); - } while (strncasecmp(s, find, len) != 0); - s--; - } - return ((char *)s); -} - -#endif - - - diff -Nru dns2tcp-0.4.dfsg/common/config.c dns2tcp-0.5.2/common/config.c --- dns2tcp-0.4.dfsg/common/config.c 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/common/config.c 2009-09-04 17:25:42.000000000 +0100 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: config.c,v 1.9 2007/05/29 14:51:14 dembour Exp $ +** $Id: config.c,v 1.13.4.2 2009/09/04 16:25:42 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -21,6 +21,7 @@ #include #include #include +#include #ifdef HAVE_STDINT_H #include @@ -35,7 +36,13 @@ #define MAX_LINE_LEN 512 -char *extract_param(char **line, uint8_t *stop) +/** + * @brief extract comma separated parameters + * @param[out] stop if we are at EOL + * @retval 0 parameter + **/ + +static char *extract_param(char **line, uint8_t *stop) { char *param; @@ -51,7 +58,12 @@ return (param); } -void remove_space(char *buffer) +/** + * @brief remove space for this line, skip if we see a comment + * @param[in] buffer + **/ + +static void remove_space(char *buffer) { size_t i, j, len; @@ -71,45 +83,59 @@ } -void config_extract_token(FILE *file, void *conf, +int get_next_line(char *buffer, int len, FILE *file) +{ + while (fgets(buffer, len, file)) + { + remove_space(buffer); + if (*buffer != '#') + return (0); + } + return (-1); +} + +/** + * @brief extract parameter=value from a line + * @param[in] file file to read + * @param[in] conf configuration + * @param[in] copy_func pointer to the copy function + **/ + +static void config_extract_token(FILE *file, void *conf, int (*copy_func)(void *, char *, char *)) { char buffer[MAX_LINE_LEN + 1]; - char token2[MAX_LINE_LEN + 1]; - char *token; + char token[MAX_LINE_LEN + 1]; char *value; char *ptr; uint8_t stop; - token = token2; - *token=0; + token[0] = 0; stop = 1; - while (fgets(buffer, MAX_LINE_LEN, file)) + while (get_next_line(buffer, MAX_LINE_LEN, file) != -1) { - remove_space(buffer); - if (!buffer[0]) - continue; value = buffer; if ((ptr = strchr(buffer, '='))) { *ptr = 0; value = ptr + 1; - strcpy(token, buffer); - } - if ((*buffer == '#') || (!*token)) - { - *token = 0; - continue; + strncpy(token, buffer, MAX_LINE_LEN); } ptr = value; while (((value = extract_param(&ptr, &stop))) && (*value)) copy_func(conf, token, value); if (stop) - *token = 0; + token[0] = 0; } } - +/** + * @brief read config file + * @param[in] file file to read + * @param[in] conf configuration + * @param[in] copy_func pointer to the copy function + * @param[in] extension default file name + **/ int read_config(char *file, void *conf, int (*copy_func)(void *, char *, char *), diff -Nru dns2tcp-0.4.dfsg/common/crc16.c dns2tcp-0.5.2/common/crc16.c --- dns2tcp-0.4.dfsg/common/crc16.c 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/common/crc16.c 2009-01-12 10:38:17.000000000 +0000 @@ -0,0 +1,104 @@ +/* +** Copyright (C) 2006 Olivier DEMBOUR +** $Id: crc16.c,v 1.1 2009/01/12 10:38:17 dembour Exp $ +** +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with This program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include "config.h" + +#ifdef HAVE_SYS_TYPES_H +#include +#endif + +#ifdef HAVE_STDINT_H +#include +#endif + +#ifdef _WIN32 +#include "mywin32.h" +#endif + + + +/* + * crc16.c + * + * This source code is licensed under the GNU General Public License, + * Version 2. See the file COPYING for more details. + */ + +/** CRC table for the CRC-16. The poly is 0x8005 (x^16 + x^15 + x^2 + 1) */ +uint16_t const crc16_table[256] = { + 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, + 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440, + 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40, + 0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841, + 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40, + 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41, + 0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641, + 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040, + 0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240, + 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441, + 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41, + 0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840, + 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41, + 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40, + 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640, + 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041, + 0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240, + 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441, + 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41, + 0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840, + 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41, + 0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40, + 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640, + 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041, + 0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241, + 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440, + 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40, + 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841, + 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40, + 0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41, + 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641, + 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040 +}; + +static inline uint16_t crc16_byte(uint16_t crc, const uint8_t data) +{ + return (crc >> 8) ^ crc16_table[(crc ^ data) & 0xff]; +} + +/** + * Compute the CRC-16 for the data buffer + * + * @param buffer data pointer + * @param len number of bytes in the buffer + * @return the CRC + */ + +uint16_t crc16(const char *buffer, size_t len) +{ + uint16_t crc = 0; + + while (len--) + crc = crc16_byte(crc, *buffer++); + return crc; +} + + + diff -Nru dns2tcp-0.4.dfsg/common/dns.c dns2tcp-0.5.2/common/dns.c --- dns2tcp-0.4.dfsg/common/dns.c 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/common/dns.c 2010-02-11 16:06:37.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: dns.c,v 1.9 2007/05/29 13:58:41 dembour Exp $ +** $Id: dns.c,v 1.16.4.2 2010/02/11 16:06:37 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -37,38 +37,130 @@ "Request refused", }; -char *jump_qname(void *ptr) + +/** + * @brief jump at the end of the qname section + * @param[in] ptr where to search + * @param[in] maxlen max size + */ + +void *jump_qname(void *ptr, int maxlen) { char *name; + if (! maxlen) + return (0); name = ptr; - while (*name) + while ((*name) && (maxlen--)) { if ((*name & COMPRESS_FLAG_CHAR) == COMPRESS_FLAG_CHAR) - return (name + 2); + { + if (maxlen-1) + return (name + 2); + return (0); + } name++; } - return (name + 1); + return ((maxlen-1) ? name + 1 : 0); +} + + +void *jump_edns(void *buffer, int max_len) +{ + struct dns_hdr *hdr; + void *where; + uint16_t records; + struct rr_hdr *aarecord; + + hdr = (struct dns_hdr *) buffer; + if (!(where = jump_end_answer(buffer, max_len))) + return (0); + /* jump additional records */ + for (records = GET_16(&hdr->nscount); records; records--) + { + if (!(where = jump_qname(where, max_len - (where - (void *)hdr)))) + return (0); + } + aarecord = where; + for (records = GET_16(&hdr->arcount); records; records--) + { + if ((max_len - (where - (void *)hdr) -sizeof(struct add_record)) > max_len) + return (0); + if (GET_16(&aarecord->type) == TYPE_EDNS) + return (aarecord); + aarecord++; + } + return (0); +} + +/** + * @brief jump at the end of the answer + * @param[in] ptr where to search + * @param[in] maxlen max size + */ + +void *jump_end_answer(void *buffer, int max_len) +{ + struct dns_hdr *hdr; + void *where; + uint16_t records; + struct rr_hdr *rr; + uint16_t len; + uint16_t available_len; + + hdr = buffer; + if (!GET_16(&hdr->qdcount)) + return (0); + if (!(rr = where = jump_end_query(hdr, GET_16(&hdr->qdcount), max_len))) + return (0); + available_len = max_len - (uint16_t) ((void *)where - (void *)hdr); + for (records = GET_16(&hdr->ancount); records; records--) + { + available_len = max_len - (uint16_t) ((void *)rr - (void*)hdr); + if (!(rr = jump_qname(where, available_len))) + return (0); + len = GET_16(&rr->rdlength); + if (( ((void *)rr - buffer) + len + RR_HDR_SIZE) > max_len) + return (0); + rr = (struct rr_hdr *) (JUMP_RR_HDR(rr) + len); + where = rr; + } + return (rr); +} + +uint16_t get_edns_size(void *buffer, int max_len) +{ + struct add_record *edns; + + if (!(edns = jump_edns(buffer, max_len))) + return (0); + return (GET_16(&edns->payload_size)); } +/** + * @brief jump at the end of the query + * @param[in] ptr where to search + * @param[in] nb max number of requests + * @param[in] maxlen max size + */ + void *jump_end_query(void *buffer, int nb, int max_len) { void *tmp; void *max_ptr; int len; - max_ptr = ((char *)buffer) + max_len + DNS_HDR_SIZE; + max_ptr = ((char *)buffer) + max_len; tmp = ((char *)buffer) + DNS_HDR_SIZE; while ((nb--) && (tmp <= max_ptr)) { - if ((len = mystrnlen(tmp , MAX_HOST_NAME_ENCODED+1)) - > MAX_HOST_NAME_ENCODED) + if ((len = mystrnlen(tmp , MAX_HOST_NAME_ENCODED+1)) > MAX_HOST_NAME_ENCODED) { MYERROR("Host name too long (%d)\n", len); return (0); } - tmp = jump_qname(tmp) + REQ_HDR_SIZE; + tmp = jump_qname(tmp, max_ptr-tmp) + REQ_HDR_SIZE; } return ((tmp <= max_ptr) ? tmp : 0); } @@ -83,13 +175,18 @@ return (len); } +/** + * @brief encode a data to the qname format + * @param[out] data + **/ + void dns_encode(char *data) { - char buffer2[MAX_REQ_LEN]; + char buffer2[MAX_EDNS_LEN]; int len; char *buffer = buffer2; - strcpy(buffer, data); + strncpy(buffer, data, MAX_DNS_LEN-1); do { len = search_dot(buffer); @@ -112,9 +209,17 @@ } while (len); } +/** + * @brief simple qname decoder, do not strip anything + * @param[in] input data + * @param[out] output where to write + * @param[in] max_len maximum len + **/ + + void dns_simple_decode(char *input, char *output, int max_len) { - int len; + uint8_t len; char *ptr; int total_len =0; @@ -122,10 +227,52 @@ *output = 0; while (*ptr) { - len = (int) *ptr; + len = (uint8_t) *ptr; + /* compression not supported */ + if (len > 63) + len = 0; total_len +=len; - if (total_len > max_len) + if (++total_len > max_len) break; + output[total_len] = 0; + if (!len) + break; + strncat(output, ptr + 1, len++); + output[total_len-1] = '.'; + ptr += len; + } + if (total_len > 0) + output[total_len-1] = 0; +} + +/** + * @brief simple qname decoder, but strip 'fake' dot + * @param[in] input data + * @param[out] output where to write + * @param[in] max_len maximum len + **/ + +void dns_simple_decode_strip_dot(char *input, char *output, int max_len) +{ + uint8_t len; + char *ptr; + int total_len =0; + + ptr = input; + *output = 0; + while (*ptr) + { + len = (uint8_t) *ptr; + /* compression not supported */ + if (len > 63) + len = 0; + total_len +=len; + if (total_len > max_len) + { + MYERROR("Error while decoding reply max_len was %d total len = %d\n", max_len, + total_len); + break; + } strncat(output, ptr + 1, len); output[total_len] = 0; ptr += (len + 1); diff -Nru dns2tcp-0.4.dfsg/common/getopt.c dns2tcp-0.5.2/common/getopt.c --- dns2tcp-0.4.dfsg/common/getopt.c 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/common/getopt.c 2009-04-30 15:04:59.000000000 +0100 @@ -5,6 +5,13 @@ int optopt; char *optarg; +/** + * @brief get command line arguments + * @param[in] argc + * @param[in] argv + * @param[in] opts options available + **/ + int getopt(int argc, char **argv, char *opts) { static int sp = 1; diff -Nru dns2tcp-0.4.dfsg/common/hmac_sha1.c dns2tcp-0.5.2/common/hmac_sha1.c --- dns2tcp-0.4.dfsg/common/hmac_sha1.c 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/common/hmac_sha1.c 2010-05-18 17:02:36.000000000 +0100 @@ -0,0 +1,417 @@ +/* +** Copyright (C) 2006 Olivier DEMBOUR +** $Id: hmac_sha1.c,v 1.1.2.1 2010/05/18 16:02:36 dembour Exp $ +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with This program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include "hmac_sha1.h" + +/* + * FIPS-180-1 compliant SHA-1 implementation + * + * Copyright (C) 2006-2010, Paul Bakker + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ +/* + * The SHA-1 standard was published by NIST in 1993. + * + * http://www.itl.nist.gov/fipspubs/fip180-1.htm + */ + +#include +#include + +/* + * 32-bit integer manipulation macros (big endian) + */ +#ifndef GET_ULONG_BE +#define GET_ULONG_BE(n,b,i) \ +{ \ + (n) = ( (unsigned long) (b)[(i) ] << 24 ) \ + | ( (unsigned long) (b)[(i) + 1] << 16 ) \ + | ( (unsigned long) (b)[(i) + 2] << 8 ) \ + | ( (unsigned long) (b)[(i) + 3] ); \ +} +#endif + +#ifndef PUT_ULONG_BE +#define PUT_ULONG_BE(n,b,i) \ +{ \ + (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ + (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ + (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ + (b)[(i) + 3] = (unsigned char) ( (n) ); \ +} +#endif + +/* + * SHA-1 context setup + */ +void sha1_starts( sha1_context *ctx ) +{ + ctx->total[0] = 0; + ctx->total[1] = 0; + + ctx->state[0] = 0x67452301; + ctx->state[1] = 0xEFCDAB89; + ctx->state[2] = 0x98BADCFE; + ctx->state[3] = 0x10325476; + ctx->state[4] = 0xC3D2E1F0; +} + +static void sha1_process( sha1_context *ctx, const unsigned char data[64] ) +{ + unsigned long temp, W[16], A, B, C, D, E; + + GET_ULONG_BE( W[ 0], data, 0 ); + GET_ULONG_BE( W[ 1], data, 4 ); + GET_ULONG_BE( W[ 2], data, 8 ); + GET_ULONG_BE( W[ 3], data, 12 ); + GET_ULONG_BE( W[ 4], data, 16 ); + GET_ULONG_BE( W[ 5], data, 20 ); + GET_ULONG_BE( W[ 6], data, 24 ); + GET_ULONG_BE( W[ 7], data, 28 ); + GET_ULONG_BE( W[ 8], data, 32 ); + GET_ULONG_BE( W[ 9], data, 36 ); + GET_ULONG_BE( W[10], data, 40 ); + GET_ULONG_BE( W[11], data, 44 ); + GET_ULONG_BE( W[12], data, 48 ); + GET_ULONG_BE( W[13], data, 52 ); + GET_ULONG_BE( W[14], data, 56 ); + GET_ULONG_BE( W[15], data, 60 ); + +#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n))) + +#define R(t) \ +( \ + temp = W[(t - 3) & 0x0F] ^ W[(t - 8) & 0x0F] ^ \ + W[(t - 14) & 0x0F] ^ W[ t & 0x0F], \ + ( W[t & 0x0F] = S(temp,1) ) \ +) + +#define P(a,b,c,d,e,x) \ +{ \ + e += S(a,5) + F(b,c,d) + K + x; b = S(b,30); \ +} + + A = ctx->state[0]; + B = ctx->state[1]; + C = ctx->state[2]; + D = ctx->state[3]; + E = ctx->state[4]; + +#define F(x,y,z) (z ^ (x & (y ^ z))) +#define K 0x5A827999 + + P( A, B, C, D, E, W[0] ); + P( E, A, B, C, D, W[1] ); + P( D, E, A, B, C, W[2] ); + P( C, D, E, A, B, W[3] ); + P( B, C, D, E, A, W[4] ); + P( A, B, C, D, E, W[5] ); + P( E, A, B, C, D, W[6] ); + P( D, E, A, B, C, W[7] ); + P( C, D, E, A, B, W[8] ); + P( B, C, D, E, A, W[9] ); + P( A, B, C, D, E, W[10] ); + P( E, A, B, C, D, W[11] ); + P( D, E, A, B, C, W[12] ); + P( C, D, E, A, B, W[13] ); + P( B, C, D, E, A, W[14] ); + P( A, B, C, D, E, W[15] ); + P( E, A, B, C, D, R(16) ); + P( D, E, A, B, C, R(17) ); + P( C, D, E, A, B, R(18) ); + P( B, C, D, E, A, R(19) ); + +#undef K +#undef F + +#define F(x,y,z) (x ^ y ^ z) +#define K 0x6ED9EBA1 + + P( A, B, C, D, E, R(20) ); + P( E, A, B, C, D, R(21) ); + P( D, E, A, B, C, R(22) ); + P( C, D, E, A, B, R(23) ); + P( B, C, D, E, A, R(24) ); + P( A, B, C, D, E, R(25) ); + P( E, A, B, C, D, R(26) ); + P( D, E, A, B, C, R(27) ); + P( C, D, E, A, B, R(28) ); + P( B, C, D, E, A, R(29) ); + P( A, B, C, D, E, R(30) ); + P( E, A, B, C, D, R(31) ); + P( D, E, A, B, C, R(32) ); + P( C, D, E, A, B, R(33) ); + P( B, C, D, E, A, R(34) ); + P( A, B, C, D, E, R(35) ); + P( E, A, B, C, D, R(36) ); + P( D, E, A, B, C, R(37) ); + P( C, D, E, A, B, R(38) ); + P( B, C, D, E, A, R(39) ); + +#undef K +#undef F + +#define F(x,y,z) ((x & y) | (z & (x | y))) +#define K 0x8F1BBCDC + + P( A, B, C, D, E, R(40) ); + P( E, A, B, C, D, R(41) ); + P( D, E, A, B, C, R(42) ); + P( C, D, E, A, B, R(43) ); + P( B, C, D, E, A, R(44) ); + P( A, B, C, D, E, R(45) ); + P( E, A, B, C, D, R(46) ); + P( D, E, A, B, C, R(47) ); + P( C, D, E, A, B, R(48) ); + P( B, C, D, E, A, R(49) ); + P( A, B, C, D, E, R(50) ); + P( E, A, B, C, D, R(51) ); + P( D, E, A, B, C, R(52) ); + P( C, D, E, A, B, R(53) ); + P( B, C, D, E, A, R(54) ); + P( A, B, C, D, E, R(55) ); + P( E, A, B, C, D, R(56) ); + P( D, E, A, B, C, R(57) ); + P( C, D, E, A, B, R(58) ); + P( B, C, D, E, A, R(59) ); + +#undef K +#undef F + +#define F(x,y,z) (x ^ y ^ z) +#define K 0xCA62C1D6 + + P( A, B, C, D, E, R(60) ); + P( E, A, B, C, D, R(61) ); + P( D, E, A, B, C, R(62) ); + P( C, D, E, A, B, R(63) ); + P( B, C, D, E, A, R(64) ); + P( A, B, C, D, E, R(65) ); + P( E, A, B, C, D, R(66) ); + P( D, E, A, B, C, R(67) ); + P( C, D, E, A, B, R(68) ); + P( B, C, D, E, A, R(69) ); + P( A, B, C, D, E, R(70) ); + P( E, A, B, C, D, R(71) ); + P( D, E, A, B, C, R(72) ); + P( C, D, E, A, B, R(73) ); + P( B, C, D, E, A, R(74) ); + P( A, B, C, D, E, R(75) ); + P( E, A, B, C, D, R(76) ); + P( D, E, A, B, C, R(77) ); + P( C, D, E, A, B, R(78) ); + P( B, C, D, E, A, R(79) ); + +#undef K +#undef F + + ctx->state[0] += A; + ctx->state[1] += B; + ctx->state[2] += C; + ctx->state[3] += D; + ctx->state[4] += E; +} + +/* + * SHA-1 process buffer + */ +void sha1_update( sha1_context *ctx, const unsigned char *input, int ilen ) +{ + int fill; + unsigned long left; + + if( ilen <= 0 ) + return; + + left = ctx->total[0] & 0x3F; + fill = 64 - left; + + ctx->total[0] += ilen; + ctx->total[0] &= 0xFFFFFFFF; + + if( ctx->total[0] < (unsigned long) ilen ) + ctx->total[1]++; + + if( left && ilen >= fill ) + { + memcpy( (void *) (ctx->buffer + left), + (void *) input, fill ); + sha1_process( ctx, ctx->buffer ); + input += fill; + ilen -= fill; + left = 0; + } + + while( ilen >= 64 ) + { + sha1_process( ctx, input ); + input += 64; + ilen -= 64; + } + + if( ilen > 0 ) + { + memcpy( (void *) (ctx->buffer + left), + (void *) input, ilen ); + } +} + +static const unsigned char sha1_padding[64] = +{ + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +/* + * SHA-1 final digest + */ +void sha1_finish( sha1_context *ctx, unsigned char output[20] ) +{ + unsigned long last, padn; + unsigned long high, low; + unsigned char msglen[8]; + + high = ( ctx->total[0] >> 29 ) + | ( ctx->total[1] << 3 ); + low = ( ctx->total[0] << 3 ); + + PUT_ULONG_BE( high, msglen, 0 ); + PUT_ULONG_BE( low, msglen, 4 ); + + last = ctx->total[0] & 0x3F; + padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); + + sha1_update( ctx, (unsigned char *) sha1_padding, padn ); + sha1_update( ctx, msglen, 8 ); + + PUT_ULONG_BE( ctx->state[0], output, 0 ); + PUT_ULONG_BE( ctx->state[1], output, 4 ); + PUT_ULONG_BE( ctx->state[2], output, 8 ); + PUT_ULONG_BE( ctx->state[3], output, 12 ); + PUT_ULONG_BE( ctx->state[4], output, 16 ); +} + +/* + * output = SHA-1( input buffer ) + */ +void sha1( const unsigned char *input, int ilen, unsigned char output[20] ) +{ + sha1_context ctx; + + sha1_starts( &ctx ); + sha1_update( &ctx, input, ilen ); + sha1_finish( &ctx, output ); + + memset( &ctx, 0, sizeof( sha1_context ) ); +} + +/* + * SHA-1 HMAC context setup + */ +void sha1_hmac_starts( sha1_context *ctx, const unsigned char *key, int keylen ) +{ + int i; + unsigned char sum[20]; + + if( keylen > 64 ) + { + sha1( key, keylen, sum ); + keylen = 20; + key = sum; + } + + memset( ctx->ipad, 0x36, 64 ); + memset( ctx->opad, 0x5C, 64 ); + + for( i = 0; i < keylen; i++ ) + { + ctx->ipad[i] = (unsigned char)( ctx->ipad[i] ^ key[i] ); + ctx->opad[i] = (unsigned char)( ctx->opad[i] ^ key[i] ); + } + + sha1_starts( ctx ); + sha1_update( ctx, ctx->ipad, 64 ); + + memset( sum, 0, sizeof( sum ) ); +} + +/* + * SHA-1 HMAC process buffer + */ +void sha1_hmac_update( sha1_context *ctx, const unsigned char *input, int ilen ) +{ + sha1_update( ctx, input, ilen ); +} + +/* + * SHA-1 HMAC final digest + */ +void sha1_hmac_finish( sha1_context *ctx, unsigned char output[20] ) +{ + unsigned char tmpbuf[20]; + + sha1_finish( ctx, tmpbuf ); + sha1_starts( ctx ); + sha1_update( ctx, ctx->opad, 64 ); + sha1_update( ctx, tmpbuf, 20 ); + sha1_finish( ctx, output ); + + memset( tmpbuf, 0, sizeof( tmpbuf ) ); +} + +/* + * SHA1 HMAC context reset + */ +void sha1_hmac_reset( sha1_context *ctx ) +{ + sha1_starts( ctx ); + sha1_update( ctx, ctx->ipad, 64 ); +} + +/* + * output = HMAC-SHA-1( hmac key, input buffer ) + */ +void sha1_hmac( const unsigned char *key, int keylen, + const unsigned char *input, int ilen, + unsigned char output[20] ) +{ + sha1_context ctx; + + sha1_hmac_starts( &ctx, key, keylen ); + sha1_hmac_update( &ctx, input, ilen ); + sha1_hmac_finish( &ctx, output ); + + memset( &ctx, 0, sizeof( sha1_context ) ); +} diff -Nru dns2tcp-0.4.dfsg/common/includes/base64.h dns2tcp-0.5.2/common/includes/base64.h --- dns2tcp-0.4.dfsg/common/includes/base64.h 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/common/includes/base64.h 2008-08-04 16:31:07.000000000 +0100 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: base64.h,v 1.2 2006/01/09 08:41:19 dembour Exp $ +** $Id: base64.h,v 1.3 2008/08/04 15:31:07 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -27,8 +27,8 @@ each bloc is 3 of real data */ -#define BASE64_SIZE(len) ((((len) / 3 ) + 3-1 ) * 4) -#define DECODE_BASE64_SIZE(len) ((((len)/4)*3)) +#define BASE64_SIZE(len) ((( (len + 3 - 1 ) / 3 )) * 4) +#define DECODED_BASE64_SIZE(len) ((( (len) / 4 ) * 3 )) /* diff -Nru dns2tcp-0.4.dfsg/common/includes/crc16.h dns2tcp-0.5.2/common/includes/crc16.h --- dns2tcp-0.4.dfsg/common/includes/crc16.h 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/common/includes/crc16.h 2009-01-12 10:38:17.000000000 +0000 @@ -0,0 +1,26 @@ +/* +** Copyright (C) 2006 Olivier DEMBOUR +** $Id: crc16.h,v 1.1 2009/01/12 10:38:17 dembour Exp $ +** +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with This program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __MY_CRC16_H__ +#define __MY_CRC16_H__ + +uint16_t crc16(const char *buffer, size_t len); + +#endif diff -Nru dns2tcp-0.4.dfsg/common/includes/debug.h dns2tcp-0.5.2/common/includes/debug.h --- dns2tcp-0.4.dfsg/common/includes/debug.h 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/common/includes/debug.h 2009-09-07 18:11:57.000000000 +0100 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: debug.h,v 1.5 2007/05/30 13:04:45 dembour Exp $ +** $Id: debug.h,v 1.5.6.2 2009/09/07 17:11:57 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -47,13 +47,13 @@ }\ } #else -#define DPRINTF(level, fmt, ...) \ +#define DPRINTF(level, fmt, args...) \ {\ - if (debug >= level) \ - {\ - fprintf(stderr, "Debug %s:%d\t", __FILE__, __LINE__); \ - fprintf(stderr, ##fmt); \ - }\ + if (debug >= level) \ + { \ + fprintf(stderr, "Debug %s:%d\t", __FILE__, __LINE__); \ + fprintf(stderr, fmt, ##args); \ + } \ } #endif diff -Nru dns2tcp-0.4.dfsg/common/includes/dns.h dns2tcp-0.5.2/common/includes/dns.h --- dns2tcp-0.4.dfsg/common/includes/dns.h 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/common/includes/dns.h 2010-06-01 17:05:05.000000000 +0100 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: dns.h,v 1.10 2007/05/29 16:46:50 dembour Exp $ +** $Id: dns.h,v 1.16.4.2 2010/06/01 16:05:05 collignon Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -24,36 +24,62 @@ #include "config.h" #ifndef _WIN32 +#include #include #else #include "mywin32.h" #endif #include "base64.h" -#define MAX_REQ_LEN 512 +#define MAX_DNS_LEN 512 +#define MAX_EDNS_LEN 4096 -#define MAX_HOST_NAME_ENCODED 200 +#define EDNS_HEADER 11 + +#define MAX_HOST_NAME_ENCODED 200 /* need space for reply */ #define MAX_HOST_NAME_DECODED DECODED_LEN((MAX_HOST_NAME_ENCODED)) #define ENCODED_LEN(len) (((len) + (((len) / 63) + 1))) -#define DECODED_LEN(len) (((len) - (((len) / 63) + 1))) +#define DECODED_LEN(len) ( ((len)>0) ? (((len) - (((len) / 63) + 1))) : 0) + +/* USE EDNS or std DNS */ +#define MAX_ENCODE_DATA(len, dns_size) \ + ( \ + (((len)+RR_HDR_SIZE) > (dns_size - AUTHORITATIVE_SIZE)) ? 0 : \ + DECODED_LEN(DECODED_BASE64_SIZE(\ + ( (dns_size - AUTHORITATIVE_SIZE) - (len) - (RR_HDR_SIZE)) ) \ + )) + +#define MAX_RAW_DATA(len, dns_size) \ + ( \ + (((len)+RR_HDR_SIZE) > (dns_size - AUTHORITATIVE_SIZE)) ? 0 : \ + DECODED_BASE64_SIZE(\ + ( (dns_size - AUTHORITATIVE_SIZE) - (len) - (RR_HDR_SIZE) ) ) \ + ) -#define MAX_TXT_DATA(len) \ - (DECODED_LEN(DECODE_BASE64_SIZE(\ - (MAX_REQ_LEN - (\ - (len) + \ - RR_HDR_SIZE + sizeof(uint16_t) + 1 )\ - )))) -#define AUTHORITATIVE_SIZE 0x40 /* should be better define ... */ +#define AUTHORITATIVE_SIZE 50 /* should be better defined ... */ /* Additional record + Authoritative nameserver */ -#define TXT_DATA_AVAILABLE(len, query_len) (client->control.use_compress) ? \ - ((MAX_TXT_DATA((len) + (AUTHORITATIVE_SIZE)))) : \ - ((MAX_TXT_DATA((len) + (query_len) + (AUTHORITATIVE_SIZE)))) +#define ENCODE_DATA_AVAILABLE(len, query_len, dns_size) (client && (client->control.use_compress)) ? \ + ((MAX_ENCODE_DATA((len + 2), (dns_size)))) : \ + ((MAX_ENCODE_DATA((len + query_len), (dns_size)))) + +#define RAW_DATA_AVAILABLE(len, query_len, dns_size) (client && (client->control.use_compress)) ? \ + ((MAX_RAW_DATA((len + 2), (dns_size)))) : \ + ((MAX_RAW_DATA((len + query_len), (dns_size)))) -#define MAX_QNAME_DATA(domain) (DECODE_BASE64_SIZE(MAX_HOST_NAME_DECODED - strlen(domain) - 1)) +/* +#define ENCODE_DATA_AVAILABLE(len, query_len, dns_size) (client && (client->control.use_compress)) ? \ + ((MAX_ENCODE_DATA((len) + 2, (dns_size + 1)))) : \ + ((MAX_ENCODE_DATA((len) + (query_len), (dns_size)))) + +#define RAW_DATA_AVAILABLE(len, query_len, dns_size) (client && (client->control.use_compress)) ? \ + ((MAX_RAW_DATA((len) + 2, (dns_size + 1)))) : \ + ((MAX_RAW_DATA((len) + (query_len), (dns_size)))) +*/ +#define MAX_QNAME_DATA(domain) (DECODED_BASE64_SIZE(MAX_HOST_NAME_DECODED - strlen(domain) - 1)) /* GCC alignement padding workaround */ @@ -69,29 +95,49 @@ #define COMPRESS_FLAG 0xC000 #define GET_DECOMPRESS_OFFSET(offset) ((ntohs(offset)) & ~(COMPRESS_FLAG)) -/* Just like that */ +/* Why not */ #define MAX_COMPRESS_DEPTH 10 /* Network order */ #define PUT_16(dst, src) do \ {\ - ((unsigned char *)(dst))[0] = ((src) & 0xff00) >> 8; \ - ((unsigned char *)(dst))[1] = ((src) & 0xff); \ + ((unsigned char *)(dst))[0] = (uint8_t) ((src ) >> 8) ; \ + ((unsigned char *)(dst))[1] = (uint8_t) (src) ; \ + } while (0) + +#define PUT_32(dst, src) do \ + {\ + ((unsigned char *)(dst))[0] = (uint8_t) ((src ) >> 24) ; \ + ((unsigned char *)(dst))[1] = (uint8_t) ((src ) >> 16) ; \ + ((unsigned char *)(dst))[2] = (uint8_t) ((src ) >> 8) ; \ + ((unsigned char *)(dst))[3] = (uint8_t) (src) ; \ } while (0) /* Host order */ #define GET_16(src) ((((unsigned char *)(src))[0] << 8) | (((unsigned char *)(src))[1]) ) +#define GET_32(src) (\ + (((unsigned char *)(src))[0] << 24) | \ + (((unsigned char *)(src))[1] << 16) | \ + (((unsigned char *)(src))[2] << 8) | \ + (((unsigned char *)(src))[3] ) \ + ) + +/* FIXME hardcoded '=' is bad ! (check base64_padding ...) */ +#define RESOURCE "=resource." +#define AUTH "=auth." +#define CONNECT "=connect." + struct dns_hdr { uint16_t id; #ifndef WORDS_BIGENDIAN uint16_t rd:1, /* recurse demand */ - tc:1, - aa:1, + tc:1, /* truncated */ + aa:1, /* authorative */ opcode:4, - qr:1, + qr:1, rcode:4, z:3, ra:1; /* recurse available */ @@ -111,11 +157,11 @@ #define RCODE_NAME_ERR 0x3 #define RCODE_NOT_IMPLEMENTED 0x4 #define RCODE_REFUSED 0x3 - uint16_t qdcount; /* quries number */ - uint16_t ancount; - uint16_t nscount; - uint16_t arcount; -}; + uint16_t qdcount; /* nb queries */ + uint16_t ancount; /* nb answers */ + uint16_t nscount; /* authority records */ + uint16_t arcount; /* additional records */ +} __attribute__((packed)); #define MAX_DNS_ERROR 6 @@ -124,7 +170,7 @@ struct req_hdr { uint16_t qtype; /* TXT */ uint16_t qclass; /* IN | CHAOS */ -}; +} __attribute__((packed)); struct rr_hdr { uint16_t type; @@ -134,13 +180,25 @@ #define CLASS_IN 1 uint32_t ttl; uint16_t rdlength; -}; +} __attribute__((packed)); + +struct add_record { + uint8_t name; + uint16_t type; +#define TYPE_EDNS 41 + uint16_t payload_size; + uint8_t rcode; + uint8_t version; + uint16_t z; + uint16_t length; +} __attribute__((packed)); void dns_simple_decode(char *input, char *output, int max_len); +void dns_simple_decode_strip_dot(char *input, char *output, int max_len); void dns_encode(char *); void *jump_end_query(void *, int, int); -#ifndef _WIN32 -int strnlen(char *, int len); -#endif +void *jump_qname(void *, int); +void *jump_end_answer(void *buffer, int max_len); +void *jump_edns(void *buffer, int max_len); #endif diff -Nru dns2tcp-0.4.dfsg/common/includes/hmac_sha1.h dns2tcp-0.5.2/common/includes/hmac_sha1.h --- dns2tcp-0.4.dfsg/common/includes/hmac_sha1.h 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/common/includes/hmac_sha1.h 2010-05-19 12:40:42.000000000 +0100 @@ -0,0 +1,60 @@ +/* +** Copyright (C) 2006 Olivier DEMBOUR +** $Id: hmac_sha1.h,v 1.1.2.2 2010/05/19 11:40:42 dembour Exp $ +** +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with This program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + + +/** + * + * Copyright (C) 2006-2010, Paul Bakker + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef HMAC_SHA1_H +#define HMAC_SHA1_H + +typedef struct +{ + unsigned long total[2]; /*!< number of bytes processed */ + unsigned long state[5]; /*!< intermediate digest state */ + unsigned char buffer[64]; /*!< data block being processed */ + + unsigned char ipad[64]; /*!< HMAC: inner padding */ + unsigned char opad[64]; /*!< HMAC: outer padding */ +} sha1_context; + + +void sha1_hmac( const unsigned char *key, int keylen, + const unsigned char *input, int ilen, + unsigned char output[20] ); + +#endif /* HMAC_SHA1_H */ diff -Nru dns2tcp-0.4.dfsg/common/includes/list.h dns2tcp-0.5.2/common/includes/list.h --- dns2tcp-0.4.dfsg/common/includes/list.h 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/common/includes/list.h 2009-12-28 15:11:17.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: list.h,v 1.8 2007/02/13 10:31:14 collignon Exp $ +** $Id: list.h,v 1.14.4.3 2009/12/28 15:11:17 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -21,12 +21,13 @@ #ifndef __LIST_H__ #define __LIST_H__ +#include #ifndef _WIN32 #include -#include #include #include -#define socket_t int +typedef int socket_t; +typedef pid_t process_t; #else #include "mywin32.h" #endif @@ -46,8 +47,9 @@ uint16_t num_seq; /* for data */ uint16_t port; /* for server config */ } info; - char data[MAX_REQ_LEN]; + char data[MAX_EDNS_LEN + 1]; int len; + /* peer define in server or client */ struct s_control_peer peer; struct timeval timeout; struct s_list *next; @@ -55,14 +57,18 @@ typedef struct s_simple_list { uint16_t num_seq; /* first seq acceptable */ - uint16_t cookie; - socket_t sd_tcp; + uint16_t session_id; +#define sd_tcp fd_ro /* for server side compatibility */ + socket_t fd_ro; + socket_t fd_wo; + process_t pid; struct s_list *queue; + struct s_list *saved_queue; struct s_simple_list *next; struct s_control control; /* different in client and server */ } t_simple_list; -#define FREE_CELL(cell) {cell->status = FREE; } +#define FREE_CELL(cell) {cell->status = FREE;} #define LOCK_CELL(cell) {cell->status = USED;} t_list *list_create_cell(); diff -Nru dns2tcp-0.4.dfsg/common/includes/my_config.h dns2tcp-0.5.2/common/includes/my_config.h --- dns2tcp-0.4.dfsg/common/includes/my_config.h 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/common/includes/my_config.h 2009-09-01 13:16:25.000000000 +0100 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: my_config.h,v 1.1 2007/05/29 14:51:14 dembour Exp $ +** $Id: my_config.h,v 1.1.6.1 2009/09/01 12:16:25 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -32,5 +32,6 @@ #define CONFIG_FILE_LEN 256 int read_config(char *, void *, int (*f)(void *, char *, char *), char *); +int get_next_line(char *, int , FILE *); #endif /* __CONFIG_H__ */ diff -Nru dns2tcp-0.4.dfsg/common/includes/mycrypto.h dns2tcp-0.5.2/common/includes/mycrypto.h --- dns2tcp-0.4.dfsg/common/includes/mycrypto.h 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/common/includes/mycrypto.h 2010-06-16 09:40:10.000000000 +0100 @@ -0,0 +1,31 @@ +/* +** Copyright (C) 2006 Olivier DEMBOUR +** $Id: mycrypto.h,v 1.2.4.1 2010/06/16 08:40:10 dembour Exp $ +** +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with This program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + + +#ifndef __MYCRYPTO_H__ +#define __MYCRYPTO_H__ + +#define CHALLENGE_SIZE 16 +#define SHA1_SIZE 20 + +void alphanum_random(char *buffer, int len); +int sign_challenge(char *, int, char *, char *, int); + +#endif diff -Nru dns2tcp-0.4.dfsg/common/includes/myerror.h dns2tcp-0.5.2/common/includes/myerror.h --- dns2tcp-0.4.dfsg/common/includes/myerror.h 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/common/includes/myerror.h 2009-09-07 18:11:57.000000000 +0100 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: myerror.h,v 1.2 2007/01/16 15:31:55 dembour Exp $ +** $Id: myerror.h,v 1.2.6.1 2009/09/07 17:11:57 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -23,20 +23,11 @@ #include -#ifndef _WIN32 #define MYERROR(fmt, args...) \ { \ fprintf(stderr, "Error %s:%d ", __FILE__, __LINE__); \ fprintf(stderr, fmt, ##args); \ fprintf(stderr, "\n"); \ } -#else -#define MYERROR(fmt, ...) \ -{ \ - fprintf(stderr, "Error %s:%d ", __FILE__, __LINE__); \ - fprintf(stderr, ##fmt); \ - fprintf(stderr, "\n"); \ - } -#endif #endif diff -Nru dns2tcp-0.4.dfsg/common/includes/mywin32.h dns2tcp-0.5.2/common/includes/mywin32.h --- dns2tcp-0.4.dfsg/common/includes/mywin32.h 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/common/includes/mywin32.h 2009-12-28 15:11:17.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Nicolas COLLIGNON -** $Id: mywin32.h,v 1.4 2007/02/13 10:31:14 collignon Exp $ +** $Id: mywin32.h,v 1.5.4.4 2009/12/28 15:11:17 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -21,34 +21,25 @@ #ifndef __MY_WIN32_H__ #define __MY_WIN32_H__ -#include - -typedef unsigned char uint8_t; -typedef signed char int8_t; -typedef unsigned short uint16_t; -typedef signed short int16_t; -typedef unsigned long uint32_t; -typedef signed long int32_t; - -#define socket_t SOCKET +#ifndef _WIN32_WINNT +#define _WIN32_WINNT 0x0501 +#endif -#define getpid GetCurrentProcessId +#include +#include +#include -#define strncasecmp _strnicmp +typedef SOCKET socket_t; +typedef HANDLE process_t; -#define read(f,b,l) recv(f, b, (int) l, 0) -#define write(f,b,l) send(f, b, (int) l, 0) +#define getpid GetCurrentProcessId -#define close closesocket +#define strncasecmp _strnicmp -extern char *optarg; -int getopt(int, char * const *, const char *); +#define read(f,b,l) recv(f, b, (int) l, 0) +#define write(f,b,l) send(f, b, (int) l, 0) -int __inline gettimeofday(struct timeval *tv, void *bla) -{ - tv->tv_sec = (long) time(NULL); - tv->tv_usec = 0; - return 0; -} +#define close closesocket +#define HANDLE_SIZE 1024 #endif diff -Nru dns2tcp-0.4.dfsg/common/includes/packet.h dns2tcp-0.5.2/common/includes/packet.h --- dns2tcp-0.4.dfsg/common/includes/packet.h 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/common/includes/packet.h 2010-01-06 12:50:40.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: packet.h,v 1.6 2007/01/29 17:47:44 dembour Exp $ +** $Id: packet.h,v 1.9.4.1 2010/01/06 12:50:40 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -25,6 +25,7 @@ #include #include #include +#include #else #include "mywin32.h" #endif @@ -34,16 +35,8 @@ /* type */ -#define OK 0x0 -#define DESAUTH 0x1 -#define ERR 0x2 -#define AUTH 0x3 -#define NOP 0x4 -#define DATA (1 << 3) -#define ACK (1 << 4) -#define NACK (1 << 5) -#define USE_COMPRESS (1 << 6) + /* end type */ @@ -52,24 +45,53 @@ */ #define MAX_ERROR_SIZE 64 -#define ERR_RESSOURCE "Ressource Unknown" +#define ERR_RESOURCE "Resource Unknown" #define ERR_CONN_REFUSED "Connexion refused" +#define ERR_AUTH_FAILED "Authentication Failed" #define ERR_BAD_SEQ "Bad seq number" + #undef MIN #define MIN(a,b) ((a) > (b) ? (b) : (a)) -/* Avoid padding error */ -#define PACKET_LEN 7 +#define PACKET_LEN (sizeof(t_packet)) #define MAX_SEQ 0xffff +typedef struct s_trace { + uint16_t max_packet_size; + uint16_t session_reply_size; + uint16_t data_reply_size; + uint8_t enable_multi_reply; + uint16_t len_request; + uint8_t request_type; +#define SEND_ONCE 0 +#define SEND_FRAG 1 +} __attribute__((packed)) t_trace; + + typedef struct s_packet { - uint16_t cookie; + uint16_t session_id; uint16_t ack_seq; uint16_t seq; uint8_t type; -} t_packet; +#define OK 0x0 +#define DESAUTH 0x1 +#define ERR 0x2 +#define NOP 0x4 +#define CHECK_MTU 0x6 + +#define DATA (1 << 3) +#define ACK (1 << 4) +#define NACK (1 << 5) +#define USE_COMPRESS (1 << 6) +} __attribute__((packed)) t_packet; + /* DATA goes after */ +typedef struct s_data { + char *buffer; + int len; +} t_data; + #endif diff -Nru dns2tcp-0.4.dfsg/common/list.c dns2tcp-0.5.2/common/list.c --- dns2tcp-0.4.dfsg/common/list.c 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/common/list.c 2009-04-30 15:04:59.000000000 +0100 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: list.c,v 1.2 2007/01/16 15:31:55 dembour Exp $ +** $Id: list.c,v 1.3 2009/04/30 14:04:59 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -25,6 +25,13 @@ #include "list.h" #include "myerror.h" +/** + * @brief create an empty list + * @retval list + * @retval 0 on error + * @retval list on success + **/ + t_simple_list *list_create_simple_cell() { t_simple_list *list; @@ -35,6 +42,14 @@ return (list); } +/** + * @brief create a cell + * @retval cell + * @retval 0 on error + * @retval list on success + **/ + + t_list *list_create_cell() { t_list *list; @@ -46,6 +61,14 @@ return (list); } +/** + * @brief add the simple cell to the list + * @param[in] list simple list + * @param[in] cell + * @retval 0 on error + * @retval 1 on success + **/ + int list_add_simple_cell(t_simple_list *list, t_simple_list *cell) { t_simple_list *ptr; @@ -59,6 +82,14 @@ return (1); } +/** + * @brief add the cell to the simple list struct + * @param[in] list list + * @param[in] cell + * @retval 0 on error + * @retval 1 on success + **/ + int list_add_cell(t_list *list, t_list *cell) { t_list *ptr; @@ -72,6 +103,11 @@ return (1); } +/** + * @brief free cell in list + * @param[in] cell + **/ + int list_destroy_cell(t_list *cell) { if (!cell) @@ -81,6 +117,11 @@ return (0); } +/** + * @brief free simple cell in list + * @param[in] cell + **/ + int list_destroy_simple_cell(t_simple_list *cell) { if (!cell) diff -Nru dns2tcp-0.4.dfsg/common/memdump.c dns2tcp-0.5.2/common/memdump.c --- dns2tcp-0.4.dfsg/common/memdump.c 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/common/memdump.c 2008-08-04 16:31:07.000000000 +0100 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: memdump.c,v 1.3 2007/01/26 16:13:44 collignon Exp $ +** $Id: memdump.c,v 1.4 2008/08/04 15:31:07 dembour Exp $ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by @@ -32,19 +32,19 @@ buffer[4*LINE_LEN] = 0; buffer[(4*LINE_LEN)+1] = 0; if (!(idx % LINE_LEN) && (idx < len)) - printf("0x%x\t", idx); + fprintf(stderr, "0x%x\t", idx); do { sprintf(&buffer[3*(idx%LINE_LEN)], "%.2X ", (*(memory+idx)) & 0xff ); buffer[(3*LINE_LEN) + (idx%LINE_LEN) +1] = GET_CHAR(*(memory+idx)); } while ((++idx % LINE_LEN) && (idx < len)); buffer[3*((idx-1)%LINE_LEN)+3] = ' '; - printf("%s\n", buffer); + fprintf(stderr, "%s\n", buffer); return ((idx < len)? memdump2(memory, len, idx): 1); } void memdump(void *memory, int len) { - printf("\n"); + fprintf(stderr, "\n"); memdump2((char *)memory, len, 0); - printf("\n"); + fprintf(stderr, "\n"); } diff -Nru dns2tcp-0.4.dfsg/common/mycrypto.c dns2tcp-0.5.2/common/mycrypto.c --- dns2tcp-0.4.dfsg/common/mycrypto.c 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/common/mycrypto.c 2010-06-16 09:40:10.000000000 +0100 @@ -0,0 +1,69 @@ +/* +** Copyright (C) 2006 Olivier DEMBOUR +** $Id: mycrypto.c,v 1.4.4.6 2010/06/16 08:40:10 dembour Exp $ +** +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with This program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include +#include "hmac_sha1.h" +#include "mycrypto.h" + +static const char charset[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + +void alphanum_random(char *buffer, int len) +{ + buffer[len] = 0; + + while (len--) + buffer[len] = charset[rand() % (sizeof(charset)-1)]; +} + +/** + * @brief interface to an HMAC function + * @param[in] input data to sign + * @param[in] len input len + * @param[in] key key for HMAC + * @param[out] output output + * @param[in] max_len max output len + **/ + +int sign_challenge(char *input, int len, + char *key, char *output, int max_len) +{ + unsigned char sha1sum[SHA1_SIZE+1]; + unsigned int output_len = SHA1_SIZE; + int i=0; + + sha1_hmac( + key ? (unsigned char *)key : (unsigned char *)"", + key ? strlen(key) : 0, + (unsigned char *)input, + len, + sha1sum + ); + if (output_len*2 < max_len) + { + for (i = 0; i < output_len; i++) + sprintf(output + 2*i, "%.2X", sha1sum[i]&0xff); + output[2*i] = 0; + } + return (2*i); +} + + diff -Nru dns2tcp-0.4.dfsg/config.guess dns2tcp-0.5.2/config.guess --- dns2tcp-0.4.dfsg/config.guess 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/config.guess 2009-11-04 02:06:26.000000000 +0000 @@ -0,0 +1,1533 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. + +timestamp='2009-06-10' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:[3456]*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T | authenticamd | genuineintel) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +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` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff -Nru dns2tcp-0.4.dfsg/config.h.in dns2tcp-0.5.2/config.h.in --- dns2tcp-0.4.dfsg/config.h.in 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/config.h.in 2010-06-16 09:52:46.000000000 +0100 @@ -1,5 +1,8 @@ /* config.h.in. Generated from configure.in by autoheader. */ +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H @@ -27,6 +30,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H +/* Define to 1 if you have the header file. */ +#undef HAVE_WINSOCK2_H + /* Name of package */ #undef PACKAGE @@ -42,6 +48,9 @@ /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME +/* Define to the home page for this package. */ +#undef PACKAGE_URL + /* Define to the version of this package. */ #undef PACKAGE_VERSION @@ -51,6 +60,14 @@ /* Version number of package */ #undef VERSION -/* Define to 1 if your processor stores words with the most significant byte - first (like Motorola and SPARC, unlike Intel and VAX). */ -#undef WORDS_BIGENDIAN +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif diff -Nru dns2tcp-0.4.dfsg/config.sub dns2tcp-0.5.2/config.sub --- dns2tcp-0.4.dfsg/config.sub 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/config.sub 2009-11-04 02:06:26.000000000 +0000 @@ -0,0 +1,1693 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. + +timestamp='2009-06-11' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff -Nru dns2tcp-0.4.dfsg/configure dns2tcp-0.5.2/configure --- dns2tcp-0.4.dfsg/configure 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/configure 2010-06-16 09:52:39.000000000 +0100 @@ -1,60 +1,83 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61 for dns2tcp 0.4. +# Generated by GNU Autoconf 2.65 for dns2tcp 0.5.2. +# # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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. ## -## --------------------- ## +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +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 + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; esac - fi - - -# PATH needs CR -# 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=';' +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' else - PATH_SEPARATOR=: + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' fi - rm -f conf$$.sh + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' fi -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi @@ -63,20 +86,18 @@ # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) -as_nl=' -' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. -case $0 in +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 + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done IFS=$as_save_IFS ;; @@ -87,354 +108,321 @@ as_myself=$0 fi if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 fi -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done 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) >/dev/null 2>&1 && $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; 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'` +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE # CDPATH. -$as_unset CDPATH - +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then - if (eval ":") 2>/dev/null; then - as_have_required=yes + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST else - as_have_required=no + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac fi - - if test $as_have_required = yes && (eval ": -(as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes else - exitcode=1 - echo positional parameters were not saved. + as_have_required=no fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : -test \$exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=\$LINENO - as_lineno_2=\$LINENO - test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && - test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } -") 2> /dev/null; then - : else - as_candidate_shells= - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - case $as_dir in + as_found=: + case $as_dir in #( /*) for as_base in sh bash ksh sh5; do - as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi done;; esac + as_found=false done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } IFS=$as_save_IFS - for as_shell in $as_candidate_shells $SHELL; do - # Try only shells that exist, to save several forks. - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { ("$as_shell") 2> /dev/null <<\_ASEOF -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+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 fi - - -: -_ASEOF -}; then - CONFIG_SHELL=$as_shell - as_have_required=yes - if { "$as_shell" 2> /dev/null <<\_ASEOF -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+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS - -: -(as_func_return () { - (exit $1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} } +as_unset=as_fn_unset -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi -if ( set x; as_func_ret_success y && test x = "$1" ); then - : +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' else - exitcode=1 - echo positional parameters were not saved. -fi - -test $exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } - -_ASEOF -}; then - break -fi - -fi - - done - - if test "x$CONFIG_SHELL" != x; then - for as_var in BASH_ENV ENV - do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - done - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - - if test $as_have_required = no; then - echo This script requires a shell more modern than all the - echo shells that I found on your system. Please install a - echo modern shell, or manually run the script under such a - echo shell if you do have one. - { (exit 1); exit 1; } -fi - - -fi - -fi - + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith -(eval "as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error -exitcode=0 -if as_func_success; then - : +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. + as_expr=false fi -if as_func_ret_success; then - : +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. + as_basename=false fi -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname else - exitcode=1 - echo positional parameters were not saved. + as_dirname=false fi -test \$exitcode = 0") || { - echo No shell found that supports shell functions. - echo Please tell autoconf@gnu.org about your system, - echo including any error possibly output before this - echo message -} +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` +# 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 - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # 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 after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, 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 - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= @@ -451,8 +439,7 @@ s/-\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; }; } + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_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 @@ -462,49 +449,40 @@ exit } - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in +case `echo -n x` in #((((( -n*) - case `echo 'x\c'` in + case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir - mkdir conf$$.dir + mkdir conf$$.dir 2>/dev/null fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln + fi else as_ln_s='cp -p' fi @@ -512,7 +490,7 @@ rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false @@ -529,12 +507,12 @@ as_test_x=' eval sh -c '\'' if test -d "$1"; then - test -d "$1/."; + test -d "$1/."; else - case $1 in - -*)set "./$1";; + case $1 in #( + -*)set "./$1";; esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' @@ -548,8 +526,8 @@ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - -exec 7<&0 &1 +test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, @@ -567,14 +545,14 @@ subdirs= MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='dns2tcp' PACKAGE_TARNAME='dns2tcp' -PACKAGE_VERSION='0.4' -PACKAGE_STRING='dns2tcp 0.4' +PACKAGE_VERSION='0.5.2' +PACKAGE_STRING='dns2tcp 0.5.2' PACKAGE_BUGREPORT='' +PACKAGE_URL='' ac_unique_file="client/main.c" # Factoring default headers for most tests. @@ -613,87 +591,107 @@ # 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 -datarootdir -datadir -sysconfdir -sharedstatedir -localstatedir -includedir -oldincludedir -docdir -infodir -htmldir -dvidir -pdfdir -psdir -libdir -localedir -mandir -DEFS -ECHO_C -ECHO_N -ECHO_T -LIBS -build_alias -host_alias -target_alias -INSTALL_PROGRAM -INSTALL_SCRIPT -INSTALL_DATA -am__isrc -CYGPATH_W -PACKAGE -VERSION -ACLOCAL -AUTOCONF -AUTOMAKE -AUTOHEADER -MAKEINFO -install_sh -STRIP -INSTALL_STRIP_PROGRAM -mkdir_p -AWK -SET_MAKE -am__leading_dot -AMTAR -am__tar -am__untar -CC -CFLAGS -LDFLAGS -CPPFLAGS -ac_ct_CC -EXEEXT -OBJEXT -DEPDIR -am__include -am__quote -AMDEP_TRUE -AMDEP_FALSE -AMDEPBACKSLASH -CCDEPMODE -am__fastdepCC_TRUE -am__fastdepCC_FALSE -CPP -GREP -EGREP +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS LIBOBJS -LTLIBOBJS' +EGREP +GREP +CPP +MAN_PAGES +DIRECTORIES +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +with_server +with_client +' ac_precious_vars='build_alias host_alias target_alias @@ -708,6 +706,8 @@ # Initialize some variables set by options. ac_init_help= ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null @@ -806,13 +806,20 @@ datarootdir=$ac_optarg ;; -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + ac_useropt=`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 ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; @@ -825,13 +832,20 @@ dvidir=$ac_optarg ;; -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + ac_useropt=`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'` - eval enable_$ac_feature=\$ac_optarg ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ @@ -1022,22 +1036,36 @@ ac_init_version=: ;; -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + ac_useropt=`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'` - eval with_$ac_package=\$ac_optarg ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + ac_useropt=`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 ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. @@ -1057,25 +1085,25 @@ | --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; }; } + -*) as_fn_error "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information." ;; *=*) 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; }; } + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error "invalid variable name: \`$ac_envvar'" ;; + esac 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 + $as_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 + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; @@ -1084,23 +1112,36 @@ 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; }; } + as_fn_error "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac fi -# Be sure to have absolute directory names. +# Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac - { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; } + as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' @@ -1114,7 +1155,7 @@ 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. + $as_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 @@ -1130,23 +1171,21 @@ ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - { echo "$as_me: error: Working directory cannot be determined" >&2 - { (exit 1); exit 1; }; } + as_fn_error "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - { echo "$as_me: error: pwd does not report name of working directory" >&2 - { (exit 1); exit 1; }; } + as_fn_error "pwd does not report name of working directory" # 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 the parent directory. - ac_confdir=`$as_dirname -- "$0" || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X"$0" | + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1173,13 +1212,11 @@ fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } + as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 - { (exit 1); exit 1; }; } + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then @@ -1205,7 +1242,7 @@ # 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 dns2tcp 0.4 to adapt to many kinds of systems. +\`configure' configures dns2tcp 0.5.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1227,9 +1264,9 @@ Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] + [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] + [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify @@ -1239,25 +1276,25 @@ 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] - --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] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/dns2tcp] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --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] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/dns2tcp] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF @@ -1266,34 +1303,46 @@ --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of dns2tcp 0.4:";; + short | recursive ) echo "Configuration of dns2tcp 0.5.2:";; esac cat <<\_ACEOF Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --without-server without server (default is no) + --without-client without client (default is no) + 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 LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + CPPFLAGS (Objective) 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. +Report bugs to the package provider. _ACEOF ac_status=$? fi @@ -1301,15 +1350,17 @@ if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1345,7 +1396,7 @@ echo && $SHELL "$ac_srcdir/configure" --help=recursive else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1354,22 +1405,306 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -dns2tcp configure 0.4 -generated by GNU Autoconf 2.61 +dns2tcp configure 0.5.2 +generated by GNU Autoconf 2.65 -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +Copyright (C) 2009 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 fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_compile + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by dns2tcp $as_me 0.4, which was -generated by GNU Autoconf 2.61. Invocation command line was +It was created by dns2tcp $as_me 0.5.2, which was +generated by GNU Autoconf 2.65. Invocation command line was $ $0 $@ @@ -1405,8 +1740,8 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done + $as_echo "PATH: $as_dir" + done IFS=$as_save_IFS } >&5 @@ -1440,12 +1775,12 @@ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" + as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else @@ -1461,13 +1796,13 @@ -* ) ac_must_keep_next=true ;; esac fi - ac_configure_args="$ac_configure_args '$ac_arg'" + as_fn_append ac_configure_args " '$ac_arg'" ;; 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; } +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there @@ -1492,12 +1827,13 @@ case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done @@ -1526,9 +1862,9 @@ do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - echo "$ac_var='\''$ac_val'\''" + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo @@ -1543,9 +1879,9 @@ do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - echo "$ac_var='\''$ac_val'\''" + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi @@ -1561,83 +1897,88 @@ echo fi test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r 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 + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h +$as_echo "/* confdefs.h */" > 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 +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + # Let the site file select an alternate cache file if it wants to. -# Prefer explicitly selected file to automatically selected ones. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - set x "$CONFIG_SITE" + ac_site_file1=$CONFIG_SITE elif test "x$prefix" != xNONE; then - set x "$prefix/share/config.site" "$prefix/etc/config.site" + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site else - set x "$ac_default_prefix/share/config.site" \ - "$ac_default_prefix/etc/config.site" + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site fi -shift -for ac_site_file +for ac_site_file in "$ac_site_file1" "$ac_site_file2" 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;} + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_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;} + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_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;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi @@ -1651,68 +1992,56 @@ 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;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_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;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_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=: + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} 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=`$as_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'" ;; + *) as_fn_append 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 - - - - - - - - - - - - - - - - - - - - - - - - + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -1722,28 +2051,20 @@ -am__api_version='1.10' +am__api_version='1.11' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi + for ac_t in install-sh install.sh shtool; do + if test -f "$ac_dir/$ac_t"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/$ac_t -c" + break 2 + fi + done done if test -z "$ac_aux_dir"; then - { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 -echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, @@ -1768,22 +2089,23 @@ # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. -{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test "${ac_cv_path_install+set}" = set; then : + $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in - ./ | .// | /cC/* | \ + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. @@ -1801,17 +2123,29 @@ # program-specific install script used by HP pwplus--don't use. : else - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi fi fi done done ;; esac -done + + done IFS=$as_save_IFS +rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then @@ -1824,8 +2158,8 @@ INSTALL=$ac_install_sh fi fi -{ echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -1835,21 +2169,34 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5 -echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` + set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ @@ -1859,65 +2206,172 @@ # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". - { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&5 -echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 fi - test "$2" = conftest.file - ) -then - # Ok. - : + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } else - { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! -Check your system clock" >&5 -echo "$as_me: error: newly created file is older than distributed files! -Check your system clock" >&2;} - { (exit 1); exit 1; }; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -{ echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. echo might interpret backslashes. -# By default was `s,x,x', remove it if useless. -cat <<\_ACEOF >conftest.sed -s/[\\$]/&&/g;s/;s,x,x,$// -_ACEOF -program_transform_name=`echo $program_transform_name | sed -f conftest.sed` -rm -f conftest.sed -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` - -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi else - am_missing_run= - { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 -echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} + STRIP="$ac_cv_prog_STRIP" +fi + fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -{ echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 -echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then - if test "${ac_cv_path_mkdir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test "${ac_cv_path_mkdir+set}" = set; then : + $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do + for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( @@ -1929,11 +2383,12 @@ esac done done -done + done IFS=$as_save_IFS fi + test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else @@ -1941,12 +2396,11 @@ # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. - test -d ./--version && rmdir ./--version MKDIR_P="$ac_install_sh -d" fi fi -{ echo "$as_me:$LINENO: result: $MKDIR_P" >&5 -echo "${ECHO_T}$MKDIR_P" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in @@ -1958,10 +2412,10 @@ 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_AWK+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. @@ -1971,36 +2425,37 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - { echo "$as_me:$LINENO: result: $AWK" >&5 -echo "${ECHO_T}$AWK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi test -n "$AWK" && break done -{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } -set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh @@ -2017,12 +2472,12 @@ rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } SET_MAKE= else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -2041,9 +2496,7 @@ am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then - { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 -echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi @@ -2059,7 +2512,7 @@ # Define the identity of the package. PACKAGE='dns2tcp' - VERSION='0.4' + VERSION='0.5.2' cat >>confdefs.h <<_ACEOF @@ -2087,112 +2540,6 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} -install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; 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_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; 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_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. @@ -2215,10 +2562,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2228,25 +2575,25 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2255,10 +2602,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -2268,25 +2615,25 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS 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; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then @@ -2294,12 +2641,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -2312,10 +2655,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2325,25 +2668,25 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2352,10 +2695,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2366,18 +2709,18 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then @@ -2396,11 +2739,11 @@ fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2411,10 +2754,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2424,25 +2767,25 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2455,10 +2798,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -2468,25 +2811,25 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS 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; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2498,12 +2841,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -2513,51 +2852,37 @@ 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; }; } +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "no acceptable C compiler found in \$PATH +See \`config.log' for more details." "$LINENO" 5; } # Provide some information about the compiler. -echo "$as_me:$LINENO: checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2569,42 +2894,38 @@ } _ACEOF ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe b.out" +ac_clean_files="$ac_clean_files a.out a.out.dSYM 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[^ ]*//'` -# -# List of possible output files, starting from the most likely. -# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) -# only as a last resort. b.out is created by i960 compilers. -ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' -# -# The IRIX 6 linker writes into existing files which may not be -# executable, retaining their permissions. Remove them first so a -# subsequent execution test works. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + ac_rmfiles= for ac_file in $ac_files do case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles -if { (ac_try="$ac_link_default" +if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, @@ -2614,14 +2935,14 @@ do test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi @@ -2640,78 +2961,42 @@ else ac_file='' fi - -{ echo "$as_me:$LINENO: result: $ac_file" >&5 -echo "${ECHO_T}$ac_file" >&6; } -if test -z "$ac_file"; then - echo "$as_me: failed program was:" >&5 +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_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 - +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "C compiler cannot create executables +See \`config.log' for more details." "$LINENO" 5; }; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext -# Check that 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' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - 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 +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -# Check that 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 { (ac_try="$ac_link" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; 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 @@ -2719,37 +3004,90 @@ 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 | *.map | *.inf | *.o | *.obj ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` 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; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$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. */ +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2761,51 +3099,46 @@ } _ACEOF rm -f conftest.o conftest.obj -if { (ac_try="$ac_compile" +if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else - echo "$as_me: failed program was:" >&5 + $as_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; }; } +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of object files: cannot compile +See \`config.log' for more details." "$LINENO" 5; } 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; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2819,92 +3152,49 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_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); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no + ac_compiler_gnu=no fi - rm -f core 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` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS -{ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_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); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - CFLAGS="" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ + ; + return 0; +} _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2915,35 +3205,12 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_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); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_compile "$LINENO"; then : - ac_c_werror_flag=$ac_save_c_werror_flag +else + ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2954,42 +3221,18 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_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); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$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 @@ -3005,18 +3248,14 @@ CFLAGS= fi fi -{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 -echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -3073,31 +3312,9 @@ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_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); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then + if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - fi - rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done @@ -3108,17 +3325,19 @@ # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) - { echo "$as_me:$LINENO: result: none needed" >&5 -echo "${ECHO_T}none needed" >&6; } ;; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; xno) - { echo "$as_me:$LINENO: result: unsupported" >&5 -echo "${ECHO_T}unsupported" >&6; } ;; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" - { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac +if test "x$ac_cv_prog_cc_c89" != xno; then : +fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -3133,44 +3352,44 @@ am_make=${MAKE-make} cat > confinc << 'END' am__doit: - @echo done + @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. -{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 -echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac fi -{ echo "$as_me:$LINENO: result: $_am_result" >&5 -echo "${ECHO_T}$_am_result" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then +if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi @@ -3190,10 +3409,10 @@ depcc="$CC" am_compiler_list= -{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up @@ -3218,6 +3437,11 @@ if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -3235,7 +3459,17 @@ done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -3245,19 +3479,23 @@ break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -3281,8 +3519,8 @@ fi fi -{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if @@ -3296,87 +3534,117 @@ fi -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + +ac_config_headers="$ac_config_headers config.h" + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + + + +# Check whether --with-server was given. +if test "${with_server+set}" = set; then : + withval=$with_server; else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in - ./ | .// | /cC/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - done - done - ;; -esac -done -IFS=$as_save_IFS + + DIRECTORIES=server + MAN_PAGES=dns2tcpd.1 fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi + + + +# Check whether --with-client was given. +if test "${with_client+set}" = set; then : + withval=$with_client; +else + + DIRECTORIES=${DIRECTORIES}" client" + MAN_PAGES=${MAN_PAGES}" dns2tcpc.1" + + fi -{ echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6; } -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' +case "x${host_os}" in + x*mingw*) + # Client only + DIRECTORIES=client + echo "Warning : server will not be build on Windows system" + LIBS="$LIBS -lws2_32 -liphlpapi" + ;; +esac -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -ac_config_headers="$ac_config_headers config.h" @@ -3392,15 +3660,15 @@ 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; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&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 + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" @@ -3414,11 +3682,7 @@ # 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 + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include @@ -3427,76 +3691,34 @@ #endif Syntax error _ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_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 && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_cpp "$LINENO"; then : +else # Broken: fails on valid input. continue fi - rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent 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 + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_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 && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then +if ac_fn_c_try_cpp "$LINENO"; 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 +if $ac_preproc_ok; then : break fi @@ -3508,8 +3730,8 @@ else ac_cv_prog_CPP=$CPP fi -{ echo "$as_me:$LINENO: result: $CPP" >&5 -echo "${ECHO_T}$CPP" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do @@ -3519,11 +3741,7 @@ # 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 + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include @@ -3532,83 +3750,40 @@ #endif Syntax error _ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_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 && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_cpp "$LINENO"; then : +else # Broken: fails on valid input. continue fi - rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent 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 + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_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 && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then +if ac_fn_c_try_cpp "$LINENO"; 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 - : +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; }; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." "$LINENO" 5; } fi ac_ext=c @@ -3618,45 +3793,40 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 -echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } -if test "${ac_cv_path_GREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Extract the first word of "grep ggrep" to use in msg output -if test -z "$GREP"; then -set dummy grep ggrep; ac_prog_name=$2 -if test "${ac_cv_path_GREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 else + if test -z "$GREP"; then ac_path_GREP_found=false -# Loop through the user's path and test for each of PROGNAME-LIST -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue - # Check for GNU ac_path_GREP and select it if it is found. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - echo 'GREP' >> "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` + as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" @@ -3668,77 +3838,61 @@ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac - - $ac_path_GREP_found && break 3 + $ac_path_GREP_found && break 3 + done + done done -done - -done IFS=$as_save_IFS - - -fi - -GREP="$ac_cv_path_GREP" -if test -z "$GREP"; then - { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} - { (exit 1); exit 1; }; } -fi - + if test -z "$ac_cv_path_GREP"; then + as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else ac_cv_path_GREP=$GREP fi - fi -{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 -echo "${ECHO_T}$ac_cv_path_GREP" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" -{ echo "$as_me:$LINENO: checking for egrep" >&5 -echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else - # Extract the first word of "egrep" to use in msg output -if test -z "$EGREP"; then -set dummy egrep; ac_prog_name=$2 -if test "${ac_cv_path_EGREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else + if test -z "$EGREP"; then ac_path_EGREP_found=false -# Loop through the user's path and test for each of PROGNAME-LIST -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue - # Check for GNU ac_path_EGREP and select it if it is found. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - echo 'EGREP' >> "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` + as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" @@ -3750,46 +3904,31 @@ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac - - $ac_path_EGREP_found && break 3 + $ac_path_EGREP_found && break 3 + done + done done -done - -done IFS=$as_save_IFS - - -fi - -EGREP="$ac_cv_path_EGREP" -if test -z "$EGREP"; then - { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} - { (exit 1); exit 1; }; } -fi - + if test -z "$ac_cv_path_EGREP"; then + as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else ac_cv_path_EGREP=$EGREP fi - fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 -echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -3804,47 +3943,23 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_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); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; 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 + ac_cv_header_stdc=no fi - rm -f core 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 + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : + $EGREP "memchr" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -3854,18 +3969,14 @@ 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 + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : + $EGREP "free" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -3875,14 +3986,10 @@ 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 + 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 + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -3909,113 +4016,36 @@ return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_run "$LINENO"; then : -( exit $ac_status ) -ac_cv_header_stdc=no +else + ac_cv_header_stdc=no fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi - fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF +$as_echo "#define STDC_HEADERS 1" >>confdefs.h 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 { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_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); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; 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 core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi @@ -4023,393 +4053,261 @@ done -{ echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 -echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; } -if test "${ac_cv_c_bigendian+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if test "${ac_cv_c_bigendian+set}" = set; then : + $as_echo_n "(cached) " >&6 else - # See if sys/param.h defines the BYTE_ORDER macro. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include -#include + #include int main () { -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \ - && BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN) - bogus endian macros -#endif +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_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); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include -#include + #include int main () { #if BYTE_ORDER != BIG_ENDIAN - not big endian -#endif + not big endian + #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_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); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_c_bigendian=no + ac_cv_c_bigendian=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include - # It does not; compile a test program. -if test "$cross_compiling" = yes; then - # try to guess the endianness by grepping values into an object file - ac_cv_c_bigendian=unknown - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; -short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; -void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; } -short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; -short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; -void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; } +#include + int main () { - _ascii (); _ebcdic (); +#ifndef _BIG_ENDIAN + not big endian + #endif + ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_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); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no fi -if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no 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_c_bigendian=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + ac_cv_c_bigendian=yes fi - - +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 -echo "${ECHO_T}$ac_cv_c_bigendian" >&6; } -case $ac_cv_c_bigendian in - yes) +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) -cat >>confdefs.h <<\_ACEOF -#define WORDS_BIGENDIAN 1 -_ACEOF - ;; - no) - ;; - *) - { { echo "$as_me:$LINENO: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&5 -echo "$as_me: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} - { (exit 1); exit 1; }; } ;; -esac +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + ;; #( + *) + as_fn_error "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + esac for ac_header in sys/types.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&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 { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_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); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; 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 core 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> +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_types_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_TYPES_H 1 _ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_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 && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.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;} - - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } +done -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +for ac_header in winsock2.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" +if test "x$ac_cv_header_winsock2_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_WINSOCK2_H 1 _ACEOF fi done -{ echo "$as_me:$LINENO: checking for library containing gethostent" >&5 -echo $ECHO_N "checking for library containing gethostent... $ECHO_C" >&6; } -if test "${ac_cv_search_gethostent+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostent" >&5 +$as_echo_n "checking for library containing gethostent... " >&6; } +if test "${ac_cv_search_gethostent+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -4434,65 +4332,38 @@ ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then + if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_gethostent=$ac_res -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext - if test "${ac_cv_search_gethostent+set}" = set; then +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_gethostent+set}" = set; then : break fi done -if test "${ac_cv_search_gethostent+set}" = set; then - : +if test "${ac_cv_search_gethostent+set}" = set; then : + else ac_cv_search_gethostent=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ echo "$as_me:$LINENO: result: $ac_cv_search_gethostent" >&5 -echo "${ECHO_T}$ac_cv_search_gethostent" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostent" >&5 +$as_echo "$ac_cv_search_gethostent" >&6; } ac_res=$ac_cv_search_gethostent -if test "$ac_res" != no; then +if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi -{ echo "$as_me:$LINENO: checking for library containing setsockopt" >&5 -echo $ECHO_N "checking for library containing setsockopt... $ECHO_C" >&6; } -if test "${ac_cv_search_setsockopt+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing setsockopt" >&5 +$as_echo_n "checking for library containing setsockopt... " >&6; } +if test "${ac_cv_search_setsockopt+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -4517,55 +4388,34 @@ ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then + if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_setsockopt=$ac_res -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext - if test "${ac_cv_search_setsockopt+set}" = set; then +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_setsockopt+set}" = set; then : break fi done -if test "${ac_cv_search_setsockopt+set}" = set; then - : +if test "${ac_cv_search_setsockopt+set}" = set; then : + else ac_cv_search_setsockopt=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ echo "$as_me:$LINENO: result: $ac_cv_search_setsockopt" >&5 -echo "${ECHO_T}$ac_cv_search_setsockopt" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_setsockopt" >&5 +$as_echo "$ac_cv_search_setsockopt" >&6; } ac_res=$ac_cv_search_setsockopt -if test "$ac_res" != no; then +if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi +# AM_CONDITIONAL(ARCH_WIN32, [ test x$win32 = xtrue ]) + ac_config_files="$ac_config_files Makefile client/Makefile server/Makefile man/Makefile" cat >confcache <<\_ACEOF @@ -4595,12 +4445,13 @@ case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done @@ -4608,8 +4459,8 @@ (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). + # `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" @@ -4632,12 +4483,12 @@ 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 "$as_me:$LINENO: updating cache $cache_file" >&5 -echo "$as_me: updating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else - { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 -echo "$as_me: not updating unwritable cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -4653,38 +4504,43 @@ for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`echo "$ac_i" | sed "$ac_script"` + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. - ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi + : ${CONFIG_STATUS=./config.status} +ac_write_fail=0 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. @@ -4694,59 +4550,79 @@ debug=false ac_cs_recheck=false ac_cs_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +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 + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; esac - fi - - -# PATH needs CR -# 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=';' +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' else - PATH_SEPARATOR=: + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' fi - rm -f conf$$.sh + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' fi -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi @@ -4755,20 +4631,18 @@ # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) -as_nl=' -' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. -case $0 in +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 + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done IFS=$as_save_IFS ;; @@ -4779,32 +4653,111 @@ as_myself=$0 fi if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 fi -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done 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) >/dev/null 2>&1 && $as_unset $as_var - fi -done +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + -# Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr @@ -4818,13 +4771,17 @@ as_basename=false fi +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=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" | +$as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -4839,104 +4796,103 @@ } s/.*/./; q'` -# CDPATH. -$as_unset CDPATH - - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # 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 after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, 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 - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\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 sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi +# 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 ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in +case `echo -n x` in #((((( -n*) - case `echo 'x\c'` in + case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir - mkdir conf$$.dir + mkdir conf$$.dir 2>/dev/null fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln + fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false @@ -4953,12 +4909,12 @@ as_test_x=' eval sh -c '\'' if test -d "$1"; then - test -d "$1/."; + test -d "$1/."; else - case $1 in - -*)set "./$1";; + case $1 in #( + -*)set "./$1";; esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' @@ -4973,13 +4929,19 @@ exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 -# Save the log message, to keep $[0] and so on meaningful, and to +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by dns2tcp $as_me 0.4, which was -generated by GNU Autoconf 2.61. Invocation command line was +This file was extended by dns2tcp $as_me 0.5.2, which was +generated by GNU Autoconf 2.65. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -4992,7 +4954,16 @@ _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" @@ -5000,22 +4971,25 @@ _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. -Usage: $0 [OPTIONS] [FILE]... +Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit - -q, --quiet do not print progress messages + --config print configuration, then exit + -q, --quiet, --silent + 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 + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE Configuration files: $config_files @@ -5026,16 +5000,17 @@ Configuration commands: $config_commands -Report bugs to ." +Report bugs to the package provider." _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -dns2tcp config.status 0.4 -configured by $0, generated by GNU Autoconf 2.61, - with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" +dns2tcp config.status 0.5.2 +configured by $0, generated by GNU Autoconf 2.65, + with options \\"\$ac_cs_config\\" -Copyright (C) 2006 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -5043,11 +5018,12 @@ srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk _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. +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do @@ -5069,34 +5045,40 @@ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - echo "$ac_cs_version"; exit ;; + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header - { echo "$as_me: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; };; + as_fn_error "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; --help | --hel | -h ) - echo "$ac_cs_usage"; exit ;; + $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. - -*) { echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } ;; + -*) as_fn_error "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; - *) ac_config_targets="$ac_config_targets $1" + *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac @@ -5111,27 +5093,29 @@ fi _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then - echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - CONFIG_SHELL=$SHELL + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' export CONFIG_SHELL - exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + exec "\$@" fi _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - echo "$ac_log" + $as_echo "$ac_log" } >&5 _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # @@ -5139,7 +5123,7 @@ _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets @@ -5152,9 +5136,7 @@ "server/Makefile") CONFIG_FILES="$CONFIG_FILES server/Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; - *) { { 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; }; };; + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done @@ -5181,7 +5163,7 @@ trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 + trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. @@ -5192,146 +5174,139 @@ { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") -} || -{ - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} - -# -# Set up the sed scripts for CONFIG_FILES section. -# +} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then -_ACEOF +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do - cat >conf$$subs.sed <<_ACEOF -SHELL!$SHELL$ac_delim -PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim -PACKAGE_NAME!$PACKAGE_NAME$ac_delim -PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim -PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim -PACKAGE_STRING!$PACKAGE_STRING$ac_delim -PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim -exec_prefix!$exec_prefix$ac_delim -prefix!$prefix$ac_delim -program_transform_name!$program_transform_name$ac_delim -bindir!$bindir$ac_delim -sbindir!$sbindir$ac_delim -libexecdir!$libexecdir$ac_delim -datarootdir!$datarootdir$ac_delim -datadir!$datadir$ac_delim -sysconfdir!$sysconfdir$ac_delim -sharedstatedir!$sharedstatedir$ac_delim -localstatedir!$localstatedir$ac_delim -includedir!$includedir$ac_delim -oldincludedir!$oldincludedir$ac_delim -docdir!$docdir$ac_delim -infodir!$infodir$ac_delim -htmldir!$htmldir$ac_delim -dvidir!$dvidir$ac_delim -pdfdir!$pdfdir$ac_delim -psdir!$psdir$ac_delim -libdir!$libdir$ac_delim -localedir!$localedir$ac_delim -mandir!$mandir$ac_delim -DEFS!$DEFS$ac_delim -ECHO_C!$ECHO_C$ac_delim -ECHO_N!$ECHO_N$ac_delim -ECHO_T!$ECHO_T$ac_delim -LIBS!$LIBS$ac_delim -build_alias!$build_alias$ac_delim -host_alias!$host_alias$ac_delim -target_alias!$target_alias$ac_delim -INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim -INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim -INSTALL_DATA!$INSTALL_DATA$ac_delim -am__isrc!$am__isrc$ac_delim -CYGPATH_W!$CYGPATH_W$ac_delim -PACKAGE!$PACKAGE$ac_delim -VERSION!$VERSION$ac_delim -ACLOCAL!$ACLOCAL$ac_delim -AUTOCONF!$AUTOCONF$ac_delim -AUTOMAKE!$AUTOMAKE$ac_delim -AUTOHEADER!$AUTOHEADER$ac_delim -MAKEINFO!$MAKEINFO$ac_delim -install_sh!$install_sh$ac_delim -STRIP!$STRIP$ac_delim -INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim -mkdir_p!$mkdir_p$ac_delim -AWK!$AWK$ac_delim -SET_MAKE!$SET_MAKE$ac_delim -am__leading_dot!$am__leading_dot$ac_delim -AMTAR!$AMTAR$ac_delim -am__tar!$am__tar$ac_delim -am__untar!$am__untar$ac_delim -CC!$CC$ac_delim -CFLAGS!$CFLAGS$ac_delim -LDFLAGS!$LDFLAGS$ac_delim -CPPFLAGS!$CPPFLAGS$ac_delim -ac_ct_CC!$ac_ct_CC$ac_delim -EXEEXT!$EXEEXT$ac_delim -OBJEXT!$OBJEXT$ac_delim -DEPDIR!$DEPDIR$ac_delim -am__include!$am__include$ac_delim -am__quote!$am__quote$ac_delim -AMDEP_TRUE!$AMDEP_TRUE$ac_delim -AMDEP_FALSE!$AMDEP_FALSE$ac_delim -AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim -CCDEPMODE!$CCDEPMODE$ac_delim -am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim -am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim -CPP!$CPP$ac_delim -GREP!$GREP$ac_delim -EGREP!$EGREP$ac_delim -LIBOBJS!$LIBOBJS$ac_delim -LTLIBOBJS!$LTLIBOBJS$ac_delim -_ACEOF + . ./conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 80; then + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then - { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done +rm -f conf$$subs.sh -ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -if test -n "$ac_eof"; then - ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` - ac_eof=`expr $ac_eof + 1` -fi - -cat >>$CONFIG_STATUS <<_ACEOF -cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end -_ACEOF -sed ' -s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -s/^/s,@/; s/!/@,|#_!!_#|/ -:n -t n -s/'"$ac_delim"'$/,g/; t -s/$/\\/; p -N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -:end -s/|#_!!_#|//g -CEOF$ac_eof +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error "could not setup config files machinery" "$LINENO" 5 +_ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and @@ -5348,20 +5323,128 @@ }' fi -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. -for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #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. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 -echo "$as_me: error: Invalid tag $ac_tag." >&2;} - { (exit 1); exit 1; }; };; + :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -5389,26 +5472,34 @@ [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 -echo "$as_me: error: cannot find input file: $ac_f" >&2;} - { (exit 1); exit 1; }; };; + as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - ac_file_inputs="$ac_file_inputs $ac_f" + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" done # 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. */ - configure_input="Generated from "`IFS=: - echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin";; + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac @@ -5418,42 +5509,7 @@ 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'` - { as_dir="$ac_dir" - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$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" | +$as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -5471,20 +5527,15 @@ q } s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } + as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -5529,12 +5580,12 @@ esac _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= - -case `sed -n '/datarootdir/ { +ac_sed_dataroot=' +/datarootdir/ { p q } @@ -5542,36 +5593,37 @@ /@docdir@/p /@infodir@/p /@localedir@/p -/@mandir@/p -' $ac_file_inputs` in +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; + s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub $extrasub _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s&@configure_input@&$configure_input&;t t +s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t @@ -5582,135 +5634,65 @@ s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack -" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 -echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in - -) cat "$tmp/out"; rm -f "$tmp/out";; - *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; - esac + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # -_ACEOF - -# Transform confdefs.h into a sed script `conftest.defines', that -# substitutes the proper values into config.h.in to produce config.h. -rm -f conftest.defines conftest.tail -# First, append a space to every undef/define line, to ease matching. -echo 's/$/ /' >conftest.defines -# Then, protect against being on the right side of a sed subst, or in -# an unquoted here document, in config.status. If some macros were -# called several times there might be several #defines for the same -# symbol, which is useless. But do not sort them, since the last -# AC_DEFINE must be honored. -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where -# NAME is the cpp macro being defined, VALUE is the value it is being given. -# PARAMS is the parameter list in the macro definition--in most cases, it's -# just an empty string. -ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' -ac_dB='\\)[ (].*,\\1define\\2' -ac_dC=' ' -ac_dD=' ,' - -uniq confdefs.h | - sed -n ' - t rset - :rset - s/^[ ]*#[ ]*define[ ][ ]*// - t ok - d - :ok - s/[\\&,]/\\&/g - s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p - s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p - ' >>conftest.defines - -# Remove the space that was appended to ease matching. -# Then replace #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. -# (The regexp can be short, since the line contains either #define or #undef.) -echo 's/ $// -s,^[ #]*u.*,/* & */,' >>conftest.defines - -# Break up conftest.defines: -ac_max_sed_lines=50 - -# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" -# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" -# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" -# et cetera. -ac_in='$ac_file_inputs' -ac_out='"$tmp/out1"' -ac_nxt='"$tmp/out2"' - -while : -do - # Write a here document: - cat >>$CONFIG_STATUS <<_ACEOF - # First, check the format of the line: - cat >"\$tmp/defines.sed" <<\\CEOF -/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def -/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def -b -:def -_ACEOF - sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS - echo 'CEOF - sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS - ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in - sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail - grep . conftest.tail >/dev/null || break - rm -f conftest.defines - mv conftest.tail conftest.defines -done -rm -f conftest.defines conftest.tail - -echo "ac_result=$ac_in" >>$CONFIG_STATUS -cat >>$CONFIG_STATUS <<\_ACEOF if test x"$ac_file" != x-; then - echo "/* $configure_input */" >"$tmp/config.h" - cat "$ac_result" >>"$tmp/config.h" - 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;} + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} else - rm -f $ac_file - mv "$tmp/config.h" $ac_file + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 fi else - echo "/* $configure_input */" - cat "$ac_result" + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error "could not create -" "$LINENO" 5 fi - rm -f "$tmp/out12" -# Compute $ac_file's index in $config_headers. +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in - $ac_file | $ac_file:* ) + $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done -echo "timestamp for $ac_file" >`$as_dirname -- $ac_file || -$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 | +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -5730,30 +5712,40 @@ s/.*/./; q'`/stamp-h$_am_stamp_count ;; - :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 -echo "$as_me: executing $ac_file commands" >&6;} + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || -echo X"$mf" | +$as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -5771,68 +5763,33 @@ q } s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || -echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { as_dir=$dirpart/$fdir - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$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" | +$as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -5850,27 +5807,25 @@ q } s/.*/./; q'` - test -d "$as_dir" && break + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" done -done +} ;; esac done # for ac_tag -{ (exit 0); exit 0; } +as_fn_exit 0 _ACEOF -chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save +test $ac_write_fail = 0 || + as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 + # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. @@ -5890,7 +5845,10 @@ 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; } + $ac_cs_success || as_fn_exit $? +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi - diff -Nru dns2tcp-0.4.dfsg/configure.in dns2tcp-0.5.2/configure.in --- dns2tcp-0.4.dfsg/configure.in 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/configure.in 2010-06-16 09:40:10.000000000 +0100 @@ -1,6 +1,6 @@ -# $Id: configure.in,v 1.12 2007/07/02 13:06:28 dembour Exp $ +# $Id: configure.in,v 1.19.4.7 2010/06/16 08:40:10 dembour Exp $ -AC_INIT(dns2tcp,0.4) +AC_INIT([dns2tcp],[0.5.2]) AC_CONFIG_SRCDIR(client/main.c) AM_INIT_AUTOMAKE @@ -8,7 +8,40 @@ AC_PROG_CC AC_PROG_INSTALL AC_CONFIG_HEADERS(config.h) +AC_CANONICAL_HOST +AC_ARG_WITH([server], + [AS_HELP_STRING([--without-server], + [without server (default is no)])], + [], + [ + DIRECTORIES=server + MAN_PAGES=dns2tcpd.1 + ] + ) + +AC_ARG_WITH([client], + [AS_HELP_STRING([--without-client], + [without client (default is no)])], + [], + [ + DIRECTORIES=${DIRECTORIES}" client" + MAN_PAGES=${MAN_PAGES}" dns2tcpc.1" + ] + ) + +case "x${host_os}" in + x*mingw*) + # Client only + DIRECTORIES=client + echo "Warning : server will not be build on Windows system" + LIBS="$LIBS -lws2_32 -liphlpapi" + ;; +esac + + +AC_SUBST(DIRECTORIES) +AC_SUBST(MAN_PAGES) AC_SUBST(AUTOMAKE) AC_SUBST(AUTOCONF) AC_SUBST(PACKAGE) @@ -19,8 +52,11 @@ AC_C_BIGENDIAN AC_CHECK_HEADERS(sys/types.h) dnl If any socket libraries needed +AC_CHECK_HEADERS(winsock2.h) AC_SEARCH_LIBS(gethostent, nsl) AC_SEARCH_LIBS(setsockopt, socket) -AC_OUTPUT(Makefile client/Makefile server/Makefile man/Makefile) +# AM_CONDITIONAL(ARCH_WIN32, [ test x$win32 = xtrue ]) +AC_CONFIG_FILES([Makefile client/Makefile server/Makefile man/Makefile]) +AC_OUTPUT diff -Nru dns2tcp-0.4.dfsg/debian/changelog dns2tcp-0.5.2/debian/changelog --- dns2tcp-0.4.dfsg/debian/changelog 2010-06-20 03:27:12.000000000 +0100 +++ dns2tcp-0.5.2/debian/changelog 2010-06-18 00:33:33.000000000 +0100 @@ -1,3 +1,23 @@ +dns2tcp (0.5.2-1) unstable; urgency=low + + * New upstream release + * Bump standards-version (no change needed). + * Move home page in control tag rather than description + * Add $remote_fs dependency in init script. + * Move upstream changelog to correct place + * Fix spelling of resources in default config file + * No need of a -dfsg version anymore, as upstream removed RFC from source, + and an OpenSSL dependency. + * Drop buffer-overflow-0.4.1.diff gone upstream. + * Drop dnsbof.diff gone upstream. + * Drop strnlen.diff gone upstream. + * Drop sysfix.diff gone upstream. + * Drop man-pages.patch gone upstream. + * Switch to dpkg-source 3.0 (quilt) format + * Convert from CDBS to dh 7. + + -- Arnaud Cornet Tue, 15 Jun 2010 23:23:57 +0100 + dns2tcp (0.4.dfsg-5.1) unstable; urgency=low * Non-maintainer upload. diff -Nru dns2tcp-0.4.dfsg/debian/control dns2tcp-0.5.2/debian/control --- dns2tcp-0.4.dfsg/debian/control 2010-06-20 03:27:12.000000000 +0100 +++ dns2tcp-0.5.2/debian/control 2010-06-18 00:34:28.000000000 +0100 @@ -2,8 +2,9 @@ Section: net Priority: optional Maintainer: Arnaud Cornet -Standards-Version: 3.7.2 -Build-Depends: cdbs, debhelper (>= 5.0.37), quilt +Standards-Version: 3.8.4 +Build-Depends: debhelper (>= 7.4.0) +Homepage: http://www.hsc.fr/ressources/outils/dns2tcp/ Package: dns2tcp Architecture: any @@ -13,6 +14,3 @@ packets. This type of encapsulation generates smaller packets compeared to ip-over-DNS tools, thus allows a better throughput. The client does not need root priledges. - . - Homepage: http://www.hsc.fr/ressources/outils/dns2tcp/ - diff -Nru dns2tcp-0.4.dfsg/debian/dns2tcp.changelogs dns2tcp-0.5.2/debian/dns2tcp.changelogs --- dns2tcp-0.4.dfsg/debian/dns2tcp.changelogs 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/debian/dns2tcp.changelogs 2010-06-18 00:16:20.000000000 +0100 @@ -0,0 +1 @@ +ChangeLog diff -Nru dns2tcp-0.4.dfsg/debian/dns2tcpd.conf dns2tcp-0.5.2/debian/dns2tcpd.conf --- dns2tcp-0.4.dfsg/debian/dns2tcpd.conf 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/debian/dns2tcpd.conf 2010-06-18 00:30:06.000000000 +0100 @@ -4,5 +4,4 @@ user = nobody chroot = /tmp domain = your.domain.tld -ressources = ssh:127.0.0.1:22 , smtp:127.0.0.1:25 - +resources = ssh:127.0.0.1:22 , smtp:127.0.0.1:25 diff -Nru dns2tcp-0.4.dfsg/debian/dns2tcp.docs dns2tcp-0.5.2/debian/dns2tcp.docs --- dns2tcp-0.4.dfsg/debian/dns2tcp.docs 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/debian/dns2tcp.docs 2010-06-18 00:16:16.000000000 +0100 @@ -0,0 +1,2 @@ +AUTHORS +README diff -Nru dns2tcp-0.4.dfsg/debian/dns2tcp.init dns2tcp-0.5.2/debian/dns2tcp.init --- dns2tcp-0.4.dfsg/debian/dns2tcp.init 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/debian/dns2tcp.init 2010-06-18 00:26:21.000000000 +0100 @@ -1,23 +1,30 @@ #!/bin/sh ### BEGIN INIT INFO # Provides: dns2tcp -# Required-Start: $local_fs $network -# Required-Stop: $local_fs +# Required-Start: $local_fs $network $remote_fs +# Required-Stop: $local_fs $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: dns2tcp server init script # Description: This file should be used to start and stop dns2tcp server. ### END INIT INFO -# Author: Arnaud Cornet +# Author: Arnaud Cornet PATH=/sbin:/usr/sbin:/bin:/usr/bin CONFIG=/etc/dns2tcpd.conf -DAEMON=/usr/sbin/dns2tcpd +OLDDAEMON=/usr/sbin/dns2tcpd +DAEMON=/usr/bin/dns2tcpd USER=nobody ENABLED=0 -test -x $DAEMON || exit 0 +if ! test -x $DAEMON ; then + if ! test -x $OLDDAEMON ; then + exit 0 + else + DAEMON=$OLDDAEMON + fi +fi test -f $CONFIG || exit 0 if [ -e /etc/default/dns2tcp ]; then diff -Nru dns2tcp-0.4.dfsg/debian/patches/buffer-overflow-0.4.1.diff dns2tcp-0.5.2/debian/patches/buffer-overflow-0.4.1.diff --- dns2tcp-0.4.dfsg/debian/patches/buffer-overflow-0.4.1.diff 2010-06-20 03:27:12.000000000 +0100 +++ dns2tcp-0.5.2/debian/patches/buffer-overflow-0.4.1.diff 1970-01-01 01:00:00.000000000 +0100 @@ -1,61 +0,0 @@ -Index: dns2tcp/common/dns.c -=================================================================== ---- dns2tcp.orig/common/dns.c 2008-09-04 21:51:11.000000000 +0200 -+++ dns2tcp/common/dns.c 2008-10-31 19:25:45.000000000 +0100 -@@ -1,6 +1,6 @@ - /* - ** Copyright (C) 2006 Olivier DEMBOUR --** $Id: dns.c,v 1.9 2007/05/29 13:58:41 dembour Exp $ -+** $Id: dns.c,v 1.9.2.1 2008/09/01 12:49:08 dembour Exp $ - ** - ** - ** This program is free software; you can redistribute it and/or modify -@@ -114,7 +114,7 @@ - - void dns_simple_decode(char *input, char *output, int max_len) - { -- int len; -+ uint8_t len; - char *ptr; - int total_len =0; - -@@ -122,7 +122,7 @@ - *output = 0; - while (*ptr) - { -- len = (int) *ptr; -+ len = (uint8_t) *ptr; - total_len +=len; - if (total_len > max_len) - break; -Index: dns2tcp/server/dns_decode.c -=================================================================== ---- dns2tcp.orig/server/dns_decode.c 2008-09-04 21:51:11.000000000 +0200 -+++ dns2tcp/server/dns_decode.c 2008-10-31 19:25:45.000000000 +0100 -@@ -1,6 +1,6 @@ - /* - ** Copyright (C) 2006 Olivier DEMBOUR --** $Id: dns_decode.c,v 1.2 2007/02/13 10:57:12 collignon Exp $ -+** $Id: dns_decode.c,v 1.2.2.1 2008/09/01 12:49:08 dembour Exp $ - ** - ** - ** This program is free software; you can redistribute it and/or modify -@@ -79,7 +79,7 @@ - { - int max_compress_depth = MAX_COMPRESS_DEPTH; - int total_len = 0; -- int len; -+ uint8_t len; - char *ptr; - - ptr = input; -@@ -87,7 +87,8 @@ - - while ((max_compress_depth) && (*ptr)) - { -- len = (int) *ptr; -+ // Oups ... -+ len = (uint8_t) *ptr; - total_len += len; - if ((len & COMPRESS_FLAG_CHAR) == COMPRESS_FLAG_CHAR) - { diff -Nru dns2tcp-0.4.dfsg/debian/patches/dnsbof.diff dns2tcp-0.5.2/debian/patches/dnsbof.diff --- dns2tcp-0.4.dfsg/debian/patches/dnsbof.diff 2010-06-20 03:27:12.000000000 +0100 +++ dns2tcp-0.5.2/debian/patches/dnsbof.diff 1970-01-01 01:00:00.000000000 +0100 @@ -1,49 +0,0 @@ -Index: dns2tcp/server/dns_decode.c -=================================================================== ---- dns2tcp.orig/server/dns_decode.c 2008-11-04 08:51:21.000000000 +0100 -+++ dns2tcp/server/dns_decode.c 2008-11-04 08:52:04.000000000 +0100 -@@ -1,6 +1,6 @@ - /* - ** Copyright (C) 2006 Olivier DEMBOUR --** $Id: dns_decode.c,v 1.2.2.1 2008/09/01 12:49:08 dembour Exp $ -+** $Id: dns_decode.c,v 1.2.2.3 2008/11/03 12:07:52 dembour Exp $ - ** - ** - ** This program is free software; you can redistribute it and/or modify -@@ -77,7 +77,6 @@ - int dns_decode(char *data, char *input, char *output, t_conf *conf, - struct sockaddr_in *sa) - { -- int max_compress_depth = MAX_COMPRESS_DEPTH; - int total_len = 0; - uint8_t len; - char *ptr; -@@ -85,18 +84,11 @@ - ptr = input; - *output = 0; - -- while ((max_compress_depth) && (*ptr)) -+ while (*ptr) - { - // Oups ... - len = (uint8_t) *ptr; - total_len += len; -- if ((len & COMPRESS_FLAG_CHAR) == COMPRESS_FLAG_CHAR) -- { -- ptr = data + -- GET_DECOMPRESS_OFFSET(* ((uint16_t *)(ptr))); -- max_compress_depth--; -- break; -- } - if ((len > 63) || (total_len > MAX_HOST_NAME_ENCODED)) - { - DPRINTF(1, "req was %u %s -> %s\n", (unsigned int) strlen(input), -@@ -115,6 +107,7 @@ - } - ptr += (len); - } -- output[total_len -1 ] = 0; -+ if (total_len > 0) -+ output[total_len -1 ] = 0; - return (dns_strip_subdomain(output, conf, sa)); - } diff -Nru dns2tcp-0.4.dfsg/debian/patches/man-pages.patch dns2tcp-0.5.2/debian/patches/man-pages.patch --- dns2tcp-0.4.dfsg/debian/patches/man-pages.patch 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/debian/patches/man-pages.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,28 +0,0 @@ -Index: dns2tcp/man/dns2tcpd.1 -=================================================================== ---- dns2tcp.orig/man/dns2tcpd.1 2007-07-07 19:07:25.000000000 +0200 -+++ dns2tcp/man/dns2tcpd.1 2007-07-07 19:07:29.000000000 +0200 -@@ -70,9 +70,6 @@ - .SH AUTHORS - Olivier Dembour - --.SH BUGS --This tool is only a proof of concept. -- - .SH SEE ALSO - ssltunnel - -Index: dns2tcp/man/dns2tcpc.1 -=================================================================== ---- dns2tcp.orig/man/dns2tcpc.1 2007-07-07 19:07:18.000000000 +0200 -+++ dns2tcp/man/dns2tcpc.1 2007-07-07 19:07:23.000000000 +0200 -@@ -82,9 +82,6 @@ - .SH AUTHORS - Olivier Dembour - --.SH BUGS --This tool is only a proof of concept -- - .SH SEE ALSO - ssltunnel - diff -Nru dns2tcp-0.4.dfsg/debian/patches/series dns2tcp-0.5.2/debian/patches/series --- dns2tcp-0.4.dfsg/debian/patches/series 2010-06-20 03:27:12.000000000 +0100 +++ dns2tcp-0.5.2/debian/patches/series 1970-01-01 01:00:00.000000000 +0100 @@ -1,5 +0,0 @@ -man-pages.patch -buffer-overflow-0.4.1.diff -dnsbof.diff -sysfix.diff -strnlen.diff diff -Nru dns2tcp-0.4.dfsg/debian/patches/strnlen.diff dns2tcp-0.5.2/debian/patches/strnlen.diff --- dns2tcp-0.4.dfsg/debian/patches/strnlen.diff 2010-06-20 03:27:12.000000000 +0100 +++ dns2tcp-0.5.2/debian/patches/strnlen.diff 1970-01-01 01:00:00.000000000 +0100 @@ -1,25 +0,0 @@ -Index: dns2tcp-0.4.dfsg/common/includes/dns.h -=================================================================== ---- dns2tcp-0.4.dfsg.orig/common/includes/dns.h 2009-09-23 11:55:26.000000000 +0400 -+++ dns2tcp-0.4.dfsg/common/includes/dns.h 2009-09-23 12:04:32.000000000 +0400 -@@ -139,8 +139,5 @@ - void dns_simple_decode(char *input, char *output, int max_len); - void dns_encode(char *); - void *jump_end_query(void *, int, int); --#ifndef _WIN32 --int strnlen(char *, int len); --#endif - - #endif -Index: dns2tcp-0.4.dfsg/server/includes/server.h -=================================================================== ---- dns2tcp-0.4.dfsg.orig/server/includes/server.h 2009-09-23 12:05:02.000000000 +0400 -+++ dns2tcp-0.4.dfsg/server/includes/server.h 2009-09-23 12:05:30.000000000 +0400 -@@ -48,7 +48,6 @@ - } t_conf; - - int do_server(t_conf *); --int strnlen(char *, int); /* not present ?*/ - int delete_client(t_conf *conf, struct s_simple_list *client); - void delete_zombie(t_conf *conf); - diff -Nru dns2tcp-0.4.dfsg/debian/patches/sysfix.diff dns2tcp-0.5.2/debian/patches/sysfix.diff --- dns2tcp-0.4.dfsg/debian/patches/sysfix.diff 2010-06-20 03:27:12.000000000 +0100 +++ dns2tcp-0.5.2/debian/patches/sysfix.diff 1970-01-01 01:00:00.000000000 +0100 @@ -1,61 +0,0 @@ ---- dns2tcp-0.4.1/server/main.c 2007-05-30 15:04:45.000000000 +0200 -+++ dns2tcp-0.4.2/server/main.c 2008-10-30 14:41:08.000000000 +0100 -@@ -1,6 +1,6 @@ - /* - ** Copyright (C) 2006 Olivier DEMBOUR --** $Id: main.c,v 1.19 2007/05/30 13:04:45 dembour Exp $ -+** $Id: main.c,v 1.19.2.1 2008/10/30 13:41:08 dembour Exp $ - ** - ** - ** This program is free software; you can redistribute it and/or modify -@@ -29,6 +29,10 @@ - #include - #include - #include -+#include -+#include -+#include -+ - - #include "config.h" - #include "server.h" -@@ -84,7 +88,7 @@ - int jail(t_conf *conf) - { - struct passwd *pwd = 0; -- -+ - if (!conf->foreground) - detach_process(); - if ((conf->user) && (!(pwd = getpwnam(conf->user)))) -@@ -96,7 +100,7 @@ - { - DPRINTF(1, "Chroot to %s\n", conf->chroot); - load_resolv(conf); -- if (chroot(conf->chroot) == -1) -+ if (chroot(conf->chroot) == -1 || chdir("/")) - { - LOG("Failed to chroot"); - return (-1); -@@ -105,12 +109,20 @@ - if (pwd) - { - DPRINTF(1, "Change to user %s\n", conf->user); -- if (setgid(pwd->pw_gid) || setuid(pwd->pw_uid)) -+ if (setgroups(0, NULL) || setgid(pwd->pw_gid) || setuid(pwd->pw_uid)) - { - LOG("Failed to change to user %s\n", conf->user); - return (-1); - } - } -+#ifdef RLIMIT_NPROC -+ struct rlimit rlim; -+ -+ /* fork() is not need anymore, disable it */ -+ rlim.rlim_max = rlim.rlim_cur = 0; -+ if (setrlimit(RLIMIT_NPROC, &rlim)) -+ return (-1); -+#endif - return (0); - } - diff -Nru dns2tcp-0.4.dfsg/debian/rules dns2tcp-0.5.2/debian/rules --- dns2tcp-0.4.dfsg/debian/rules 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/debian/rules 2010-06-18 00:33:44.000000000 +0100 @@ -1,10 +1,4 @@ #!/usr/bin/make -f -include /usr/share/cdbs/1/rules/patchsys-quilt.mk -include /usr/share/cdbs/1/rules/debhelper.mk -include /usr/share/cdbs/1/class/autotools.mk - -install/dns2tcp:: - mkdir -p debian/dns2tcp/usr/sbin - mv debian/dns2tcp/usr/bin/dns2tcpd debian/dns2tcp/usr/sbin/dns2tcpd - +%: + dh $@ diff -Nru dns2tcp-0.4.dfsg/debian/source/format dns2tcp-0.5.2/debian/source/format --- dns2tcp-0.4.dfsg/debian/source/format 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/debian/source/format 2010-06-20 03:27:12.000000000 +0100 @@ -0,0 +1 @@ +3.0 (quilt) diff -Nru dns2tcp-0.4.dfsg/Makefile.am dns2tcp-0.5.2/Makefile.am --- dns2tcp-0.4.dfsg/Makefile.am 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/Makefile.am 2010-05-18 16:35:47.000000000 +0100 @@ -1,7 +1,7 @@ -# $Id: Makefile.am,v 1.2 2006/07/13 13:59:30 dembour Exp $ -SUBDIRS = client server man -DIST_SUBDIRS = client server man -EXTRA_DIST = doc common +# $Id: Makefile.am,v 1.3.4.1 2010/05/18 15:35:47 dembour Exp $ +SUBDIRS = $(DIRECTORIES) man +DIST_SUBDIRS = $(DIRECTORIES) man +EXTRA_DIST = common dist-hook: rm -rf `find $(distdir)/ -name CVS` diff -Nru dns2tcp-0.4.dfsg/Makefile.in dns2tcp-0.5.2/Makefile.in --- dns2tcp-0.4.dfsg/Makefile.in 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/Makefile.in 2010-06-16 09:52:40.000000000 +0100 @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.10 from Makefile.am. +# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,8 +16,9 @@ @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c @@ -29,11 +31,14 @@ NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ - depcomp install-sh missing mkinstalldirs + config.guess config.sub depcomp install-sh missing \ + mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ @@ -43,6 +48,7 @@ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ @@ -54,15 +60,43 @@ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ - { test ! -d $(distdir) \ - || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr $(distdir); }; } + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print @@ -81,6 +115,7 @@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ +DIRECTORIES = @DIRECTORIES@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ @@ -97,6 +132,7 @@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ +MAN_PAGES = @MAN_PAGES@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ @@ -104,6 +140,7 @@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ @@ -121,14 +158,22 @@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ +build = @build@ build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ +host = @host@ host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ @@ -149,13 +194,14 @@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -# $Id: Makefile.am,v 1.2 2006/07/13 13:59:30 dembour Exp $ -SUBDIRS = client server man -DIST_SUBDIRS = client server man -EXTRA_DIST = doc common +# $Id: Makefile.am,v 1.3.4.1 2010/05/18 15:35:47 dembour Exp $ +SUBDIRS = $(DIRECTORIES) man +DIST_SUBDIRS = $(DIRECTORIES) man +EXTRA_DIST = common all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive @@ -166,15 +212,15 @@ @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ - cd $(srcdir) && $(AUTOMAKE) --gnu \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -190,9 +236,10 @@ $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) - cd $(srcdir) && $(AUTOCONF) + $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then \ @@ -204,7 +251,7 @@ @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) - cd $(top_srcdir) && $(AUTOHEADER) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ @@ -218,7 +265,7 @@ # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): - @failcom='exit 1'; \ + @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ @@ -235,7 +282,7 @@ else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ @@ -243,7 +290,7 @@ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): - @failcom='exit 1'; \ + @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ @@ -269,16 +316,16 @@ else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -286,14 +333,14 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ @@ -305,46 +352,50 @@ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) - test -d $(distdir) || mkdir $(distdir) + test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -360,29 +411,44 @@ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ + am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ @@ -390,11 +456,13 @@ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook - -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r $(distdir) + || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) @@ -403,6 +471,14 @@ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) @@ -426,13 +502,17 @@ distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ - GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ - bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ - GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac @@ -440,9 +520,11 @@ mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && cd $(distdir)/_build \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ @@ -464,13 +546,15 @@ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: - @cd $(distuninstallcheck_dir) \ + @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ @@ -512,6 +596,7 @@ distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -531,6 +616,8 @@ html: html-recursive +html-am: + info: info-recursive info-am: @@ -539,18 +626,28 @@ install-dvi: install-dvi-recursive +install-dvi-am: + install-exec-am: install-html: install-html-recursive +install-html-am: + install-info: install-info-recursive +install-info-am: + install-man: install-pdf: install-pdf-recursive +install-pdf-am: + install-ps: install-ps-recursive +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -573,27 +670,29 @@ uninstall-am: -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ - install-strip +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ + ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ - dist-hook dist-shar dist-tarZ dist-zip distcheck distclean \ - distclean-generic distclean-hdr distclean-tags distcleancheck \ - distdir distuninstallcheck dvi dvi-am html html-am info \ - info-am install install-am install-data install-data-am \ - install-dvi install-dvi-am install-exec install-exec-am \ - install-html install-html-am install-info install-info-am \ - install-man install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ - pdf-am ps ps-am tags tags-recursive uninstall uninstall-am + dist-hook dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ + distcheck distclean distclean-generic distclean-hdr \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am dist-hook: rm -rf `find $(distdir)/ -name CVS` + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru dns2tcp-0.4.dfsg/man/dns2tcpc.1 dns2tcp-0.5.2/man/dns2tcpc.1 --- dns2tcp-0.4.dfsg/man/dns2tcpc.1 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/man/dns2tcpc.1 2010-05-19 12:40:42.000000000 +0100 @@ -1,7 +1,7 @@ .TH dns2tcpc 1 .SH NAME -dns2tcpc \- A tunneling tool that encapsulate TCP connections in DNS. +dns2tcpc \- A tunneling tool that encapsulate TCP traffic over DNS. .SH SYNOPSIS .B dns2tcpc @@ -17,11 +17,20 @@ .I debug_level ] [ .B \-r -.I ressource +.I resource +] [ +.B \-k +.I key ] [ .B \-f .I config_file ] [ +.B \-e +.I command +] [ +.B \-T +.I request type +] [ .B \-l .I local_port ] [ @@ -32,8 +41,8 @@ .SH DESCRIPTION dns2tcpc is a network tool used to encapsulate TCP communications in -DNS. When connections are received on a specific port all TCP trafic are -send to the remote dns2tcpd server and forwarded to a specific host and +DNS. When connections are received on a specific port all TCP traffic is +sent to the remote dns2tcpd server and forwarded to a specific host and port. Multiple connections are supported. .PP dns2tcpc was written for demonstration purposes. @@ -43,8 +52,8 @@ Help Menu .TP .BI -c -Use DNS compression. When used be sure that all relay and DNS server -understand compression and really use it. +Enable DNS compression. When used, be sure that all relay and DNS server +support compression and really use it. .TP \fB\-z\fR \fBdomain zone\fR Use this domain as endpoint. @@ -52,17 +61,30 @@ \fB\-d\fR \fBdebug level\fR Change debug level. Levels available are 1, 2 or 3. .TP -\fB\-r\fR \fBressource\fR -Remote ressource to access. +\fB\-r\fR \fBresource\fR +Remote resource to access. +.TP +\fB\-k\fR \fBkey\fR +Pre shared key used for authentication (identification). .TP \fB\-f\fR \fBconfig file\fR -Configuration file to use +Configuration file to use. +.TP +\fB\-T\fR \fBrequest type\fR +Request type to use. Actually only KEY and TXT requests are supported. +.TP +\fB\-e\fR \fBcommand\fR +Command to execute, I/O are redirected in the tunnel. .TP \fB\-l\fR \fBlocal_port\fR -Local port that will received incomming connections. +Local port accepting incomming connections (or - for stdin on UNIX systems). +.TP +\fB\-t\fR \fBconnection timeout\fR +Maximum DNS server's answer delay in seconds. A valid delay +is between 1 and 240 seconds. Default is 3. .TP \fBserver\fR -DNS server to use. +DNS server to use. The first entry in resolv.conf file will be choosen if the server is not specified. .SH CONFIGURATION FILES By default ${HOME}/.dns2tcprc is used if no configuration file is @@ -71,20 +93,36 @@ .nf .in 7 domain = dns2tcp.hsc.fr -ressource = ssltunnel +resource = ssltunnel local_port = 4430 -compression = 0 +enable_compression = 0 debug_level = 1 +key = mykey # DNS to use server = ns.hsc.fr .fi +.SH EXAMPLES +.PP +.IP "\fB\f(CWdns2tcpc -k mykey -z dns2tcp.hsc.fr mydns\fP" +.IP +Ask the dns2tcp server to list available resources. +.IP +.IP "\fB\f(CWssh -o 'ProxyCommand dns2tcpc -r ssh -l - -z dns2tcp.hsc.fr -k mykey mydns' myserver\fP" +.IP +Use dns2tcp as a proxy command with ssh. We try to connect to the ssh resource with the key 'mykey' and the DNS mydns. +.IP +.IP "\fB\f(CWdns2tcpc -r socat-resource -e '/bin/bash -i' -k mykey -z dns2tcp.hsc.fr mydns\fP" +.IP +Use dns2tcp as a reverse shell, the remote shell will appear on the socat-resource. +.IP +.IP "\fB\f(CWdns2tcpc -d 1 -f /dev/null -r ssl-tunnel -l 2000 -k mykey -T KEY -z dns2tcp.hsc.fr mydns\fP" +.IP +Do not use the default configuration file, bind local port 2000 and forward all the traffic on the remote ssl-tunnel resource, use the first debug level. Use KEY type DNS requests. +.IP .SH AUTHORS Olivier Dembour -.SH BUGS -This tool is only a proof of concept - .SH SEE ALSO ssltunnel diff -Nru dns2tcp-0.4.dfsg/man/dns2tcpd.1 dns2tcp-0.5.2/man/dns2tcpd.1 --- dns2tcp-0.4.dfsg/man/dns2tcpd.1 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/man/dns2tcpd.1 2010-05-19 12:40:42.000000000 +0100 @@ -1,7 +1,7 @@ .TH dns2tcpd 1 .SH NAME -dns2tcpd \- A tunneling tool gateway that encapsulate TCP connections in DNS. +dns2tcpd \- A tunneling tool that encapsulate TCP traffic over DNS. .SH SYNOPSIS .B dns2tcpd @@ -16,6 +16,9 @@ .B \-f .I config_file ] [ +.B \-p +.I pidfile +] [ .B \-d .I debug_level ] @@ -24,8 +27,8 @@ .SH DESCRIPTION dns2tcp is a network tool used to encapsulate TCP communications in -DNS. When connections are received on a specific port all TCP trafic are -send to the remote dns2tcpd server and forwarded to a specific host and +DNS. When connections are received on a specific port all TCP traffic is +sent to the remote dns2tcpd server and forwarded to a specific host and port. Multiple connections are supported. .PP @@ -39,20 +42,23 @@ .BI -F Run in foreground .TP -\fB\-d\fR \fBdebug level\fR -Change debug level. Levels available are 1, 2 or 3. -.TP \fB\-i\fR \fBIP address\fR IP address to bind (default 0.0.0.0) .TP \fB\-f\fR \fBconfig file\fR Configuration file to use +.TP +\fB\-p\fR \fBpidfile\fR +File where our pid will be written +.TP +\fB\-d\fR \fBdebug level\fR +Change debug level. Levels available are 1, 2 or 3. .SH CONFIGURATION FILES By default ${HOME}/.dns2tcprcd is used if no configuration file is -specified. The ressource syntaxe is -::. Multiple ressources can be defined in -multiline, but must be comma separated. +specified. The resource syntax is +::. Multiple resources can be defined in +multilines, but must be comma separated. Here is an example : .TP @@ -62,17 +68,16 @@ port = 53 user = nobody chroot = /tmp +pid_file = /var/run/dns2tcp.pid domain = dns2tcp.hsc.fr -ressources = ssh:127.0.0.1:22 , smtp:127.0.0.1:25, +debug_level = 0 +resources = ssh:127.0.0.1:22 , smtp:127.0.0.1:25, pop3:10.0.0.1:110 .fi .SH AUTHORS Olivier Dembour -.SH BUGS -This tool is only a proof of concept. - .SH SEE ALSO ssltunnel diff -Nru dns2tcp-0.4.dfsg/man/Makefile.am dns2tcp-0.5.2/man/Makefile.am --- dns2tcp-0.4.dfsg/man/Makefile.am 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/man/Makefile.am 2009-02-05 12:56:32.000000000 +0000 @@ -1,3 +1,2 @@ -man_MANS = dns2tcpc.1 dns2tcpd.1 - -EXTRA_DIST = $(man_MANS) +man1_MANS = $(MAN_PAGES) +EXTRA_DIST = $(MAN_PAGES) diff -Nru dns2tcp-0.4.dfsg/man/Makefile.in dns2tcp-0.5.2/man/Makefile.in --- dns2tcp-0.4.dfsg/man/Makefile.in 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/man/Makefile.in 2010-06-16 09:52:40.000000000 +0100 @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.10 from Makefile.am. +# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,8 +16,9 @@ @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c @@ -29,6 +31,8 @@ NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ subdir = man DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -38,12 +42,34 @@ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" NROFF = nroff -MANS = $(man_MANS) +MANS = $(man1_MANS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -59,6 +85,7 @@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ +DIRECTORIES = @DIRECTORIES@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ @@ -75,6 +102,7 @@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ +MAN_PAGES = @MAN_PAGES@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ @@ -82,6 +110,7 @@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ @@ -99,14 +128,22 @@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ +build = @build@ build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ +host = @host@ host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ @@ -127,10 +164,11 @@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -man_MANS = dns2tcpc.1 dns2tcpd.1 -EXTRA_DIST = $(man_MANS) +man1_MANS = $(MAN_PAGES) +EXTRA_DIST = $(MAN_PAGES) all: all-am .SUFFIXES: @@ -138,14 +176,14 @@ @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu man/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu man/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -163,51 +201,41 @@ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -install-man1: $(man1_MANS) $(man_MANS) +$(am__aclocal_m4_deps): +install-man1: $(man1_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ + @list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ done; \ - for i in $$list; do \ - if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ - else file=$$i; fi; \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ - done + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + uninstall-man1: @$(NORMAL_UNINSTALL) - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ - done; \ - for i in $$list; do \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ - rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ - done + @list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } tags: TAGS TAGS: @@ -216,6 +244,19 @@ distdir: $(DISTFILES) + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -231,13 +272,17 @@ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -268,6 +313,7 @@ distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -286,6 +332,8 @@ html: html-am +html-am: + info: info-am info-am: @@ -294,18 +342,28 @@ install-dvi: install-dvi-am +install-dvi-am: + install-exec-am: install-html: install-html-am +install-html-am: + install-info: install-info-am +install-info-am: + install-man: install-man1 install-pdf: install-pdf-am +install-pdf-am: + install-ps: install-ps-am +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -341,6 +399,7 @@ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-man uninstall-man1 + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru dns2tcp-0.4.dfsg/README dns2tcp-0.5.2/README --- dns2tcp-0.4.dfsg/README 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/README 2009-12-07 08:46:27.000000000 +0000 @@ -1,10 +1,11 @@ ---------- [ Note ] ---------- -Dns2tcp is a tool for relaying TCP connections over DNS. There is no -authentications nor encryption mecanisms : DNS encapsulation must be -considered as an unsecure and anonymous transport layer. Ressources should -be public external services like ssh, ssltunnel ... +Dns2tcp is a tool for relaying TCP connections over DNS. There is only +a simple identification mecanism but no encryption : DNS encapsulation +must be considered as an unsecure and anonymous transport +layer. Resources should be public external services like ssh, +ssltunnel ... ----------[ Examples ]---------- @@ -16,7 +17,7 @@ View list of available connection. - $ dns2tcpc -z dns2tcp.hsc.fr + $ dns2tcpc -z dns2tcp.hsc.fr -k Available connection(s) : ssh-gw ssh6-home @@ -25,7 +26,7 @@ Line based connection to a remote ssl-tunnel host : - $ dns2tcpc -r ssl-tunnel -l 4430 -z dns2tcp.hsc.fr + $ dns2tcpc -r ssl-tunnel -l 4430 -k -z dns2tcp._hsc.fr listening on port 4430 ... @@ -34,10 +35,11 @@ $ cat > ~/.dns2tcprc << EOF domain = dns2tcp.hsc.fr - ressource = ssl-tunnel + resource = ssl-tunnel local_port = 4430 debug_level = 1 - server = the_dns_server + key = whateveryouwant + server = the_dns_server # or scan /etc/resolv.conf EOF $ dns2tcpc @@ -53,9 +55,10 @@ listen = x.x.x.x port = 53 user = nobody + key = whateveryouwant chroot = /var/empty/dns2tcp/ domain = dns2tcp.hsc.fr - ressources = ssh:127.0.0.1:22 , smtp:127.0.0.1:25, + resources = ssh:127.0.0.1:22 , smtp:127.0.0.1:25, pop3:10.0.0.1:110, ssh2:[fe80::1664]:22 EOF @@ -65,6 +68,5 @@ ----------[ Known Bugs ]---------- DNS desynchronisation - -Windows not supported +dns2tcpd server not supported on Windows diff -Nru dns2tcp-0.4.dfsg/server/auth.c dns2tcp-0.5.2/server/auth.c --- dns2tcp-0.4.dfsg/server/auth.c 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/server/auth.c 2010-06-16 09:40:11.000000000 +0100 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: auth.c,v 1.14 2007/05/29 13:58:41 dembour Exp $ +** $Id: auth.c,v 1.19.4.7 2010/06/16 08:40:11 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -24,6 +24,7 @@ #include #include +#include "mycrypto.h" #include "server.h" #include "dns.h" #include "list.h" @@ -31,115 +32,141 @@ #include "base64.h" #include "myrand.h" #include "socket.h" -#include "server_queue.h" +#include "queue.h" #include "debug.h" #include "log.h" +#include "queue.h" +#include "session.h" +/** + * @brief try to connect a client to a ressource + * @param[in] conf configuration + * @param[in] req DNS request + * @param[out] packet where to write the packet request + * @param[out] socket socket created + * @retval 0 on success + * @retval -1 on error + **/ -static int build_login_reply(void *req, uint16_t cookie, int max_len) +static int connect_resource(t_conf *conf, t_request *req, t_packet *packet, int *sd) { - - struct dns_hdr *hdr; - void *where; - t_packet packet; - char buffer[2*PACKET_LEN]; - - hdr = req; - hdr->ra = 1; - hdr->qr = 1; - if (!(where = jump_end_query(req, GET_16(&hdr->qdcount), max_len))) - return (-1); - packet.cookie = cookie; - packet.ack_seq = 0; - packet.seq = 0; - packet.type = OK|AUTH ; - base64_encode((char *)&packet, buffer, PACKET_LEN); - where = add_reply(hdr, where, TYPE_KEY, buffer); - return (where - req); -} - -static int connect_ressource(t_conf *conf, char *ressource, void *req, int in_len, int *sd) -{ - t_list *list_ressource; + t_list *list_resource; + char *resource; int len; - len = strlen(ressource); - for (list_ressource = conf->ressources; list_ressource; list_ressource = list_ressource->next) + resource = ((char *)packet) + PACKET_LEN; + if (!(len = strlen(resource))) + return (-1); + DPRINTF(1, "Ask for resource \'%s\'\n", resource); + for (list_resource = conf->resources; list_resource; list_resource = list_resource->next) { - if ((!strncmp(list_ressource->data, ressource, len)) - && (list_ressource->data[len] == ':')) + if ((!strncmp(list_resource->data, resource, len)) + && (list_resource->data[len] == ':')) { - if (connect_socket(strchr(list_ressource->data, ':') + 1, list_ressource->info.port, sd)) - return (build_error_reply(conf, req, in_len, ERR_CONN_REFUSED)); + if (!(connect_socket(strchr(list_resource->data, ':') + 1, list_resource->info.port, sd))) return (0); - } + packet->type = ERR; + send_ascii_reply(conf, req, packet, ERR_CONN_REFUSED); + return (-1); + } } - return (build_error_reply(conf, req, in_len, ERR_RESSOURCE)); + packet->type = ERR; + send_ascii_reply(conf, req, packet, ERR_RESOURCE); + return (-1); } -static uint16_t create_env(t_conf *conf, void *req, void *data, int in_len, struct sockaddr_in *sa) + +/** + * @brief try to bind a client to a ressource + * @param[in] conf configuration + * @param[in] req DNS request + * @param[in] packet packet request + * @param[in] client client to bind + * @retval 0 on success + * @retval -1 on error + **/ + +int bind_user(t_conf *conf, t_request *req, t_packet *packet, t_simple_list *client) { - t_simple_list *client; int sd; - t_packet *packet; - char *ressource; - int len; - time_t mytime; + char *resource; + char *compress; - packet = data; - ressource = data + PACKET_LEN; - if ((len = connect_ressource(conf, ressource, req, in_len, &sd))) - return (len); - client = (t_simple_list *)conf->client; - if (!client) - { - conf->client = list_create_simple_cell(); - client = conf->client; - } - else + if (connect_resource(conf, req, packet, &sd)) + return (-1); + resource = ((char *)packet) + PACKET_LEN; + client_update_timer(client); + if (!(compress = jump_end_query(req, + GET_16(&(((struct dns_hdr *)req->data)->qdcount)), req->len))) { - while (client->next) - client = client->next; - if (!(client->next = list_create_simple_cell())) - return (-1); - client = client->next; + fprintf(stderr, "invalid reply\n"); + return (-1); } - client->cookie = myrand(); + client->sd_tcp = sd; - client->queue = init_queue(); - client->num_seq = 1; - queue_update_timer(client); - if ((packet->type & USE_COMPRESS) == USE_COMPRESS) - client->control.use_compress = 1; - time(&mytime); + // FIXME bug ipv6 support + LOG("Bind client id: 0x%x address = %u.%u.%u.%u to resource %s", client->session_id, #ifndef WORDS_BIGENDIAN - LOG("add client id: 0x%x address = %u.%u.%u.%u ressource %s", client->cookie, - (unsigned int) ((sa->sin_addr.s_addr) & 0xff), - (unsigned int) ((sa->sin_addr.s_addr >> 8) & 0xff), - (unsigned int) ((sa->sin_addr.s_addr >> 16) & 0xff), - (unsigned int) ((sa->sin_addr.s_addr >> 24) & 0xff), ressource); + (unsigned int) ((req->sa.sin_addr.s_addr) & 0xff), + (unsigned int) ((req->sa.sin_addr.s_addr >> 8) & 0xff), + (unsigned int) ((req->sa.sin_addr.s_addr >> 16) & 0xff), + (unsigned int) ((req->sa.sin_addr.s_addr >> 24) & 0xff) #else - LOG("add client id: 0x%x address = %u.%u.%u.%u ressource %s", client->cookie, - (unsigned int) ((sa->sin_addr.s_addr >> 24) & 0xff), - (unsigned int) ((sa->sin_addr.s_addr >> 16) & 0xff), - (unsigned int) ((sa->sin_addr.s_addr >> 8) & 0xff), - (unsigned int) ((sa->sin_addr.s_addr) & 0xff), ressource); + (unsigned int) ((req->sa.sin_addr.s_addr >> 24) & 0xff), + (unsigned int) ((req->sa.sin_addr.s_addr >> 16) & 0xff), + (unsigned int) ((req->sa.sin_addr.s_addr >> 8) & 0xff), + (unsigned int) ((req->sa.sin_addr.s_addr) & 0xff) #endif - return (build_login_reply(req, client->cookie, in_len)); + , resource); + packet->type = OK; + return (send_ascii_reply(conf, req, packet, "")); } -int login_user(t_conf *conf, void *req, char *buffer, int in_len, struct sockaddr_in *sa) -{ - t_packet *packet; - packet = (void *)buffer; - if ((packet->type & AUTH) == AUTH) - return (create_env(conf, req, buffer, in_len, sa)); - - /* - Verif nom de connection - + chap - */ - return (0); +/** + * @brief try to authenticate (more a indentification) a client with CHAP + * @param[in] conf configuration + * @param[in] req DNS request + * @param[in] packet packet request + * @retval 0 on success + * @retval -1 on error + **/ + +int login_user(t_conf *conf, t_request *req, t_packet *packet) +{ + char *data; + t_simple_list *client; + char buffer[SHA1_SIZE*2+1]; + + memset(buffer, 0, sizeof(buffer)); + if (req->len <= PACKET_LEN) + return (-1); + data = ((char *) packet) + PACKET_LEN; + client = find_client_by_session_id(conf, packet->session_id); + if (client) + { + if (conf->key) + { + sign_challenge(client->control.challenge, CHALLENGE_SIZE, conf->key, (char *)&buffer, sizeof(buffer)); + if (strncmp(buffer, data, SHA1_SIZE*2)) + { + packet->type = ERR; + LOG("Authentication failed"); + send_ascii_reply(conf, req, packet, ERR_AUTH_FAILED); + return (delete_client(conf, client)); + } + } + client_update_timer(client); + client->control.authenticated = 1; + client->sd_tcp = -1; + packet->type = OK; + return (send_ascii_reply(conf, req, packet, "")); + } + if (!(client = create_session(conf, req, packet))) + return (-1); + alphanum_random(client->control.challenge, CHALLENGE_SIZE); + packet->type = OK; + packet->session_id = client->session_id; + return (send_ascii_reply(conf, req, packet, client->control.challenge)); } diff -Nru dns2tcp-0.4.dfsg/server/dns2tcpdrc dns2tcp-0.5.2/server/dns2tcpdrc --- dns2tcp-0.4.dfsg/server/dns2tcpdrc 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/server/dns2tcpdrc 2009-01-28 15:42:14.000000000 +0000 @@ -4,7 +4,9 @@ port = 53 user=nobody chroot = /var/empty/dns2tcp/ +pid_file = /var/run/dns2tcp.pid domain = dns2tcp.hsc.fr -ressources = ssh:127.0.0.1:22 , smtp:127.0.0.1:25, +key = blah +resources = ssh:127.0.0.1:22 , smtp:127.0.0.1:25, pop3:10.0.0.1:110 diff -Nru dns2tcp-0.4.dfsg/server/dns_decode.c dns2tcp-0.5.2/server/dns_decode.c --- dns2tcp-0.4.dfsg/server/dns_decode.c 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/server/dns_decode.c 2010-02-11 15:05:49.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: dns_decode.c,v 1.2 2007/02/13 10:57:12 collignon Exp $ +** $Id: dns_decode.c,v 1.7.4.4 2010/02/11 15:05:49 collignon Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -20,6 +20,7 @@ #include #include +#include #include "packet.h" #include "dns.h" @@ -28,78 +29,105 @@ #include "mystrnlen.h" #include "log.h" #include "debug.h" +#include "server.h" +#include "requests.h" + +extern const t_command dns_commands[]; + +/* + Strip dot and domain name + extract the dns command + request is always ended by NULL +*/ -static int dns_strip_subdomain(char *name, t_conf *conf, struct sockaddr_in *sa) +static int dns_strip_dot_and_domain(t_conf *conf, t_request *req, char *output) { char *ptr; - unsigned int i, j, len; - - ptr = strstr(name, conf->my_domain); + char *ptr2; + unsigned int i=0, j, len; + int req_len, domain_len; + + req_len = strlen(output); + domain_len = strlen(conf->my_domain); + ptr = strstr(output + (req_len - domain_len), conf->my_domain); if (!ptr) { -#ifndef WORDS_BIGENDIAN + // FIXME bug ipv6 support ? LOG("Query from %u.%u.%u.%u for unknown domain %s", - (unsigned int) ((sa->sin_addr.s_addr) & 0xff), - (unsigned int) ((sa->sin_addr.s_addr >> 8) & 0xff), - (unsigned int) ((sa->sin_addr.s_addr >> 16) & 0xff), - (unsigned int) ((sa->sin_addr.s_addr >> 24) & 0xff), name); +#ifndef WORDS_BIGENDIAN + (unsigned int) ((req->sa.sin_addr.s_addr) & 0xff), + (unsigned int) ((req->sa.sin_addr.s_addr >> 8) & 0xff), + (unsigned int) ((req->sa.sin_addr.s_addr >> 16) & 0xff), + (unsigned int) ((req->sa.sin_addr.s_addr >> 24) & 0xff), #else - LOG("Query from %u.%u.%u.%u for unknown domain %s", - (unsigned int) ((sa->sin_addr.s_addr >> 24) & 0xff), - (unsigned int) ((sa->sin_addr.s_addr >> 16) & 0xff), - (unsigned int) ((sa->sin_addr.s_addr >> 8) & 0xff), - (unsigned int) ((sa->sin_addr.s_addr) & 0xff), name); + (unsigned int) ((req->sa.sin_addr.s_addr >> 24) & 0xff), + (unsigned int) ((req->sa.sin_addr.s_addr >> 16) & 0xff), + (unsigned int) ((req->sa.sin_addr.s_addr >> 8) & 0xff), + (unsigned int) ((req->sa.sin_addr.s_addr) & 0xff), #endif + output); return (-1); } + /* + look for : + resource. + auth. + ... + cf. request.c + */ + while (dns_commands[i++].str) + { + if ( ( dns_commands[i-1].str_len + 1 + domain_len <= req_len ) + && ((ptr2 = strstr(ptr - dns_commands[i-1].str_len, dns_commands[i-1].str)))) + { + ptr = ptr2; + req->cmd = &dns_commands[i-1]; + break; + } + } + strcpy(req->domain, ptr); *ptr = 0; - len = (unsigned int) (ptr - name); - for (i=0,j=0; imy_domain) + 1)) + return (-1); + while (*ptr) { - len = (int) *ptr; + len = (uint8_t) *ptr; total_len += len; - if ((len & COMPRESS_FLAG_CHAR) == COMPRESS_FLAG_CHAR) - { - ptr = data + - GET_DECOMPRESS_OFFSET(* ((uint16_t *)(ptr))); - max_compress_depth--; - break; - } if ((len > 63) || (total_len > MAX_HOST_NAME_ENCODED)) { - DPRINTF(1, "req was %u %s -> %s\n", (unsigned int) strlen(input), - input, output); MYERROR("NAME TOO long %d %d", len, total_len + len); return (-1); } @@ -114,6 +142,7 @@ } ptr += (len); } - output[total_len -1 ] = 0; - return (dns_strip_subdomain(output, conf, sa)); + if (total_len > 0) + output[total_len -1 ] = 0; + return (dns_strip_dot_and_domain(conf, req, output)); } diff -Nru dns2tcp-0.4.dfsg/server/includes/auth.h dns2tcp-0.5.2/server/includes/auth.h --- dns2tcp-0.4.dfsg/server/includes/auth.h 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/server/includes/auth.h 2008-08-26 16:50:00.000000000 +0100 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: auth.h,v 1.3 2006/11/17 15:50:16 dembour Exp $ +** $Id: auth.h,v 1.6 2008/08/26 15:50:00 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -21,7 +21,9 @@ #ifndef __AUTH_H__ #define __AUTH_H__ -int login_user(t_conf *conf, void *packet, void *buffer, int len, struct sockaddr_in *sa); -uint16_t create_env(t_conf *conf, void *req, char *ressource, int in_len); +int login_user(t_conf *conf, t_request *, t_packet *, t_simple_list *); +uint16_t create_env(t_conf *conf, void *req, char *resource, int in_len); +uint8_t is_authenticated(t_conf *, void *req, int in_len); +int bind_user(t_conf *conf, t_request *, t_packet *, t_simple_list *); #endif diff -Nru dns2tcp-0.4.dfsg/server/includes/control.h dns2tcp-0.5.2/server/includes/control.h --- dns2tcp-0.4.dfsg/server/includes/control.h 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/server/includes/control.h 2010-01-20 16:14:26.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: control.h,v 1.3 2006/01/17 13:01:59 dembour Exp $ +** $Id: control.h,v 1.5.4.3 2010/01/20 16:14:26 collignon Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -21,22 +21,28 @@ #ifndef __CONTROL_H__ #define __CONTROL_H__ -/* client */ +#include "mycrypto.h" + +/* client related struct : info & parameters */ typedef struct s_control { + uint8_t req; /* first req acceptable */ uint8_t queue_full; - uint8_t use_compress; - struct timeval tv; - char *hash_wanted; + uint8_t use_compress; + uint16_t mtu_size; /* max encoded data */ + uint16_t nb_reply; /* how many reply can we send */ + struct timeval tv; /* client timeout */ + uint8_t authenticated; + char challenge[CHALLENGE_SIZE+1]; } t_control; -/* packet */ +/* packet related */ typedef struct s_control_peer { struct sockaddr_in sa; char data[MAX_HOST_NAME_ENCODED]; int len; uint16_t seq; + const struct s_rr_functions *reply_functions; } t_control_peer; - #endif diff -Nru dns2tcp-0.4.dfsg/server/includes/dns_decode.h dns2tcp-0.5.2/server/includes/dns_decode.h --- dns2tcp-0.4.dfsg/server/includes/dns_decode.h 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/server/includes/dns_decode.h 2008-03-14 08:49:21.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: dns_decode.h,v 1.2 2007/02/02 16:56:41 dembour Exp $ +** $Id: dns_decode.h,v 1.3 2008/03/14 08:49:21 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -21,6 +21,6 @@ #ifndef __DNS_DECODE_H__ #define __DNS_DECODE_H__ -int dns_decode(char *, char *, char *, t_conf *, struct sockaddr_in *); +int dns_decode(t_conf *conf, t_request *req, char *input, char *output); #endif diff -Nru dns2tcp-0.4.dfsg/server/includes/queue.h dns2tcp-0.5.2/server/includes/queue.h --- dns2tcp-0.4.dfsg/server/includes/queue.h 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/server/includes/queue.h 2009-01-09 16:40:14.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: queue.h,v 1.1 2006/06/30 07:39:09 dembour Exp $ +** $Id: queue.h,v 1.4 2009/01/09 16:40:14 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -21,6 +21,14 @@ #ifndef __QUEUE_H__ #define __QUEUE_H__ -void queue_dump(struct s_simple_list *client); +int queue_put_data(t_conf *conf, t_request *req, t_data *data); +t_list *init_queue(); +int queue_read_tcp(t_conf *conf, t_simple_list *client); +int queue_delete_zombie(t_conf * conf); +void client_update_timer(struct s_simple_list *client); +int delete_queue(struct s_list *queue); +t_simple_list *find_client_by_session_id(t_conf *conf, uint16_t session_id); +void queue_dump(t_simple_list *client); +int queue_flush_expired_data(t_conf *conf); #endif diff -Nru dns2tcp-0.4.dfsg/server/includes/requests.h dns2tcp-0.5.2/server/includes/requests.h --- dns2tcp-0.4.dfsg/server/includes/requests.h 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/server/includes/requests.h 2010-02-10 15:29:51.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: requests.h,v 1.1.1.1 2006/01/06 13:53:23 dembour Exp $ +** $Id: requests.h,v 1.4.4.2 2010/02/10 15:29:51 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -21,8 +21,19 @@ #ifndef __REQUESTS_H__ #define __REQUESTS_H__ +typedef struct s_command { + const char *str; + uint8_t str_len; + uint8_t authenticated; + int (*deal_cmd)(t_conf *, t_request *, t_packet *, t_simple_list *); +} t_command; + int get_incoming_request(t_conf *); +int send_reply(t_conf *conf, t_request *req, t_data *data); +int send_ascii_reply(t_conf *conf, t_request *req, t_packet *packet, char *data); void *add_reply(struct dns_hdr *, void *, uint16_t , char *); -int build_error_reply(t_conf *, void *, int , char *); +int get_request(t_conf *conf, t_request *req, t_data *output); +int send_resources_reply(t_conf *conf, t_request *, t_packet *, t_simple_list *); + #endif diff -Nru dns2tcp-0.4.dfsg/server/includes/rr.h dns2tcp-0.5.2/server/includes/rr.h --- dns2tcp-0.4.dfsg/server/includes/rr.h 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/server/includes/rr.h 2010-01-20 16:09:07.000000000 +0000 @@ -0,0 +1,115 @@ +/* +** Copyright (C) 2006 Olivier DEMBOUR +** $Id: rr.h,v 1.2.4.1 2010/01/20 16:09:07 collignon Exp $ +** +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with This program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __RR_H__ +#define __RR_H__ + +#include "dns.h" + + +typedef struct s_rr_functions { + uint16_t type; + uint16_t reply_type; + void *(*rr_add_reply)(struct s_conf *, struct s_request *,struct dns_hdr *, + void *, char *_data); + int (*rr_decode_reply)(char *, int , + char *, int); + int (*rr_available_len)(struct dns_hdr *, t_simple_list *, int); +} t_rr_functions; + +#define TYPE_A 1 +#define TYPE_NS 2 +#define TYPE_MD 3 +#define TYPE_MF 4 +#define TYPE_CNAME 5 +#define TYPE_SOA 6 +#define TYPE_MB 7 +#define TYPE_MG 8 +#define TYPE_MR 9 +#define TYPE_NULL 10 +#define TYPE_WKS 11 +#define TYPE_PTR 12 +#define TYPE_HINFO 13 +#define TYPE_MINFO 14 +#define TYPE_MX 15 +#define TYPE_TXT 16 +#define TYPE_RP 17 +#define TYPE_AFSDB 18 +#define TYPE_X25 19 +#define TYPE_ISDN 20 +#define TYPE_RT 21 +#define TYPE_NSAP 22 +#define TYPE_NSAP_PTR 23 +#define TYPE_SIG 24 +#define TYPE_KEY 25 +#define TYPE_PX 26 +#define TYPE_GPOS 27 +#define TYPE_AAAA 28 +#define TYPE_LOC 29 +#define TYPE_NXT 30 +#define TYPE_EID 31 +#define TYPE_NIMLOC 32 +#define TYPE_SRV 33 +#define TYPE_ATMA 34 +#define TYPE_NAPTR 35 +#define TYPE_KX 36 +#define TYPE_CERT 37 +#define TYPE_A6 38 +#define TYPE_DNAME 39 +#define TYPE_SINK 40 +#define TYPE_OPT 41 +#define TYPE_APL 42 +#define TYPE_DS 43 +#define TYPE_SSHFP 44 +#define TYPE_IPSECKEY 45 +#define TYPE_RRSIG 46 +#define TYPE_NSEC 47 +#define TYPE_DNSKEY 48 +#define TYPE_DHCID 49 +#define TYPE_NSEC3 50 +#define TYPE_NSEC3PARAM 51 +#define TYPE_HIP 55 +#define TYPE_SPF 99 +#define TYPE_UINFO 100 +#define TYPE_UID 101 +#define TYPE_GID 102 +#define TYPE_UNSPEC 103 +#define TYPE_TKEY 249 +#define TYPE_TSIG 250 +#define TYPE_IXFR 251 +#define TYPE_AXFR 252 +#define TYPE_MAILB 253 +#define TYPE_MAILA 254 + +const struct s_rr_functions *get_rr_function_by_type(uint16_t ); + +void *rr_add_reply_encode(struct s_conf *, struct s_request *, struct dns_hdr *, void *, char *); +void *rr_add_reply_raw(struct s_conf *, struct s_request *, struct dns_hdr *, void *, char *); +void *rr_add_reply_cname(struct s_conf *, struct s_request *, struct dns_hdr *, void *, char *); + +int rr_decode_reply_encode(char *, int, char *, int); +int rr_decode_reply_raw(char *, int, char *, int); +int rr_get_reply_length_encode(struct dns_hdr *, t_simple_list *, int ); +int rr_get_reply_length_raw(struct dns_hdr *, t_simple_list *, int ); +int rr_get_reply_length_cname(struct dns_hdr *, t_simple_list *, int ); + + +#endif /* __RR_H__ */ + diff -Nru dns2tcp-0.4.dfsg/server/includes/server.h dns2tcp-0.5.2/server/includes/server.h --- dns2tcp-0.4.dfsg/server/includes/server.h 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/server/includes/server.h 2010-02-11 15:05:50.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: server.h,v 1.8 2007/01/24 13:34:02 dembour Exp $ +** $Id: server.h,v 1.14.4.4 2010/02/11 15:05:50 collignon Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -23,8 +23,15 @@ #include "packet.h" +#define DEFAULT_PIDFILE "/var/run/dns2tcpd.pid" + #define CLIENT_TIMEOUT 8 /* seconds */ + +/* Req will be flushed after REQUEST_TIMEOUT + REQUEST_UTIMEOUT */ +#define REQUEST_TIMEOUT 0 /* sec */ +#define REQUEST_UTIMEOUT 500000 /* microsec */ + /* when we have more than FLUSH_TRIGGER queries in queue, we try to flush */ #define FLUSH_TRIGGER (QUEUE_SIZE /4) @@ -35,20 +42,37 @@ typedef struct s_conf { - struct s_list *ressources; + struct s_list *resources; struct s_simple_list *client; int sd_udp; char *my_domain; char *chroot; + char *pid_file; char *user; char *my_ip; + char *pidfile; + char *key; uint16_t port; - uint8_t list_ressource; + uint8_t list_resource; + uint8_t trace_enable; +#define TRACE_AVAILABLE (1 << 0) +#define TRACE_ENABLE (1 << 1) + time_t trace_timeout; uint8_t foreground; } t_conf; +typedef struct s_request { + // FIXME BUG ipv6 support + struct sockaddr_in sa; + void *data; + char *domain; + int len; + uint16_t edns_size; + const struct s_command *cmd; + const struct s_rr_functions *reply_functions; +} t_request; + int do_server(t_conf *); -int strnlen(char *, int); /* not present ?*/ int delete_client(t_conf *conf, struct s_simple_list *client); void delete_zombie(t_conf *conf); diff -Nru dns2tcp-0.4.dfsg/server/includes/server_queue.h dns2tcp-0.5.2/server/includes/server_queue.h --- dns2tcp-0.4.dfsg/server/includes/server_queue.h 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/server/includes/server_queue.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,35 +0,0 @@ -/* -** Copyright (C) 2006 Olivier DEMBOUR -** $Id: server_queue.h,v 1.3 2006/01/17 13:01:59 dembour Exp $ -** -** -** This program is free software; you can redistribute it and/or modify -** it under the terms of the GNU General Public License as published by -** the Free Software Foundation; either version 2 of the License, or -** (at your option) any later version. -** -** This program is distributed in the hope that it will be useful, -** but WITHOUT ANY WARRANTY; without even the implied warranty of -** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -** GNU General Public License for more details. -** -** You should have received a copy of the GNU General Public License -** along with This program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -#ifndef __SERVER_QUEUE_H__ -#define __SERVER_QUEUE_H__ - -#include -#include - - -int queue_put_data(t_conf *conf, char *buffer, int in_len, struct sockaddr_in *sa); -t_list *init_queue(); -int queue_read_tcp(t_conf *conf, t_simple_list *client); -int queue_delete_zombie(t_conf * conf); -void queue_update_timer(struct s_simple_list *client); -int delete_queue(struct s_list *queue); - -#endif diff -Nru dns2tcp-0.4.dfsg/server/includes/session.h dns2tcp-0.5.2/server/includes/session.h --- dns2tcp-0.4.dfsg/server/includes/session.h 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/server/includes/session.h 2008-08-26 16:50:00.000000000 +0100 @@ -0,0 +1,27 @@ +/* +** Copyright (C) 2006 Olivier DEMBOUR +** $Id: session.h,v 1.3 2008/08/26 15:50:00 dembour Exp $ +** +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with This program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __SESSION_H__ +#define __SESSION_H__ + +int session_request(t_conf *, t_request *, t_data *); +t_simple_list *create_session(t_conf *, t_request *, t_packet *); + +#endif diff -Nru dns2tcp-0.4.dfsg/server/includes/socket.h dns2tcp-0.5.2/server/includes/socket.h --- dns2tcp-0.4.dfsg/server/includes/socket.h 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/server/includes/socket.h 2010-01-06 12:50:41.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: socket.h,v 1.1.1.1 2006/01/06 13:53:23 dembour Exp $ +** $Id: socket.h,v 1.1.1.1.6.1 2010/01/06 12:50:41 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -22,6 +22,14 @@ #define __SOCKET_H__ #include +#include + +union sockaddr_u { + struct sockaddr_storage storage; + struct sockaddr_in in; + struct sockaddr_in6 in6; + struct sockaddr sockaddr; +}; int connect_socket(char *, uint16_t, int *); int bind_socket(t_conf *); diff -Nru dns2tcp-0.4.dfsg/server/includes/trace.h dns2tcp-0.5.2/server/includes/trace.h --- dns2tcp-0.4.dfsg/server/includes/trace.h 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/server/includes/trace.h 2008-08-04 16:31:08.000000000 +0100 @@ -0,0 +1,30 @@ +/* +** Copyright (C) 2006 Olivier DEMBOUR +** $Id: trace.h,v 1.1 2008/08/04 15:31:08 dembour Exp $ +** +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with This program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __TRACE_H__ +#define __TRACE_H__ + +void trace_on(t_conf *conf); +uint8_t trace_wanted(t_conf *conf, char *domain); +int trace(t_conf *conf, t_request *req, t_data *data); +uint8_t trace_available(t_conf *conf); + + +#endif /* __TRACE_H__ */ diff -Nru dns2tcp-0.4.dfsg/server/main.c dns2tcp-0.5.2/server/main.c --- dns2tcp-0.4.dfsg/server/main.c 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/server/main.c 2009-12-07 08:46:29.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: main.c,v 1.19 2007/05/30 13:04:45 dembour Exp $ +** $Id: main.c,v 1.28.4.2 2009/12/07 08:46:29 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -25,10 +25,12 @@ #include #include #include -#include #include #include #include +#include +#include +#include #include "config.h" #include "server.h" @@ -40,12 +42,13 @@ #include "myerror.h" #include "log.h" -int detach_process(void) +int detach_process(t_conf *conf) { int fd; - - printf("detach\n"); - if (!fork()) + pid_t pid; + FILE *pidfile; + + if (!(pid = fork())) { /* child */ if (setsid() < 0) { @@ -58,7 +61,15 @@ dup2(fd, 0); dup2(fd, 1); dup2(fd, 2); close(fd); return (0); + + } + if (! (pidfile = fopen((conf->pidfile == 0)? DEFAULT_PIDFILE: conf->pidfile, "w"))) + { + LOG("Could not open pidfile %s\n", conf->pidfile? conf->pidfile : DEFAULT_PIDFILE); + exit (0); } + fprintf(pidfile, "%ld\n", (long) pid); + fclose(pidfile); exit (0); } @@ -71,46 +82,78 @@ { struct addrinfo *res; struct addrinfo hints; + char *domain; memset(&hints, 0, sizeof(hints)); hints.ai_flags = AI_CANONNAME; hints.ai_family = PF_UNSPEC; hints.ai_socktype = SOCK_STREAM; - if (!getaddrinfo(conf->my_domain, NULL, &hints, &res)) + + /* + jump the subdomain, do not try to resolv ourself + because we are not a real DNS server + */ + if (!(domain = strchr(conf->my_domain, '.')) + || (!*++domain)) + domain = conf->my_domain; + if (!getaddrinfo(domain, NULL, &hints, &res)) freeaddrinfo(res); } int jail(t_conf *conf) { struct passwd *pwd = 0; - + FILE *pid_file; + if (!conf->foreground) - detach_process(); + detach_process(conf); if ((conf->user) && (!(pwd = getpwnam(conf->user)))) { LOG("User unknown %s", conf->user); return (-1); } + if (conf->pid_file) + { + pid_file = fopen(conf->pid_file, "w"); + if (pid_file) + { + fprintf(pid_file, "%d\n", getpid()); + fclose(pid_file); + } + else + { + LOG("Failed to write pidfile"); + return (-1); + } + } if (conf->chroot) { DPRINTF(1, "Chroot to %s\n", conf->chroot); load_resolv(conf); - if (chroot(conf->chroot) == -1) + if ((chroot(conf->chroot) == -1) || chdir("/")) { - LOG("Failed to chroot"); + LOG("Failed to chroot in %s\n", conf->chroot); return (-1); } } if (pwd) { DPRINTF(1, "Change to user %s\n", conf->user); - if (setgid(pwd->pw_gid) || setuid(pwd->pw_uid)) + if (setgroups(0, NULL) || setgid(pwd->pw_gid) || setuid(pwd->pw_uid)) { LOG("Failed to change to user %s\n", conf->user); return (-1); } } +#ifdef RLIMIT_NPROC + struct rlimit rlim; + + /* fork() is not need anymore, disable it */ + rlim.rlim_max = rlim.rlim_cur = 0; + if (setrlimit(RLIMIT_NPROC, &rlim)) + return (-1); +#endif return (0); } @@ -131,8 +174,8 @@ return (-1); srand(getpid()^time(0)); do_server(conf); - closelog(); } + closelog(); return (0); } diff -Nru dns2tcp-0.4.dfsg/server/Makefile.am dns2tcp-0.5.2/server/Makefile.am --- dns2tcp-0.4.dfsg/server/Makefile.am 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/server/Makefile.am 2010-05-18 16:35:48.000000000 +0100 @@ -3,6 +3,11 @@ CLEANFILES=*~ EXTRA_DIST = includes dns2tcpdrc dns2tcpd_SOURCES = \ + ../common/hmac_sha1.c \ + ../common/crc16.c \ + rr.c \ + ../common/mycrypto.c \ + session.c \ queue.c \ ../common/config.c \ ../common/myrand.c \ diff -Nru dns2tcp-0.4.dfsg/server/Makefile.in dns2tcp-0.5.2/server/Makefile.in --- dns2tcp-0.4.dfsg/server/Makefile.in 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/server/Makefile.in 2010-06-16 09:52:40.000000000 +0100 @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.10 from Makefile.am. +# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -16,8 +17,9 @@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c @@ -30,6 +32,8 @@ NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ bin_PROGRAMS = dns2tcpd$(EXEEXT) subdir = server DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in @@ -40,20 +44,22 @@ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" -binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) -am_dns2tcpd_OBJECTS = queue.$(OBJEXT) config.$(OBJEXT) \ - myrand.$(OBJEXT) auth.$(OBJEXT) requests.$(OBJEXT) \ - server.$(OBJEXT) list.$(OBJEXT) dns.$(OBJEXT) \ - dns_decode.$(OBJEXT) mystrnlen.$(OBJEXT) memdump.$(OBJEXT) \ - base64.$(OBJEXT) socket.$(OBJEXT) options.$(OBJEXT) \ - main.$(OBJEXT) +am_dns2tcpd_OBJECTS = hmac_sha1.$(OBJEXT) crc16.$(OBJEXT) rr.$(OBJEXT) \ + mycrypto.$(OBJEXT) session.$(OBJEXT) queue.$(OBJEXT) \ + config.$(OBJEXT) myrand.$(OBJEXT) auth.$(OBJEXT) \ + requests.$(OBJEXT) server.$(OBJEXT) list.$(OBJEXT) \ + dns.$(OBJEXT) dns_decode.$(OBJEXT) mystrnlen.$(OBJEXT) \ + memdump.$(OBJEXT) base64.$(OBJEXT) socket.$(OBJEXT) \ + options.$(OBJEXT) main.$(OBJEXT) dns2tcpd_OBJECTS = $(am_dns2tcpd_OBJECTS) dns2tcpd_LDADD = $(LDADD) -DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles +am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) @@ -77,6 +83,7 @@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ +DIRECTORIES = @DIRECTORIES@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ @@ -93,6 +100,7 @@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ +MAN_PAGES = @MAN_PAGES@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ @@ -100,6 +108,7 @@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ @@ -117,14 +126,22 @@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ +build = @build@ build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ +host = @host@ host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ @@ -145,12 +162,18 @@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ INCLUDES = -I./includes/ -I../common/includes CLEANFILES = *~ EXTRA_DIST = includes dns2tcpdrc dns2tcpd_SOURCES = \ + ../common/hmac_sha1.c \ + ../common/crc16.c \ + rr.c \ + ../common/mycrypto.c \ + session.c \ queue.c \ ../common/config.c \ ../common/myrand.c \ @@ -175,14 +198,14 @@ @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu server/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu server/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu server/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu server/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -200,26 +223,41 @@ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - if test -f $$p \ - ; then \ - f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ - $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ - else :; fi; \ - done + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ - rm -f "$(DESTDIR)$(bindir)/$$f"; \ - done + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) @@ -236,127 +274,174 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base64.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/config.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crc16.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dns.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dns_decode.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hmac_sha1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memdump.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mycrypto.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/myrand.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mystrnlen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/options.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/queue.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/requests.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/server.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/session.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/socket.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +hmac_sha1.o: ../common/hmac_sha1.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT hmac_sha1.o -MD -MP -MF $(DEPDIR)/hmac_sha1.Tpo -c -o hmac_sha1.o `test -f '../common/hmac_sha1.c' || echo '$(srcdir)/'`../common/hmac_sha1.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hmac_sha1.Tpo $(DEPDIR)/hmac_sha1.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/hmac_sha1.c' object='hmac_sha1.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o hmac_sha1.o `test -f '../common/hmac_sha1.c' || echo '$(srcdir)/'`../common/hmac_sha1.c + +hmac_sha1.obj: ../common/hmac_sha1.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT hmac_sha1.obj -MD -MP -MF $(DEPDIR)/hmac_sha1.Tpo -c -o hmac_sha1.obj `if test -f '../common/hmac_sha1.c'; then $(CYGPATH_W) '../common/hmac_sha1.c'; else $(CYGPATH_W) '$(srcdir)/../common/hmac_sha1.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hmac_sha1.Tpo $(DEPDIR)/hmac_sha1.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/hmac_sha1.c' object='hmac_sha1.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o hmac_sha1.obj `if test -f '../common/hmac_sha1.c'; then $(CYGPATH_W) '../common/hmac_sha1.c'; else $(CYGPATH_W) '$(srcdir)/../common/hmac_sha1.c'; fi` + +crc16.o: ../common/crc16.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crc16.o -MD -MP -MF $(DEPDIR)/crc16.Tpo -c -o crc16.o `test -f '../common/crc16.c' || echo '$(srcdir)/'`../common/crc16.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/crc16.Tpo $(DEPDIR)/crc16.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/crc16.c' object='crc16.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crc16.o `test -f '../common/crc16.c' || echo '$(srcdir)/'`../common/crc16.c + +crc16.obj: ../common/crc16.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crc16.obj -MD -MP -MF $(DEPDIR)/crc16.Tpo -c -o crc16.obj `if test -f '../common/crc16.c'; then $(CYGPATH_W) '../common/crc16.c'; else $(CYGPATH_W) '$(srcdir)/../common/crc16.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/crc16.Tpo $(DEPDIR)/crc16.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/crc16.c' object='crc16.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crc16.obj `if test -f '../common/crc16.c'; then $(CYGPATH_W) '../common/crc16.c'; else $(CYGPATH_W) '$(srcdir)/../common/crc16.c'; fi` + +mycrypto.o: ../common/mycrypto.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mycrypto.o -MD -MP -MF $(DEPDIR)/mycrypto.Tpo -c -o mycrypto.o `test -f '../common/mycrypto.c' || echo '$(srcdir)/'`../common/mycrypto.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mycrypto.Tpo $(DEPDIR)/mycrypto.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/mycrypto.c' object='mycrypto.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mycrypto.o `test -f '../common/mycrypto.c' || echo '$(srcdir)/'`../common/mycrypto.c + +mycrypto.obj: ../common/mycrypto.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mycrypto.obj -MD -MP -MF $(DEPDIR)/mycrypto.Tpo -c -o mycrypto.obj `if test -f '../common/mycrypto.c'; then $(CYGPATH_W) '../common/mycrypto.c'; else $(CYGPATH_W) '$(srcdir)/../common/mycrypto.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mycrypto.Tpo $(DEPDIR)/mycrypto.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/mycrypto.c' object='mycrypto.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mycrypto.obj `if test -f '../common/mycrypto.c'; then $(CYGPATH_W) '../common/mycrypto.c'; else $(CYGPATH_W) '$(srcdir)/../common/mycrypto.c'; fi` + config.o: ../common/config.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT config.o -MD -MP -MF $(DEPDIR)/config.Tpo -c -o config.o `test -f '../common/config.c' || echo '$(srcdir)/'`../common/config.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/config.Tpo $(DEPDIR)/config.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/config.Tpo $(DEPDIR)/config.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/config.c' object='config.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o config.o `test -f '../common/config.c' || echo '$(srcdir)/'`../common/config.c config.obj: ../common/config.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT config.obj -MD -MP -MF $(DEPDIR)/config.Tpo -c -o config.obj `if test -f '../common/config.c'; then $(CYGPATH_W) '../common/config.c'; else $(CYGPATH_W) '$(srcdir)/../common/config.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/config.Tpo $(DEPDIR)/config.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/config.Tpo $(DEPDIR)/config.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/config.c' object='config.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o config.obj `if test -f '../common/config.c'; then $(CYGPATH_W) '../common/config.c'; else $(CYGPATH_W) '$(srcdir)/../common/config.c'; fi` myrand.o: ../common/myrand.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT myrand.o -MD -MP -MF $(DEPDIR)/myrand.Tpo -c -o myrand.o `test -f '../common/myrand.c' || echo '$(srcdir)/'`../common/myrand.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/myrand.Tpo $(DEPDIR)/myrand.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/myrand.Tpo $(DEPDIR)/myrand.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/myrand.c' object='myrand.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o myrand.o `test -f '../common/myrand.c' || echo '$(srcdir)/'`../common/myrand.c myrand.obj: ../common/myrand.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT myrand.obj -MD -MP -MF $(DEPDIR)/myrand.Tpo -c -o myrand.obj `if test -f '../common/myrand.c'; then $(CYGPATH_W) '../common/myrand.c'; else $(CYGPATH_W) '$(srcdir)/../common/myrand.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/myrand.Tpo $(DEPDIR)/myrand.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/myrand.Tpo $(DEPDIR)/myrand.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/myrand.c' object='myrand.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o myrand.obj `if test -f '../common/myrand.c'; then $(CYGPATH_W) '../common/myrand.c'; else $(CYGPATH_W) '$(srcdir)/../common/myrand.c'; fi` list.o: ../common/list.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT list.o -MD -MP -MF $(DEPDIR)/list.Tpo -c -o list.o `test -f '../common/list.c' || echo '$(srcdir)/'`../common/list.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/list.Tpo $(DEPDIR)/list.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/list.Tpo $(DEPDIR)/list.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/list.c' object='list.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o list.o `test -f '../common/list.c' || echo '$(srcdir)/'`../common/list.c list.obj: ../common/list.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT list.obj -MD -MP -MF $(DEPDIR)/list.Tpo -c -o list.obj `if test -f '../common/list.c'; then $(CYGPATH_W) '../common/list.c'; else $(CYGPATH_W) '$(srcdir)/../common/list.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/list.Tpo $(DEPDIR)/list.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/list.Tpo $(DEPDIR)/list.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/list.c' object='list.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o list.obj `if test -f '../common/list.c'; then $(CYGPATH_W) '../common/list.c'; else $(CYGPATH_W) '$(srcdir)/../common/list.c'; fi` dns.o: ../common/dns.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dns.o -MD -MP -MF $(DEPDIR)/dns.Tpo -c -o dns.o `test -f '../common/dns.c' || echo '$(srcdir)/'`../common/dns.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/dns.Tpo $(DEPDIR)/dns.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dns.Tpo $(DEPDIR)/dns.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/dns.c' object='dns.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dns.o `test -f '../common/dns.c' || echo '$(srcdir)/'`../common/dns.c dns.obj: ../common/dns.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dns.obj -MD -MP -MF $(DEPDIR)/dns.Tpo -c -o dns.obj `if test -f '../common/dns.c'; then $(CYGPATH_W) '../common/dns.c'; else $(CYGPATH_W) '$(srcdir)/../common/dns.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/dns.Tpo $(DEPDIR)/dns.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dns.Tpo $(DEPDIR)/dns.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/dns.c' object='dns.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dns.obj `if test -f '../common/dns.c'; then $(CYGPATH_W) '../common/dns.c'; else $(CYGPATH_W) '$(srcdir)/../common/dns.c'; fi` mystrnlen.o: ../common/mystrnlen.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mystrnlen.o -MD -MP -MF $(DEPDIR)/mystrnlen.Tpo -c -o mystrnlen.o `test -f '../common/mystrnlen.c' || echo '$(srcdir)/'`../common/mystrnlen.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mystrnlen.Tpo $(DEPDIR)/mystrnlen.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mystrnlen.Tpo $(DEPDIR)/mystrnlen.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/mystrnlen.c' object='mystrnlen.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mystrnlen.o `test -f '../common/mystrnlen.c' || echo '$(srcdir)/'`../common/mystrnlen.c mystrnlen.obj: ../common/mystrnlen.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mystrnlen.obj -MD -MP -MF $(DEPDIR)/mystrnlen.Tpo -c -o mystrnlen.obj `if test -f '../common/mystrnlen.c'; then $(CYGPATH_W) '../common/mystrnlen.c'; else $(CYGPATH_W) '$(srcdir)/../common/mystrnlen.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/mystrnlen.Tpo $(DEPDIR)/mystrnlen.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mystrnlen.Tpo $(DEPDIR)/mystrnlen.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/mystrnlen.c' object='mystrnlen.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mystrnlen.obj `if test -f '../common/mystrnlen.c'; then $(CYGPATH_W) '../common/mystrnlen.c'; else $(CYGPATH_W) '$(srcdir)/../common/mystrnlen.c'; fi` memdump.o: ../common/memdump.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT memdump.o -MD -MP -MF $(DEPDIR)/memdump.Tpo -c -o memdump.o `test -f '../common/memdump.c' || echo '$(srcdir)/'`../common/memdump.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/memdump.Tpo $(DEPDIR)/memdump.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/memdump.Tpo $(DEPDIR)/memdump.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/memdump.c' object='memdump.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o memdump.o `test -f '../common/memdump.c' || echo '$(srcdir)/'`../common/memdump.c memdump.obj: ../common/memdump.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT memdump.obj -MD -MP -MF $(DEPDIR)/memdump.Tpo -c -o memdump.obj `if test -f '../common/memdump.c'; then $(CYGPATH_W) '../common/memdump.c'; else $(CYGPATH_W) '$(srcdir)/../common/memdump.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/memdump.Tpo $(DEPDIR)/memdump.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/memdump.Tpo $(DEPDIR)/memdump.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/memdump.c' object='memdump.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o memdump.obj `if test -f '../common/memdump.c'; then $(CYGPATH_W) '../common/memdump.c'; else $(CYGPATH_W) '$(srcdir)/../common/memdump.c'; fi` base64.o: ../common/base64.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT base64.o -MD -MP -MF $(DEPDIR)/base64.Tpo -c -o base64.o `test -f '../common/base64.c' || echo '$(srcdir)/'`../common/base64.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/base64.Tpo $(DEPDIR)/base64.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/base64.Tpo $(DEPDIR)/base64.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/base64.c' object='base64.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o base64.o `test -f '../common/base64.c' || echo '$(srcdir)/'`../common/base64.c base64.obj: ../common/base64.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT base64.obj -MD -MP -MF $(DEPDIR)/base64.Tpo -c -o base64.obj `if test -f '../common/base64.c'; then $(CYGPATH_W) '../common/base64.c'; else $(CYGPATH_W) '$(srcdir)/../common/base64.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/base64.Tpo $(DEPDIR)/base64.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/base64.Tpo $(DEPDIR)/base64.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../common/base64.c' object='base64.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o base64.obj `if test -f '../common/base64.c'; then $(CYGPATH_W) '../common/base64.c'; else $(CYGPATH_W) '$(srcdir)/../common/base64.c'; fi` @@ -366,45 +451,49 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -425,13 +514,17 @@ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -463,6 +556,7 @@ distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -483,6 +577,8 @@ html: html-am +html-am: + info: info-am info-am: @@ -491,18 +587,28 @@ install-dvi: install-dvi-am +install-dvi-am: + install-exec-am: install-binPROGRAMS install-html: install-html-am +install-html-am: + install-info: install-info-am +install-info-am: + install-man: install-pdf: install-pdf-am +install-pdf-am: + install-ps: install-ps-am +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -539,6 +645,7 @@ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-binPROGRAMS + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru dns2tcp-0.4.dfsg/server/options.c dns2tcp-0.5.2/server/options.c --- dns2tcp-0.4.dfsg/server/options.c 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/server/options.c 2009-12-03 16:28:37.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: options.c,v 1.10 2007/05/29 14:51:14 dembour Exp $ +** $Id: options.c,v 1.18.4.1 2009/12/03 16:28:37 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -19,7 +19,6 @@ */ #include -#include #include #include #include @@ -32,21 +31,33 @@ #include "log.h" +/** + * @brief Usage + * @param[in] program name + **/ static void usage(char *name) { - fprintf(stderr, "Usage :%s [ -i IP ] [ -F ] [ -d debug_level ] [ -f config-file ]\n", name); + fprintf(stderr, "Usage : %s [ -i IP ] [ -F ] [ -d debug_level ] [ -f config-file ] [ -p pidfile ]\n", name); fprintf(stderr, "\t -F : dns2tcpd will run in foreground\n"); } + +/** + * @brief check for missing parameters + * @param[in] conf configuration + * @retval 0 on success + * @retval -1 on error + **/ + static int check_mandatory_param(t_conf *conf) { if (!conf->port) conf->port = 53; - if (!conf->ressources) + if (!conf->resources) { - LOG("Need at least one ressource \n"); + LOG("Need at least one resource \n"); return (-1); } if (!conf->my_domain) @@ -57,7 +68,15 @@ return (0); } -static int add_ressource(t_conf *conf, char *value) +/** + * @brief add a ressource + * @param[in] conf configuration + * @param[in] value ressource to add + * @retval 0 on success + * @retval -1 on error + **/ + +static int add_resource(t_conf *conf, char *value) { t_list *cell; char *port; @@ -69,17 +88,26 @@ return (-1); if (!(cell = list_create_cell())) return (-1); - if (!conf->ressources) - conf->ressources = cell; + if (!conf->resources) + conf->resources = cell; else - list_add_cell(conf->ressources, cell); - strcpy(cell->data, value); + list_add_cell(conf->resources, cell); + strncpy(cell->data, value, MAX_DNS_LEN-1); cell->info.port = atoi(port); - DPRINTF(1, "Add ressource %s port %d\n", value, cell->info.port); + DPRINTF(1, "Add resource %s port %d\n", value, cell->info.port); free(value); return (0); } +/** + * @brief copy a parameter into conf structure + * @param[in] conf configuration + * @param[in] token parameter + * @param[in] value value + * @retval 0 on success + * @retval -1 on error + **/ + static int server_copy_param(void *my_conf, char *token, char *value) { char *buffer = 0; @@ -88,32 +116,52 @@ conf = (t_conf *)my_conf; if (token) { + /* Integer value */ if (!strcmp(token, "debug_level")) return (debug ? 0 : (debug = atoi(value))); if (!strcmp(token, "port")) return (conf->port = atoi(value)); - if (!(buffer = malloc(strlen(value)+1))) + + if (!(buffer = strdup(value))) { LOG("Memory error\n"); exit (-1); } - strcpy(buffer, value); + /* String value */ if (!strcmp(token, "chroot")) - return ((int) (conf->chroot = buffer)); + return ((conf->chroot = buffer) > 0); + if (!strcmp(token, "key")) + return ((conf->key = buffer) > 0); if (!strcmp(token, "user")) - return ((int) (conf->user = buffer)); + return ((conf->user = buffer) > 0); if (!strcmp(token, "domain")) - return ((int) (conf->my_domain = buffer)); + return ((conf->my_domain = buffer) > 0); + if (!strcmp(token, "pid_file")) + return ((conf->pid_file = buffer) > 0); if (!strcmp(token, "listen")) - return ((int) (conf->my_ip ? 0 : (conf->my_ip = buffer))); + return ((conf->my_ip ? 0 : (conf->my_ip = buffer) > 0)); + if (!strcmp(token, "resources")) + return (add_resource(conf, buffer)); if (!strcmp(token, "ressources")) - return (add_ressource(conf, buffer)); + { + fprintf(stderr, "Warning : Incorrect ressources syntax in config file (should be resources)\n"); + return (add_resource(conf, buffer)); + } } if (buffer) free(buffer); return (-1); } +/** + * @brief get options for command line and file configuration + * @param[in] argc number command line arguments + * @param[in] argv command line arguments + * @param[in] conf configuration + * @retval 0 on success + * @retval -1 on error + **/ + int get_option(int argc, char **argv, t_conf *conf) { int c; @@ -124,14 +172,14 @@ debug = 0; while (1) { - c = getopt (argc, argv, "hFf:i:d:"); + c = getopt (argc, argv, "hFf:i:d:p:"); if (c == -1) break; switch (c) { case 'f': if (strlen(optarg) > (CONFIG_FILE_LEN - 10)) return (-1); - strcpy(config_file, optarg); + strncpy(config_file, optarg, CONFIG_FILE_LEN-1); break; case 'd': debug = atoi(optarg); @@ -142,6 +190,9 @@ case 'i': conf->my_ip = optarg; break; + case 'p': + conf->pidfile = optarg; + break; case 'h': default : usage(argv[0]); diff -Nru dns2tcp-0.4.dfsg/server/queue.c dns2tcp-0.5.2/server/queue.c --- dns2tcp-0.4.dfsg/server/queue.c 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/server/queue.c 2010-01-19 17:18:00.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: queue.c,v 1.17 2007/06/18 09:08:34 dembour Exp $ +** $Id: queue.c,v 1.29.4.5 2010/01/19 17:18:00 collignon Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -23,9 +23,9 @@ #include #include #include -#include #include +#include "mycrypto.h" #include "base64.h" #include "server.h" #include "dns.h" @@ -33,50 +33,73 @@ #include "packet.h" #include "myerror.h" #include "requests.h" +#include "rr.h" #include "control.h" #include "list.h" #include "debug.h" +#include "packet.h" +#include "crc16.h" + + + void queue_dump(t_simple_list *client); -t_list *init_queue() + +/** + * @brief initialize client messages queue + */ +t_list *init_queue(void) { - int nb; - t_list *first; - t_list *list; + int nb; + t_list *queue; - if (!(first = malloc(sizeof(t_list)))) + if (!(queue = calloc(QUEUE_SIZE, sizeof(t_list)))) return (0); - list = first; - memset(first, 0, sizeof(t_list)); - for (nb = QUEUE_SIZE - 1; nb; nb--) - { - if (!(list->next = malloc(sizeof(t_list)))) - return (0); - memset(list->next, 0, sizeof(t_list)); - list->next->next = 0; - list = list->next; - } - return (first); + for (nb=0; nb < QUEUE_SIZE-1; nb++) + queue[nb].next = &queue[nb+1]; + queue[QUEUE_SIZE-1].next = NULL; + + return (queue); } +/** + * @brief delete client messages queue + */ int delete_queue(t_list *queue) { - t_list *tmp; - t_list *tmp2; - if (!queue) return (-1); - tmp = queue; - while (tmp) - { - tmp2 = tmp; - tmp = tmp2->next; - free(tmp2); - } + free(queue); return (0); } + +/** + * @brief update the client's queue timer + */ +void queue_update_timer(t_list *queue) +{ + struct timeval tv; + struct timezone tz; + + if (!(gettimeofday(&tv, &tz))) + { + queue->timeout.tv_sec = tv.tv_sec + REQUEST_TIMEOUT;; + queue->timeout.tv_usec = tv.tv_usec + REQUEST_UTIMEOUT; + } +} + + +/** + * @brief acknoledge a reply + * @param[in] queue client's queue + * @param[in] seq sequence number + * @retval 0 on success + * @retval -1 on error + **/ + + static int queue_mark_received(t_list *queue, uint16_t seq) { if (seq) @@ -90,6 +113,16 @@ return (0); } +/** + * @brief extract data from a request in queue + * @param[in] client clients structure + * @param[in] queue client client structure + * @param[in] packet client client structure + * @param[in] len packet's request len + * @retval 0 on success + * @retval -1 on error + **/ + static int queue_copy_data(t_simple_list *client, t_list *queue, t_packet *packet, int len) { void *data; @@ -107,15 +140,25 @@ queue->status = USED; queue->peer.seq = packet->seq; client->control.queue_full = 0; + /* WTF could be another queue ? */ if (queue == client->queue) client->num_seq = packet->seq; + /* Update request timer */ + queue_update_timer(queue); return (0); } + +/** + * @brief send a specifi request from the queue + * @param[in] conf configuration + * @param[in] queue request in queue to send + **/ + static int queue_send_data(t_conf *conf, t_list *queue) { if ((sendto(conf->sd_udp, queue->data, queue->len, 0, - (struct sockaddr *)&(queue->peer.sa), sizeof(struct sockaddr))) == -1) + (struct sockaddr *)&(queue->peer.sa), sizeof(struct sockaddr))) != queue->len) { MYERROR("send error len %d ", queue->len); perror(""); @@ -125,47 +168,63 @@ return (0); } + +/** + * @brief reply for a specifi request + * @param[in] conf configuration + * @param[in] client client's queue + * @param[in] queue element in queue to send + * @param[in] data data to send + * @param[in] data_len data len + **/ + static void queue_reply(t_conf *conf, t_simple_list *client, t_list *queue, void *data, int data_len) { struct dns_hdr *hdr; - void *where; t_packet *packet; - char buffer[MAX_REQ_LEN - DNS_HDR_SIZE - REQ_HDR_SIZE ]; - char buffer2[MAX_REQ_LEN - DNS_HDR_SIZE -REQ_HDR_SIZE ]; + char buffer[MAX_EDNS_LEN - DNS_HDR_SIZE - REQ_HDR_SIZE ]; + t_data output_data; + t_request req; hdr = (struct dns_hdr *) queue->data; - hdr->ra = 1; - hdr->qr = 1; - if (!(where = jump_end_query(hdr, GET_16(&hdr->qdcount), queue->len))) - { - MYERROR("parsing errror"); - memdump(hdr, queue->len); - return ; - } + req.data = queue->data; + req.len = queue->len; + req.reply_functions = queue->peer.reply_functions; + // FIXME bug ipv6 support + memcpy(&req.sa, &(queue->peer.sa), sizeof(struct sockaddr_in)); + + output_data.buffer = buffer; packet = (t_packet *)buffer; - packet->cookie = client->cookie; + packet->session_id = client->session_id; packet->type = ACK ; PUT_16(&packet->seq, queue->peer.seq); packet->ack_seq = 0; + output_data.len = sizeof(t_packet); if (data_len > 0) { packet->type |= DATA; - memcpy(&buffer[PACKET_LEN], data, data_len); + memcpy((char *)(output_data.buffer)+PACKET_LEN, data, data_len); + output_data.len += data_len; } if (data_len == -1) + packet->type = DESAUTH ; + if (!send_reply(conf, &req, &output_data)) { - packet->type = DESAUTH ; - data_len = 0; + /* update queue len */ + queue->len = req.len; + queue->status = SENT; + queue_update_timer(queue); } - base64_encode((char *)packet, buffer2, PACKET_LEN + data_len); - where = add_reply(hdr, where, TYPE_TXT, buffer2); - queue->len = where - (void *)hdr; - DPRINTF(2, "Send data [%d] data_len %d total len %d\n", queue->info.num_seq, data_len, queue->len); - DPRINTF(3, "Data of packet [%d] is : %s \n", queue->info.num_seq, buffer2); - queue_send_data(conf, queue); } +/** + * @brief flush incoming request + * @param[in] client list item + * @retval 0 on success + * @retval -1 on error + **/ + static int queue_flush_incoming_data(t_simple_list *client) { t_list *queue; @@ -173,11 +232,12 @@ queue = client->queue; while ((queue) && (queue->status != FREE)) { - if ((queue->peer.len) && (queue->peer.len)) + if (queue->peer.len) { - if (write(client->sd_tcp, queue->peer.data, queue->peer.len) < 0) + if (write(client->sd_tcp, queue->peer.data, queue->peer.len) != queue->peer.len) return (-1); - DPRINTF(2, "Flush Write %d bytes\n", queue->peer.len); + DPRINTF(2, "Flush Write %d bytes, crc = 0x%x \n", queue->peer.len, + crc16((const char*) queue->peer.data, queue->peer.len)); queue->peer.len = 0; } queue = queue->next; @@ -185,111 +245,198 @@ return (0); } +/** + * @brief rotate the circular buffer + * @param[in] client list item + * @retval 0 + **/ + + static int queue_change_root(t_simple_list *client) { - t_list *end; - t_list *new_root; - t_list *prev; + t_list *end; + t_list *new_root; + t_list *prev; - - if (client->queue->status != RECEIVED) - return (0); - prev = client->queue; - for (end = client->queue; end ; end = end->next) - { - if (end->status != RECEIVED) - break; - end->status = FREE; - end->info.num_seq = 0; - client->control.req++; - client->num_seq++; - prev = end; - } - if (!end) - return (0); - new_root = end; - prev->next = 0; - for (end = new_root; end->next; end = end->next) - ; - end->next = client->queue; - client->queue = new_root; - return (0); + + if (client->queue->status != RECEIVED) + return (0); + prev = client->queue; + for (end = client->queue; end ; end = end->next) + { + if (end->status != RECEIVED) + break; + end->status = FREE; + end->info.num_seq = 0; + client->control.req++; + /* num_seq must not be null */ + if (!++client->num_seq) + client->num_seq++; + prev = end; + } + if (!end) + return (0); + new_root = end; + prev->next = 0; + for (end = new_root; end->next; end = end->next) + ; + end->next = client->queue; + client->queue = new_root; + return (0); } +/** + * @brief flush outgoing reply + * @param[in] conf configuration + * @param[in] client list item + * @param[in] index numbers of items to flush + * @retval 0 + **/ + int queue_flush_outgoing_data(t_conf *conf,t_simple_list *client, int index) { - t_list *queue; + t_list *queue; - DPRINTF(2, "Flushing outgoing data\n"); - for (queue = client->queue; index-- ; queue = queue->next) - { - if (queue->status != USED) + DPRINTF(2, "Flushing outgoing data\n"); + for (queue = client->queue; index-- ; queue = queue->next) + { + if (queue->status != USED) + return (0); + queue_reply(conf, client, queue, 0, 0); + queue->status = SENT; + client->control.req--; + } + return (0); +} + + +/** + * @brief flush all expired outgoing replies + * @param[in] conf configuration + **/ + +int queue_flush_expired_data(t_conf *conf) +{ + t_list *queue; + t_simple_list *client; + struct timeval tv; + struct timezone tz; + struct dns_hdr *hdr; + + //DPRINTF(3, "Flushing expired request\n"); + if (gettimeofday(&tv, &tz)) + return (-1); + for (client = conf->client; client; client = client->next) + { + for (queue = client->queue; queue ; queue = queue->next) + { + if ((tv.tv_sec > queue->timeout.tv_sec) || + (((tv.tv_sec == queue->timeout.tv_sec) + && (tv.tv_usec > queue->timeout.tv_usec)))) + { + /* If req received but no answer sent */ + if (queue->status == USED ) + { + hdr = (void *) queue->data; + DPRINTF(3, "%s, flush expired req id 0x%x\n", __FUNCTION__, ntohs(hdr->id)); + queue_reply(conf, client, queue, 0, 0); + client->control.req--; + } + } + } + } return (0); - queue_reply(conf, client, queue, 0, 0); - queue->status = SENT; - client->control.req--; - } - return (0); } /* - Should copy paquet, mark original query cell as 'RECEIVED' + Should copy packet, mark original query cell as 'RECEIVED' - if cell is USED (reply sent or prepared to be sent) - resent the data + if cell is USED (query received but no data to send now) + else WTF ! - if CELL is FREE (new data comming) + if CELL is FREE (new data) -> copy data -> try to flush incoming data -> try to change root - if diff(first in queue, received) > SIZE -> try to flush SIZE/2 paquets + if diff(first in queue, received) > SIZE -> try to flush SIZE/2 packet */ -static int queue_deal_incoming_data(t_conf *conf, t_simple_list *client, t_list *queue, +/** + * @brief 'TCP' engine + * @param[in] conf configuration + * @param[in] client client struct + * @param[in] queue client's queue + * @param[in] packet packet request + * @param[in] len packet len + * @note : magic do not touch, it came from a space trip + **/ + +static int queue_deal_incoming_data(t_conf *conf, t_simple_list *client, t_list *queue, t_packet *packet, int len) { - int res = 0; - + int res = 0; + int diff = 0; + struct dns_hdr *hdr; + if ((packet->ack_seq) && (queue_mark_received(client->queue, packet->ack_seq))) return (-1); if (queue) { + hdr = (void *)queue->data; switch (queue->status) { - case USED: + case USED: + DPRINTF(3, "USED, sending reply for id 0x%x\n", ntohs(hdr->id)); queue_reply(conf, client, queue, 0, 0); - queue->status = SENT; client->control.req--; break; case SENT: + res = queue_send_data(conf, queue); + DPRINTF(3, "SENT received same req again, sending id 0x%x\n", ntohs(hdr->id)); + break; case RECEIVED: - DPRINTF(3, "SENT|RECEIVED received same req again, sending reply %d\n", queue->len); + DPRINTF(3, "RECEIVED received same req again, sending id 0x%x\n", ntohs(hdr->id)); + queue_reply(conf, client, queue, 0, 0); + /* FIXME req-- ?? */ + client->control.req--; res = queue_send_data(conf, queue); break; case FREE: - DPRINTF(3, "recv new packt id %d\n", packet->seq); + DPRINTF(3, "Queue : dealing packet %d\n", packet->seq); res = queue_copy_data(client, queue, packet, len); + /* Now mark as USED */ if (queue_flush_incoming_data(client) < 0) return (-1); if (client->queue->status == RECEIVED) queue_change_root(client); break; } - if ((packet->seq > client->num_seq) - && ((packet->seq -client->num_seq ) > FLUSH_TRIGGER)) - queue_flush_outgoing_data(conf, client, (packet->seq - client->num_seq )/2); + if (client->num_seq > packet->seq) /* seq must not be 0 */ + diff = ((MAX_SEQ - client->num_seq) + packet->seq ); + else + diff = packet->seq - client->num_seq ; + if (diff > FLUSH_TRIGGER) + queue_flush_outgoing_data(conf, client, diff/2); return (res); } return (-1); } + +/** + * @brief read TCP data and put it in the next reply + * @param[in] conf configuration + * @param[int] client + * @retval 0 on success + * @retval -1 on error + **/ + int queue_read_tcp(t_conf *conf, t_simple_list *client) { - char buffer[ MAX_TXT_DATA(DNS_HDR_SIZE + REQ_HDR_SIZE) ]; + char buffer[ MAX_EDNS_LEN ]; t_list *queue; - char *end_query; struct dns_hdr *hdr; int len; @@ -299,27 +446,31 @@ break; if (queue->status == USED) { - hdr = (struct dns_hdr *)queue->data; - if ((end_query = jump_end_query(hdr, GET_16(&hdr->qdcount), queue->len))) + hdr = (struct dns_hdr *) queue->data; + if ((len = queue->peer.reply_functions->rr_available_len(hdr, client, queue->len)) > 0) { - len = read(client->sd_tcp, buffer, - TXT_DATA_AVAILABLE((end_query - (char *)hdr), strlen(JUMP_DNS_HDR(hdr))) - sizeof(t_packet)); - if (len < 1) + if ((len = read(client->sd_tcp, buffer, len)) < 1) { + /* nothing to read : connection closed */ queue_reply(conf, client, queue, 0, -1); return (-1); } - DPRINTF(3, "Read tcp %d bytes\n", len); + DPRINTF(3, "Read tcp %d bytes, crc = 0x%x\n", len, crc16((const char *)buffer, len)); + queue_reply(conf, client, queue, buffer, len); return (0); } - DPRINTF(1, "query parsing error\n"); + DPRINTF(1, "Query too long for a reply\n"); } } client->control.queue_full = 1; return (0); } +/** + * @brief queue_dump for debug + **/ + void queue_dump(t_simple_list *client) { t_list *queue; @@ -327,7 +478,7 @@ while (client) { queue = client->queue; - printf("client 0x%x\n", client->cookie); + printf("client 0x%x\n", client->session_id); while (queue) { printf("{seq=%d:stat=%s} ", queue->info.num_seq, @@ -339,44 +490,91 @@ } } -static t_list *get_cell_in_queue(t_list *queue, int diff) +/** + * @brief get a specifi offset cell in the queue + * @param[in] queue client queue + * @param[in] offset offset + **/ + +static t_list *get_cell_in_queue(t_list *queue, int offset) { - while ((queue) && (diff--)) + while ((queue) && (offset--)) queue = queue->next; return (queue); } -static int queue_copy_query(t_list *queue, t_packet *packet, void *buffer, int in_len, struct sockaddr_in *sa) +/* Copy query in queue */ +/** + * @brief put request in the client queue + * @param[in] request client request + * @param[in] queue + * @param[in] seq sequence number + * @note : if the request was already seen, update the DNS transaction ID + **/ + +static int queue_copy_query(t_request *req, t_list *queue, uint16_t seq) { + /* Free -> New request */ if (queue->status == FREE) { - memcpy(queue->data, buffer, in_len); - memcpy(&(queue->peer.sa), sa, sizeof(struct sockaddr_in)); - queue->len = in_len; - queue->info.num_seq = packet->seq; + memcpy(queue->data, req->data, req->len); + // FIXME bug ipv6 support + memcpy(&(queue->peer.sa), &req->sa, sizeof(struct sockaddr_in)); + queue->len = req->len; + queue->info.num_seq = seq; + queue->peer.reply_functions = req->reply_functions; + return (0); + } + /* + Request already received + Update DNS transaction ID + + Maybe we can compare the two request size ... + */ + if (!strncmp(&(queue->data[DNS_HDR_SIZE]), + ((char *)req->data) + DNS_HDR_SIZE, + strlen(((char *)req->data) + DNS_HDR_SIZE))) + { + memcpy(queue->data, req->data, sizeof(uint16_t)); + queue->peer.reply_functions = req->reply_functions; + // FIXME bug ipv6 support + memcpy(&(queue->peer.sa), &req->sa, sizeof(struct sockaddr_in)); return (0); } - /* Copy DNS transaction ID */ - memcpy(queue->data, buffer, sizeof(uint16_t)); - memcpy(&(queue->peer.sa), sa, sizeof(struct sockaddr_in)); return (0); } -static int build_error(t_conf *conf, char *buffer, int in_len, struct sockaddr_in *sa, int code) + +/** + * @brief send an error message + * @param[in] conf configuration + * @param[in] request to send + * @param[in] code DNS error code + * @retval 0 on success + * @retval -1 on error + **/ + +static int send_error(t_conf *conf, t_request *req, int code) { struct dns_hdr *hdr; - hdr = (struct dns_hdr *) buffer; + hdr = (struct dns_hdr *) req->data; hdr->ra = 1; hdr->qr = 1; hdr->rcode = code; - if ((sendto(conf->sd_udp, buffer, in_len, 0, (struct sockaddr *)sa, sizeof(struct sockaddr))) == -1) + if ((sendto(conf->sd_udp, req->data, req->len, 0, + (struct sockaddr *)&req->sa, sizeof(struct sockaddr))) == -1) MYERROR("sendto error"); return (-1); } -void queue_update_timer(t_simple_list *client) +/** + * @brief tell that the client is still alive + * @param[in] client + **/ + +void client_update_timer(t_simple_list *client) { struct timeval tv; struct timezone tz; @@ -388,6 +586,24 @@ } } +/** + * @brief find a client based on his session id + * @param[in] conf configuration + * @param[in] session_id + **/ + +t_simple_list *find_client_by_session_id(t_conf *conf, uint16_t session_id) +{ + t_simple_list *client; + + for (client = conf->client; client; client = client->next) + { + if (client->session_id == session_id) + return (client); + } + return (0); +} + /* queue_put_data @@ -398,66 +614,66 @@ -> deal incoming data (queue_deal_incoming_data) and return */ +/** + * @brief decode a request and put it in the client's queue + * @param[in] conf configuration + * @param[in] req request + * @param[in] decoded_data decoded data + * @retval 0 on success + * @retval -1 on error + * @note if it's no a client, send a RCODE_REFUSED code + **/ -int queue_put_data(t_conf *conf, char *buffer, int in_len, struct sockaddr_in *sa) +int queue_put_data(t_conf *conf, t_request *req, t_data *decoded_data) { - char name[MAX_HOST_NAME_ENCODED]; - char tmp[MAX_HOST_NAME_ENCODED]; t_packet *packet; t_simple_list *client; t_list *queue; - int len; int diff = 0; uint16_t seq_tmp; - if (dns_decode(buffer, buffer + DNS_HDR_SIZE, tmp, conf, sa) == -1) - return (-1); /* Bad domain -> silent DROP */ - len = base64_decode((unsigned char *)name, tmp); - if (PACKET_LEN > len) + if (PACKET_LEN > decoded_data->len) return (-1); - packet = (t_packet *)name; + packet = (t_packet *)decoded_data->buffer; + /* convert ntohs */ seq_tmp = GET_16(&(packet->seq)) ; packet->seq = seq_tmp; seq_tmp = GET_16(&(packet->ack_seq)) ; packet->ack_seq = seq_tmp; - DPRINTF(2, "Received [%d] data_len %d\n", packet->seq, len - PACKET_LEN); - DPRINTF(3, "Data of packet [%d] is %s\n", packet->seq, tmp); - for (client = conf->client; client; client = client->next) + + DPRINTF(2, "Packet [%d] decoded, data_len %d\n", packet->seq, decoded_data->len - (int)PACKET_LEN); + if ((client = find_client_by_session_id(conf, packet->session_id))) { - if (packet->cookie == client->cookie) + if (client->sd_tcp < 0) + return (0); /* slient drop */ + client_update_timer(client); + queue = client->queue; + if (client->num_seq > packet->seq) /* seq must not be 0 */ + diff = ((MAX_SEQ - client->num_seq) + packet->seq ); + else + diff = packet->seq - client->num_seq ; + DPRINTF(2, "diff = %d\n", diff); + if ((diff > QUEUE_SIZE) || (!packet->seq)) { - if (client->sd_tcp < 0) - return (0); /* slient drop */ - queue_update_timer(client); - queue = client->queue; - if (client->num_seq > packet->seq) /* seq must not be 0 */ - diff = ((MAX_SEQ - client->num_seq) + packet->seq ); - else - diff = packet->seq - client->num_seq ; - DPRINTF(2, "diff = %d\n", diff); - if ((diff > QUEUE_SIZE) || (!packet->seq)) - { - DPRINTF(3, "seq %d not good diff %d\n", packet->seq, diff); - //queue_dump(client); - return (-1); /* not in seq */ - } - if ((queue = get_cell_in_queue(queue, diff))) + DPRINTF(3, "seq %d not good diff %d\n", packet->seq, diff); + return (-1); /* not in seq */ + } + if ((queue = get_cell_in_queue(queue, diff))) + { + queue_copy_query(req, queue, packet->seq); + if (queue_deal_incoming_data(conf, client, queue, packet, decoded_data->len)) { - queue_copy_query(queue, packet, buffer, in_len, sa); - if (queue_deal_incoming_data(conf, client, queue, packet, len)) - { - close(client->sd_tcp); - return (delete_client(conf, client)); - } + close(client->sd_tcp); + return (delete_client(conf, client)); } - else - /* Cell not found (reply already received or cell lost ? ) */ - return (build_error(conf, buffer, in_len, sa, RCODE_NAME_ERR)); - break; } + else + /* Cell not found (reply already received or cell lost ? ) */ + return (send_error(conf, req, RCODE_NAME_ERR)); } + if (!client) { - DPRINTF(3, "Not a client 0x%x", packet->cookie); - return (build_error(conf, buffer, in_len, sa, RCODE_REFUSED)); + DPRINTF(3, "Not a client 0x%x\n", packet->session_id); + return (send_error(conf, req, RCODE_REFUSED)); } return (0); // Silent DROP } diff -Nru dns2tcp-0.4.dfsg/server/requests.c dns2tcp-0.5.2/server/requests.c --- dns2tcp-0.4.dfsg/server/requests.c 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/server/requests.c 2010-02-11 15:09:17.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: requests.c,v 1.15 2007/05/30 13:04:45 dembour Exp $ +** $Id: requests.c,v 1.23.4.10 2010/02/11 15:09:17 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -21,7 +21,9 @@ #include #include #include +#include +#include "mycrypto.h" #include "server.h" #include "dns.h" #include "dns_decode.h" @@ -29,162 +31,254 @@ #include "base64.h" #include "myerror.h" #include "queue.h" -#include "server_queue.h" #include "mystrnlen.h" #include "auth.h" +#include "debug.h" +#include "rr.h" +#include "requests.h" +#include "session.h" +#include "log.h" + + +const t_command dns_commands[]= { + {AUTH, sizeof(AUTH)-1, 0, &login_user}, + {RESOURCE, sizeof(RESOURCE)-1, 1, &send_resources_reply}, + {CONNECT, sizeof(CONNECT)-1, 1, &bind_user}, + {0,0,0,0} +}; + + +/** + * @brief get the DNS request type (KEY, TXT ...) + * @param[in] req request + **/ -static uint16_t get_type_request(void *buffer, int max_len) +static uint16_t get_type_request(t_request *req) { struct dns_hdr *hdr; char *ptr; - - hdr = buffer; - if (sizeof(struct dns_hdr) > max_len) - return (-1); + uint16_t type; + + if (sizeof(struct dns_hdr) > req->len) + return (0); + hdr = (struct dns_hdr *) req->data; if (hdr->qdcount > 0) { - ptr = memchr(JUMP_DNS_HDR(hdr), 0, max_len - sizeof(struct dns_hdr)); + ptr = memchr(JUMP_DNS_HDR(hdr), 0, req->len - sizeof(struct dns_hdr)); if (ptr) - return GET_16(&(((struct req_hdr *) (ptr+1))->qtype)); + { + type = ((struct req_hdr *) (ptr + 1))->qtype; + return GET_16(&type); + } } return (0); } -void *add_reply(struct dns_hdr *hdr, void *where, uint16_t type, char *encoded_data) -{ - struct rr_hdr *rr; - uint16_t *compress; - int len; - - PUT_16(&hdr->ancount, GET_16(&hdr->ancount)+1); - hdr->arcount = 0; - compress = where; - PUT_16(compress, sizeof(struct dns_hdr) | COMPRESS_FLAG); - rr = where + sizeof(uint16_t); - PUT_16(&rr->type, type); - PUT_16(&rr->klass, CLASS_IN); - PUT_16(&rr->ttl, 0); - where = JUMP_RR_HDR(rr); - strcpy(where, encoded_data); - if (type == TYPE_TXT) - dns_encode(where); - len = strlen(where); - PUT_16(&rr->rdlength,len); - return (where + len); -} +/** + * @brief send list of available ressource + * @param[in] conf configuration + * @param[in] req request + * @param[in] packet packet structure + * @param[in] client client + * @note need to be authenticated + **/ -static int build_ressources_reply(t_conf *conf, void *buffer, - int max_len) +int send_resources_reply(t_conf *conf, t_request *req, t_packet *packet, t_simple_list *client) { struct dns_hdr *hdr; t_list *list; - void *where; - char buffer2[MAX_REQ_LEN]; + void *where = 0; + char buffer2[MAX_DNS_LEN + 1]; + char buffer[MAX_DNS_LEN + 1]; + int len, ressource_len; + uint16_t answer_len; - hdr = buffer; + hdr = (struct dns_hdr *)req->data; hdr->ra = 1; + hdr->aa = 1; hdr->qr = 1; - - if (!(where = jump_end_query(buffer, GET_16(&hdr->qdcount), max_len))) + + DPRINTF(3, "Sending resource\n"); + if (!(where = jump_end_query(req->data, GET_16(&hdr->qdcount), req->len))) return (-1); - for (list = conf->ressources; list; list = list->next) + packet = (t_packet *)&buffer2; + packet->type = OK; + for (list = conf->resources; list; list = list->next) { - base64_encode(list->data, buffer2, (strchr(list->data, ':') - list->data)); - where = add_reply(hdr, where, TYPE_KEY, buffer2); + answer_len = where ? (uint16_t)((void *)where - (void *)hdr) : req->len; + len = strchr(list->data, ':') - list->data; + if ((BASE64_SIZE(len) + (where - (void *)req->data)) < MAX_DNS_LEN ) + { + if ((!(ressource_len = req->reply_functions->rr_available_len(hdr, client, answer_len))) + || (strlen(list->data) > ressource_len)) + { + LOG("Not enought space to send resources, message will be truncated\n"); + break; + } + strcpy(&buffer2[PACKET_LEN], list->data); + base64_encode(buffer2, buffer, len+PACKET_LEN); + where = req->reply_functions->rr_add_reply(conf, req, hdr, where, buffer); + } } - return (where - buffer); + answer_len = (uint16_t)((void *)where - (void *)hdr); + if ((sendto(conf->sd_udp, req->data, answer_len, + 0, (struct sockaddr *)&req->sa, sizeof(struct sockaddr))) != answer_len) + { + MYERROR("sendto error"); + return (-1); + } + return (0); } -static int get_request(void *req, char *output, t_conf *conf, - struct sockaddr_in *sa) +/** + * @brief decode a request + * @param[in] conf configuration + * @param[in] req request + * @param[out] output where to write the data + * @retval 0 on success + * @retval -1 on error + **/ + +int get_request(t_conf *conf, t_request *req, t_data *output) { char buffer[MAX_HOST_NAME_ENCODED + 1]; int len; - char *data; + char *query; + struct dns_hdr *hdr; - data = JUMP_DNS_HDR(req); - if (mystrnlen(data, MAX_HOST_NAME_ENCODED + 1) > MAX_HOST_NAME_ENCODED) - return (-1); - if (dns_decode((char *)req, data, buffer, conf, sa) == -1) + query = JUMP_DNS_HDR(req->data); + hdr = (void *)req->data; + + /* just a header -> drop */ + if ((len = mystrnlen(query, (req->len - DNS_HDR_SIZE))) == (req->len - DNS_HDR_SIZE)) return (-1); - len = base64_decode((unsigned char *)output, buffer); - output[len] = 0; - return (len); + + if (len > (sizeof(buffer) -1)) + { + DPRINTF(2, "Request too long\n"); + return (-1); + } + if (dns_decode(conf, req, query, buffer) == -1) + { + DPRINTF(2, "DNS decode error\n"); + return (-1); + } + DPRINTF(3, "Receive query : %s dns_id = 0x%x for domain %s\n", buffer, ntohs(hdr->id), req->domain); + return ((output->len = base64_decode((unsigned char *)output->buffer, buffer))); } +/* + send_reply does not check the size of data + */ +/** + * @brief send immediatly the reply + * @param[in] req request to use + * @param[in] data data to send + * @retval 0 on success + * @retval -1 on error + **/ -int build_error_reply(t_conf *conf, void *req, int max_len, char *error) +int send_reply(t_conf *conf, t_request *req, t_data *data) { - - struct dns_hdr *hdr; + char buffer[MAX_EDNS_LEN]; void *where; + struct dns_hdr *hdr; t_packet *packet; - char buffer[BASE64_SIZE(MAX_ERROR_SIZE) + PACKET_LEN]; - char buffer2[BASE64_SIZE(MAX_ERROR_SIZE) + PACKET_LEN]; - int len; + uint16_t packet_id; - hdr = req; + + hdr = (struct dns_hdr *) req->data; hdr->ra = 1; + hdr->aa = 1; hdr->qr = 1; - if (!(where = jump_end_query(req, GET_16(&hdr->qdcount), max_len))) - return (-1); - packet = (t_packet *) memset(buffer, 0, PACKET_LEN); - packet->type = ERR; - len = strlen(error); - memcpy(buffer+PACKET_LEN, error, len+1); - base64_encode(buffer, buffer2, PACKET_LEN + len); - where = add_reply(hdr, where, TYPE_KEY, buffer2); - return (where - req); -} -static int get_ressources(t_conf *conf,void *req, - int in_len, struct sockaddr_in *sa) -{ - int out_len = -1; - char buffer[MAX_HOST_NAME_ENCODED + 1]; - int len; - t_packet *packet; - - if ((len = get_request(req, buffer, conf, sa)) == -1) + if (!(where = jump_end_query(req->data, GET_16(&hdr->qdcount), req->len))) return (-1); - packet = (void *)&buffer; - if (! packet->type) - out_len = build_ressources_reply(conf, req, in_len); - else - out_len = login_user(conf, req, buffer, in_len, sa); - if (out_len == -1) + + packet = (t_packet *)data->buffer; + packet_id = ntohs(packet->seq); + base64_encode(data->buffer, buffer, data->len); + where = req->reply_functions->rr_add_reply(conf, req, hdr, where, buffer); + /* update request len */ + req->len = where - (void *)req->data; + DPRINTF(3, "Sending [%d] len = %d dns id = 0x%x %s\n", packet_id, req->len, ntohs(hdr->id), buffer); + if ((sendto(conf->sd_udp, req->data, req->len, + 0, (struct sockaddr *)&req->sa, sizeof(struct sockaddr))) != req->len) { - MYERROR("parsing error\n"); + MYERROR("sendto error"); return (-1); } - if ((out_len = sendto(conf->sd_udp, req, out_len, - 0, (struct sockaddr *)sa, sizeof(struct sockaddr))) == -1) + return (0); +} +/** + * @brief send immediatly an error reply + * @param[in] req request to use + * @param[in] packet packet structure to use + * @param[in] str string to send + * @retval 0 on success + * @retval -1 on error + **/ + +int send_ascii_reply(t_conf *conf, t_request *req, t_packet *packet, char *str) +{ + t_data data; + char buffer[MAX_EDNS_LEN]; + int len, max_len; + + len = strlen(str) + sizeof(t_packet); + max_len = req->reply_functions->rr_available_len(req->data, NULL, req->len) + PACKET_LEN; + + if (len > max_len) { - MYERROR("send error\n"); + LOG("Packet too long, try to add %d bytes on a %d bytes long request\n", len, req->len); return (-1); } - return (0); - } + memcpy(buffer, packet, sizeof(t_packet)); + strcpy(buffer + sizeof(t_packet), str); + + data.buffer = buffer; + data.len = len; + return (send_reply(conf, req, &data)); +} + +/** + * @brief deal an incoming request + * @param[in] conf configuration + **/ - int get_incoming_request(t_conf *conf) +int get_incoming_request(t_conf *conf) { - struct sockaddr_in sa_other; - char buffer[MAX_REQ_LEN + 1]; - int len; - socklen_t slen; - int16_t type; - - slen = sizeof(sa_other); - if ((len = recvfrom(conf->sd_udp, buffer, - MAX_REQ_LEN, 0, (struct sockaddr *)&sa_other, &slen)) == -1) + char recv_buffer[MAX_EDNS_LEN + 1]; + char domain[MAX_HOST_NAME_ENCODED]; + char input[MAX_HOST_NAME_ENCODED + 1]; + t_request req; /* req.data -> recv_buffer */ + socklen_t slen; + uint16_t type; + t_data decoded_data; /* .data -> input */ + + slen = sizeof(req.sa); + req.data = recv_buffer; + req.domain = domain; + req.cmd = 0; + decoded_data.buffer = input; + decoded_data.len = sizeof(input) - 1; + if (((req.len = recvfrom(conf->sd_udp, req.data, + MAX_DNS_LEN, 0, (struct sockaddr *)&req.sa, &slen)) <= 0 )) return (-1); - if (!(type = get_type_request(buffer, len))) + /* Data buffer is always terminated by 0 */ + ((char *)req.data)[req.len] = 0; + type = get_type_request(&req); + if (!type) return (-1); - if (type == TYPE_KEY) - return (get_ressources(conf,buffer, len, &sa_other)); - if (type == TYPE_TXT) - return (queue_put_data(conf,buffer, len, &sa_other)); - return (0); -} - + if ((req.reply_functions = get_rr_function_by_type(type))) + { + if (get_request(conf, &req, &decoded_data) <= 0) + return (-1); + if (!req.cmd) + return (queue_put_data(conf, &req, &decoded_data)); + if (!session_request(conf, &req, &decoded_data)) + return (0); + } + return (-1); + } diff -Nru dns2tcp-0.4.dfsg/server/rr.c dns2tcp-0.5.2/server/rr.c --- dns2tcp-0.4.dfsg/server/rr.c 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/server/rr.c 2010-01-20 16:09:07.000000000 +0000 @@ -0,0 +1,237 @@ +/* +** Copyright (C) 2006 Olivier DEMBOUR +** $Id: rr.c,v 1.6.4.3 2010/01/20 16:09:07 collignon Exp $ +** +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with This program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include "list.h" +#include "dns.h" +#include "server.h" +#include "rr.h" +#include "requests.h" +#include "dns.h" +#include "debug.h" + +#include + +static const t_rr_functions rr_function[] = { + { TYPE_TXT, TYPE_TXT, &rr_add_reply_encode, 0, &rr_get_reply_length_encode}, + { TYPE_KEY, TYPE_KEY, &rr_add_reply_raw, 0, &rr_get_reply_length_raw}, + // { TYPE_A, TYPE_CNAME, &rr_add_reply_cname, 0, &rr_get_reply_length_cname}, + // { TYPE_NS, TYPE_NS, 0, 0, 0}, + // {TYPE_SIG, TYPE_SIG, &rr_add_reply_raw, 0, &rr_get_reply_length_raw}, + {0,0,0,0} +}; + + +/** + * @brief get functions pointer for decoding data + * @param[in] request type + * @retval functions pointer + **/ + +const t_rr_functions *get_rr_function_by_type(uint16_t type) +{ + int i = 0; + + while (rr_function[i].type + && (rr_function[i].type != type)) + i++; + return (rr_function[i].type ? &rr_function[i] : 0); +} + +/** + * @brief add a answer in the DNS request + * @param[in] hdr DNS header + * @param[in] where memory to write + * @param[in] type type of request (TXT, KEY ...) + * @param[in] encoded_data data to put + * @param[in] what compress pointer to the subdomain or 0 + * @retval rr header + **/ + +void *rr_add_data(struct dns_hdr *hdr, void *where, uint16_t type, char *encoded_data, uint16_t what) +{ + struct rr_hdr *rr; + + PUT_16(&hdr->ancount, GET_16(&hdr->ancount)+1); + hdr->arcount = 0; + if (!what) /* std compression */ + PUT_16(where, sizeof(struct dns_hdr) | COMPRESS_FLAG); + else + PUT_16(where, what | COMPRESS_FLAG); + rr = where + sizeof(uint16_t); + PUT_16(&rr->type, type); + PUT_16(&rr->klass, CLASS_IN); + PUT_32(&rr->ttl, 3); + if (encoded_data) + { + JUMP_RR_HDR(rr)[0] = 'A' + GET_16(&hdr->ancount)-1; + strcpy(JUMP_RR_HDR(rr)+1, encoded_data); + } + else /* fake IP adress */ + { + PUT_16(&rr->rdlength,4); + strcpy(JUMP_RR_HDR(rr), "AAAA"); + } + return (rr); +} +/** + * @brief add data as a CNAME no available + **/ + +void *rr_add_reply_cname(t_conf *conf, t_request *req, struct dns_hdr *hdr, void *where, char *encoded_data) +{ + struct rr_hdr *rr; + int len; + char domain[MAX_EDNS_LEN]; + char *my_domain; + + /* TODO : should avoid the strcpy each time */ + strncpy(domain, req->domain, sizeof(domain)); + dns_encode(domain); + + my_domain = strstr((char *) (hdr+1), domain); + rr = rr_add_data(hdr, where, req->reply_functions->reply_type , encoded_data, 0); + + where = JUMP_RR_HDR(rr); + dns_encode(where); + len = strlen(where); + + ((char *)where)[len] = COMPRESS_FLAG_CHAR; /* add domain name */ + ((char *)where)[len+1] = (uint16_t) (my_domain - (char *)hdr); + PUT_16(&rr->rdlength,len + 2); + /* Add fake entry CNAME is at x.x.x.x */ + rr = rr_add_data(hdr, where+len+2, TYPE_A, 0, JUMP_RR_HDR(rr) - (char *)hdr); + where = JUMP_RR_HDR(rr); + // PUT_16(&rr->type, TYPE_A); + len = strlen(where); + return (where + len); +} + +/** + * @brief add data and dns_encode it + * @param[in] conf configuration + * @param[in] req request received + * @param[in] hdr DNS header + * @param[in] where memory address + * @param[in] encoded_data data encoded in base64 + **/ + +void *rr_add_reply_encode(t_conf *conf, t_request *req, struct dns_hdr *hdr, void *where, char *encoded_data) +{ + struct rr_hdr *rr; + int len; + + rr = rr_add_data(hdr, where, req->reply_functions->reply_type, encoded_data, 0); + where = JUMP_RR_HDR(rr); + dns_encode(where); + len = strlen(where) + 1; /* len + byte 0 (label data) */ + PUT_16(&rr->rdlength,len); + return (where + len); +} + +/** + * @brief add data but don't dns_encode it + * @param[in] conf configuration + * @param[in] req request received + * @param[in] hdr DNS header + * @param[in] where memory address + * @param[in] encoded_data data encoded in base64 + **/ + +void *rr_add_reply_raw(t_conf *conf, t_request *req, struct dns_hdr *hdr, + void *where, char *encoded_data) +{ + struct rr_hdr *rr; + int len; + + rr = rr_add_data(hdr, where, req->reply_functions->reply_type, encoded_data, 0); + where =JUMP_RR_HDR(rr); + len = strlen(where); + PUT_16(&rr->rdlength,len); + return (where + len); +} + +int rr_get_reply_length_cname(struct dns_hdr *hdr, t_simple_list *client, int query_len) +{ + + /* + */ + return (0); +} + +/** + * @brief check available length left before being encoded + * @param[in] client client + * @param[in] query_len query len + * @retval len available + **/ + +int rr_get_reply_length_encode(struct dns_hdr *hdr, t_simple_list *client, int query_len) +{ + void *end_query; + int len; + int total_query_len; + + if (!(end_query = jump_end_answer(hdr, query_len))) + return (0); + total_query_len = (int) (end_query - (void *)hdr); + len = (ENCODE_DATA_AVAILABLE(total_query_len, + strlen(JUMP_DNS_HDR(hdr)), MAX_DNS_LEN)); + + if ((len > 0) && (len > PACKET_LEN + 2)) + /* IDX + EOL = 2 bytes */ + len -= (PACKET_LEN + 2); + else + len = 0; + if (client && client->control.mtu_size) + len = MIN(DECODED_LEN(client->control.mtu_size), len); + DPRINTF(3, "%s return %d\n", __FUNCTION__, len); + return (len); +} + +/** + * @brief check available length left for raw data + * @param[in] client client + * @param[in] query_len query len + * @retval len available + **/ + +int rr_get_reply_length_raw(struct dns_hdr *hdr, t_simple_list *client, int query_len) +{ + char *end_query; + int len; + int total_query_len; + + if (!(end_query = jump_end_answer(hdr, query_len))) + return (0); + total_query_len = (int) (end_query - (char *)hdr); + len = (RAW_DATA_AVAILABLE(total_query_len, + strlen(JUMP_DNS_HDR(hdr)), MAX_DNS_LEN)); + + if ((len > 0) && (len > PACKET_LEN + 2)) + /* IDX + EOL = 2 bytes */ + len -= (PACKET_LEN + 2); + else + len = 0; + /* max mtu ? */ + if (client && client->control.mtu_size) + len = MIN(client->control.mtu_size, len); + DPRINTF(3, "%s return %d\n", __FUNCTION__, len); + return (len); +} diff -Nru dns2tcp-0.4.dfsg/server/server.c dns2tcp-0.5.2/server/server.c --- dns2tcp-0.4.dfsg/server/server.c 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/server/server.c 2010-01-06 12:50:40.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: server.c,v 1.13 2007/01/24 13:34:01 dembour Exp $ +** $Id: server.c,v 1.20.4.1 2010/01/06 12:50:40 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -22,7 +22,6 @@ #include #include #include -#include #include #include "server.h" @@ -30,14 +29,21 @@ #include "list.h" #include "myerror.h" #include "requests.h" -#include "server_queue.h" #include "queue.h" #include "debug.h" #include "log.h" +#define SOCKET_TIMEOUT 0 /* 1s */ +#define SOCKET_UTIMEOUT 500000 /* 1s */ -#define SOCKET_TIMEOUT 1 /* 1s */ +/** + * @brief prepare the fd_set for select + * @param[in] conf configuration + * @param[in] rfds the fd_set + * @param[in] tv timeval structure + * @retval last file descriptor + */ static int prepare_select(t_conf *conf, fd_set *rfds, struct timeval *tv) { @@ -61,10 +67,16 @@ FD_SET(0, rfds); max_fd = MAX(max_fd, conf->sd_udp); tv->tv_sec = SOCKET_TIMEOUT; - tv->tv_usec = 0; + tv->tv_usec = SOCKET_UTIMEOUT; return (max_fd); } +/** + * @brief delete a client + * @param[in] conf configuration + * @param[in] client client to delete + **/ + int delete_client(t_conf *conf, t_simple_list *client) { t_simple_list *tmp; @@ -72,7 +84,9 @@ if (conf->client == client) { tmp = client->next; - LOG("delete_client 0x%x\n", client->cookie); + LOG("delete_client 0x%x %s\n", client->session_id, + client->control.authenticated ? "" : "(not authenticated)"); + delete_queue(client->saved_queue); list_destroy_simple_cell(conf->client); conf->client = tmp; return (0); @@ -82,8 +96,8 @@ if (tmp->next == client) { tmp->next = client->next; - LOG("delete_client 0x%x\n", client->cookie); - delete_queue(client->queue); + LOG("delete_client 0x%x\n", client->session_id); + delete_queue(client->saved_queue); return (list_destroy_simple_cell(client)); } } @@ -91,6 +105,12 @@ } +/** + * @brief destroy dead client + * @param[in] conf configuration + **/ + +// Warning Zombie ahead void delete_zombie(t_conf *conf) { t_simple_list *client; @@ -104,7 +124,8 @@ tmp = client->next; if (tv.tv_sec > client->control.tv.tv_sec) { - close(client->sd_tcp); + if (client->sd_tcp != -1) + close(client->sd_tcp); delete_client(conf, client); } } @@ -112,6 +133,11 @@ #define MINI_BUFF 64 +/** + * @brief main loop + * @param[in] conf configuration + **/ + int do_server(t_conf *conf) { fd_set rfds; @@ -121,12 +147,16 @@ t_simple_list *tmp; struct timeval tv; struct timezone tz; + +#ifdef DEBUG char buffer[MINI_BUFF]; - +#endif + while (1) { max_fd = prepare_select(conf, &rfds, &tv); retval = select(max_fd + 1 , &rfds, NULL, NULL, &tv); + queue_flush_expired_data(conf); if (retval == -1) { perror(""); @@ -143,12 +173,14 @@ delete_zombie(conf); continue; } +#ifdef DEBUG if ((conf->foreground) && (FD_ISSET(0, &rfds))) { read(0, buffer, MINI_BUFF); queue_dump(conf->client); continue; } +#endif if (FD_ISSET(conf->sd_udp, &rfds)) get_incoming_request(conf); else @@ -156,11 +188,12 @@ for (client = conf->client; client; client = tmp) { tmp = client->next; - if (FD_ISSET(client->sd_tcp, &rfds)) + if ((client->sd_tcp != -1) && (FD_ISSET(client->sd_tcp, &rfds))) { if (queue_read_tcp(conf, client)) { - close(client->sd_tcp); + if (client->sd_tcp != -1) + close(client->sd_tcp); delete_client(conf, client); } } diff -Nru dns2tcp-0.4.dfsg/server/session.c dns2tcp-0.5.2/server/session.c --- dns2tcp-0.4.dfsg/server/session.c 1970-01-01 01:00:00.000000000 +0100 +++ dns2tcp-0.5.2/server/session.c 2010-02-11 16:06:38.000000000 +0000 @@ -0,0 +1,159 @@ +/* +** Copyright (C) 2006 Olivier DEMBOUR +** $Id: session.c,v 1.5.4.2 2010/02/11 16:06:38 dembour Exp $ +** +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with This program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +#include "mycrypto.h" +#include "server.h" +#include "myerror.h" +#include "queue.h" +#include "requests.h" +#include "auth.h" +#include "myrand.h" +#include "log.h" + + +/** + * @brief generate a new session number + * @param[in] conf configuration + * @note not really good + **/ + +static uint16_t new_sessionid(t_conf *conf) +{ + uint16_t rand; + uint32_t try = (1<<16) * 2; + uint8_t bad = 0; + t_simple_list *client; + + client = (t_simple_list *)conf->client; + while (!(rand = myrand())); + if (!client) + return (myrand()); + do { + for (client = (t_simple_list *)conf->client; client; client = client->next) + { + if (client->session_id == rand) + bad = 1; + } + if (!bad) + return (rand); + while (!(rand = myrand())); + } while (try--); + return (0); +} + +/** + * @brief create a session for an incoming (unauthenticated) client + * @param[in] conf configuration + * @param[in] req request + * @param[in] packet + * @retval client + * @retval -1 on error + **/ + +t_simple_list *create_session(t_conf *conf, t_request *req, t_packet *packet) +{ + t_simple_list *client; + uint16_t rand; + + if (!(rand = new_sessionid(conf))) + return (0); + client = (t_simple_list *)conf->client; + if (!client) + { + conf->client = list_create_simple_cell(); + client = conf->client; + } + else + { + while (client->next) + client = client->next; + if (!(client->next = list_create_simple_cell())) + return (0); + client = client->next; + } + client->session_id = rand; + client->saved_queue = 0; + + if (!(client->queue = init_queue())) + { + list_destroy_simple_cell(client); + LOG("No more memory\n"); + return (0); + } + client->saved_queue = client->queue; + client->num_seq = 1; + client->sd_tcp = -1; /* No endpoint yet */ + client_update_timer(client); + + if ((packet->type & USE_COMPRESS) == USE_COMPRESS) + client->control.use_compress = 1; + + LOG("Creating session id: 0x%x address = %u.%u.%u.%u (compression %s wanted)", client->session_id, +#ifndef WORDS_BIGENDIAN + (unsigned int) ((req->sa.sin_addr.s_addr) & 0xff), + (unsigned int) ((req->sa.sin_addr.s_addr >> 8) & 0xff), + (unsigned int) ((req->sa.sin_addr.s_addr >> 16) & 0xff), + (unsigned int) ((req->sa.sin_addr.s_addr >> 24) & 0xff) +#else + (unsigned int) ((req->sa.sin_addr.s_addr >> 24) & 0xff), + (unsigned int) ((req->sa.sin_addr.s_addr >> 16) & 0xff), + (unsigned int) ((req->sa.sin_addr.s_addr >> 8) & 0xff), + (unsigned int) ((req->sa.sin_addr.s_addr) & 0xff) +#endif + , client->control.use_compress ? "" :"NOT" + ); + return (client); +} + + +/** + * @brief deal session request + * @param[in] conf configuration + * @param[in] request received + * @param[in] data packet structure received + * @retval 0 on success + * @retval -1 on error + **/ + +int session_request(t_conf *conf, t_request *req, t_data *data) +{ + t_packet *packet; + t_simple_list *client; + + if (data->len < PACKET_LEN) + return (-1); + packet = (void *)data->buffer; + data->buffer[data->len] = 0; + if (!req->cmd->authenticated) + return (req->cmd->deal_cmd(conf, req, packet, 0)); + client = find_client_by_session_id(conf, packet->session_id); + /* ----- Authenticated user below ---- */ + if ((!client) || (client->sd_tcp > 0)) + { + packet->type = ERR; + return (send_ascii_reply(conf, req, packet, ERR_AUTH_FAILED)); + } + if (client && client->control.authenticated) + /* deal_cmd is in request.c */ + return (req->cmd->deal_cmd(conf, req, packet, client)); + return (-1); +} diff -Nru dns2tcp-0.4.dfsg/server/socket.c dns2tcp-0.5.2/server/socket.c --- dns2tcp-0.4.dfsg/server/socket.c 2007-07-07 18:18:10.000000000 +0100 +++ dns2tcp-0.5.2/server/socket.c 2010-02-10 15:29:51.000000000 +0000 @@ -1,6 +1,6 @@ /* ** Copyright (C) 2006 Olivier DEMBOUR -** $Id: socket.c,v 1.12 2007/03/01 14:49:52 dembour Exp $ +** $Id: socket.c,v 1.18.4.4 2010/02/10 15:29:51 dembour Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -25,25 +25,33 @@ #include #include #include -#include #endif #include "dns.h" #include "server.h" #include "myerror.h" #include "debug.h" +#include "socket.h" -int bind_socket(t_conf *conf) + +/** + * @brief listen on wanted interfaces + * @param[in] conf configuration + **/ + +int bind_socket(t_conf *conf) { - int ret; - struct sockaddr_storage ss; - struct addrinfo *res, hints; + int ret; + union sockaddr_u su; + struct addrinfo *res, hints; + socklen_t slen; - memset(&ss, 0, sizeof(ss)); + memset(&su, 0, sizeof(su)); + slen = sizeof(struct sockaddr_in); if (conf->my_ip) { - DPRINTF(1, "Listenning on %s:%d for domain %s\n", conf->my_ip, + DPRINTF(1, "Listening on %s:%d for domain %s\n", conf->my_ip, conf->port, conf->my_domain); memset(&hints, 0, sizeof(hints)); hints.ai_flags = AI_CANONNAME; @@ -57,38 +65,43 @@ } switch (res->ai_family) { case AF_INET: - memcpy(&((struct sockaddr_in *) &ss)->sin_addr.s_addr, + memcpy(&su.in.sin_addr, &((struct sockaddr_in *) res->ai_addr)->sin_addr, sizeof(struct in_addr)); - ((struct sockaddr_in *) &ss)->sin_port = htons(conf->port); + su.in.sin_port = htons(conf->port); + su.in.sin_family = res->ai_family; break; + /* Not supported case AF_INET6: - memcpy(&((struct sockaddr_in6 *) &ss)->sin6_addr, + memcpy(&su.in6.sin6_addr, &((struct sockaddr_in6 *) res->ai_addr)->sin6_addr, sizeof(struct in6_addr)); - ((struct sockaddr_in6 *) &ss)->sin6_port = htons(conf->port); + su.in6.sin6_port = htons(conf->port); + su.in6.sin6_family = res->ai_family; + slen = sizeof(struct sockaddr_in6); break; + */ + default: freeaddrinfo(res); return (-1); } - ss.ss_family = res->ai_family; freeaddrinfo(res); } else { - ss.ss_family = AF_INET; - ((struct sockaddr_in *) &ss)->sin_addr.s_addr = INADDR_ANY; - ((struct sockaddr_in *) &ss)->sin_port = htons(conf->port); - DPRINTF(1, "Listenning on 0.0.0.0:%d for domain %s\n", conf->port, + su.in.sin_family = AF_INET; + su.in.sin_addr.s_addr = INADDR_ANY; + su.in.sin_port = htons(conf->port); + DPRINTF(1, "Listening on 0.0.0.0:%d for domain %s\n", conf->port, conf->my_domain); } - if ((conf->sd_udp = socket(ss.ss_family, SOCK_DGRAM, 0)) < 0) + if ((conf->sd_udp = socket(su.in.sin_family, SOCK_DGRAM, 0)) < 0) { MYERROR("socket error"); return (-1); } - if (bind(conf->sd_udp, (struct sockaddr *) &ss, sizeof(struct sockaddr)) < 0) + if (bind(conf->sd_udp, &su.sockaddr, slen) < 0) { close(conf->sd_udp); MYERROR("bind error"); @@ -97,6 +110,13 @@ return (0); } +/** + * @brief connect to a resource + * @param[in] name resource to connet to + * @param[in] port port to connect to + * @param[out] socket descriptor + **/ + int connect_socket(char *name, uint16_t port, int *sd) { int ret; @@ -110,7 +130,7 @@ end = strchr(name+1, ']'); if (!end || end[1] || (end == name+1)) { - MYERROR("invalid ressource's name (missing ']')\n"); + MYERROR("invalid resource's name (missing ']')\n"); return (-1); } if (!(host = strdup(name+1))) @@ -131,14 +151,15 @@ hints.ai_socktype = SOCK_STREAM; res = NULL; ret = getaddrinfo(host, NULL, &hints, &res); - if (host != name) - free(host); if (ret || !res) { MYERROR("getaddrinfo: %s (%s)\n", gai_strerror(ret), host); + if (host != name) + free(host); return (-1); } - + if (host != name) + free(host); for (ptr=res; ptr; ptr=ptr->ai_next) { memset(&ss, 0, sizeof(ss)); @@ -169,7 +190,6 @@ close(*sd); } freeaddrinfo(res); - return (-1); }