2
0
mirror of https://gitlab.isc.org/isc-projects/dhcp synced 2025-08-22 09:57:20 +00:00

-n [master]

Add code to support the standards version of DDNS
This commit is contained in:
Shawn Routhier 2013-10-14 15:53:24 -07:00
parent 1d851cff2c
commit d7d9c0c7c3
38 changed files with 2630 additions and 2114 deletions

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.13.1 from Makefile.am. # Makefile.in generated by automake 1.14 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2012 Free Software Foundation, Inc. # Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -15,23 +15,51 @@
@SET_MAKE@ @SET_MAKE@
VPATH = @srcdir@ VPATH = @srcdir@
am__make_dryrun = \ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
{ \ am__make_running_with_option = \
am__dry=no; \ case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \ case $$MAKEFLAGS in \
*\\[\ \ ]*) \ *\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ bs=\\; \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
*) \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \ esac; \
test $$am__dry = yes; \ fi; \
} skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
@ -54,7 +82,8 @@ subdir = .
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/configure $(am__configure_deps) \ $(top_srcdir)/configure $(am__configure_deps) \
$(top_srcdir)/doc/devel/doxyfile.in $(nobase_include_HEADERS) \ $(top_srcdir)/doc/devel/doxyfile.in $(nobase_include_HEADERS) \
README config.guess config.sub depcomp install-sh missing README compile config.guess config.sub depcomp install-sh \
missing
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@ -380,13 +409,12 @@ uninstall-nobase_includeHEADERS:
# (which will cause the Makefiles to be regenerated when you run 'make'); # (which will cause the Makefiles to be regenerated when you run 'make');
# (2) otherwise, pass the desired values on the 'make' command line. # (2) otherwise, pass the desired values on the 'make' command line.
$(am__recursive_targets): $(am__recursive_targets):
@fail= failcom='exit 1'; \ @fail=; \
for f in x $$MAKEFLAGS; do \ if $(am__make_keepgoing); then \
case $$f in \ failcom='fail=yes'; \
*=* | --[!k]*);; \ else \
*k*) failcom='fail=yes';; \ failcom='exit 1'; \
esac; \ fi; \
done; \
dot_seen=no; \ dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \ target=`echo $@ | sed s/-recursive//`; \
case "$@" in \ case "$@" in \
@ -561,10 +589,16 @@ dist-xz: distdir
$(am__post_remove_distdir) $(am__post_remove_distdir)
dist-tarZ: distdir dist-tarZ: distdir
@echo WARNING: "Support for shar distribution archives is" \
"deprecated." >&2
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__post_remove_distdir) $(am__post_remove_distdir)
dist-shar: distdir dist-shar: distdir
@echo WARNING: "Support for distribution archives compressed with" \
"legacy program 'compress' is deprecated." >&2
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
$(am__post_remove_distdir) $(am__post_remove_distdir)

View File

@ -75,6 +75,15 @@ work on other platforms. Please report any problems and suggested fixes to
- Add support for using classes with v6. - Add support for using classes with v6.
[ISC-Bugs #26510] [ISC-Bugs #26510]
- Update the DDNS code to current standards and allow for sharing
of DDNS entries between v4 and v6 clients. The new code is used
if the ddns-update-style is set to "standard", the older code is
still available if ddns-update-style is set to "interim". The
oldest DDNS code "ad-hoc" has been removed. Thanks to Thomas Pegeot
who submitted a patch for this issue. This patch is based on
that work with some modifications.
[ISC-Bugs 21139]
Changes since 4.2.5 Changes since 4.2.5
- Address static analysis warnings. - Address static analysis warnings.

411
aclocal.m4 vendored
View File

@ -1,6 +1,6 @@
# generated automatically by aclocal 1.12.4 -*- Autoconf -*- # generated automatically by aclocal 1.14 -*- Autoconf -*-
# Copyright (C) 1996-2012 Free Software Foundation, Inc. # Copyright (C) 1996-2013 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -11,6 +11,7 @@
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. # PARTICULAR PURPOSE.
m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
m4_ifndef([AC_AUTOCONF_VERSION], m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
@ -19,7 +20,7 @@ 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. 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'.])]) To do so, use the procedure documented by the package, typically 'autoreconf'.])])
# Copyright (C) 2002-2012 Free Software Foundation, Inc. # Copyright (C) 2002-2013 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -31,10 +32,10 @@ To do so, use the procedure documented by the package, typically 'autoreconf'.])
# generated from the m4 files accompanying Automake X.Y. # generated from the m4 files accompanying Automake X.Y.
# (This private macro should not be called outside this file.) # (This private macro should not be called outside this file.)
AC_DEFUN([AM_AUTOMAKE_VERSION], AC_DEFUN([AM_AUTOMAKE_VERSION],
[am__api_version='1.12' [am__api_version='1.14'
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to 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. dnl require some minimum version. Point them to the right macro.
m4_if([$1], [1.12.4], [], m4_if([$1], [1.14], [],
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
]) ])
@ -50,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], [])
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
[AM_AUTOMAKE_VERSION([1.12.4])dnl [AM_AUTOMAKE_VERSION([1.14])dnl
m4_ifndef([AC_AUTOCONF_VERSION], m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
# AM_AUX_DIR_EXPAND -*- Autoconf -*- # AM_AUX_DIR_EXPAND -*- Autoconf -*-
# Copyright (C) 2001-2012 Free Software Foundation, Inc. # Copyright (C) 2001-2013 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -110,7 +111,7 @@ am_aux_dir=`cd $ac_aux_dir && pwd`
# AM_CONDITIONAL -*- Autoconf -*- # AM_CONDITIONAL -*- Autoconf -*-
# Copyright (C) 1997-2012 Free Software Foundation, Inc. # Copyright (C) 1997-2013 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -141,7 +142,7 @@ AC_CONFIG_COMMANDS_PRE(
Usually this means the macro was only invoked conditionally.]]) Usually this means the macro was only invoked conditionally.]])
fi])]) fi])])
# Copyright (C) 1999-2012 Free Software Foundation, Inc. # Copyright (C) 1999-2013 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -332,7 +333,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
# Generate code to set up dependency tracking. -*- Autoconf -*- # Generate code to set up dependency tracking. -*- Autoconf -*-
# Copyright (C) 1999-2012 Free Software Foundation, Inc. # Copyright (C) 1999-2013 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -343,7 +344,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
# ------------------------------ # ------------------------------
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
[{ [{
# Autoconf 2.62 quotes --file arguments for eval, but not when files # Older Autoconf quotes --file arguments for eval, but not when files
# are listed without --file. Let's play safe and only enable the eval # are listed without --file. Let's play safe and only enable the eval
# if we detect the quoting. # if we detect the quoting.
case $CONFIG_FILES in case $CONFIG_FILES in
@ -372,7 +373,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
test -z "$DEPDIR" && continue test -z "$DEPDIR" && continue
am__include=`sed -n 's/^am__include = //p' < "$mf"` am__include=`sed -n 's/^am__include = //p' < "$mf"`
test -z "am__include" && continue test -z "$am__include" && continue
am__quote=`sed -n 's/^am__quote = //p' < "$mf"` am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
# Find all dependency output files, they are included files with # Find all dependency output files, they are included files with
# $(DEPDIR) in their names. We invoke sed twice because it is the # $(DEPDIR) in their names. We invoke sed twice because it is the
@ -408,7 +409,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
# Do all the work for Automake. -*- Autoconf -*- # Do all the work for Automake. -*- Autoconf -*-
# Copyright (C) 1996-2012 Free Software Foundation, Inc. # Copyright (C) 1996-2013 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -417,6 +418,12 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
# This macro actually does too much. Some checks are only needed if # 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. # your package does certain things. But this isn't really a big deal.
dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
m4_define([AC_PROG_CC],
m4_defn([AC_PROG_CC])
[_AM_PROG_CC_C_O
])
# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
# AM_INIT_AUTOMAKE([OPTIONS]) # AM_INIT_AUTOMAKE([OPTIONS])
# ----------------------------------------------- # -----------------------------------------------
@ -429,7 +436,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
# arguments mandatory, and then we can depend on a new Autoconf # arguments mandatory, and then we can depend on a new Autoconf
# release and drop the old call support. # release and drop the old call support.
AC_DEFUN([AM_INIT_AUTOMAKE], AC_DEFUN([AM_INIT_AUTOMAKE],
[AC_PREREQ([2.62])dnl [AC_PREREQ([2.65])dnl
dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl Autoconf wants to disallow AM_ names. We explicitly allow
dnl the ones we care about. dnl the ones we care about.
m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
@ -459,8 +466,7 @@ AC_SUBST([CYGPATH_W])
dnl Distinguish between old-style and new-style calls. dnl Distinguish between old-style and new-style calls.
m4_ifval([$2], m4_ifval([$2],
[AC_DIAGNOSE([obsolete], [AC_DIAGNOSE([obsolete],
[$0: two- and three-arguments forms are deprecated. For more info, see: [$0: two- and three-arguments forms are deprecated.])
http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation])
m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([PACKAGE], [$1])dnl
AC_SUBST([VERSION], [$2])], AC_SUBST([VERSION], [$2])],
@ -514,22 +520,60 @@ AC_PROVIDE_IFELSE([AC_PROG_OBJC],
[_AM_DEPENDENCIES([OBJC])], [_AM_DEPENDENCIES([OBJC])],
[m4_define([AC_PROG_OBJC], [m4_define([AC_PROG_OBJC],
m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
dnl Support for Objective C++ was only introduced in Autoconf 2.65, AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
dnl but we still cater to Autoconf 2.62.
m4_ifdef([AC_PROG_OBJCXX],
[AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
[_AM_DEPENDENCIES([OBJCXX])], [_AM_DEPENDENCIES([OBJCXX])],
[m4_define([AC_PROG_OBJCXX], [m4_define([AC_PROG_OBJCXX],
m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])])dnl m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
]) ])
_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl AC_REQUIRE([AM_SILENT_RULES])dnl
dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the dnl The testsuite driver may need to know about EXEEXT, so add the
dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This
dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
AC_CONFIG_COMMANDS_PRE(dnl AC_CONFIG_COMMANDS_PRE(dnl
[m4_provide_if([_AM_COMPILER_EXEEXT], [m4_provide_if([_AM_COMPILER_EXEEXT],
[AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
])
# POSIX will say in a future version that running "rm -f" with no argument
# is OK; and we want to be able to make that assumption in our Makefile
# recipes. So use an aggressive probe to check that the usage we want is
# actually supported "in the wild" to an acceptable degree.
# See automake bug#10828.
# To make any issue more visible, cause the running configure to be aborted
# by default if the 'rm' program in use doesn't match our expectations; the
# user can still override this though.
if rm -f && rm -fr && rm -rf; then : OK; else
cat >&2 <<'END'
Oops!
Your 'rm' program seems unable to run without file operands specified
on the command line, even when the '-f' option is present. This is contrary
to the behaviour of most rm programs out there, and not conforming with
the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
Please tell bug-automake@gnu.org about your system, including the value
of your $PATH and any error possibly output before this message. This
can help us improve future automake versions.
END
if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
echo 'Configuration will proceed anyway, since you have set the' >&2
echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
echo >&2
else
cat >&2 <<'END'
Aborting the configuration process, to ensure you take notice of the issue.
You can download and install GNU coreutils to get an 'rm' implementation
that behaves properly: <http://www.gnu.org/software/coreutils/>.
If you want to complete the configuration process using your problematic
'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
to "yes", and re-run configure.
END
AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
fi
fi])
dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not 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 add the conditional right here, as _AC_COMPILER_EXEEXT may be further
@ -537,7 +581,6 @@ dnl mangled by Autoconf and run in a shell conditional statement.
m4_define([_AC_COMPILER_EXEEXT], m4_define([_AC_COMPILER_EXEEXT],
m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_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. # When config.status generates a header, we must update the stamp-h file.
# This file resides in the same directory as the config header # This file resides in the same directory as the config header
# that is generated. The stamp files are numbered to have different names. # that is generated. The stamp files are numbered to have different names.
@ -559,7 +602,7 @@ for _am_header in $config_headers :; do
done done
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
# Copyright (C) 2001-2012 Free Software Foundation, Inc. # Copyright (C) 2001-2013 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -580,7 +623,7 @@ if test x"${install_sh}" != xset; then
fi fi
AC_SUBST([install_sh])]) AC_SUBST([install_sh])])
# Copyright (C) 2003-2012 Free Software Foundation, Inc. # Copyright (C) 2003-2013 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -602,7 +645,7 @@ AC_SUBST([am__leading_dot])])
# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
# From Jim Meyering # From Jim Meyering
# Copyright (C) 1996-2012 Free Software Foundation, Inc. # Copyright (C) 1996-2013 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -635,11 +678,9 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
] ]
) )
AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
# Check to see how 'make' treats includes. -*- Autoconf -*- # Check to see how 'make' treats includes. -*- Autoconf -*-
# Copyright (C) 2001-2012 Free Software Foundation, Inc. # Copyright (C) 2001-2013 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -689,7 +730,7 @@ rm -f confinc confmf
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
# Copyright (C) 1997-2012 Free Software Foundation, Inc. # Copyright (C) 1997-2013 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -704,8 +745,8 @@ AC_SUBST($1)])
# AM_MISSING_HAS_RUN # AM_MISSING_HAS_RUN
# ------------------ # ------------------
# Define MISSING if not defined so far and test if it supports --run. # Define MISSING if not defined so far and test if it is modern enough.
# If it does, set am_missing_run to use it, otherwise, to nothing. # If it is, set am_missing_run to use it, otherwise, to nothing.
AC_DEFUN([AM_MISSING_HAS_RUN], AC_DEFUN([AM_MISSING_HAS_RUN],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
AC_REQUIRE_AUX_FILE([missing])dnl AC_REQUIRE_AUX_FILE([missing])dnl
@ -718,8 +759,8 @@ if test x"${MISSING+set}" != xset; then
esac esac
fi fi
# Use eval to expand $SHELL # Use eval to expand $SHELL
if eval "$MISSING --run true"; then if eval "$MISSING --is-lightweight"; then
am_missing_run="$MISSING --run " am_missing_run="$MISSING "
else else
am_missing_run= am_missing_run=
AC_MSG_WARN(['missing' script is too old or missing]) AC_MSG_WARN(['missing' script is too old or missing])
@ -728,7 +769,7 @@ fi
# Helper functions for option handling. -*- Autoconf -*- # Helper functions for option handling. -*- Autoconf -*-
# Copyright (C) 2001-2012 Free Software Foundation, Inc. # Copyright (C) 2001-2013 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -757,9 +798,73 @@ AC_DEFUN([_AM_SET_OPTIONS],
AC_DEFUN([_AM_IF_OPTION], AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
# Copyright (C) 1999-2013 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.
# _AM_PROG_CC_C_O
# ---------------
# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC
# to automatically call this.
AC_DEFUN([_AM_PROG_CC_C_O],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
AC_REQUIRE_AUX_FILE([compile])dnl
AC_LANG_PUSH([C])dnl
AC_CACHE_CHECK(
[whether $CC understands -c and -o together],
[am_cv_prog_cc_c_o],
[AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
# Make sure it works both with $CC and with simple cc.
# Following AC_PROG_CC_C_O, we do the test twice because some
# compilers refuse to overwrite an existing .o file with -o,
# though they will create one.
am_cv_prog_cc_c_o=yes
for am_i in 1 2; do
if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
&& test -f conftest2.$ac_objext; then
: OK
else
am_cv_prog_cc_c_o=no
break
fi
done
rm -f core conftest*
unset am_i])
if test "$am_cv_prog_cc_c_o" != yes; then
# Losing compiler, so override with the script.
# FIXME: It is wrong to rewrite CC.
# But if we don't then we get into trouble of one sort or another.
# A longer-term fix would be to have automake use am__CC in this case,
# and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
CC="$am_aux_dir/compile $CC"
fi
AC_LANG_POP([C])])
# For backward compatibility.
AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
# Copyright (C) 2001-2013 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.
# AM_RUN_LOG(COMMAND)
# -------------------
# Run COMMAND, save the exit status in ac_status, and log it.
# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
AC_DEFUN([AM_RUN_LOG],
[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
(exit $ac_status); }])
# Check to make sure that the build environment is sane. -*- Autoconf -*- # Check to make sure that the build environment is sane. -*- Autoconf -*-
# Copyright (C) 1996-2012 Free Software Foundation, Inc. # Copyright (C) 1996-2013 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -840,7 +945,67 @@ AC_CONFIG_COMMANDS_PRE(
rm -f conftest.file rm -f conftest.file
]) ])
# Copyright (C) 2001-2012 Free Software Foundation, Inc. # Copyright (C) 2009-2013 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.
# AM_SILENT_RULES([DEFAULT])
# --------------------------
# Enable less verbose build rules; with the default set to DEFAULT
# ("yes" being less verbose, "no" or empty being verbose).
AC_DEFUN([AM_SILENT_RULES],
[AC_ARG_ENABLE([silent-rules], [dnl
AS_HELP_STRING(
[--enable-silent-rules],
[less verbose build output (undo: "make V=1")])
AS_HELP_STRING(
[--disable-silent-rules],
[verbose build output (undo: "make V=0")])dnl
])
case $enable_silent_rules in @%:@ (((
yes) AM_DEFAULT_VERBOSITY=0;;
no) AM_DEFAULT_VERBOSITY=1;;
*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
esac
dnl
dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
dnl do not support nested variable expansions.
dnl See automake bug#9928 and bug#10237.
am_make=${MAKE-make}
AC_CACHE_CHECK([whether $am_make supports nested variables],
[am_cv_make_support_nested_variables],
[if AS_ECHO([['TRUE=$(BAR$(V))
BAR0=false
BAR1=true
V=1
am__doit:
@$(TRUE)
.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
am_cv_make_support_nested_variables=yes
else
am_cv_make_support_nested_variables=no
fi])
if test $am_cv_make_support_nested_variables = yes; then
dnl Using '$V' instead of '$(V)' breaks IRIX make.
AM_V='$(V)'
AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
else
AM_V=$AM_DEFAULT_VERBOSITY
AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
fi
AC_SUBST([AM_V])dnl
AM_SUBST_NOTMAKE([AM_V])dnl
AC_SUBST([AM_DEFAULT_V])dnl
AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
AM_BACKSLASH='\'
AC_SUBST([AM_BACKSLASH])dnl
_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
])
# Copyright (C) 2001-2013 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -868,7 +1033,7 @@ fi
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])]) AC_SUBST([INSTALL_STRIP_PROGRAM])])
# Copyright (C) 2006-2012 Free Software Foundation, Inc. # Copyright (C) 2006-2013 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -887,7 +1052,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
# Check how to create a tarball. -*- Autoconf -*- # Check how to create a tarball. -*- Autoconf -*-
# Copyright (C) 2004-2012 Free Software Foundation, Inc. # Copyright (C) 2004-2013 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -906,76 +1071,114 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
# Substitute a variable $(am__untar) that extract such # Substitute a variable $(am__untar) that extract such
# a tarball read from stdin. # a tarball read from stdin.
# $(am__untar) < result.tar # $(am__untar) < result.tar
#
AC_DEFUN([_AM_PROG_TAR], AC_DEFUN([_AM_PROG_TAR],
[# Always define AMTAR for backward compatibility. Yes, it's still used [# Always define AMTAR for backward compatibility. Yes, it's still used
# in the wild :-( We should find a proper way to deprecate it ... # in the wild :-( We should find a proper way to deprecate it ...
AC_SUBST([AMTAR], ['$${TAR-tar}']) AC_SUBST([AMTAR], ['$${TAR-tar}'])
m4_if([$1], [v7],
[am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], # We'll loop over all known methods to create a tar archive until one works.
[m4_case([$1], [ustar],, [pax],,
[m4_fatal([Unknown tar format])])
AC_MSG_CHECKING([how to create a $1 tar archive])
# Loop over all known methods to create a tar archive until one works.
_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
_am_tools=${am_cv_prog_tar_$1-$_am_tools}
# Do not fold the above two line into one, because Tru64 sh and
# Solaris sh will not grok spaces in the rhs of '-'.
for _am_tool in $_am_tools
do
case $_am_tool in
gnutar)
for _am_tar in tar gnutar gtar;
do
AM_RUN_LOG([$_am_tar --version]) && break
done
am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
am__untar="$_am_tar -xf -"
;;
plaintar)
# Must skip GNU tar: if it does not support --format= it doesn't create
# ustar tarball either.
(tar --version) >/dev/null 2>&1 && continue
am__tar='tar chf - "$$tardir"'
am__tar_='tar chf - "$tardir"'
am__untar='tar xf -'
;;
pax)
am__tar='pax -L -x $1 -w "$$tardir"'
am__tar_='pax -L -x $1 -w "$tardir"'
am__untar='pax -r'
;;
cpio)
am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
am__untar='cpio -i -H $1 -d'
;;
none)
am__tar=false
am__tar_=false
am__untar=false
;;
esac
# If the value was cached, stop now. We just wanted to have am__tar m4_if([$1], [v7],
# and am__untar set. [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
test -n "${am_cv_prog_tar_$1}" && break
# tar/untar a dummy directory, and stop if the command works [m4_case([$1],
[ustar],
[# The POSIX 1988 'ustar' format is defined with fixed-size fields.
# There is notably a 21 bits limit for the UID and the GID. In fact,
# the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
# and bug#13588).
am_max_uid=2097151 # 2^21 - 1
am_max_gid=$am_max_uid
# The $UID and $GID variables are not portable, so we need to resort
# to the POSIX-mandated id(1) utility. Errors in the 'id' calls
# below are definitely unexpected, so allow the users to see them
# (that is, avoid stderr redirection).
am_uid=`id -u || echo unknown`
am_gid=`id -g || echo unknown`
AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
if test $am_uid -le $am_max_uid; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
_am_tools=none
fi
AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
if test $am_gid -le $am_max_gid; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
_am_tools=none
fi],
[pax],
[],
[m4_fatal([Unknown tar format])])
AC_MSG_CHECKING([how to create a $1 tar archive])
# Go ahead even if we have the value already cached. We do so because we
# need to set the values for the 'am__tar' and 'am__untar' variables.
_am_tools=${am_cv_prog_tar_$1-$_am_tools}
for _am_tool in $_am_tools; do
case $_am_tool in
gnutar)
for _am_tar in tar gnutar gtar; do
AM_RUN_LOG([$_am_tar --version]) && break
done
am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
am__untar="$_am_tar -xf -"
;;
plaintar)
# Must skip GNU tar: if it does not support --format= it doesn't create
# ustar tarball either.
(tar --version) >/dev/null 2>&1 && continue
am__tar='tar chf - "$$tardir"'
am__tar_='tar chf - "$tardir"'
am__untar='tar xf -'
;;
pax)
am__tar='pax -L -x $1 -w "$$tardir"'
am__tar_='pax -L -x $1 -w "$tardir"'
am__untar='pax -r'
;;
cpio)
am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
am__untar='cpio -i -H $1 -d'
;;
none)
am__tar=false
am__tar_=false
am__untar=false
;;
esac
# If the value was cached, stop now. We just wanted to have am__tar
# and am__untar set.
test -n "${am_cv_prog_tar_$1}" && break
# tar/untar a dummy directory, and stop if the command works.
rm -rf conftest.dir
mkdir conftest.dir
echo GrepMe > conftest.dir/file
AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
rm -rf conftest.dir
if test -s conftest.tar; then
AM_RUN_LOG([$am__untar <conftest.tar])
AM_RUN_LOG([cat conftest.dir/file])
grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
fi
done
rm -rf conftest.dir rm -rf conftest.dir
mkdir conftest.dir
echo GrepMe > conftest.dir/file
AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
rm -rf conftest.dir
if test -s conftest.tar; then
AM_RUN_LOG([$am__untar <conftest.tar])
grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
fi
done
rm -rf conftest.dir
AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_MSG_RESULT([$am_cv_prog_tar_$1])])
AC_SUBST([am__tar]) AC_SUBST([am__tar])
AC_SUBST([am__untar]) AC_SUBST([am__untar])
]) # _AM_PROG_TAR ]) # _AM_PROG_TAR

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.13.1 from Makefile.am. # Makefile.in generated by automake 1.14 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2012 Free Software Foundation, Inc. # Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -16,23 +16,51 @@
VPATH = @srcdir@ VPATH = @srcdir@
am__make_dryrun = \ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
{ \ am__make_running_with_option = \
am__dry=no; \ case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \ case $$MAKEFLAGS in \
*\\[\ \ ]*) \ *\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ bs=\\; \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
*) \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \ esac; \
test $$am__dry = yes; \ fi; \
} skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
@ -347,6 +375,7 @@ uninstall-sbinPROGRAMS:
clean-sbinPROGRAMS: clean-sbinPROGRAMS:
-test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
dhclient$(EXEEXT): $(dhclient_OBJECTS) $(dhclient_DEPENDENCIES) $(EXTRA_dhclient_DEPENDENCIES) dhclient$(EXEEXT): $(dhclient_OBJECTS) $(dhclient_DEPENDENCIES) $(EXTRA_dhclient_DEPENDENCIES)
@rm -f dhclient$(EXEEXT) @rm -f dhclient$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(dhclient_OBJECTS) $(dhclient_LDADD) $(LIBS) $(AM_V_CCLD)$(LINK) $(dhclient_OBJECTS) $(dhclient_LDADD) $(LIBS)
@ -366,14 +395,14 @@ distclean-compile:
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj: .c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
install-man5: $(man_MANS) install-man5: $(man_MANS)
@$(NORMAL_INSTALL) @$(NORMAL_INSTALL)
@list1=''; \ @list1=''; \

View File

@ -119,69 +119,6 @@ static int check_timing6(struct client_state *client, u_int8_t msg_type,
extern int onetry; extern int onetry;
extern int stateless; extern int stateless;
/*
* The "best" default DUID, since we cannot predict any information
* about the system (such as whether or not the hardware addresses are
* integrated into the motherboard or similar), is the "LLT", link local
* plus time, DUID. For real stateless "LL" is better.
*
* Once generated, this duid is stored into the state database, and
* retained across restarts.
*
* For the time being, there is probably a different state database for
* every daemon, so this winds up being a per-interface identifier...which
* is not how it is intended. Upcoming rearchitecting the client should
* address this "one daemon model."
*/
void
form_duid(struct data_string *duid, const char *file, int line)
{
struct interface_info *ip;
int len;
/* For now, just use the first interface on the list. */
ip = interfaces;
if (ip == NULL)
log_fatal("Impossible condition at %s:%d.", MDL);
if ((ip->hw_address.hlen == 0) ||
(ip->hw_address.hlen > sizeof(ip->hw_address.hbuf)))
log_fatal("Impossible hardware address length at %s:%d.", MDL);
if (duid_type == 0)
duid_type = stateless ? DUID_LL : DUID_LLT;
/*
* 2 bytes for the 'duid type' field.
* 2 bytes for the 'htype' field.
* (DUID_LLT) 4 bytes for the 'current time'.
* enough bytes for the hardware address (note that hw_address has
* the 'htype' on byte zero).
*/
len = 4 + (ip->hw_address.hlen - 1);
if (duid_type == DUID_LLT)
len += 4;
if (!buffer_allocate(&duid->buffer, len, MDL))
log_fatal("no memory for default DUID!");
duid->data = duid->buffer->data;
duid->len = len;
/* Basic Link Local Address type of DUID. */
if (duid_type == DUID_LLT) {
putUShort(duid->buffer->data, DUID_LLT);
putUShort(duid->buffer->data + 2, ip->hw_address.hbuf[0]);
putULong(duid->buffer->data + 4, cur_time - DUID_TIME_EPOCH);
memcpy(duid->buffer->data + 8, ip->hw_address.hbuf + 1,
ip->hw_address.hlen - 1);
} else {
putUShort(duid->buffer->data, DUID_LL);
putUShort(duid->buffer->data + 2, ip->hw_address.hbuf[0]);
memcpy(duid->buffer->data + 4, ip->hw_address.hbuf + 1,
ip->hw_address.hlen - 1);
}
}
/* /*
* Assign DHCPv6 port numbers as a client. * Assign DHCPv6 port numbers as a client.
*/ */

View File

@ -1,6 +1,6 @@
.\" $Id: dhclient.8,v 1.36 2011/04/15 21:58:12 sar Exp $ .\" $Id: dhclient.8,v 1.36 2011/04/15 21:58:12 sar Exp $
.\" .\"
.\" Copyright (c) 2004,2007-2012 by Internet Systems Consortium, Inc. ("ISC") .\" Copyright (c) 2004,2007-2013 by Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (c) 1996-2003 by Internet Software Consortium .\" Copyright (c) 1996-2003 by Internet Software Consortium
.\" .\"
.\" Permission to use, copy, modify, and distribute this software for any .\" Permission to use, copy, modify, and distribute this software for any
@ -56,6 +56,12 @@ dhclient - Dynamic Host Configuration Protocol Client
] ]
] ]
[ [
.B -i
]
[
.B -I
]
[
.B -D .B -D
.I LL|LLT .I LL|LLT
] ]
@ -322,6 +328,17 @@ Set the giaddr field of all packets to the \fIrelay\fR IP address
simulating a relay agent. This is for testing pruposes only and simulating a relay agent. This is for testing pruposes only and
should not be expected to work in any consistent or useful way. should not be expected to work in any consistent or useful way.
.TP .TP
.BI \-i
Use a DUID with DHCPv4 clients. If no DUID is available in the
lease file one will be constructed and saved. The DUID will be
used to contstuct a RFC4361 style client id that will be included
in the client's messages. This client id can be overridden by
setting a client id in the configuration file. Overridding the
client id in this fashion is discouraged.
.TP
.BI \-I
Use the standard DDNS scheme from RFCs 4701 & 4702.
.TP
.BI \--version .BI \--version
Print version number and exit. Print version number and exit.
.PP .PP
@ -351,8 +368,10 @@ DHCPv6 \fBdhclient\fR creates an identifier based on the link-layer address
(DUID-LL) if it is running in stateless mode (with \fB\-S\fR, not (DUID-LL) if it is running in stateless mode (with \fB\-S\fR, not
requesting an address), or it creates an identifier based on the requesting an address), or it creates an identifier based on the
link-layer address plus a timestamp (DUID-LLT) if it is running in link-layer address plus a timestamp (DUID-LLT) if it is running in
stateful mode (without \fB\-S\fR, requesting an address). \fB\-D\fR stateful mode (without \fB\-S\fR, requesting an address). When DHCPv4
overrides this default, with a value of either \fILL\fR or \fILLT\fR. is configued to use a DUID using \fB\-i\fR option the default is to use
a DUID-LLT. \fB\-D\fR
overrides these default, with a value of either \fILL\fR or \fILLT\fR.
.TP .TP
.BI \-N .BI \-N
.\" TODO: is this for telling an already running dhclient? .\" TODO: is this for telling an already running dhclient?

View File

@ -62,6 +62,8 @@ struct sockaddr_in sockaddr_broadcast;
struct in_addr giaddr; struct in_addr giaddr;
struct data_string default_duid; struct data_string default_duid;
int duid_type = 0; int duid_type = 0;
int duid_v4 = 0;
int std_dhcid = 0;
/* ASSERT_STATE() does nothing now; it used to be /* ASSERT_STATE() does nothing now; it used to be
assert (state_is == state_shouldbe). */ assert (state_is == state_shouldbe). */
@ -287,12 +289,9 @@ main(int argc, char **argv) {
wanted_ia_na = 0; wanted_ia_na = 0;
} }
wanted_ia_pd++; wanted_ia_pd++;
#endif /* DHCPv6 */
} else if (!strcmp(argv[i], "-D")) { } else if (!strcmp(argv[i], "-D")) {
if (local_family_set && (local_family == AF_INET)) { duid_v4 = 1;
usage();
}
local_family_set = 1;
local_family = AF_INET6;
if (++i == argc) if (++i == argc)
usage(); usage();
if (!strcasecmp(argv[i], "LL")) { if (!strcasecmp(argv[i], "LL")) {
@ -302,7 +301,12 @@ main(int argc, char **argv) {
} else { } else {
usage(); usage();
} }
#endif /* DHCPv6 */ } else if (!strcmp(argv[i], "-i")) {
/* enable DUID support for DHCPv4 clients */
duid_v4 = 1;
} else if (!strcmp(argv[i], "-I")) {
/* enable standard DHCID support for DDNS updates */
std_dhcid = 1;
} else if (!strcmp(argv[i], "-v")) { } else if (!strcmp(argv[i], "-v")) {
quiet = 0; quiet = 0;
} else if (!strcmp(argv[i], "--version")) { } else if (!strcmp(argv[i], "--version")) {
@ -564,12 +568,13 @@ main(int argc, char **argv) {
} }
srandom(seed + cur_time + (unsigned)getpid()); srandom(seed + cur_time + (unsigned)getpid());
/* Start a configuration state machine for each interface. */
#ifdef DHCPv6 /*
if (local_family == AF_INET6) { * Establish a default DUID. We always do so for v6 and
/* Establish a default DUID. This may be moved to the * do so if desired for v4 via the -D or -i options
* DHCPv4 area later. */
*/ if ((local_family == AF_INET6) ||
((local_family == AF_INET) && (duid_v4 == 1))) {
if (default_duid.len == 0) { if (default_duid.len == 0) {
if (default_duid.buffer != NULL) if (default_duid.buffer != NULL)
data_string_forget(&default_duid, MDL); data_string_forget(&default_duid, MDL);
@ -577,7 +582,11 @@ main(int argc, char **argv) {
form_duid(&default_duid, MDL); form_duid(&default_duid, MDL);
write_duid(&default_duid); write_duid(&default_duid);
} }
}
/* Start a configuration state machine for each interface. */
#ifdef DHCPv6
if (local_family == AF_INET6) {
for (ip = interfaces ; ip != NULL ; ip = ip->next) { for (ip = interfaces ; ip != NULL ; ip = ip->next) {
for (client = ip->client ; client != NULL ; for (client = ip->client ; client != NULL ;
client = client->next) { client = client->next) {
@ -709,9 +718,9 @@ static void usage()
log_fatal("Usage: dhclient " log_fatal("Usage: dhclient "
#ifdef DHCPv6 #ifdef DHCPv6
"[-4|-6] [-SNTP1dvrx] [-nw] [-p <port>] [-D LL|LLT]\n" "[-4|-6] [-SNTPI1dvrxi] [-nw] [-p <port>] [-D LL|LLT] \n"
#else /* DHCPv6 */ #else /* DHCPv6 */
"[-1dvrx] [-nw] [-p <port>]\n" "[-I1dvrxi] [-nw] [-p <port>] [-D LL|LLT] \n"
#endif /* DHCPv6 */ #endif /* DHCPv6 */
" [-s server-addr] [-cf config-file] " " [-s server-addr] [-cf config-file] "
"[-lf lease-file]\n" "[-lf lease-file]\n"
@ -2296,24 +2305,24 @@ make_client_options(struct client_state *client, struct client_lease *lease,
unsigned i; unsigned i;
struct option_cache *oc; struct option_cache *oc;
struct option *option = NULL; struct option *option = NULL;
struct buffer *bp = (struct buffer *)0; struct buffer *bp = NULL;
/* If there are any leftover options, get rid of them. */ /* If there are any leftover options, get rid of them. */
if (*op) if (*op)
option_state_dereference (op, MDL); option_state_dereference(op, MDL);
/* Allocate space for options. */ /* Allocate space for options. */
option_state_allocate (op, MDL); option_state_allocate(op, MDL);
/* Send the server identifier if provided. */ /* Send the server identifier if provided. */
if (sid) if (sid)
save_option (&dhcp_universe, *op, sid); save_option(&dhcp_universe, *op, sid);
oc = (struct option_cache *)0; oc = NULL;
/* Send the requested address if provided. */ /* Send the requested address if provided. */
if (rip) { if (rip) {
client -> requested_address = *rip; client->requested_address = *rip;
i = DHO_DHCP_REQUESTED_ADDRESS; i = DHO_DHCP_REQUESTED_ADDRESS;
if (!(option_code_hash_lookup(&option, dhcp_universe.code_hash, if (!(option_code_hash_lookup(&option, dhcp_universe.code_hash,
&i, 0, MDL) && &i, 0, MDL) &&
@ -2321,22 +2330,22 @@ make_client_options(struct client_state *client, struct client_lease *lease,
option, MDL))) option, MDL)))
log_error ("can't make requested address cache."); log_error ("can't make requested address cache.");
else { else {
save_option (&dhcp_universe, *op, oc); save_option(&dhcp_universe, *op, oc);
option_cache_dereference (&oc, MDL); option_cache_dereference(&oc, MDL);
} }
option_dereference(&option, MDL); option_dereference(&option, MDL);
} else { } else {
client -> requested_address.len = 0; client->requested_address.len = 0;
} }
i = DHO_DHCP_MESSAGE_TYPE; i = DHO_DHCP_MESSAGE_TYPE;
if (!(option_code_hash_lookup(&option, dhcp_universe.code_hash, &i, 0, if (!(option_code_hash_lookup(&option, dhcp_universe.code_hash, &i, 0,
MDL) && MDL) &&
make_const_option_cache(&oc, NULL, type, 1, option, MDL))) make_const_option_cache(&oc, NULL, type, 1, option, MDL)))
log_error ("can't make message type."); log_error("can't make message type.");
else { else {
save_option (&dhcp_universe, *op, oc); save_option(&dhcp_universe, *op, oc);
option_cache_dereference (&oc, MDL); option_cache_dereference(&oc, MDL);
} }
option_dereference(&option, MDL); option_dereference(&option, MDL);
@ -2349,8 +2358,8 @@ make_client_options(struct client_state *client, struct client_lease *lease,
if (prl[i]->universe == &dhcp_universe) if (prl[i]->universe == &dhcp_universe)
len++; len++;
if (!buffer_allocate (&bp, len, MDL)) if (!buffer_allocate(&bp, len, MDL))
log_error ("can't make parameter list buffer."); log_error("can't make parameter list buffer.");
else { else {
unsigned code = DHO_DHCP_PARAMETER_REQUEST_LIST; unsigned code = DHO_DHCP_PARAMETER_REQUEST_LIST;
@ -2364,15 +2373,69 @@ make_client_options(struct client_state *client, struct client_lease *lease,
&code, 0, MDL) && &code, 0, MDL) &&
make_const_option_cache(&oc, &bp, NULL, len, make_const_option_cache(&oc, &bp, NULL, len,
option, MDL))) option, MDL)))
log_error ("can't make option cache"); log_error("can't make option cache");
else { else {
save_option (&dhcp_universe, *op, oc); save_option(&dhcp_universe, *op, oc);
option_cache_dereference (&oc, MDL); option_cache_dereference(&oc, MDL);
} }
option_dereference(&option, MDL); option_dereference(&option, MDL);
} }
} }
/*
* If requested (duid_v4 == 1) add an RFC4361 compliant client-identifier
* This can be overridden by including a client id in the configuration
* file.
*/
if (duid_v4 == 1) {
struct data_string client_identifier;
int hw_idx, hw_len;
memset(&client_identifier, 0, sizeof(client_identifier));
client_identifier.len = 1 + 4 + default_duid.len;
if (!buffer_allocate(&client_identifier.buffer,
client_identifier.len, MDL))
log_fatal("no memory for default DUID!");
client_identifier.data = client_identifier.buffer->data;
i = DHO_DHCP_CLIENT_IDENTIFIER;
/* Client-identifier type : 1 byte */
*client_identifier.buffer->data = 255;
/* IAID : 4 bytes
* we use the low 4 bytes from the interface address
*/
if (client->interface->hw_address.hlen > 4) {
hw_idx = client->interface->hw_address.hlen - 4;
hw_len = 4;
} else {
hw_idx = 0;
hw_len = client->interface->hw_address.hlen;
}
memcpy(&client_identifier.buffer->data + 5 - hw_len,
client->interface->hw_address.hbuf + hw_idx,
hw_len);
/* Add the default duid */
memcpy(&client_identifier.buffer->data+(1+4),
default_duid.data, default_duid.len);
/* And save the option */
if (!(option_code_hash_lookup(&option, dhcp_universe.code_hash,
&i, 0, MDL) &&
make_const_option_cache(&oc, NULL,
(u_int8_t *)client_identifier.data,
client_identifier.len,
option, MDL)))
log_error ("can't make requested client id cache..");
else {
save_option (&dhcp_universe, *op, oc);
option_cache_dereference (&oc, MDL);
}
option_dereference(&option, MDL);
}
/* Run statements that need to be run on transmission. */ /* Run statements that need to be run on transmission. */
if (client->config->on_transmission) if (client->config->on_transmission)
execute_statements_in_scope(NULL, NULL, NULL, client, execute_statements_in_scope(NULL, NULL, NULL, client,
@ -2778,6 +2841,69 @@ write_options(struct client_state *client, struct option_state *options,
} }
} }
/*
* The "best" default DUID, since we cannot predict any information
* about the system (such as whether or not the hardware addresses are
* integrated into the motherboard or similar), is the "LLT", link local
* plus time, DUID. For real stateless "LL" is better.
*
* Once generated, this duid is stored into the state database, and
* retained across restarts.
*
* For the time being, there is probably a different state database for
* every daemon, so this winds up being a per-interface identifier...which
* is not how it is intended. Upcoming rearchitecting the client should
* address this "one daemon model."
*/
void
form_duid(struct data_string *duid, const char *file, int line)
{
struct interface_info *ip;
int len;
/* For now, just use the first interface on the list. */
ip = interfaces;
if (ip == NULL)
log_fatal("Impossible condition at %s:%d.", MDL);
if ((ip->hw_address.hlen == 0) ||
(ip->hw_address.hlen > sizeof(ip->hw_address.hbuf)))
log_fatal("Impossible hardware address length at %s:%d.", MDL);
if (duid_type == 0)
duid_type = stateless ? DUID_LL : DUID_LLT;
/*
* 2 bytes for the 'duid type' field.
* 2 bytes for the 'htype' field.
* (DUID_LLT) 4 bytes for the 'current time'.
* enough bytes for the hardware address (note that hw_address has
* the 'htype' on byte zero).
*/
len = 4 + (ip->hw_address.hlen - 1);
if (duid_type == DUID_LLT)
len += 4;
if (!buffer_allocate(&duid->buffer, len, MDL))
log_fatal("no memory for default DUID!");
duid->data = duid->buffer->data;
duid->len = len;
/* Basic Link Local Address type of DUID. */
if (duid_type == DUID_LLT) {
putUShort(duid->buffer->data, DUID_LLT);
putUShort(duid->buffer->data + 2, ip->hw_address.hbuf[0]);
putULong(duid->buffer->data + 4, cur_time - DUID_TIME_EPOCH);
memcpy(duid->buffer->data + 8, ip->hw_address.hbuf + 1,
ip->hw_address.hlen - 1);
} else {
putUShort(duid->buffer->data, DUID_LL);
putUShort(duid->buffer->data + 2, ip->hw_address.hbuf[0]);
memcpy(duid->buffer->data + 4, ip->hw_address.hbuf + 1,
ip->hw_address.hlen - 1);
}
}
/* Write the default DUID to the lease store. */ /* Write the default DUID to the lease store. */
static isc_result_t static isc_result_t
write_duid(struct data_string *duid) write_duid(struct data_string *duid)
@ -3991,6 +4117,7 @@ client_dns_update(struct client_state *client, dhcp_ddns_cb_t *ddns_cb)
struct option_cache *oc; struct option_cache *oc;
int ignorep; int ignorep;
int result; int result;
int ddns_v4_type;
isc_result_t rcode; isc_result_t rcode;
/* If we didn't send an FQDN option, we certainly aren't going to /* If we didn't send an FQDN option, we certainly aren't going to
@ -4033,48 +4160,82 @@ client_dns_update(struct client_state *client, dhcp_ddns_cb_t *ddns_cb)
&global_scope, oc, MDL)) &global_scope, oc, MDL))
return ISC_R_SUCCESS; return ISC_R_SUCCESS;
/* If this is a DHCPv6 client update, make a dhcid string out of /*
* the DUID. If this is a DHCPv4 client update, choose either * Construct the DHCID value for use in the DDNS update process
* the client identifier, if there is one, or the interface's * We have the newer standard version and the older interim version
* MAC address. * chosen by the '-I' option. The interim version is left as is
* for backwards compatibility. The standard version is based on
* RFC 4701 section 3.3
*/ */
result = 0; result = 0;
POST(result); POST(result);
memset(&client_identifier, 0, sizeof(client_identifier)); memset(&client_identifier, 0, sizeof(client_identifier));
if (std_dhcid == 1) {
/* standard style */
ddns_cb->dhcid_class = dns_rdatatype_dhcid;
ddns_v4_type = 1;
} else {
/* interim style */
ddns_cb->dhcid_class = dns_rdatatype_txt;
/* for backwards compatibility */
ddns_v4_type = DHO_DHCP_CLIENT_IDENTIFIER;
}
if (client->active_lease != NULL) { if (client->active_lease != NULL) {
if (((oc = /* V6 request, get the client identifier, then
lookup_option(&dhcpv6_universe, client->sent_options, * construct the dhcid for either standard
D6O_CLIENTID)) != NULL) && * or interim */
evaluate_option_cache(&client_identifier, NULL, NULL, if (((oc = lookup_option(&dhcpv6_universe,
client, client->sent_options, NULL, client->sent_options,
D6O_CLIENTID)) != NULL) &&
evaluate_option_cache(&client_identifier, NULL,
NULL, client,
client->sent_options, NULL,
&global_scope, oc, MDL)) { &global_scope, oc, MDL)) {
/* RFC4701 defines type '2' as being for the DUID result = get_dhcid(ddns_cb, 2,
* field. We aren't using RFC4701 DHCID RR's yet,
* but this is as good a value as any.
*/
result = get_dhcid(&ddns_cb->dhcid, 2,
client_identifier.data, client_identifier.data,
client_identifier.len); client_identifier.len);
data_string_forget(&client_identifier, MDL); data_string_forget(&client_identifier, MDL);
} else } else
log_fatal("Impossible condition at %s:%d.", MDL); log_fatal("Impossible condition at %s:%d.", MDL);
} else { } else {
if (((oc = /*
lookup_option(&dhcp_universe, client->sent_options, * V4 request, use the client id if there is one or the
DHO_DHCP_CLIENT_IDENTIFIER)) != NULL) && * mac address if there isn't. If we have a client id
evaluate_option_cache(&client_identifier, NULL, NULL, * we check to see if it is an embedded DUID.
client, client->sent_options, NULL, */
if (((oc = lookup_option(&dhcp_universe,
client->sent_options,
DHO_DHCP_CLIENT_IDENTIFIER)) != NULL) &&
evaluate_option_cache(&client_identifier, NULL,
NULL, client,
client->sent_options, NULL,
&global_scope, oc, MDL)) { &global_scope, oc, MDL)) {
result = get_dhcid(&ddns_cb->dhcid, if ((std_dhcid == 1) && (duid_v4 == 1) &&
DHO_DHCP_CLIENT_IDENTIFIER, (client_identifier.data[0] == 255)) {
client_identifier.data, /*
client_identifier.len); * This appears to be an embedded DUID,
* extract it and treat it as such
*/
if (client_identifier.len <= 5)
log_fatal("Impossible condition at %s:%d.",
MDL);
result = get_dhcid(ddns_cb, 2,
client_identifier.data + 5,
client_identifier.len - 5);
} else {
result = get_dhcid(ddns_cb, ddns_v4_type,
client_identifier.data,
client_identifier.len);
}
data_string_forget(&client_identifier, MDL); data_string_forget(&client_identifier, MDL);
} else } else
result = get_dhcid(&ddns_cb->dhcid, 0, result = get_dhcid(ddns_cb, 0,
client->interface->hw_address.hbuf, client->interface->hw_address.hbuf,
client->interface->hw_address.hlen); client->interface->hw_address.hlen);
} }
if (!result) { if (!result) {
return ISC_R_SUCCESS; return ISC_R_SUCCESS;
} }
@ -4342,3 +4503,4 @@ add_reject(struct packet *packet) {
*/ */
log_info("Server added to list of rejected servers."); log_info("Server added to list of rejected servers.");
} }

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.13.1 from Makefile.am. # Makefile.in generated by automake 1.14 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2012 Free Software Foundation, Inc. # Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -15,23 +15,51 @@
@SET_MAKE@ @SET_MAKE@
VPATH = @srcdir@ VPATH = @srcdir@
am__make_dryrun = \ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
{ \ am__make_running_with_option = \
am__dry=no; \ case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \ case $$MAKEFLAGS in \
*\\[\ \ ]*) \ *\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ bs=\\; \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
*) \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \ esac; \
test $$am__dry = yes; \ fi; \
} skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
@ -364,6 +392,7 @@ $(am__aclocal_m4_deps):
clean-noinstLIBRARIES: clean-noinstLIBRARIES:
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
libdhcp.a: $(libdhcp_a_OBJECTS) $(libdhcp_a_DEPENDENCIES) $(EXTRA_libdhcp_a_DEPENDENCIES) libdhcp.a: $(libdhcp_a_OBJECTS) $(libdhcp_a_DEPENDENCIES) $(EXTRA_libdhcp_a_DEPENDENCIES)
$(AM_V_at)-rm -f libdhcp.a $(AM_V_at)-rm -f libdhcp.a
$(AM_V_AR)$(libdhcp_a_AR) libdhcp.a $(libdhcp_a_OBJECTS) $(libdhcp_a_LIBADD) $(AM_V_AR)$(libdhcp_a_AR) libdhcp.a $(libdhcp_a_OBJECTS) $(libdhcp_a_LIBADD)
@ -410,14 +439,14 @@ distclean-compile:
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj: .c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
install-man5: $(man_MANS) install-man5: $(man_MANS)
@$(NORMAL_INSTALL) @$(NORMAL_INSTALL)
@list1=''; \ @list1=''; \
@ -469,13 +498,12 @@ uninstall-man5:
# (which will cause the Makefiles to be regenerated when you run 'make'); # (which will cause the Makefiles to be regenerated when you run 'make');
# (2) otherwise, pass the desired values on the 'make' command line. # (2) otherwise, pass the desired values on the 'make' command line.
$(am__recursive_targets): $(am__recursive_targets):
@fail= failcom='exit 1'; \ @fail=; \
for f in x $$MAKEFLAGS; do \ if $(am__make_keepgoing); then \
case $$f in \ failcom='fail=yes'; \
*=* | --[!k]*);; \ else \
*k*) failcom='fail=yes';; \ failcom='exit 1'; \
esac; \ fi; \
done; \
dot_seen=no; \ dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \ target=`echo $@ | sed s/-recursive//`; \
case "$@" in \ case "$@" in \

View File

@ -886,10 +886,6 @@ intern(char *atom, enum dhcp_token dfv) {
case 'd': case 'd':
if (!strcasecmp(atom + 1, "b-time-format")) if (!strcasecmp(atom + 1, "b-time-format"))
return DB_TIME_FORMAT; return DB_TIME_FORMAT;
if (!strcasecmp (atom + 1, "ns-update"))
return DNS_UPDATE;
if (!strcasecmp (atom + 1, "ns-delete"))
return DNS_DELETE;
if (!strcasecmp (atom + 1, "omain")) if (!strcasecmp (atom + 1, "omain"))
return DOMAIN; return DOMAIN;
if (!strncasecmp (atom + 1, "omain-", 6)) { if (!strncasecmp (atom + 1, "omain-", 6)) {
@ -1183,8 +1179,6 @@ intern(char *atom, enum dhcp_token dfv) {
return TOKEN_NOT; return TOKEN_NOT;
if (!strcasecmp (atom + 1, "o")) if (!strcasecmp (atom + 1, "o"))
return TOKEN_NO; return TOKEN_NO;
if (!strcasecmp (atom + 1, "s-update"))
return NS_UPDATE;
if (!strcasecmp (atom + 1, "oerror")) if (!strcasecmp (atom + 1, "oerror"))
return NS_NOERROR; return NS_NOERROR;
if (!strcasecmp (atom + 1, "otauth")) if (!strcasecmp (atom + 1, "otauth"))
@ -1503,8 +1497,6 @@ intern(char *atom, enum dhcp_token dfv) {
} }
if (!strcasecmp (atom + 1, "nauthenticated")) if (!strcasecmp (atom + 1, "nauthenticated"))
return UNAUTHENTICATED; return UNAUTHENTICATED;
if (!strcasecmp (atom + 1, "pdated-dns-rr"))
return UPDATED_DNS_RR;
if (!strcasecmp (atom + 1, "pdate")) if (!strcasecmp (atom + 1, "pdate"))
return UPDATE; return UPDATE;
break; break;

View File

@ -3,7 +3,7 @@
Domain Name Service subroutines. */ Domain Name Service subroutines. */
/* /*
* Copyright (c) 2009-2012 by Internet Systems Consortium, Inc. ("ISC") * Copyright (c) 2009-2013 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 2004-2007 by Internet Systems Consortium, Inc. ("ISC") * Copyright (c) 2004-2007 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 2001-2003 by Internet Software Consortium * Copyright (c) 2001-2003 by Internet Software Consortium
* *
@ -30,10 +30,12 @@
* asynchronous DNS routines. * asynchronous DNS routines.
*/ */
/*! \file common/dns.c
*/
#include "dhcpd.h" #include "dhcpd.h"
#include "arpa/nameser.h" #include "arpa/nameser.h"
#include <isc/md5.h> #include <isc/md5.h>
#include <isc/sha2.h>
#include <dns/result.h> #include <dns/result.h>
/* /*
@ -823,45 +825,123 @@ void repudiate_zone (struct dns_zone **zone)
dns_zone_dereference (zone, MDL); dns_zone_dereference (zone, MDL);
} }
/* Have to use TXT records for now. */ /*!
#define T_DHCID T_TXT * \brief Create an id for a client
*
int get_dhcid (struct data_string *id, * This function is used to create an id for a client to use with DDNS
int type, const u_int8_t *data, unsigned len) * This version of the function is for the standard style, RFC 4701
*
* This function takes information from the type and data fields and
* mangles it into a dhcid string which it places in ddns_cb. It also
* sets a field in ddns_cb to specify the class that should be used
* when sending the dhcid, in this case it is a DHCID record so we use
* dns_rdatatype_dhcid
*
* The DHCID we construct is:
* 2 bytes - identifier type (see 4701 and IANA)
* 1 byte - digest type, currently only SHA256 (1)
* n bytes - digest, length depends on digest type, currently 32 for
* SHA256
*
* What we base the digest on is up to the calling code for an id type of
* 0 - 1 octet htype followed by hlen octets of chaddr from v4 client request
* 1 - data octets from a dhcpv4 client's client identifier option
* 2 - the client DUID from a v4 or v6 client's client id option
* This identifier is concatenated with the fqdn and the result is digested.
*/
int get_std_dhcid(dhcp_ddns_cb_t *ddns_cb,
int type,
const u_int8_t *identifier,
unsigned id_len)
{ {
struct data_string *id = &ddns_cb->dhcid;
isc_sha256_t sha256;
unsigned char buf[ISC_SHA256_DIGESTLENGTH];
unsigned char fwd_buf[256];
unsigned fwd_buflen = 0;
/* Types can only be 0..(2^16)-1. */
if (type < 0 || type > 65535)
return (0);
/* We need to convert the fwd name to wire representation */
if (MRns_name_pton((char *)ddns_cb->fwd_name.data, fwd_buf, 256) == -1)
return (0);
while(fwd_buf[fwd_buflen] != 0) {
fwd_buflen += fwd_buf[fwd_buflen] + 1;
}
fwd_buflen++;
if (!buffer_allocate(&id->buffer,
ISC_SHA256_DIGESTLENGTH + 2 + 1,
MDL))
return (0);
id->data = id->buffer->data;
/* The two first bytes contain the type identifier. */
putUShort(id->buffer->data, (unsigned)type);
/* The next is the digest type, SHA-256 is 1 */
putUChar(id->buffer->data + 2, 1u);
/* Computing the digest */
isc_sha256_init(&sha256);
isc_sha256_update(&sha256, identifier, id_len);
isc_sha256_update(&sha256, fwd_buf, fwd_buflen);
isc_sha256_final(buf, &sha256);
memcpy(id->buffer->data + 3, &buf, ISC_SHA256_DIGESTLENGTH);
id->len = ISC_SHA256_DIGESTLENGTH + 2 + 1;
return (1);
}
/*!
*
* \brief Create an id for a client
*
* This function is used to create an id for a client to use with DDNS
* This version of the function is for the interim style. It is retained
* to allow users to continue using the interim style but they should
* switch to the standard style (which uses get_std_dhcid) for better
* interoperability.
*
* This function takes information from the type and data fields and
* mangles it into a dhcid string which it places in ddns_cb. It also
* sets a field in ddns_cb to specify the class that should be used
* when sending the dhcid, in this case it is a txt record so we use
* dns_rdata_type_txt
*
* NOTE WELL: this function has issues with how it calculates the
* dhcid, they can't be changed now as that would break the records
* already in use.
*/
int get_int_dhcid (dhcp_ddns_cb_t *ddns_cb,
int type,
const u_int8_t *data,
unsigned len)
{
struct data_string *id = &ddns_cb->dhcid;
unsigned char buf[ISC_MD5_DIGESTLENGTH]; unsigned char buf[ISC_MD5_DIGESTLENGTH];
isc_md5_t md5; isc_md5_t md5;
int i; int i;
/* Types can only be 0..(2^16)-1. */ /* Types can only be 0..(2^16)-1. */
if (type < 0 || type > 65535) if (type < 0 || type > 65535)
return 0; return (0);
/* /*
* Hexadecimal MD5 digest plus two byte type, NUL, * Hexadecimal MD5 digest plus two byte type, NUL,
* and one byte for length for dns. * and one byte for length for dns.
*/ */
if (!buffer_allocate (&id -> buffer, if (!buffer_allocate(&id -> buffer,
(ISC_MD5_DIGESTLENGTH * 2) + 4, MDL)) (ISC_MD5_DIGESTLENGTH * 2) + 4, MDL))
return 0; return (0);
id -> data = id -> buffer -> data; id->data = id->buffer->data;
/* /*
* DHCP clients and servers should use the following forms of client
* identification, starting with the most preferable, and finishing
* with the least preferable. If the client does not send any of these
* forms of identification, the DHCP/DDNS interaction is not defined by
* this specification. The most preferable form of identification is
* the Globally Unique Identifier Option [TBD]. Next is the DHCP
* Client Identifier option. Last is the client's link-layer address,
* as conveyed in its DHCPREQUEST message. Implementors should note
* that the link-layer address cannot be used if there are no
* significant bytes in the chaddr field of the DHCP client's request,
* because this does not constitute a unique identifier.
* -- "Interaction between DHCP and DNS"
* <draft-ietf-dhc-dhcp-dns-12.txt>
* M. Stapp, Y. Rekhter
*
* We put the length into the first byte to turn * We put the length into the first byte to turn
* this into a dns text string. This avoid needing to * this into a dns text string. This avoid needing to
* copy the string to add the byte later. * copy the string to add the byte later.
@ -893,7 +973,18 @@ int get_dhcid (struct data_string *id,
id->buffer->data[id->len] = 0; id->buffer->data[id->len] = 0;
id->terminated = 1; id->terminated = 1;
return 1; return (1);
}
int get_dhcid(dhcp_ddns_cb_t *ddns_cb,
int type,
const u_int8_t *identifier,
unsigned id_len)
{
if (ddns_cb->dhcid_class == dns_rdatatype_dhcid)
return get_std_dhcid(ddns_cb, type, identifier, id_len);
else
return get_int_dhcid(ddns_cb, type, identifier, id_len);
} }
/* /*
@ -1015,12 +1106,12 @@ make_dns_dataset(dns_rdataclass_t dataclass,
* For the server the first step will have a request of: * For the server the first step will have a request of:
* The name is not in use * The name is not in use
* Add an A RR * Add an A RR
* Add a DHCID RR (currently txt) * Add a DHCID RR
* *
* For the client the first step will have a request of: * For the client the first step will have a request of:
* The A RR does not exist * The A RR does not exist
* Add an A RR * Add an A RR
* Add a DHCID RR (currently txt) * Add a DHCID RR
*/ */
static isc_result_t static isc_result_t
@ -1062,7 +1153,7 @@ ddns_modify_fwd_add1(dhcp_ddns_cb_t *ddns_cb,
dataspace++; dataspace++;
/* Add the DHCID RR */ /* Add the DHCID RR */
result = make_dns_dataset(dns_rdataclass_in, dns_rdatatype_txt, result = make_dns_dataset(dns_rdataclass_in, ddns_cb->dhcid_class,
dataspace, dataspace,
(unsigned char *)ddns_cb->dhcid.data, (unsigned char *)ddns_cb->dhcid.data,
ddns_cb->dhcid.len, ddns_cb->ttl); ddns_cb->dhcid.len, ddns_cb->ttl);
@ -1108,7 +1199,7 @@ ddns_modify_fwd_add2(dhcp_ddns_cb_t *ddns_cb,
dns_name_t *pname, dns_name_t *pname,
dns_name_t *uname) dns_name_t *uname)
{ {
isc_result_t result; isc_result_t result = ISC_R_SUCCESS;
/* /*
* If we are doing conflict resolution (unset) we use a prereq list. * If we are doing conflict resolution (unset) we use a prereq list.
@ -1117,7 +1208,7 @@ ddns_modify_fwd_add2(dhcp_ddns_cb_t *ddns_cb,
if ((ddns_cb->flags & DDNS_CONFLICT_OVERRIDE) == 0) { if ((ddns_cb->flags & DDNS_CONFLICT_OVERRIDE) == 0) {
/* Construct the prereq list */ /* Construct the prereq list */
/* The DHCID RR exists and matches the client identity */ /* The DHCID RR exists and matches the client identity */
result = make_dns_dataset(dns_rdataclass_in, dns_rdatatype_txt, result = make_dns_dataset(dns_rdataclass_in, ddns_cb->dhcid_class,
dataspace, dataspace,
(unsigned char *)ddns_cb->dhcid.data, (unsigned char *)ddns_cb->dhcid.data,
ddns_cb->dhcid.len, 0); ddns_cb->dhcid.len, 0);
@ -1130,7 +1221,7 @@ ddns_modify_fwd_add2(dhcp_ddns_cb_t *ddns_cb,
/* Start constructing the update list. /* Start constructing the update list.
* Conflict detection override: delete DHCID RRs */ * Conflict detection override: delete DHCID RRs */
result = make_dns_dataset(dns_rdataclass_any, result = make_dns_dataset(dns_rdataclass_any,
dns_rdatatype_txt, ddns_cb->dhcid_class,
dataspace, NULL, 0, 0); dataspace, NULL, 0, 0);
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
return(result); return(result);
@ -1139,7 +1230,7 @@ ddns_modify_fwd_add2(dhcp_ddns_cb_t *ddns_cb,
dataspace++; dataspace++;
/* Add current DHCID RR */ /* Add current DHCID RR */
result = make_dns_dataset(dns_rdataclass_in, dns_rdatatype_txt, result = make_dns_dataset(dns_rdataclass_in, ddns_cb->dhcid_class,
dataspace, dataspace,
(unsigned char *)ddns_cb->dhcid.data, (unsigned char *)ddns_cb->dhcid.data,
ddns_cb->dhcid.len, ddns_cb->ttl); ddns_cb->dhcid.len, ddns_cb->ttl);
@ -1201,11 +1292,11 @@ ddns_modify_fwd_rem1(dhcp_ddns_cb_t *ddns_cb,
dns_name_t *pname, dns_name_t *pname,
dns_name_t *uname) dns_name_t *uname)
{ {
isc_result_t result; isc_result_t result = ISC_R_SUCCESS;
/* Consruct the prereq list */ /* Consruct the prereq list */
/* The DHCID RR exists and matches the client identity */ /* The DHCID RR exists and matches the client identity */
result = make_dns_dataset(dns_rdataclass_in, dns_rdatatype_txt, result = make_dns_dataset(dns_rdataclass_in, ddns_cb->dhcid_class,
dataspace, dataspace,
(unsigned char *)ddns_cb->dhcid.data, (unsigned char *)ddns_cb->dhcid.data,
ddns_cb->dhcid.len, 0); ddns_cb->dhcid.len, 0);
@ -1271,7 +1362,7 @@ ddns_modify_fwd_rem2(dhcp_ddns_cb_t *ddns_cb,
/* Construct the update list */ /* Construct the update list */
/* Delete DHCID RR */ /* Delete DHCID RR */
result = make_dns_dataset(dns_rdataclass_none, dns_rdatatype_txt, result = make_dns_dataset(dns_rdataclass_none, ddns_cb->dhcid_class,
dataspace, dataspace,
(unsigned char *)ddns_cb->dhcid.data, (unsigned char *)ddns_cb->dhcid.data,
ddns_cb->dhcid.len, 0); ddns_cb->dhcid.len, 0);

View File

@ -3514,42 +3514,7 @@ int parse_numeric_expression (expr, cfile, lose)
} }
return 1; return 1;
} }
#if defined (NSUPDATE_OLD)
/*
* dns-expression :==
* UPDATE LPAREN ns-class COMMA ns-type COMMA data-expression COMMA
* data-expression COMMA numeric-expression RPAREN
* DELETE LPAREN ns-class COMMA ns-type COMMA data-expression COMMA
* data-expression RPAREN
* EXISTS LPAREN ns-class COMMA ns-type COMMA data-expression COMMA
* data-expression RPAREN
* NOT EXISTS LPAREN ns-class COMMA ns-type COMMA data-expression COMMA
* data-expression RPAREN
* ns-class :== IN | CHAOS | HS | NUMBER
* ns-type :== A | PTR | MX | TXT | NUMBER
*/
int parse_dns_expression (expr, cfile, lose)
struct expression **expr;
struct parse *cfile;
int *lose;
{
/* Parse an expression... */
if (!parse_expression (expr, cfile, lose, context_dns,
(struct expression **)0, expr_none))
return 0;
if (!is_dns_expression (*expr) &&
(*expr) -> op != expr_variable_reference &&
(*expr) -> op != expr_funcall) {
expression_dereference (expr, MDL);
parse_warn (cfile, "Expecting a dns update subexpression.");
*lose = 1;
return 0;
}
return 1;
}
#endif /* NSUPDATE_OLD */
/* Parse a subexpression that does not contain a binary operator. */ /* Parse a subexpression that does not contain a binary operator. */
int parse_non_binary (expr, cfile, lose, context) int parse_non_binary (expr, cfile, lose, context)
@ -3564,11 +3529,6 @@ int parse_non_binary (expr, cfile, lose, context)
struct expression *nexp, **ep; struct expression *nexp, **ep;
int known; int known;
char *cptr; char *cptr;
#if defined (NSUPDATE_OLD)
enum expr_op opcode;
const char *s;
unsigned long u;
#endif
isc_result_t status; isc_result_t status;
unsigned len; unsigned len;
@ -3600,17 +3560,11 @@ int parse_non_binary (expr, cfile, lose, context)
break; break;
case TOKEN_NOT: case TOKEN_NOT:
skip_token(&val, (unsigned *)0, cfile); skip_token(&val, NULL, cfile);
#if defined(NSUPDATE_OLD)
if (context == context_dns) {
token = peek_token (&val, (unsigned *)0, cfile);
goto not_exists;
}
#endif
if (!expression_allocate (expr, MDL)) if (!expression_allocate (expr, MDL))
log_fatal ("can't allocate expression"); log_fatal ("can't allocate expression");
(*expr) -> op = expr_not; (*expr)->op = expr_not;
if (!parse_non_binary (&(*expr) -> data.not, if (!parse_non_binary (&(*expr)->data.not,
cfile, lose, context_boolean)) { cfile, lose, context_boolean)) {
if (!*lose) { if (!*lose) {
parse_warn (cfile, "expression expected"); parse_warn (cfile, "expression expected");
@ -3618,7 +3572,7 @@ int parse_non_binary (expr, cfile, lose, context)
} }
*lose = 1; *lose = 1;
expression_dereference (expr, MDL); expression_dereference (expr, MDL);
return 0; return (0);
} }
if (!is_boolean_expression ((*expr) -> data.not)) { if (!is_boolean_expression ((*expr) -> data.not)) {
*lose = 1; *lose = 1;
@ -3650,14 +3604,10 @@ int parse_non_binary (expr, cfile, lose, context)
break; break;
case EXISTS: case EXISTS:
#if defined(NSUPDATE_OLD) skip_token(&val, NULL, cfile);
if (context == context_dns)
goto ns_exists;
#endif
skip_token(&val, (unsigned *)0, cfile);
if (!expression_allocate (expr, MDL)) if (!expression_allocate (expr, MDL))
log_fatal ("can't allocate expression"); log_fatal ("can't allocate expression");
(*expr) -> op = expr_exists; (*expr)->op = expr_exists;
known = 0; known = 0;
/* Pass reference directly to expression structure. */ /* Pass reference directly to expression structure. */
status = parse_option_name(cfile, 0, &known, status = parse_option_name(cfile, 0, &known,
@ -3666,7 +3616,7 @@ int parse_non_binary (expr, cfile, lose, context)
(*expr)->data.option == NULL) { (*expr)->data.option == NULL) {
*lose = 1; *lose = 1;
expression_dereference (expr, MDL); expression_dereference (expr, MDL);
return 0; return (0);
} }
break; break;
@ -3967,285 +3917,6 @@ int parse_non_binary (expr, cfile, lose, context)
goto norparen; goto norparen;
break; break;
#if defined(NSUPDATE_OLD)
/* dns-update and dns-delete are present for historical
purposes, but are deprecated in favor of ns-update
in combination with update, delete, exists and not
exists. */
case DNS_UPDATE:
case DNS_DELETE:
#if !defined (NSUPDATE)
parse_warn (cfile,
"Please rebuild dhcpd with --with-nsupdate.");
#endif
skip_token(&val, (unsigned *)0, cfile);
if (token == DNS_UPDATE)
opcode = expr_ns_add;
else
opcode = expr_ns_delete;
token = next_token (&val, (unsigned *)0, cfile);
if (token != LPAREN)
goto nolparen;
token = next_token (&val, (unsigned *)0, cfile);
if (token != STRING) {
parse_warn (cfile,
"parse_expression: expecting string.");
badnsupdate:
skip_to_semi (cfile);
*lose = 1;
return 0;
}
if (!strcasecmp (val, "a"))
u = T_A;
else if (!strcasecmp (val, "aaaa"))
u = T_AAAA;
else if (!strcasecmp (val, "ptr"))
u = T_PTR;
else if (!strcasecmp (val, "mx"))
u = T_MX;
else if (!strcasecmp (val, "cname"))
u = T_CNAME;
else if (!strcasecmp (val, "TXT"))
u = T_TXT;
else {
parse_warn (cfile, "unexpected rrtype: %s", val);
goto badnsupdate;
}
s = (opcode == expr_ns_add
? "old-dns-update"
: "old-dns-delete");
cptr = dmalloc (strlen (s) + 1, MDL);
if (!cptr)
log_fatal ("can't allocate name for %s", s);
strcpy (cptr, s);
if (!expression_allocate (expr, MDL))
log_fatal ("can't allocate expression");
(*expr) -> op = expr_funcall;
(*expr) -> data.funcall.name = cptr;
/* Fake up a function call. */
ep = &(*expr) -> data.funcall.arglist;
if (!expression_allocate (ep, MDL))
log_fatal ("can't allocate expression");
(*ep) -> op = expr_arg;
if (!make_const_int (&(*ep) -> data.arg.val, u))
log_fatal ("can't allocate rrtype value.");
token = next_token (&val, (unsigned *)0, cfile);
if (token != COMMA)
goto nocomma;
ep = &((*ep) -> data.arg.next);
if (!expression_allocate (ep, MDL))
log_fatal ("can't allocate expression");
(*ep) -> op = expr_arg;
if (!(parse_data_expression (&(*ep) -> data.arg.val,
cfile, lose)))
goto nodata;
token = next_token (&val, (unsigned *)0, cfile);
if (token != COMMA)
goto nocomma;
ep = &((*ep) -> data.arg.next);
if (!expression_allocate (ep, MDL))
log_fatal ("can't allocate expression");
(*ep) -> op = expr_arg;
if (!(parse_data_expression (&(*ep) -> data.arg.val,
cfile, lose)))
goto nodata;
if (opcode == expr_ns_add) {
token = next_token (&val, (unsigned *)0, cfile);
if (token != COMMA)
goto nocomma;
ep = &((*ep) -> data.arg.next);
if (!expression_allocate (ep, MDL))
log_fatal ("can't allocate expression");
(*ep) -> op = expr_arg;
if (!(parse_numeric_expression (&(*ep) -> data.arg.val,
cfile, lose))) {
parse_warn (cfile,
"expecting numeric expression.");
goto badnsupdate;
}
}
token = next_token (&val, (unsigned *)0, cfile);
if (token != RPAREN)
goto norparen;
break;
case NS_UPDATE:
#if !defined (NSUPDATE)
parse_warn (cfile,
"Please rebuild dhcpd with --with-nsupdate.");
#endif
skip_token(&val, (unsigned *)0, cfile);
if (!expression_allocate (expr, MDL))
log_fatal ("can't allocate expression");
token = next_token (&val, (unsigned *)0, cfile);
if (token != LPAREN)
goto nolparen;
nexp = *expr;
do {
nexp -> op = expr_dns_transaction;
if (!(parse_dns_expression
(&nexp -> data.dns_transaction.car,
cfile, lose)))
{
if (!*lose)
parse_warn
(cfile,
"expecting dns expression.");
expression_dereference (expr, MDL);
*lose = 1;
return 0;
}
token = next_token (&val, (unsigned *)0, cfile);
if (token == COMMA) {
if (!(expression_allocate
(&nexp -> data.dns_transaction.cdr,
MDL)))
log_fatal
("can't allocate expression");
nexp = nexp -> data.dns_transaction.cdr;
}
} while (token == COMMA);
if (token != RPAREN)
goto norparen;
break;
/* NOT EXISTS is special cased above... */
not_exists:
token = peek_token (&val, (unsigned *)0, cfile);
if (token != EXISTS) {
parse_warn (cfile, "expecting DNS prerequisite.");
*lose = 1;
return 0;
}
opcode = expr_ns_not_exists;
goto nsupdatecode;
case TOKEN_ADD:
opcode = expr_ns_add;
goto nsupdatecode;
case TOKEN_DELETE:
opcode = expr_ns_delete;
goto nsupdatecode;
ns_exists:
opcode = expr_ns_exists;
nsupdatecode:
token = next_token (&val, (unsigned *)0, cfile);
#if !defined (NSUPDATE)
parse_warn (cfile,
"Please rebuild dhcpd with --with-nsupdate.");
#endif
if (!expression_allocate (expr, MDL))
log_fatal ("can't allocate expression");
(*expr) -> op = opcode;
token = next_token (&val, (unsigned *)0, cfile);
if (token != LPAREN)
goto nolparen;
token = next_token (&val, (unsigned *)0, cfile);
if (!is_identifier (token) && token != NUMBER) {
parse_warn (cfile, "expecting identifier or number.");
badnsop:
expression_dereference (expr, MDL);
skip_to_semi (cfile);
*lose = 1;
return 0;
}
if (token == NUMBER)
(*expr) -> data.ns_add.rrclass = atoi (val);
else if (!strcasecmp (val, "in"))
(*expr) -> data.ns_add.rrclass = C_IN;
else if (!strcasecmp (val, "chaos"))
(*expr) -> data.ns_add.rrclass = C_CHAOS;
else if (!strcasecmp (val, "hs"))
(*expr) -> data.ns_add.rrclass = C_HS;
else {
parse_warn (cfile, "unexpected rrclass: %s", val);
goto badnsop;
}
token = next_token (&val, (unsigned *)0, cfile);
if (token != COMMA)
goto nocomma;
token = next_token (&val, (unsigned *)0, cfile);
if (!is_identifier (token) && token != NUMBER) {
parse_warn (cfile, "expecting identifier or number.");
goto badnsop;
}
if (token == NUMBER)
(*expr) -> data.ns_add.rrtype = atoi (val);
else if (!strcasecmp (val, "a"))
(*expr) -> data.ns_add.rrtype = T_A;
else if (!strcasecmp (val, "aaaa"))
(*expr) -> data.ns_add.rrtype = T_AAAA;
else if (!strcasecmp (val, "ptr"))
(*expr) -> data.ns_add.rrtype = T_PTR;
else if (!strcasecmp (val, "mx"))
(*expr) -> data.ns_add.rrtype = T_MX;
else if (!strcasecmp (val, "cname"))
(*expr) -> data.ns_add.rrtype = T_CNAME;
else if (!strcasecmp (val, "TXT"))
(*expr) -> data.ns_add.rrtype = T_TXT;
else {
parse_warn (cfile, "unexpected rrtype: %s", val);
goto badnsop;
}
token = next_token (&val, (unsigned *)0, cfile);
if (token != COMMA)
goto nocomma;
if (!(parse_data_expression
(&(*expr) -> data.ns_add.rrname, cfile, lose)))
goto nodata;
token = next_token (&val, (unsigned *)0, cfile);
if (token != COMMA)
goto nocomma;
if (!(parse_data_expression
(&(*expr) -> data.ns_add.rrdata, cfile, lose)))
goto nodata;
if (opcode == expr_ns_add) {
token = next_token (&val, (unsigned *)0, cfile);
if (token != COMMA)
goto nocomma;
if (!(parse_numeric_expression
(&(*expr) -> data.ns_add.ttl, cfile,
lose))) {
if (!*lose)
parse_warn (cfile,
"expecting numeric expression.");
goto badnsupdate;
}
}
token = next_token (&val, (unsigned *)0, cfile);
if (token != RPAREN)
goto norparen;
break;
#endif /* NSUPDATE_OLD */
case OPTION: case OPTION:
case CONFIG_OPTION: case CONFIG_OPTION:
if (!expression_allocate (expr, MDL)) if (!expression_allocate (expr, MDL))
@ -4322,43 +3993,6 @@ int parse_non_binary (expr, cfile, lose, context)
(*expr) -> op = expr_host_decl_name; (*expr) -> op = expr_host_decl_name;
break; break;
#if defined(NSUPDATE_OLD)
case UPDATED_DNS_RR:
skip_token(&val, (unsigned *)0, cfile);
token = next_token (&val, (unsigned *)0, cfile);
if (token != LPAREN)
goto nolparen;
token = next_token (&val, (unsigned *)0, cfile);
if (token != STRING) {
parse_warn (cfile, "expecting string.");
bad_rrtype:
*lose = 1;
return 0;
}
if (!strcasecmp (val, "a"))
s = "ddns-fwd-name";
else if (!strcasecmp (val, "ptr"))
s = "ddns-rev-name";
else {
parse_warn (cfile, "invalid DNS rrtype: %s", val);
goto bad_rrtype;
}
token = next_token (&val, (unsigned *)0, cfile);
if (token != RPAREN)
goto norparen;
if (!expression_allocate (expr, MDL))
log_fatal ("can't allocate expression");
(*expr) -> op = expr_variable_reference;
(*expr) -> data.variable =
dmalloc (strlen (s) + 1, MDL);
if (!(*expr) -> data.variable)
log_fatal ("can't allocate variable name.");
strcpy ((*expr) -> data.variable, s);
break;
#endif /* NSUPDATE_OLD */
case PACKET: case PACKET:
skip_token(&val, (unsigned *)0, cfile); skip_token(&val, (unsigned *)0, cfile);
if (!expression_allocate (expr, MDL)) if (!expression_allocate (expr, MDL))

View File

@ -8,7 +8,7 @@ ATF_TESTS =
if HAVE_ATF if HAVE_ATF
ATF_TESTS += alloc_unittest ATF_TESTS += alloc_unittest dns_unittest
alloc_unittest_SOURCES = test_alloc.c $(top_srcdir)/tests/t_api_dhcp.c alloc_unittest_SOURCES = test_alloc.c $(top_srcdir)/tests/t_api_dhcp.c
alloc_unittest_LDADD = $(ATF_LDFLAGS) alloc_unittest_LDADD = $(ATF_LDFLAGS)
@ -16,6 +16,12 @@ alloc_unittest_LDADD += ../libdhcp.a \
../../omapip/libomapi.a ../../bind/lib/libdns.a \ ../../omapip/libomapi.a ../../bind/lib/libdns.a \
../../bind/lib/libisc.a ../../bind/lib/libisc.a
dns_unittest_SOURCES = dns_unittest.c $(top_srcdir)/tests/t_api_dhcp.c
dns_unittest_LDADD = $(ATF_LDFLAGS)
dns_unittest_LDADD += ../libdhcp.a \
../../omapip/libomapi.a ../../bind/lib/libdns.a \
../../bind/lib/libisc.a
check: $(ATF_TESTS) check: $(ATF_TESTS)
atf-run | atf-report atf-run | atf-report

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.13.1 from Makefile.am. # Makefile.in generated by automake 1.14 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2012 Free Software Foundation, Inc. # Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -14,23 +14,51 @@
@SET_MAKE@ @SET_MAKE@
VPATH = @srcdir@ VPATH = @srcdir@
am__make_dryrun = \ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
{ \ am__make_running_with_option = \
am__dry=no; \ case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \ case $$MAKEFLAGS in \
*\\[\ \ ]*) \ *\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ bs=\\; \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
*) \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \ esac; \
test $$am__dry = yes; \ fi; \
} skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
@ -49,7 +77,7 @@ PRE_UNINSTALL = :
POST_UNINSTALL = : POST_UNINSTALL = :
build_triplet = @build@ build_triplet = @build@
host_triplet = @host@ host_triplet = @host@
@HAVE_ATF_TRUE@am__append_1 = alloc_unittest @HAVE_ATF_TRUE@am__append_1 = alloc_unittest dns_unittest
check_PROGRAMS = $(am__EXEEXT_2) check_PROGRAMS = $(am__EXEEXT_2)
subdir = common/tests subdir = common/tests
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
@ -62,7 +90,8 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/includes/config.h CONFIG_HEADER = $(top_builddir)/includes/config.h
CONFIG_CLEAN_FILES = CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES = CONFIG_CLEAN_VPATH_FILES =
@HAVE_ATF_TRUE@am__EXEEXT_1 = alloc_unittest$(EXEEXT) @HAVE_ATF_TRUE@am__EXEEXT_1 = alloc_unittest$(EXEEXT) \
@HAVE_ATF_TRUE@ dns_unittest$(EXEEXT)
am__EXEEXT_2 = $(am__EXEEXT_1) am__EXEEXT_2 = $(am__EXEEXT_1)
am__alloc_unittest_SOURCES_DIST = test_alloc.c \ am__alloc_unittest_SOURCES_DIST = test_alloc.c \
$(top_srcdir)/tests/t_api_dhcp.c $(top_srcdir)/tests/t_api_dhcp.c
@ -73,6 +102,14 @@ am__DEPENDENCIES_1 =
@HAVE_ATF_TRUE@alloc_unittest_DEPENDENCIES = $(am__DEPENDENCIES_1) \ @HAVE_ATF_TRUE@alloc_unittest_DEPENDENCIES = $(am__DEPENDENCIES_1) \
@HAVE_ATF_TRUE@ ../libdhcp.a ../../omapip/libomapi.a \ @HAVE_ATF_TRUE@ ../libdhcp.a ../../omapip/libomapi.a \
@HAVE_ATF_TRUE@ ../../bind/lib/libdns.a ../../bind/lib/libisc.a @HAVE_ATF_TRUE@ ../../bind/lib/libdns.a ../../bind/lib/libisc.a
am__dns_unittest_SOURCES_DIST = dns_unittest.c \
$(top_srcdir)/tests/t_api_dhcp.c
@HAVE_ATF_TRUE@am_dns_unittest_OBJECTS = dns_unittest.$(OBJEXT) \
@HAVE_ATF_TRUE@ t_api_dhcp.$(OBJEXT)
dns_unittest_OBJECTS = $(am_dns_unittest_OBJECTS)
@HAVE_ATF_TRUE@dns_unittest_DEPENDENCIES = $(am__DEPENDENCIES_1) \
@HAVE_ATF_TRUE@ ../libdhcp.a ../../omapip/libomapi.a \
@HAVE_ATF_TRUE@ ../../bind/lib/libdns.a ../../bind/lib/libisc.a
AM_V_P = $(am__v_P_@AM_V@) AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false am__v_P_0 = false
@ -105,8 +142,9 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 = am__v_CCLD_1 =
SOURCES = $(alloc_unittest_SOURCES) SOURCES = $(alloc_unittest_SOURCES) $(dns_unittest_SOURCES)
DIST_SOURCES = $(am__alloc_unittest_SOURCES_DIST) DIST_SOURCES = $(am__alloc_unittest_SOURCES_DIST) \
$(am__dns_unittest_SOURCES_DIST)
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
ctags-recursive dvi-recursive html-recursive info-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \
install-data-recursive install-dvi-recursive \ install-data-recursive install-dvi-recursive \
@ -284,6 +322,10 @@ ATF_TESTS = $(am__append_1)
@HAVE_ATF_TRUE@alloc_unittest_LDADD = $(ATF_LDFLAGS) ../libdhcp.a \ @HAVE_ATF_TRUE@alloc_unittest_LDADD = $(ATF_LDFLAGS) ../libdhcp.a \
@HAVE_ATF_TRUE@ ../../omapip/libomapi.a ../../bind/lib/libdns.a \ @HAVE_ATF_TRUE@ ../../omapip/libomapi.a ../../bind/lib/libdns.a \
@HAVE_ATF_TRUE@ ../../bind/lib/libisc.a @HAVE_ATF_TRUE@ ../../bind/lib/libisc.a
@HAVE_ATF_TRUE@dns_unittest_SOURCES = dns_unittest.c $(top_srcdir)/tests/t_api_dhcp.c
@HAVE_ATF_TRUE@dns_unittest_LDADD = $(ATF_LDFLAGS) ../libdhcp.a \
@HAVE_ATF_TRUE@ ../../omapip/libomapi.a ../../bind/lib/libdns.a \
@HAVE_ATF_TRUE@ ../../bind/lib/libisc.a
all: all-recursive all: all-recursive
.SUFFIXES: .SUFFIXES:
@ -321,16 +363,22 @@ $(am__aclocal_m4_deps):
clean-checkPROGRAMS: clean-checkPROGRAMS:
-test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
alloc_unittest$(EXEEXT): $(alloc_unittest_OBJECTS) $(alloc_unittest_DEPENDENCIES) $(EXTRA_alloc_unittest_DEPENDENCIES) alloc_unittest$(EXEEXT): $(alloc_unittest_OBJECTS) $(alloc_unittest_DEPENDENCIES) $(EXTRA_alloc_unittest_DEPENDENCIES)
@rm -f alloc_unittest$(EXEEXT) @rm -f alloc_unittest$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(alloc_unittest_OBJECTS) $(alloc_unittest_LDADD) $(LIBS) $(AM_V_CCLD)$(LINK) $(alloc_unittest_OBJECTS) $(alloc_unittest_LDADD) $(LIBS)
dns_unittest$(EXEEXT): $(dns_unittest_OBJECTS) $(dns_unittest_DEPENDENCIES) $(EXTRA_dns_unittest_DEPENDENCIES)
@rm -f dns_unittest$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(dns_unittest_OBJECTS) $(dns_unittest_LDADD) $(LIBS)
mostlyclean-compile: mostlyclean-compile:
-rm -f *.$(OBJEXT) -rm -f *.$(OBJEXT)
distclean-compile: distclean-compile:
-rm -f *.tab.c -rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dns_unittest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_api_dhcp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_api_dhcp.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_alloc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_alloc.Po@am__quote@
@ -339,14 +387,14 @@ distclean-compile:
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj: .c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
t_api_dhcp.o: $(top_srcdir)/tests/t_api_dhcp.c t_api_dhcp.o: $(top_srcdir)/tests/t_api_dhcp.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t_api_dhcp.o -MD -MP -MF $(DEPDIR)/t_api_dhcp.Tpo -c -o t_api_dhcp.o `test -f '$(top_srcdir)/tests/t_api_dhcp.c' || echo '$(srcdir)/'`$(top_srcdir)/tests/t_api_dhcp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t_api_dhcp.o -MD -MP -MF $(DEPDIR)/t_api_dhcp.Tpo -c -o t_api_dhcp.o `test -f '$(top_srcdir)/tests/t_api_dhcp.c' || echo '$(srcdir)/'`$(top_srcdir)/tests/t_api_dhcp.c
@ -369,13 +417,12 @@ t_api_dhcp.obj: $(top_srcdir)/tests/t_api_dhcp.c
# (which will cause the Makefiles to be regenerated when you run 'make'); # (which will cause the Makefiles to be regenerated when you run 'make');
# (2) otherwise, pass the desired values on the 'make' command line. # (2) otherwise, pass the desired values on the 'make' command line.
$(am__recursive_targets): $(am__recursive_targets):
@fail= failcom='exit 1'; \ @fail=; \
for f in x $$MAKEFLAGS; do \ if $(am__make_keepgoing); then \
case $$f in \ failcom='fail=yes'; \
*=* | --[!k]*);; \ else \
*k*) failcom='fail=yes';; \ failcom='exit 1'; \
esac; \ fi; \
done; \
dot_seen=no; \ dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \ target=`echo $@ | sed s/-recursive//`; \
case "$@" in \ case "$@" in \

175
common/tests/dns_unittest.c Normal file
View File

@ -0,0 +1,175 @@
/*
* Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
* OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
#include <config.h>
#include <atf-c.h>
#include "dhcpd.h"
/*
* This file provides unit tests for the dns and ddns code.
* Currently this is limited to verifying the dhcid code is
* working properly. In time we may be able to expand the
* tests to cover other areas.
*
* The tests for the interim txt records comapre to previous
* internally generated values.
*
* The tests for the standard dhcid records compare to values
* from rfc 4701
*/
char *name_1 = "chi6.example.com";
u_int8_t clid_1[] = {0x00, 0x01, 0x00, 0x06, 0x41, 0x2d, 0xf1, 0x66, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
u_int8_t std_result_1[] = {0x00, 0x02, 0x01, 0x63, 0x6f, 0xc0, 0xb8, 0x27, 0x1c,
0x82, 0x82, 0x5b, 0xb1, 0xac, 0x5c, 0x41, 0xcf, 0x53,
0x51, 0xaa, 0x69, 0xb4, 0xfe, 0xbd, 0x94, 0xe8, 0xf1,
0x7c, 0xdb, 0x95, 0x00, 0x0d, 0xa4, 0x8c, 0x40};
char *int_result_1 = "\"02abf8cd3753dc1847be40858becd77865";
char *name_2 = "chi.example.com";
u_int8_t clid_2[] = {0x01, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c};
u_int8_t std_result_2[] = {0x00, 0x01, 0x01, 0x39, 0x20, 0xfe, 0x5d, 0x1d, 0xce,
0xb3, 0xfd, 0x0b, 0xa3, 0x37, 0x97, 0x56, 0xa7, 0x0d,
0x73, 0xb1, 0x70, 0x09, 0xf4, 0x1d, 0x58, 0xbd, 0xdb,
0xfc, 0xd6, 0xa2, 0x50, 0x39, 0x56, 0xd8, 0xda};
char *int_result_2 = "\"31934ffa9344a3ab86c380505a671e5113";
char *name_3 = "client.example.com";
u_int8_t clid_3[] = {0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
u_int8_t std_result_3[] = {0x00, 0x00, 0x01, 0xc4, 0xb9, 0xa5, 0xb2, 0x49, 0x65,
0x13, 0x43, 0x15, 0x8d, 0xde, 0x7b, 0xcc, 0x77, 0x16,
0x98, 0x41, 0xf7, 0xa4, 0x24, 0x3a, 0x57, 0x2b, 0x5c,
0x28, 0x3f, 0xff, 0xed, 0xeb, 0x3f, 0x75, 0xe6};
char *int_result_3 = "\"0046b6cacea62dc1d4567b068175d1f808";
void call_get_std_dhcid(int test, int type,
u_int8_t *clid, unsigned clidlen,
char *name, unsigned namelen,
u_int8_t *dhcid, unsigned dhcid_len)
{
dhcp_ddns_cb_t ddns_cb;
struct data_string *id;
memset(&ddns_cb, 0, sizeof(ddns_cb));
ddns_cb.dhcid_class = dns_rdatatype_dhcid;;
id = &ddns_cb.fwd_name;
if (!buffer_allocate(&id->buffer, namelen, MDL))
atf_tc_fail("Unable to allocate buffer for std test %d", test);
id->data = id->buffer->data;
memcpy(id->buffer->data, name, namelen);
id->len = namelen;
if (get_dhcid(&ddns_cb, type, clid, clidlen) != 1) {
atf_tc_fail("Unable to get std dhcid for %d", test);
} else if (ddns_cb.dhcid_class != dns_rdatatype_dhcid) {
atf_tc_fail("Wrong class for std dhcid for %d", test);
} else if (ddns_cb.dhcid.len != dhcid_len) {
atf_tc_fail("Wrong length for std dhcid for %d", test);
} else if (memcmp(ddns_cb.dhcid.data, dhcid, dhcid_len) != 0) {
atf_tc_fail("Wrong digest for std dhcid for %d", test);
}
/* clean up */
data_string_forget(&ddns_cb.dhcid, MDL);
return;
}
ATF_TC(standard_dhcid);
ATF_TC_HEAD(standard_dhcid, tc)
{
atf_tc_set_md_var(tc, "descr", "Verify standard dhcid construction.");
}
ATF_TC_BODY(standard_dhcid, tc)
{
call_get_std_dhcid(1, 2, clid_1, sizeof(clid_1),
name_1, strlen(name_1),
std_result_1, 35);
call_get_std_dhcid(2, 1, clid_2, sizeof(clid_2),
name_2, strlen(name_2),
std_result_2, 35);
call_get_std_dhcid(3, 0, clid_3, sizeof(clid_3),
name_3, strlen(name_3),
std_result_3, 35);
}
void call_get_int_dhcid(int test, int type,
u_int8_t *clid, unsigned clidlen,
char *dhcid, unsigned dhcid_len)
{
dhcp_ddns_cb_t ddns_cb;
memset(&ddns_cb, 0, sizeof(ddns_cb));
ddns_cb.dhcid_class = dns_rdatatype_txt;;
if (get_dhcid(&ddns_cb, type, clid, clidlen) != 1) {
atf_tc_fail("Unable to get txt dhcid for %d", test);
} else if (ddns_cb.dhcid_class != dns_rdatatype_txt) {
atf_tc_fail("Wrong class for txt dhcid for %d", test);
} else if (ddns_cb.dhcid.len != dhcid_len) {
atf_tc_fail("Wrong length for txt dhcid for %d", test);
} else if (memcmp(ddns_cb.dhcid.data, dhcid, dhcid_len) != 0) {
atf_tc_fail("Wrong digest for txt dhcid for %d", test);
}
/* clean up */
data_string_forget(&ddns_cb.dhcid, MDL);
return;
}
ATF_TC(interim_dhcid);
ATF_TC_HEAD(interim_dhcid, tc)
{
atf_tc_set_md_var(tc, "descr", "Verify interim dhcid construction.");
}
ATF_TC_BODY(interim_dhcid, tc)
{
call_get_int_dhcid(1, 2, clid_1, sizeof(clid_1),
int_result_1, 35);
call_get_int_dhcid(2, DHO_DHCP_CLIENT_IDENTIFIER,
clid_2, sizeof(clid_2),
int_result_2, 35);
call_get_int_dhcid(3, 0, clid_3, sizeof(clid_3),
int_result_3, 35);
}
/* This macro defines main() method that will call specified
test cases. tp and simple_test_case names can be whatever you want
as long as it is a valid variable identifier. */
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, interim_dhcid);
ATF_TP_ADD_TC(tp, standard_dhcid);
return (atf_no_error());
}

View File

@ -644,15 +644,6 @@ int evaluate_expression (result, packet, lease, client_state,
status = (evaluate_data_expression status = (evaluate_data_expression
(&bv -> value.data, packet, lease, client_state, (&bv -> value.data, packet, lease, client_state,
in_options, cfg_options, scope, expr, MDL)); in_options, cfg_options, scope, expr, MDL));
#if defined (NSUPDATE_OLD)
} else if (is_dns_expression (expr)) {
if (!binding_value_allocate (&bv, MDL))
return 0;
bv -> type = binding_dns;
status = (evaluate_dns_expression
(&bv -> value.dns, packet, lease, client_state,
in_options, cfg_options, scope, expr));
#endif
} else { } else {
log_error ("%s: invalid expression type: %d", log_error ("%s: invalid expression type: %d",
"evaluate_expression", expr -> op); "evaluate_expression", expr -> op);
@ -698,19 +689,6 @@ int binding_value_dereference (struct binding_value **v,
if (bv -> value.data.buffer) if (bv -> value.data.buffer)
data_string_forget (&bv -> value.data, file, line); data_string_forget (&bv -> value.data, file, line);
break; break;
case binding_dns:
#if defined (NSUPDATE_OLD)
if (bv -> value.dns) {
if (bv -> value.dns -> r_data) {
dfree (bv -> value.dns -> r_data_ephem, MDL);
bv -> value.dns -> r_data = (unsigned char *)0;
bv -> value.dns -> r_data_ephem =
(unsigned char *)0;
}
minires_freeupdrec (bv -> value.dns);
}
break;
#endif
default: default:
log_error ("%s(%d): invalid binding type: %d", log_error ("%s(%d): invalid binding type: %d",
file, line, bv -> type); file, line, bv -> type);
@ -720,270 +698,6 @@ int binding_value_dereference (struct binding_value **v,
return 1; return 1;
} }
#if defined (NSUPDATE_OLD)
int evaluate_dns_expression (result, packet, lease, client_state, in_options,
cfg_options, scope, expr)
ns_updrec **result;
struct packet *packet;
struct lease *lease;
struct client_state *client_state;
struct option_state *in_options;
struct option_state *cfg_options;
struct binding_scope **scope;
struct expression *expr;
{
unsigned long ttl = 0;
char *tname;
struct data_string name, data;
int r0, r1, r2;
if (!result || *result) {
log_error ("evaluate_dns_expression called with non-null %s",
"result pointer");
#if defined (POINTER_DEBUG)
abort ();
#else
return 0;
#endif
}
switch (expr -> op) {
#if defined (NSUPDATE)
case expr_ns_add:
r0 = evaluate_numeric_expression (&ttl, packet, lease,
client_state,
in_options, cfg_options,
scope,
expr -> data.ns_add.ttl);
goto nsfinish;
case expr_ns_exists:
ttl = 1;
case expr_ns_delete:
case expr_ns_not_exists:
r0 = 1;
nsfinish:
memset (&name, 0, sizeof name);
r1 = evaluate_data_expression (&name, packet, lease,
client_state,
in_options, cfg_options, scope,
expr -> data.ns_add.rrname,
MDL);
if (r1) {
/* The result of the evaluation may or may not
be NUL-terminated, but we need it
terminated for sure, so we have to allocate
a buffer and terminate it. */
tname = dmalloc (name.len + 1, MDL);
if (!tname) {
r2 = 0;
r1 = 0;
data_string_forget (&name, MDL);
} else {
memcpy (tname, name.data, name.len);
tname [name.len] = 0;
memset (&data, 0, sizeof data);
r2 = evaluate_data_expression
(&data, packet, lease, client_state,
in_options, cfg_options, scope,
expr -> data.ns_add.rrdata, MDL);
}
} else {
r2 = 0;
tname = NULL;
}
if (r0 && r1 && (r2 || expr -> op != expr_ns_add)) {
*result = minires_mkupdrec (((expr -> op == expr_ns_add ||
expr -> op == expr_ns_delete)
? S_UPDATE : S_PREREQ),
tname,
expr -> data.ns_add.rrclass,
expr -> data.ns_add.rrtype,
ttl);
if (!*result) {
ngood:
if (r2) {
data_string_forget (&data, MDL);
r2 = 0;
}
} else {
if (data.len) {
/* As a special case, if we get exactly
four bytes of data, it's an IP address
represented as a 32-bit quantity, which
is actually what we *should* be getting
here. Because res_mkupdrec is currently
broken and expects a dotted quad, convert
it. This should be fixed when the new
resolver is merged. */
if (data.len == 4) {
(*result) -> r_data_ephem =
dmalloc (16, MDL);
if (!(*result) -> r_data_ephem)
goto dpngood;
(*result) -> r_data =
(*result) -> r_data_ephem;
/*%Audit% 16 bytes max. %2004.06.17,Safe%*/
sprintf ((char *)(*result) -> r_data_ephem,
"%u.%u.%u.%u",
data.data [0] & 0xff,
data.data [1] & 0xff,
data.data [2] & 0xff,
data.data [3] & 0xff);
(*result) -> r_size =
strlen ((const char *)
(*result) -> r_data);
} else {
(*result) -> r_size = data.len;
(*result) -> r_data_ephem =
dmalloc (data.len, MDL);
if (!(*result) -> r_data_ephem) {
dpngood: /* double plus ungood. */
minires_freeupdrec (*result);
*result = 0;
goto ngood;
}
(*result) -> r_data =
(*result) -> r_data_ephem;
memcpy ((*result) -> r_data_ephem,
data.data, data.len);
}
} else {
(*result) -> r_data = 0;
(*result) -> r_size = 0;
}
switch (expr -> op) {
case expr_ns_add:
(*result) -> r_opcode = ADD;
break;
case expr_ns_delete:
(*result) -> r_opcode = DELETE;
break;
case expr_ns_exists:
(*result) -> r_opcode = YXRRSET;
break;
case expr_ns_not_exists:
(*result) -> r_opcode = NXRRSET;
break;
/* Can't happen, but satisfy gcc. */
default:
break;
}
}
}
if (r1) {
data_string_forget (&name, MDL);
dfree (tname, MDL);
}
if (r2)
data_string_forget (&data, MDL);
/* One flaw in the thinking here: an IP address and an
ASCII string both look like data expressions, but
for A records, we want an ASCII string, not a
binary IP address. Do I need to turn binary IP
addresses into a separate type? */
return (r0 && r1 &&
(r2 || expr -> op != expr_ns_add) && *result);
#else
case expr_ns_add:
case expr_ns_delete:
case expr_ns_exists:
case expr_ns_not_exists:
return 0;
#endif
case expr_funcall:
log_error ("%s: dns values for functions not supported.",
expr -> data.funcall.name);
break;
case expr_variable_reference:
log_error ("%s: dns values for variables not supported.",
expr -> data.variable);
break;
case expr_check:
case expr_equal:
case expr_not_equal:
case expr_regex_match:
case expr_iregex_match:
case expr_and:
case expr_or:
case expr_not:
case expr_match:
case expr_static:
case expr_known:
case expr_exists:
case expr_variable_exists:
log_error ("Boolean opcode in evaluate_dns_expression: %d",
expr -> op);
return 0;
case expr_none:
case expr_substring:
case expr_suffix:
case expr_lcase:
case expr_ucase:
case expr_option:
case expr_hardware:
case expr_const_data:
case expr_packet:
case expr_concat:
case expr_encapsulate:
case expr_host_lookup:
case expr_encode_int8:
case expr_encode_int16:
case expr_encode_int32:
case expr_binary_to_ascii:
case expr_reverse:
case expr_filename:
case expr_sname:
case expr_pick_first_value:
case expr_host_decl_name:
case expr_config_option:
case expr_leased_address:
case expr_null:
case expr_gethostname:
log_error ("Data opcode in evaluate_dns_expression: %d",
expr -> op);
return 0;
case expr_extract_int8:
case expr_extract_int16:
case expr_extract_int32:
case expr_const_int:
case expr_lease_time:
case expr_dns_transaction:
case expr_add:
case expr_subtract:
case expr_multiply:
case expr_divide:
case expr_remainder:
case expr_binary_and:
case expr_binary_or:
case expr_binary_xor:
case expr_client_state:
log_error ("Numeric opcode in evaluate_dns_expression: %d",
expr -> op);
return 0;
case expr_function:
log_error ("Function opcode in evaluate_dns_expression: %d",
expr -> op);
return 0;
case expr_arg:
break;
}
log_error ("Bogus opcode in evaluate_dns_expression: %d",
expr -> op);
return 0;
}
#endif /* defined (NSUPDATE_OLD) */
int evaluate_boolean_expression (result, packet, lease, client_state, int evaluate_boolean_expression (result, packet, lease, client_state,
in_options, cfg_options, scope, expr) in_options, cfg_options, scope, expr)
int *result; int *result;
@ -1055,20 +769,7 @@ int evaluate_boolean_expression (result, packet, lease, client_state,
else else
*result = expr -> op == expr_not_equal; *result = expr -> op == expr_not_equal;
break; break;
#if defined (NSUPDATE_OLD)
case binding_dns:
#if defined (NSUPDATE)
/* XXX This should be a comparison for equal
XXX values, not for identity. */
if (bv -> value.dns == obv -> value.dns)
*result = expr -> op == expr_equal;
else
*result = expr -> op == expr_not_equal;
#else
*result = expr -> op == expr_not_equal;
#endif
break;
#endif /* NSUPDATE_OLD */
case binding_function: case binding_function:
if (bv -> value.fundef == obv -> value.fundef) if (bv -> value.fundef == obv -> value.fundef)
*result = expr -> op == expr_equal; *result = expr -> op == expr_equal;
@ -2368,7 +2069,7 @@ int evaluate_data_expression (result, packet, lease, client_state,
case expr_ns_delete: case expr_ns_delete:
case expr_ns_exists: case expr_ns_exists:
case expr_ns_not_exists: case expr_ns_not_exists:
log_error ("dns update opcode in evaluate_data_expression: %d", log_error ("dns opcode in evaluate_boolean_expression: %d",
expr -> op); expr -> op);
return 0; return 0;
@ -2397,11 +2098,6 @@ int evaluate_numeric_expression (result, packet, lease, client_state,
{ {
struct data_string data; struct data_string data;
int status, sleft, sright; int status, sleft, sright;
#if defined (NSUPDATE_OLD)
ns_updrec *nut;
ns_updque uq;
struct expression *cur, *next;
#endif
struct binding *binding; struct binding *binding;
struct binding_value *bv; struct binding_value *bv;
@ -2540,53 +2236,6 @@ int evaluate_numeric_expression (result, packet, lease, client_state,
#endif #endif
return (1); return (1);
case expr_dns_transaction:
#if !defined (NSUPDATE_OLD)
return 0;
#else
if (!resolver_inited) {
minires_ninit (&resolver_state);
resolver_inited = 1;
resolver_state.retrans = 1;
resolver_state.retry = 1;
}
ISC_LIST_INIT (uq);
cur = expr;
do {
next = cur -> data.dns_transaction.cdr;
nut = 0;
status = (evaluate_dns_expression
(&nut, packet,
lease, client_state, in_options, cfg_options,
scope, cur -> data.dns_transaction.car));
if (!status)
goto dns_bad;
ISC_LIST_APPEND (uq, nut, r_link);
cur = next;
} while (next);
/* Do the update and record the error code, if there was
an error; otherwise set it to NOERROR. */
*result = minires_nupdate (&resolver_state,
ISC_LIST_HEAD (uq));
status = 1;
print_dns_status ((int)*result, &uq);
dns_bad:
while (!ISC_LIST_EMPTY (uq)) {
ns_updrec *tmp = ISC_LIST_HEAD (uq);
ISC_LIST_UNLINK (uq, tmp, r_link);
if (tmp -> r_data_ephem) {
dfree (tmp -> r_data_ephem, MDL);
tmp -> r_data = (unsigned char *)0;
tmp -> r_data_ephem = (unsigned char *)0;
}
minires_freeupdrec (tmp);
}
return status;
#endif /* NSUPDATE_OLD */
case expr_variable_reference: case expr_variable_reference:
if (scope && *scope) { if (scope && *scope) {
binding = find_binding (*scope, expr -> data.variable); binding = find_binding (*scope, expr -> data.variable);
@ -2876,14 +2525,6 @@ int evaluate_numeric_expression (result, packet, lease, client_state,
return 0; return 0;
} }
case expr_ns_add:
case expr_ns_delete:
case expr_ns_exists:
case expr_ns_not_exists:
log_error ("dns opcode in evaluate_numeric_expression: %d",
expr -> op);
return 0;
case expr_function: case expr_function:
log_error ("function definition in evaluate_numeric_expr"); log_error ("function definition in evaluate_numeric_expr");
return 0; return 0;
@ -3181,38 +2822,6 @@ void expression_dereference (eptr, file, line)
(&expr -> data.reverse.buffer, file, line); (&expr -> data.reverse.buffer, file, line);
break; break;
case expr_dns_transaction:
if (expr -> data.dns_transaction.car)
expression_dereference (&expr -> data.dns_transaction.car,
file, line);
if (expr -> data.dns_transaction.cdr)
expression_dereference (&expr -> data.dns_transaction.cdr,
file, line);
break;
case expr_ns_add:
if (expr -> data.ns_add.rrname)
expression_dereference (&expr -> data.ns_add.rrname,
file, line);
if (expr -> data.ns_add.rrdata)
expression_dereference (&expr -> data.ns_add.rrdata,
file, line);
if (expr -> data.ns_add.ttl)
expression_dereference (&expr -> data.ns_add.ttl,
file, line);
break;
case expr_ns_delete:
case expr_ns_exists:
case expr_ns_not_exists:
if (expr -> data.ns_delete.rrname)
expression_dereference (&expr -> data.ns_delete.rrname,
file, line);
if (expr -> data.ns_delete.rrdata)
expression_dereference (&expr -> data.ns_delete.rrdata,
file, line);
break;
case expr_variable_reference: case expr_variable_reference:
case expr_variable_exists: case expr_variable_exists:
if (expr -> data.variable) if (expr -> data.variable)
@ -3261,15 +2870,6 @@ void expression_dereference (eptr, file, line)
free_expression (expr, MDL); free_expression (expr, MDL);
} }
int is_dns_expression (expr)
struct expression *expr;
{
return (expr -> op == expr_ns_add ||
expr -> op == expr_ns_delete ||
expr -> op == expr_ns_exists ||
expr -> op == expr_ns_not_exists);
}
int is_boolean_expression (expr) int is_boolean_expression (expr)
struct expression *expr; struct expression *expr;
{ {
@ -3324,7 +2924,6 @@ int is_numeric_expression (expr)
expr -> op == expr_extract_int32 || expr -> op == expr_extract_int32 ||
expr -> op == expr_const_int || expr -> op == expr_const_int ||
expr -> op == expr_lease_time || expr -> op == expr_lease_time ||
expr -> op == expr_dns_transaction ||
expr -> op == expr_add || expr -> op == expr_add ||
expr -> op == expr_subtract || expr -> op == expr_subtract ||
expr -> op == expr_multiply || expr -> op == expr_multiply ||
@ -3339,11 +2938,7 @@ int is_numeric_expression (expr)
int is_compound_expression (expr) int is_compound_expression (expr)
struct expression *expr; struct expression *expr;
{ {
return (expr -> op == expr_ns_add || return (expr -> op == expr_substring ||
expr -> op == expr_ns_delete ||
expr -> op == expr_ns_exists ||
expr -> op == expr_ns_not_exists ||
expr -> op == expr_substring ||
expr -> op == expr_suffix || expr -> op == expr_suffix ||
expr -> op == expr_option || expr -> op == expr_option ||
expr -> op == expr_concat || expr -> op == expr_concat ||
@ -3356,8 +2951,7 @@ int is_compound_expression (expr)
expr -> op == expr_config_option || expr -> op == expr_config_option ||
expr -> op == expr_extract_int8 || expr -> op == expr_extract_int8 ||
expr -> op == expr_extract_int16 || expr -> op == expr_extract_int16 ||
expr -> op == expr_extract_int32 || expr -> op == expr_extract_int32);
expr -> op == expr_dns_transaction);
} }
static int op_val (enum expr_op); static int op_val (enum expr_op);
@ -3455,8 +3049,6 @@ enum expression_context expression_context (struct expression *expr)
return context_numeric; return context_numeric;
if (is_boolean_expression (expr)) if (is_boolean_expression (expr))
return context_boolean; return context_boolean;
if (is_dns_expression (expr))
return context_dns;
return context_any; return context_any;
} }
@ -3927,99 +3519,6 @@ int write_expression (file, expr, col, indent, firstp)
"lease-time"); "lease-time");
break; break;
case expr_dns_transaction:
col = token_print_indent (file, col, indent, "", "",
"ns-update");
col = token_print_indent (file, col, indent, " ", "",
"(");
scol = 0;
for (e = expr;
e && e -> op == expr_dns_transaction;
e = e -> data.dns_transaction.cdr) {
if (!scol) {
scol = col;
firstp = 1;
} else
firstp = 0;
col = write_expression (file,
e -> data.dns_transaction.car,
col, scol, firstp);
if (e -> data.dns_transaction.cdr)
col = token_print_indent (file, col, scol,
"", " ", ",");
}
if (e)
col = write_expression (file, e, col, scol, 0);
col = token_print_indent (file, col, indent, "", "", ")");
break;
case expr_ns_add:
col = token_print_indent (file, col, indent, "", "",
"update");
col = token_print_indent (file, col, indent, " ", "",
"(");
scol = col;
sprintf (obuf, "%d", expr -> data.ns_add.rrclass);
col = token_print_indent (file, col, scol, "", "", obuf);
col = token_print_indent (file, col, scol, "", " ",
",");
sprintf (obuf, "%d", expr -> data.ns_add.rrtype);
col = token_print_indent (file, col, scol, "", "", obuf);
col = token_print_indent (file, col, scol, "", " ",
",");
col = write_expression (file, expr -> data.ns_add.rrname,
col, scol, 0);
col = token_print_indent (file, col, scol, "", " ",
",");
col = write_expression (file, expr -> data.ns_add.rrdata,
col, scol, 0);
col = token_print_indent (file, col, scol, "", " ",
",");
col = write_expression (file, expr -> data.ns_add.ttl,
col, scol, 0);
col = token_print_indent (file, col, indent, "", "",
")");
break;
case expr_ns_delete:
col = token_print_indent (file, col, indent, "", "",
"delete");
col = token_print_indent (file, col, indent, " ", "",
"(");
finish_ns_small:
scol = col;
sprintf (obuf, "%d", expr -> data.ns_add.rrclass);
col = token_print_indent (file, col, scol, "", "", obuf);
col = token_print_indent (file, col, scol, "", " ",
",");
sprintf (obuf, "%d", expr -> data.ns_add.rrtype);
col = token_print_indent (file, col, scol, "", "", obuf);
col = token_print_indent (file, col, scol, "", " ",
",");
col = write_expression (file, expr -> data.ns_add.rrname,
col, scol, 0);
col = token_print_indent (file, col, scol, "", " ",
",");
col = write_expression (file, expr -> data.ns_add.rrdata,
col, scol, 0);
col = token_print_indent (file, col, indent, "", "",
")");
break;
case expr_ns_exists:
col = token_print_indent (file, col, indent, "", "",
"exists");
col = token_print_indent (file, col, indent, " ", "",
"(");
goto finish_ns_small;
case expr_ns_not_exists:
col = token_print_indent (file, col, indent, "", "",
"not exists");
col = token_print_indent (file, col, indent, " ", "",
"(");
goto finish_ns_small;
case expr_static: case expr_static:
col = token_print_indent (file, col, indent, "", "", col = token_print_indent (file, col, indent, "", "",
"static"); "static");
@ -4292,12 +3791,7 @@ int data_subexpression_length (int *rv,
case expr_const_int: case expr_const_int:
case expr_exists: case expr_exists:
case expr_known: case expr_known:
case expr_dns_transaction:
case expr_static: case expr_static:
case expr_ns_add:
case expr_ns_delete:
case expr_ns_exists:
case expr_ns_not_exists:
case expr_not_equal: case expr_not_equal:
case expr_null: case expr_null:
case expr_variable_exists: case expr_variable_exists:
@ -4348,12 +3842,6 @@ int expr_valid_for_context (struct expression *expr,
return 1; return 1;
return 0; return 0;
case context_dns:
if (is_dns_expression (expr)) {
return 1;
}
return 0;
case context_data_or_numeric: case context_data_or_numeric:
if (is_numeric_expression (expr) || if (is_numeric_expression (expr) ||
is_data_expression (expr)) { is_data_expression (expr)) {

347
compile Executable file
View File

@ -0,0 +1,347 @@
#! /bin/sh
# Wrapper for compilers which do not understand '-c -o'.
scriptversion=2012-10-14.11; # UTC
# Copyright (C) 1999-2013 Free Software Foundation, Inc.
# Written by Tom Tromey <tromey@cygnus.com>.
#
# 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, 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, see <http://www.gnu.org/licenses/>.
# 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.
# This file is maintained in Automake, please report
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.
nl='
'
# We need space, tab and new line, in precisely that order. Quoting is
# there to prevent tools from complaining about whitespace usage.
IFS=" "" $nl"
file_conv=
# func_file_conv build_file lazy
# Convert a $build file to $host form and store it in $file
# Currently only supports Windows hosts. If the determined conversion
# type is listed in (the comma separated) LAZY, no conversion will
# take place.
func_file_conv ()
{
file=$1
case $file in
/ | /[!/]*) # absolute file, and not a UNC file
if test -z "$file_conv"; then
# lazily determine how to convert abs files
case `uname -s` in
MINGW*)
file_conv=mingw
;;
CYGWIN*)
file_conv=cygwin
;;
*)
file_conv=wine
;;
esac
fi
case $file_conv/,$2, in
*,$file_conv,*)
;;
mingw/*)
file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
;;
cygwin/*)
file=`cygpath -m "$file" || echo "$file"`
;;
wine/*)
file=`winepath -w "$file" || echo "$file"`
;;
esac
;;
esac
}
# func_cl_dashL linkdir
# Make cl look for libraries in LINKDIR
func_cl_dashL ()
{
func_file_conv "$1"
if test -z "$lib_path"; then
lib_path=$file
else
lib_path="$lib_path;$file"
fi
linker_opts="$linker_opts -LIBPATH:$file"
}
# func_cl_dashl library
# Do a library search-path lookup for cl
func_cl_dashl ()
{
lib=$1
found=no
save_IFS=$IFS
IFS=';'
for dir in $lib_path $LIB
do
IFS=$save_IFS
if $shared && test -f "$dir/$lib.dll.lib"; then
found=yes
lib=$dir/$lib.dll.lib
break
fi
if test -f "$dir/$lib.lib"; then
found=yes
lib=$dir/$lib.lib
break
fi
if test -f "$dir/lib$lib.a"; then
found=yes
lib=$dir/lib$lib.a
break
fi
done
IFS=$save_IFS
if test "$found" != yes; then
lib=$lib.lib
fi
}
# func_cl_wrapper cl arg...
# Adjust compile command to suit cl
func_cl_wrapper ()
{
# Assume a capable shell
lib_path=
shared=:
linker_opts=
for arg
do
if test -n "$eat"; then
eat=
else
case $1 in
-o)
# configure might choose to run compile as 'compile cc -o foo foo.c'.
eat=1
case $2 in
*.o | *.[oO][bB][jJ])
func_file_conv "$2"
set x "$@" -Fo"$file"
shift
;;
*)
func_file_conv "$2"
set x "$@" -Fe"$file"
shift
;;
esac
;;
-I)
eat=1
func_file_conv "$2" mingw
set x "$@" -I"$file"
shift
;;
-I*)
func_file_conv "${1#-I}" mingw
set x "$@" -I"$file"
shift
;;
-l)
eat=1
func_cl_dashl "$2"
set x "$@" "$lib"
shift
;;
-l*)
func_cl_dashl "${1#-l}"
set x "$@" "$lib"
shift
;;
-L)
eat=1
func_cl_dashL "$2"
;;
-L*)
func_cl_dashL "${1#-L}"
;;
-static)
shared=false
;;
-Wl,*)
arg=${1#-Wl,}
save_ifs="$IFS"; IFS=','
for flag in $arg; do
IFS="$save_ifs"
linker_opts="$linker_opts $flag"
done
IFS="$save_ifs"
;;
-Xlinker)
eat=1
linker_opts="$linker_opts $2"
;;
-*)
set x "$@" "$1"
shift
;;
*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
func_file_conv "$1"
set x "$@" -Tp"$file"
shift
;;
*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
func_file_conv "$1" mingw
set x "$@" "$file"
shift
;;
*)
set x "$@" "$1"
shift
;;
esac
fi
shift
done
if test -n "$linker_opts"; then
linker_opts="-link$linker_opts"
fi
exec "$@" $linker_opts
exit 1
}
eat=
case $1 in
'')
echo "$0: No command. Try '$0 --help' for more information." 1>&2
exit 1;
;;
-h | --h*)
cat <<\EOF
Usage: compile [--help] [--version] PROGRAM [ARGS]
Wrapper for compilers which do not understand '-c -o'.
Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
arguments, and rename the output as expected.
If you are trying to build a whole package this is not the
right script to run: please start by reading the file 'INSTALL'.
Report bugs to <bug-automake@gnu.org>.
EOF
exit $?
;;
-v | --v*)
echo "compile $scriptversion"
exit $?
;;
cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
func_cl_wrapper "$@" # Doesn't return...
;;
esac
ofile=
cfile=
for arg
do
if test -n "$eat"; then
eat=
else
case $1 in
-o)
# configure might choose to run compile as 'compile cc -o foo foo.c'.
# So we strip '-o arg' only if arg is an object.
eat=1
case $2 in
*.o | *.obj)
ofile=$2
;;
*)
set x "$@" -o "$2"
shift
;;
esac
;;
*.c)
cfile=$1
set x "$@" "$1"
shift
;;
*)
set x "$@" "$1"
shift
;;
esac
fi
shift
done
if test -z "$ofile" || test -z "$cfile"; then
# If no '-o' option was seen then we might have been invoked from a
# pattern rule where we don't need one. That is ok -- this is a
# normal compilation that the losing compiler can handle. If no
# '.c' file was seen then we are probably linking. That is also
# ok.
exec "$@"
fi
# Name of file we expect compiler to create.
cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
# Create the lock directory.
# Note: use '[/\\:.-]' here to ensure that we don't use the same name
# that we are using for the .o file. Also, base the name on the expected
# object file name, since that is what matters with a parallel build.
lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
while true; do
if mkdir "$lockdir" >/dev/null 2>&1; then
break
fi
sleep 1
done
# FIXME: race condition here if user kills between mkdir and trap.
trap "rmdir '$lockdir'; exit 1" 1 2 15
# Run the compile.
"$@"
ret=$?
if test -f "$cofile"; then
test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
elif test -f "${cofile}bj"; then
test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
fi
rmdir "$lockdir"
exit $ret
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End:

151
config.guess vendored
View File

@ -1,10 +1,8 @@
#! /bin/sh #! /bin/sh
# Attempt to guess a canonical system name. # Attempt to guess a canonical system name.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # Copyright 1992-2013 Free Software Foundation, Inc.
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
# 2011, 2012, 2013 Free Software Foundation, Inc.
timestamp='2012-12-29' timestamp='2013-06-10'
# This file is free software; you can redistribute it and/or modify it # 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 # under the terms of the GNU General Public License as published by
@ -26,7 +24,7 @@ timestamp='2012-12-29'
# program. This Exception is an additional permission under section 7 # program. This Exception is an additional permission under section 7
# of the GNU General Public License, version 3 ("GPLv3"). # of the GNU General Public License, version 3 ("GPLv3").
# #
# Originally written by Per Bothner. # Originally written by Per Bothner.
# #
# You can get the latest version of this script from: # You can get the latest version of this script from:
# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
@ -52,9 +50,7 @@ version="\
GNU config.guess ($timestamp) GNU config.guess ($timestamp)
Originally written by Per Bothner. Originally written by Per Bothner.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, Copyright 1992-2013 Free Software Foundation, Inc.
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
2012, 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@ -136,6 +132,27 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
case "${UNAME_SYSTEM}" in
Linux|GNU|GNU/*)
# If the system lacks a compiler, then just pick glibc.
# We could probably try harder.
LIBC=gnu
eval $set_cc_for_build
cat <<-EOF > $dummy.c
#include <features.h>
#if defined(__UCLIBC__)
LIBC=uclibc
#elif defined(__dietlibc__)
LIBC=dietlibc
#else
LIBC=gnu
#endif
EOF
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
;;
esac
# Note: order is significant - the case branches are not exclusive. # Note: order is significant - the case branches are not exclusive.
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
@ -857,21 +874,21 @@ EOF
exit ;; exit ;;
*:GNU:*:*) *:GNU:*:*)
# the GNU system # the GNU system
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
exit ;; exit ;;
*:GNU/*:*:*) *:GNU/*:*:*)
# other systems with GNU libc and userland # 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 echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
exit ;; exit ;;
i*86:Minix:*:*) i*86:Minix:*:*)
echo ${UNAME_MACHINE}-pc-minix echo ${UNAME_MACHINE}-pc-minix
exit ;; exit ;;
aarch64:Linux:*:*) aarch64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;; exit ;;
aarch64_be:Linux:*:*) aarch64_be:Linux:*:*)
UNAME_MACHINE=aarch64_be UNAME_MACHINE=aarch64_be
echo ${UNAME_MACHINE}-unknown-linux-gnu echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;; exit ;;
alpha:Linux:*:*) alpha:Linux:*:*)
case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
@ -884,59 +901,54 @@ EOF
EV68*) UNAME_MACHINE=alphaev68 ;; EV68*) UNAME_MACHINE=alphaev68 ;;
esac esac
objdump --private-headers /bin/sh | grep -q ld.so.1 objdump --private-headers /bin/sh | grep -q ld.so.1
if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
arc:Linux:*:* | arceb:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;; exit ;;
arm*:Linux:*:*) arm*:Linux:*:*)
eval $set_cc_for_build eval $set_cc_for_build
if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_EABI__ | grep -q __ARM_EABI__
then then
echo ${UNAME_MACHINE}-unknown-linux-gnu echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
else else
if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_PCS_VFP | grep -q __ARM_PCS_VFP
then then
echo ${UNAME_MACHINE}-unknown-linux-gnueabi echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
else else
echo ${UNAME_MACHINE}-unknown-linux-gnueabihf echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
fi fi
fi fi
exit ;; exit ;;
avr32*:Linux:*:*) avr32*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;; exit ;;
cris:Linux:*:*) cris:Linux:*:*)
echo ${UNAME_MACHINE}-axis-linux-gnu echo ${UNAME_MACHINE}-axis-linux-${LIBC}
exit ;; exit ;;
crisv32:Linux:*:*) crisv32:Linux:*:*)
echo ${UNAME_MACHINE}-axis-linux-gnu echo ${UNAME_MACHINE}-axis-linux-${LIBC}
exit ;; exit ;;
frv:Linux:*:*) frv:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;; exit ;;
hexagon:Linux:*:*) hexagon:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;; exit ;;
i*86:Linux:*:*) i*86:Linux:*:*)
LIBC=gnu echo ${UNAME_MACHINE}-pc-linux-${LIBC}
eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
#ifdef __dietlibc__
LIBC=dietlibc
#endif
EOF
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
exit ;; exit ;;
ia64:Linux:*:*) ia64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;; exit ;;
m32r*:Linux:*:*) m32r*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;; exit ;;
m68*:Linux:*:*) m68*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;; exit ;;
mips:Linux:*:* | mips64:Linux:*:*) mips:Linux:*:* | mips64:Linux:*:*)
eval $set_cc_for_build eval $set_cc_for_build
@ -955,54 +967,63 @@ EOF
#endif #endif
EOF EOF
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
;; ;;
or1k:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
or32:Linux:*:*) or32:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;; exit ;;
padre:Linux:*:*) padre:Linux:*:*)
echo sparc-unknown-linux-gnu echo sparc-unknown-linux-${LIBC}
exit ;; exit ;;
parisc64:Linux:*:* | hppa64:Linux:*:*) parisc64:Linux:*:* | hppa64:Linux:*:*)
echo hppa64-unknown-linux-gnu echo hppa64-unknown-linux-${LIBC}
exit ;; exit ;;
parisc:Linux:*:* | hppa:Linux:*:*) parisc:Linux:*:* | hppa:Linux:*:*)
# Look for CPU level # Look for CPU level
case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
PA7*) echo hppa1.1-unknown-linux-gnu ;; PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
PA8*) echo hppa2.0-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
*) echo hppa-unknown-linux-gnu ;; *) echo hppa-unknown-linux-${LIBC} ;;
esac esac
exit ;; exit ;;
ppc64:Linux:*:*) ppc64:Linux:*:*)
echo powerpc64-unknown-linux-gnu echo powerpc64-unknown-linux-${LIBC}
exit ;; exit ;;
ppc:Linux:*:*) ppc:Linux:*:*)
echo powerpc-unknown-linux-gnu echo powerpc-unknown-linux-${LIBC}
exit ;;
ppc64le:Linux:*:*)
echo powerpc64le-unknown-linux-${LIBC}
exit ;;
ppcle:Linux:*:*)
echo powerpcle-unknown-linux-${LIBC}
exit ;; exit ;;
s390:Linux:*:* | s390x:Linux:*:*) s390:Linux:*:* | s390x:Linux:*:*)
echo ${UNAME_MACHINE}-ibm-linux echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
exit ;; exit ;;
sh64*:Linux:*:*) sh64*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;; exit ;;
sh*:Linux:*:*) sh*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;; exit ;;
sparc:Linux:*:* | sparc64:Linux:*:*) sparc:Linux:*:* | sparc64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;; exit ;;
tile*:Linux:*:*) tile*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;; exit ;;
vax:Linux:*:*) vax:Linux:*:*)
echo ${UNAME_MACHINE}-dec-linux-gnu echo ${UNAME_MACHINE}-dec-linux-${LIBC}
exit ;; exit ;;
x86_64:Linux:*:*) x86_64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;; exit ;;
xtensa*:Linux:*:*) xtensa*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;; exit ;;
i*86:DYNIX/ptx:4*:*) i*86:DYNIX/ptx:4*:*)
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
@ -1235,19 +1256,21 @@ EOF
exit ;; exit ;;
*:Darwin:*:*) *:Darwin:*:*)
UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
case $UNAME_PROCESSOR in eval $set_cc_for_build
i386) if test "$UNAME_PROCESSOR" = unknown ; then
eval $set_cc_for_build UNAME_PROCESSOR=powerpc
if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then fi
if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
grep IS_64BIT_ARCH >/dev/null (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
then grep IS_64BIT_ARCH >/dev/null
UNAME_PROCESSOR="x86_64" then
fi case $UNAME_PROCESSOR in
fi ;; i386) UNAME_PROCESSOR=x86_64 ;;
unknown) UNAME_PROCESSOR=powerpc ;; powerpc) UNAME_PROCESSOR=powerpc64 ;;
esac esac
fi
fi
echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
exit ;; exit ;;
*:procnto*:*:* | *:QNX:[0123456789]*:*) *:procnto*:*:* | *:QNX:[0123456789]*:*)

30
config.sub vendored
View File

@ -1,10 +1,8 @@
#! /bin/sh #! /bin/sh
# Configuration validation subroutine script. # Configuration validation subroutine script.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # Copyright 1992-2013 Free Software Foundation, Inc.
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
# 2011, 2012, 2013 Free Software Foundation, Inc.
timestamp='2012-12-29' timestamp='2013-04-24'
# This file is free software; you can redistribute it and/or modify it # 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 # under the terms of the GNU General Public License as published by
@ -70,9 +68,7 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\ version="\
GNU config.sub ($timestamp) GNU config.sub ($timestamp)
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, Copyright 1992-2013 Free Software Foundation, Inc.
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
2012, 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@ -256,7 +252,7 @@ case $basic_machine in
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
| am33_2.0 \ | am33_2.0 \
| arc \ | arc | arceb \
| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
| avr | avr32 \ | avr | avr32 \
| be32 | be64 \ | be32 | be64 \
@ -290,16 +286,17 @@ case $basic_machine in
| mipsisa64r2 | mipsisa64r2el \ | mipsisa64r2 | mipsisa64r2el \
| mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sb1 | mipsisa64sb1el \
| mipsisa64sr71k | mipsisa64sr71kel \ | mipsisa64sr71k | mipsisa64sr71kel \
| mipsr5900 | mipsr5900el \
| mipstx39 | mipstx39el \ | mipstx39 | mipstx39el \
| mn10200 | mn10300 \ | mn10200 | mn10300 \
| moxie \ | moxie \
| mt \ | mt \
| msp430 \ | msp430 \
| nds32 | nds32le | nds32be \ | nds32 | nds32le | nds32be \
| nios | nios2 \ | nios | nios2 | nios2eb | nios2el \
| ns16k | ns32k \ | ns16k | ns32k \
| open8 \ | open8 \
| or32 \ | or1k | or32 \
| pdp10 | pdp11 | pj | pjl \ | pdp10 | pdp11 | pj | pjl \
| powerpc | powerpc64 | powerpc64le | powerpcle \ | powerpc | powerpc64 | powerpc64le | powerpcle \
| pyramid \ | pyramid \
@ -369,7 +366,7 @@ case $basic_machine in
| aarch64-* | aarch64_be-* \ | aarch64-* | aarch64_be-* \
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
| avr-* | avr32-* \ | avr-* | avr32-* \
| be32-* | be64-* \ | be32-* | be64-* \
@ -407,12 +404,13 @@ case $basic_machine in
| mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r2-* | mipsisa64r2el-* \
| mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \
| mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
| mipsr5900-* | mipsr5900el-* \
| mipstx39-* | mipstx39el-* \ | mipstx39-* | mipstx39el-* \
| mmix-* \ | mmix-* \
| mt-* \ | mt-* \
| msp430-* \ | msp430-* \
| nds32-* | nds32le-* | nds32be-* \ | nds32-* | nds32le-* | nds32be-* \
| nios-* | nios2-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \
| none-* | np1-* | ns16k-* | ns32k-* \ | none-* | np1-* | ns16k-* | ns32k-* \
| open8-* \ | open8-* \
| orion-* \ | orion-* \
@ -1354,7 +1352,7 @@ case $os in
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
| -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
| -sym* | -kopensolaris* \ | -sym* | -kopensolaris* | -plan9* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
| -aos* | -aros* \ | -aos* | -aros* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
@ -1500,9 +1498,6 @@ case $os in
-aros*) -aros*)
os=-aros os=-aros
;; ;;
-kaos*)
os=-kaos
;;
-zvmoe) -zvmoe)
os=-zvmoe os=-zvmoe
;; ;;
@ -1594,6 +1589,9 @@ case $basic_machine in
mips*-*) mips*-*)
os=-elf os=-elf
;; ;;
or1k-*)
os=-elf
;;
or32-*) or32-*)
os=-coff os=-coff
;; ;;

163
configure vendored
View File

@ -664,6 +664,10 @@ build
MAINT MAINT
MAINTAINER_MODE_FALSE MAINTAINER_MODE_FALSE
MAINTAINER_MODE_TRUE MAINTAINER_MODE_TRUE
AM_BACKSLASH
AM_DEFAULT_VERBOSITY
AM_DEFAULT_V
AM_V
am__untar am__untar
am__tar am__tar
AMTAR AMTAR
@ -728,6 +732,7 @@ SHELL'
ac_subst_files='' ac_subst_files=''
ac_user_opts=' ac_user_opts='
enable_option_checking enable_option_checking
enable_silent_rules
enable_maintainer_mode enable_maintainer_mode
enable_dependency_tracking enable_dependency_tracking
enable_debug enable_debug
@ -1383,6 +1388,8 @@ Optional Features:
--disable-option-checking ignore unrecognized --enable/--with options --disable-option-checking ignore unrecognized --enable/--with options
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--enable-silent-rules less verbose build output (undo: "make V=1")
--disable-silent-rules verbose build output (undo: "make V=0")
--enable-maintainer-mode --enable-maintainer-mode
enable make rules and dependencies not useful (and enable make rules and dependencies not useful (and
sometimes confusing) to the casual installer sometimes confusing) to the casual installer
@ -2668,7 +2675,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
# we specify "foreign" to avoid having to have the GNU mandated files, # we specify "foreign" to avoid having to have the GNU mandated files,
# like AUTHORS, COPYING, and such # like AUTHORS, COPYING, and such
am__api_version='1.12' am__api_version='1.14'
ac_aux_dir= ac_aux_dir=
for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
@ -2881,8 +2888,8 @@ if test x"${MISSING+set}" != xset; then
esac esac
fi fi
# Use eval to expand $SHELL # Use eval to expand $SHELL
if eval "$MISSING --run true"; then if eval "$MISSING --is-lightweight"; then
am_missing_run="$MISSING --run " am_missing_run="$MISSING "
else else
am_missing_run= am_missing_run=
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
@ -3122,6 +3129,45 @@ else
fi fi
rmdir .tst 2>/dev/null rmdir .tst 2>/dev/null
# Check whether --enable-silent-rules was given.
if test "${enable_silent_rules+set}" = set; then :
enableval=$enable_silent_rules;
fi
case $enable_silent_rules in # (((
yes) AM_DEFAULT_VERBOSITY=0;;
no) AM_DEFAULT_VERBOSITY=1;;
*) AM_DEFAULT_VERBOSITY=1;;
esac
am_make=${MAKE-make}
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
if ${am_cv_make_support_nested_variables+:} false; then :
$as_echo_n "(cached) " >&6
else
if $as_echo 'TRUE=$(BAR$(V))
BAR0=false
BAR1=true
V=1
am__doit:
@$(TRUE)
.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
am_cv_make_support_nested_variables=yes
else
am_cv_make_support_nested_variables=no
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
$as_echo "$am_cv_make_support_nested_variables" >&6; }
if test $am_cv_make_support_nested_variables = yes; then
AM_V='$(V)'
AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
else
AM_V=$AM_DEFAULT_VERBOSITY
AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
fi
AM_BACKSLASH='\'
if test "`cd $srcdir && pwd`" != "`pwd`"; then if test "`cd $srcdir && pwd`" != "`pwd`"; then
# Use -I$(srcdir) only when $(srcdir) != ., so that make's output # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
# is not polluted with repeated "-I." # is not polluted with repeated "-I."
@ -3184,6 +3230,10 @@ mkdir_p='$(MKDIR_P)'
# in the wild :-( We should find a proper way to deprecate it ... # in the wild :-( We should find a proper way to deprecate it ...
AMTAR='$${TAR-tar}' AMTAR='$${TAR-tar}'
# We'll loop over all known methods to create a tar archive until one works.
_am_tools='gnutar pax cpio none'
am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
@ -3191,6 +3241,48 @@ am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
# POSIX will say in a future version that running "rm -f" with no argument
# is OK; and we want to be able to make that assumption in our Makefile
# recipes. So use an aggressive probe to check that the usage we want is
# actually supported "in the wild" to an acceptable degree.
# See automake bug#10828.
# To make any issue more visible, cause the running configure to be aborted
# by default if the 'rm' program in use doesn't match our expectations; the
# user can still override this though.
if rm -f && rm -fr && rm -rf; then : OK; else
cat >&2 <<'END'
Oops!
Your 'rm' program seems unable to run without file operands specified
on the command line, even when the '-f' option is present. This is contrary
to the behaviour of most rm programs out there, and not conforming with
the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
Please tell bug-automake@gnu.org about your system, including the value
of your $PATH and any error possibly output before this message. This
can help us improve future automake versions.
END
if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
echo 'Configuration will proceed anyway, since you have set the' >&2
echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
echo >&2
else
cat >&2 <<'END'
Aborting the configuration process, to ensure you take notice of the issue.
You can download and install GNU coreutils to get an 'rm' implementation
that behaves properly: <http://www.gnu.org/software/coreutils/>.
If you want to complete the configuration process using your problematic
'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
to "yes", and re-run configure.
END
as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
fi
fi
# we specify AM_MAINTAINER_MODE to avoid problems with rebuilding # we specify AM_MAINTAINER_MODE to avoid problems with rebuilding
# the configure and makefiles. Without it users doing things that # the configure and makefiles. Without it users doing things that
# change the timestamps on the code, like checking it into a cvs # change the timestamps on the code, like checking it into a cvs
@ -4086,6 +4178,65 @@ ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' 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_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_compiler_gnu=$ac_cv_c_compiler_gnu
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
if ${am_cv_prog_cc_c_o+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
;
return 0;
}
_ACEOF
# Make sure it works both with $CC and with simple cc.
# Following AC_PROG_CC_C_O, we do the test twice because some
# compilers refuse to overwrite an existing .o file with -o,
# though they will create one.
am_cv_prog_cc_c_o=yes
for am_i in 1 2; do
if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } \
&& test -f conftest2.$ac_objext; then
: OK
else
am_cv_prog_cc_c_o=no
break
fi
done
rm -f core conftest*
unset am_i
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
$as_echo "$am_cv_prog_cc_c_o" >&6; }
if test "$am_cv_prog_cc_c_o" != yes; then
# Losing compiler, so override with the script.
# FIXME: It is wrong to rewrite CC.
# But if we don't then we get into trouble of one sort or another.
# A longer-term fix would be to have automake use am__CC in this case,
# and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
CC="$am_aux_dir/compile $CC"
fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
DEPDIR="${am__leading_dot}deps" DEPDIR="${am__leading_dot}deps"
ac_config_commands="$ac_config_commands depfiles" ac_config_commands="$ac_config_commands depfiles"
@ -6559,7 +6710,7 @@ fi
fi fi
# Append selected warning levels to CFLAGS before substitution (but after # Append selected warning levels to CFLAGS before substitution (but after
# AC_TRY_COMPILE & etc). # AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[],[]) & etc).
CFLAGS="$CFLAGS $STD_CWARNINGS" CFLAGS="$CFLAGS $STD_CWARNINGS"
# Try to add the bind include directory # Try to add the bind include directory
@ -7921,7 +8072,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
case $ac_file$ac_mode in case $ac_file$ac_mode in
"depfiles":C) test x"$AMDEP_TRUE" != x"" || { "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
# Autoconf 2.62 quotes --file arguments for eval, but not when files # Older Autoconf quotes --file arguments for eval, but not when files
# are listed without --file. Let's play safe and only enable the eval # are listed without --file. Let's play safe and only enable the eval
# if we detect the quoting. # if we detect the quoting.
case $CONFIG_FILES in case $CONFIG_FILES in
@ -7972,7 +8123,7 @@ $as_echo X"$mf" |
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
test -z "$DEPDIR" && continue test -z "$DEPDIR" && continue
am__include=`sed -n 's/^am__include = //p' < "$mf"` am__include=`sed -n 's/^am__include = //p' < "$mf"`
test -z "am__include" && continue test -z "$am__include" && continue
am__quote=`sed -n 's/^am__quote = //p' < "$mf"` am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
# Find all dependency output files, they are included files with # Find all dependency output files, they are included files with
# $(DEPDIR) in their names. We invoke sed twice because it is the # $(DEPDIR) in their names. We invoke sed twice because it is the

View File

@ -1,4 +1,4 @@
AC_INIT([DHCP], [4.3.0-Pre-Beta], [dhcp-users@isc.org]) AC_INIT([DHCP],[4.3.0-Pre-Beta],[dhcp-users@isc.org])
# we specify "foreign" to avoid having to have the GNU mandated files, # we specify "foreign" to avoid having to have the GNU mandated files,
# like AUTHORS, COPYING, and such # like AUTHORS, COPYING, and such
@ -51,8 +51,7 @@ AC_DEFINE_UNQUOTED([DHCP_BYTE_ORDER], [$byte_order],
# Optional compile-time DEBUGging. # Optional compile-time DEBUGging.
AC_ARG_ENABLE(debug, AC_ARG_ENABLE(debug,
AC_HELP_STRING([--enable-debug], AS_HELP_STRING([--enable-debug],[create a debug-only version of the software (default is no).]),
[create a debug-only version of the software (default is no).]),
[enable_debug=yes],[enable_debug=no]) [enable_debug=yes],[enable_debug=no])
# This is very much off by default. # This is very much off by default.
if test "$enable_debug" = "yes" ; then if test "$enable_debug" = "yes" ; then
@ -83,8 +82,7 @@ fi
# Failover optional compile-time feature. # Failover optional compile-time feature.
AC_ARG_ENABLE(failover, AC_ARG_ENABLE(failover,
AC_HELP_STRING([--enable-failover], AS_HELP_STRING([--enable-failover],[enable support for failover (default is yes)]))
[enable support for failover (default is yes)]))
# Failover is on by default, so define if it is not explicitly disabled. # Failover is on by default, so define if it is not explicitly disabled.
if test "$enable_failover" != "no"; then if test "$enable_failover" != "no"; then
AC_DEFINE([FAILOVER_PROTOCOL], [1], AC_DEFINE([FAILOVER_PROTOCOL], [1],
@ -93,8 +91,7 @@ fi
# execute() support. # execute() support.
AC_ARG_ENABLE(execute, AC_ARG_ENABLE(execute,
AC_HELP_STRING([--enable-execute], AS_HELP_STRING([--enable-execute],[enable support for execute() in config (default is yes)]))
[enable support for execute() in config (default is yes)]))
# execute() is on by default, so define if it is not explicitly disabled. # execute() is on by default, so define if it is not explicitly disabled.
if test "$enable_execute" != "no" ; then if test "$enable_execute" != "no" ; then
AC_DEFINE([ENABLE_EXECUTE], [1], AC_DEFINE([ENABLE_EXECUTE], [1],
@ -103,8 +100,7 @@ fi
# Server tracing support. # Server tracing support.
AC_ARG_ENABLE(tracing, AC_ARG_ENABLE(tracing,
AC_HELP_STRING([--enable-tracing], AS_HELP_STRING([--enable-tracing],[enable support for server activity tracing (default is yes)]))
[enable support for server activity tracing (default is yes)]))
# tracing is on by default, so define if it is not explicitly disabled. # tracing is on by default, so define if it is not explicitly disabled.
if test "$enable_tracing" != "no" ; then if test "$enable_tracing" != "no" ; then
AC_DEFINE([TRACING], [1], AC_DEFINE([TRACING], [1],
@ -113,8 +109,7 @@ fi
# Delayed-ack feature support (experimental). # Delayed-ack feature support (experimental).
AC_ARG_ENABLE(delayed_ack, AC_ARG_ENABLE(delayed_ack,
AC_HELP_STRING([--enable-delayed-ack], AS_HELP_STRING([--enable-delayed-ack],[queues multiple DHCPACK replies (default is no)]))
[queues multiple DHCPACK replies (default is no)]))
if test "$enable_delayed_ack" = "yes"; then if test "$enable_delayed_ack" = "yes"; then
AC_DEFINE([DELAYED_ACK], [1], AC_DEFINE([DELAYED_ACK], [1],
[Define to queue multiple DHCPACK replies per fsync.]) [Define to queue multiple DHCPACK replies per fsync.])
@ -122,8 +117,7 @@ fi
# DHCPv6 optional compile-time feature. # DHCPv6 optional compile-time feature.
AC_ARG_ENABLE(dhcpv6, AC_ARG_ENABLE(dhcpv6,
AC_HELP_STRING([--enable-dhcpv6], AS_HELP_STRING([--enable-dhcpv6],[enable support for DHCPv6 (default is yes)]))
[enable support for DHCPv6 (default is yes)]))
# DHCPv6 is on by default, so define if it is not explicitly disabled. # DHCPv6 is on by default, so define if it is not explicitly disabled.
if test "$enable_dhcpv6" != "no"; then if test "$enable_dhcpv6" != "no"; then
AC_DEFINE([DHCPv6], [1], AC_DEFINE([DHCPv6], [1],
@ -132,11 +126,9 @@ fi
# PARANOIA is off by default (until we can test it with all features) # PARANOIA is off by default (until we can test it with all features)
AC_ARG_ENABLE(paranoia, AC_ARG_ENABLE(paranoia,
AC_HELP_STRING([--enable-paranoia], AS_HELP_STRING([--enable-paranoia],[enable support for chroot/setuid (default is no)]))
[enable support for chroot/setuid (default is no)]))
AC_ARG_ENABLE(early_chroot, AC_ARG_ENABLE(early_chroot,
AC_HELP_STRING([--enable-early-chroot], AS_HELP_STRING([--enable-early-chroot],[enable chrooting prior to configuration (default is no)]))
[enable chrooting prior to configuration (default is no)]))
# If someone enables early chroot, but does not enable paranoia, do so for # If someone enables early chroot, but does not enable paranoia, do so for
# them. # them.
if test "$enable_paranoia" != "yes" && \ if test "$enable_paranoia" != "yes" && \
@ -154,8 +146,7 @@ if test "$enable_early_chroot" = "yes" ; then
fi fi
AC_ARG_ENABLE(ipv4_pktinfo, AC_ARG_ENABLE(ipv4_pktinfo,
AC_HELP_STRING([--enable-ipv4-pktinfo], AS_HELP_STRING([--enable-ipv4-pktinfo],[enable use of pktinfo on IPv4 sockets (default is no)]))
[enable use of pktinfo on IPv4 sockets (default is no)]))
if test "$enable_ipv4_pktinfo" = "yes"; then if test "$enable_ipv4_pktinfo" = "yes"; then
AC_DEFINE([USE_V4_PKTINFO], [1], AC_DEFINE([USE_V4_PKTINFO], [1],
@ -163,8 +154,7 @@ if test "$enable_ipv4_pktinfo" = "yes"; then
fi fi
AC_ARG_ENABLE(use_sockets, AC_ARG_ENABLE(use_sockets,
AC_HELP_STRING([--enable-use-sockets], AS_HELP_STRING([--enable-use-sockets],[use the standard BSD socket API (default is no)]))
[use the standard BSD socket API (default is no)]))
if test "$enable_use_sockets" = "yes"; then if test "$enable_use_sockets" = "yes"; then
AC_DEFINE([USE_SOCKETS], [1], AC_DEFINE([USE_SOCKETS], [1],
@ -174,8 +164,7 @@ fi
# Try to hnadle incorrect byte order for secs field # Try to hnadle incorrect byte order for secs field
# This is off by default # This is off by default
AC_ARG_ENABLE(secs_byteorder, AC_ARG_ENABLE(secs_byteorder,
AC_HELP_STRING([--enable-secs-byteorder], AS_HELP_STRING([--enable-secs-byteorder],[Correct bad byteorders in the secs field (default is no).]))
[Correct bad byteorders in the secs field (default is no).]))
if test "$enable_secs_byteorder" = "yes" ; then if test "$enable_secs_byteorder" = "yes" ; then
AC_DEFINE([SECS_BYTEORDER], [1], AC_DEFINE([SECS_BYTEORDER], [1],
@ -186,8 +175,7 @@ fi
atf_path="no" atf_path="no"
AC_ARG_WITH([atf], AC_ARG_WITH([atf],
AC_HELP_STRING([--with-atf=PATH], AS_HELP_STRING([--with-atf=PATH],[specify location where atf was installed]),
[specify location where atf was installed]),
[atf_path="$withval"]) [atf_path="$withval"])
if test "$atf_path" != "no" ; then if test "$atf_path" != "no" ; then
# Config path for pkg-config # Config path for pkg-config
@ -245,8 +233,7 @@ esac
# Allow specification of alternate state files # Allow specification of alternate state files
AC_ARG_WITH(srv-lease-file, AC_ARG_WITH(srv-lease-file,
AC_HELP_STRING([--with-srv-lease-file=PATH], AS_HELP_STRING([--with-srv-lease-file=PATH],[File for dhcpd leases
[File for dhcpd leases
(default is LOCALSTATEDIR/db/dhcpd.leases)]), (default is LOCALSTATEDIR/db/dhcpd.leases)]),
AC_DEFINE_UNQUOTED([_PATH_DHCPD_DB], ["$withval"], AC_DEFINE_UNQUOTED([_PATH_DHCPD_DB], ["$withval"],
[File for dhcpd leases.])) [File for dhcpd leases.]))
@ -276,8 +263,7 @@ fi
echo "$with_srv_lease_file" echo "$with_srv_lease_file"
AC_ARG_WITH(srv6-lease-file, AC_ARG_WITH(srv6-lease-file,
AC_HELP_STRING([--with-srv6-lease-file=PATH], AS_HELP_STRING([--with-srv6-lease-file=PATH],[File for dhcpd6 leases
[File for dhcpd6 leases
(default is LOCALSTATEDIR/db/dhcpd6.leases)]), (default is LOCALSTATEDIR/db/dhcpd6.leases)]),
AC_DEFINE_UNQUOTED([_PATH_DHCPD6_DB], ["$withval"], AC_DEFINE_UNQUOTED([_PATH_DHCPD6_DB], ["$withval"],
[File for dhcpd6 leases.])) [File for dhcpd6 leases.]))
@ -307,8 +293,7 @@ fi
echo "$with_srv6_lease_file" echo "$with_srv6_lease_file"
AC_ARG_WITH(cli-lease-file, AC_ARG_WITH(cli-lease-file,
AC_HELP_STRING([--with-cli-lease-file=PATH], AS_HELP_STRING([--with-cli-lease-file=PATH],[File for dhclient leases
[File for dhclient leases
(default is LOCALSTATEDIR/db/dhclient.leases)]), (default is LOCALSTATEDIR/db/dhclient.leases)]),
AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_DB], ["$withval"], AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_DB], ["$withval"],
[File for dhclient leases.])) [File for dhclient leases.]))
@ -338,8 +323,7 @@ fi
echo "$with_cli_lease_file" echo "$with_cli_lease_file"
AC_ARG_WITH(cli6-lease-file, AC_ARG_WITH(cli6-lease-file,
AC_HELP_STRING([--with-cli6-lease-file=PATH], AS_HELP_STRING([--with-cli6-lease-file=PATH],[File for dhclient6 leases
[File for dhclient6 leases
(default is LOCALSTATEDIR/db/dhclient6.leases)]), (default is LOCALSTATEDIR/db/dhclient6.leases)]),
AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_DB], ["$withval"], AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_DB], ["$withval"],
[File for dhclient6 leases.])) [File for dhclient6 leases.]))
@ -369,38 +353,32 @@ fi
echo "$with_cli6_lease_file" echo "$with_cli6_lease_file"
AC_ARG_WITH(srv-pid-file, AC_ARG_WITH(srv-pid-file,
AC_HELP_STRING([--with-srv-pid-file=PATH], AS_HELP_STRING([--with-srv-pid-file=PATH],[File for dhcpd process information
[File for dhcpd process information
(default is LOCALSTATEDIR/run/dhcpd.pid)]), (default is LOCALSTATEDIR/run/dhcpd.pid)]),
AC_DEFINE_UNQUOTED([_PATH_DHCPD_PID], ["$withval"], AC_DEFINE_UNQUOTED([_PATH_DHCPD_PID], ["$withval"],
[File for dhcpd process information.])) [File for dhcpd process information.]))
AC_ARG_WITH(srv6-pid-file, AC_ARG_WITH(srv6-pid-file,
AC_HELP_STRING([--with-srv6-pid-file=PATH], AS_HELP_STRING([--with-srv6-pid-file=PATH],[File for dhcpd6 process information
[File for dhcpd6 process information
(default is LOCALSTATEDIR/run/dhcpd6.pid)]), (default is LOCALSTATEDIR/run/dhcpd6.pid)]),
AC_DEFINE_UNQUOTED([_PATH_DHCPD6_PID], ["$withval"], AC_DEFINE_UNQUOTED([_PATH_DHCPD6_PID], ["$withval"],
[File for dhcpd6 process information.])) [File for dhcpd6 process information.]))
AC_ARG_WITH(cli-pid-file, AC_ARG_WITH(cli-pid-file,
AC_HELP_STRING([--with-cli-pid-file=PATH], AS_HELP_STRING([--with-cli-pid-file=PATH],[File for dhclient process information
[File for dhclient process information
(default is LOCALSTATEDIR/run/dhclient.pid)]), (default is LOCALSTATEDIR/run/dhclient.pid)]),
AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_PID], ["$withval"], AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_PID], ["$withval"],
[File for dhclient process information.])) [File for dhclient process information.]))
AC_ARG_WITH(cli6-pid-file, AC_ARG_WITH(cli6-pid-file,
AC_HELP_STRING([--with-cli6-pid-file=PATH], AS_HELP_STRING([--with-cli6-pid-file=PATH],[File for dhclient6 process information
[File for dhclient6 process information
(default is LOCALSTATEDIR/run/dhclient6.pid)]), (default is LOCALSTATEDIR/run/dhclient6.pid)]),
AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_PID], ["$withval"], AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_PID], ["$withval"],
[File for dhclient6 process information.])) [File for dhclient6 process information.]))
AC_ARG_WITH(relay-pid-file, AC_ARG_WITH(relay-pid-file,
AC_HELP_STRING([--with-relay-pid-file=PATH], AS_HELP_STRING([--with-relay-pid-file=PATH],[File for dhcrelay process information
[File for dhcrelay process information
(default is LOCALSTATEDIR/run/dhcrelay.pid)]), (default is LOCALSTATEDIR/run/dhcrelay.pid)]),
AC_DEFINE_UNQUOTED([_PATH_DHCRELAY_PID], ["$withval"], AC_DEFINE_UNQUOTED([_PATH_DHCRELAY_PID], ["$withval"],
[File for dhcrelay process information.])) [File for dhcrelay process information.]))
AC_ARG_WITH(relay6-pid-file, AC_ARG_WITH(relay6-pid-file,
AC_HELP_STRING([--with-relay6-pid-file=PATH], AS_HELP_STRING([--with-relay6-pid-file=PATH],[File for dhcrelay6 process information
[File for dhcrelay6 process information
(default is LOCALSTATEDIR/run/dhcrelay6.pid)]), (default is LOCALSTATEDIR/run/dhcrelay6.pid)]),
AC_DEFINE_UNQUOTED([_PATH_DHCRELAY6_PID], ["$withval"], AC_DEFINE_UNQUOTED([_PATH_DHCRELAY6_PID], ["$withval"],
[File for dhcrelay6 process information.])) [File for dhcrelay6 process information.]))
@ -473,51 +451,37 @@ fi
# int value. # int value.
# #
AC_MSG_CHECKING([for struct lifnum]) AC_MSG_CHECKING([for struct lifnum])
AC_TRY_COMPILE( AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
[ #include <sys/types.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <net/if.h> #include <net/if.h>
], ]], [[ struct lifnum a;
[ struct lifnum a; ]])],[AC_MSG_RESULT(yes)
],
[AC_MSG_RESULT(yes)
AC_DEFINE([ISC_PLATFORM_HAVELIFNUM], [1], AC_DEFINE([ISC_PLATFORM_HAVELIFNUM], [1],
[Define to 1 if the system has 'struct lifnum'.])], [Define to 1 if the system has 'struct lifnum'.])],[AC_MSG_RESULT(no)])
[AC_MSG_RESULT(no)])
AC_MSG_CHECKING([for struct if_laddrconf]) AC_MSG_CHECKING([for struct if_laddrconf])
AC_TRY_COMPILE( AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
[ #include <sys/types.h>
#include <net/if6.h> #include <net/if6.h>
], ]], [[ struct if_laddrconf a;
[ struct if_laddrconf a; ]])],[AC_MSG_RESULT(yes)
],
[AC_MSG_RESULT(yes)
AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRCONF], [1], AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRCONF], [1],
[Define to 1 if the system has 'struct if_laddrconf'.])], [Define to 1 if the system has 'struct if_laddrconf'.])],[AC_MSG_RESULT(no)])
[AC_MSG_RESULT(no)])
AC_MSG_CHECKING([for struct if_laddrreq]) AC_MSG_CHECKING([for struct if_laddrreq])
AC_TRY_LINK( AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
[#include <sys/types.h>
#include <net/if6.h> #include <net/if6.h>
], ]], [[ struct if_laddrreq a;
[ struct if_laddrreq a; ]])],[AC_MSG_RESULT(yes)
],
[AC_MSG_RESULT(yes)
AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRREQ], [1], AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRREQ], [1],
[Define to 1 if the system has 'struct if_laddrreq'.])], [Define to 1 if the system has 'struct if_laddrreq'.])],[AC_MSG_RESULT(no)])
[AC_MSG_RESULT(no)])
# #
# check for GCC noreturn attribute # check for GCC noreturn attribute
# #
AC_MSG_CHECKING(for GCC noreturn attribute) AC_MSG_CHECKING(for GCC noreturn attribute)
AC_TRY_COMPILE([],[void foo() __attribute__((noreturn));], AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[void foo() __attribute__((noreturn));]])],[AC_MSG_RESULT(yes)
[AC_MSG_RESULT(yes)
AC_DEFINE([ISC_DHCP_NORETURN], [__attribute__((noreturn))], AC_DEFINE([ISC_DHCP_NORETURN], [__attribute__((noreturn))],
[Define to the string for a noreturn attribute.])], [Define to the string for a noreturn attribute.])],[AC_MSG_RESULT(no)
[AC_MSG_RESULT(no)
AC_DEFINE([ISC_DHCP_NORETURN], [], AC_DEFINE([ISC_DHCP_NORETURN], [],
[Define to the string for a noreturn attribute.])]) [Define to the string for a noreturn attribute.])])
@ -588,8 +552,7 @@ AC_CHECK_MEMBER(struct msghdr.msg_control,,
libbind= libbind=
AC_ARG_WITH(libbind, AC_ARG_WITH(libbind,
AC_HELP_STRING([--with-libbind=PATH], AS_HELP_STRING([--with-libbind=PATH],[bind includes and libraries are in PATH
[bind includes and libraries are in PATH
(default is ./bind)]), (default is ./bind)]),
use_libbind="$withval", use_libbind="no") use_libbind="$withval", use_libbind="no")
case "$use_libbind" in case "$use_libbind" in
@ -606,15 +569,13 @@ esac
# OpenLDAP support. # OpenLDAP support.
AC_ARG_WITH(ldap, AC_ARG_WITH(ldap,
AC_HELP_STRING([--with-ldap], AS_HELP_STRING([--with-ldap],[enable OpenLDAP support in dhcpd (default is no)]),
[enable OpenLDAP support in dhcpd (default is no)]),
[ldap=$withval], [ldap=$withval],
[ldap=no]) [ldap=no])
# OpenLDAP with SSL support. # OpenLDAP with SSL support.
AC_ARG_WITH(ldapcrypto, AC_ARG_WITH(ldapcrypto,
AC_HELP_STRING([--with-ldapcrypto], AS_HELP_STRING([--with-ldapcrypto],[enable OpenLDAP crypto support in dhcpd (default is no)]),
[enable OpenLDAP crypto support in dhcpd (default is no)]),
[ldapcrypto=$withval], [ldapcrypto=$withval],
[ldapcrypto=no]) [ldapcrypto=no])
@ -635,7 +596,7 @@ if test x$ldap = xyes || test x$ldapcrypto = xyes ; then
fi fi
# Append selected warning levels to CFLAGS before substitution (but after # Append selected warning levels to CFLAGS before substitution (but after
# AC_TRY_COMPILE & etc). # AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[],[]) & etc).
CFLAGS="$CFLAGS $STD_CWARNINGS" CFLAGS="$CFLAGS $STD_CWARNINGS"
# Try to add the bind include directory # Try to add the bind include directory
@ -648,7 +609,7 @@ esac
AC_C_FLEXIBLE_ARRAY_MEMBER AC_C_FLEXIBLE_ARRAY_MEMBER
AC_OUTPUT([ AC_CONFIG_FILES([
Makefile Makefile
client/Makefile client/Makefile
common/Makefile common/Makefile
@ -663,6 +624,7 @@ AC_OUTPUT([
server/tests/Makefile server/tests/Makefile
doc/devel/doxyfile doc/devel/doxyfile
]) ])
AC_OUTPUT
sh util/bindvar.sh sh util/bindvar.sh

View File

@ -1,7 +1,7 @@
#! /bin/sh #! /bin/sh
# depcomp - compile a program generating dependencies as side-effects # depcomp - compile a program generating dependencies as side-effects
scriptversion=2012-10-18.11; # UTC scriptversion=2013-05-30.07; # UTC
# Copyright (C) 1999-2013 Free Software Foundation, Inc. # Copyright (C) 1999-2013 Free Software Foundation, Inc.
@ -552,6 +552,7 @@ $ {
G G
p p
}' >> "$depfile" }' >> "$depfile"
echo >> "$depfile" # make sure the fragment doesn't end with a backslash
rm -f "$tmpdepfile" rm -f "$tmpdepfile"
;; ;;

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.13.1 from Makefile.am. # Makefile.in generated by automake 1.14 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2012 Free Software Foundation, Inc. # Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -16,23 +16,51 @@
VPATH = @srcdir@ VPATH = @srcdir@
am__make_dryrun = \ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
{ \ am__make_running_with_option = \
am__dry=no; \ case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \ case $$MAKEFLAGS in \
*\\[\ \ ]*) \ *\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ bs=\\; \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
*) \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \ esac; \
test $$am__dry = yes; \ fi; \
} skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
@ -353,6 +381,7 @@ uninstall-libLIBRARIES:
clean-libLIBRARIES: clean-libLIBRARIES:
-test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES) -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
libdhcpctl.a: $(libdhcpctl_a_OBJECTS) $(libdhcpctl_a_DEPENDENCIES) $(EXTRA_libdhcpctl_a_DEPENDENCIES) libdhcpctl.a: $(libdhcpctl_a_OBJECTS) $(libdhcpctl_a_DEPENDENCIES) $(EXTRA_libdhcpctl_a_DEPENDENCIES)
$(AM_V_at)-rm -f libdhcpctl.a $(AM_V_at)-rm -f libdhcpctl.a
$(AM_V_AR)$(libdhcpctl_a_AR) libdhcpctl.a $(libdhcpctl_a_OBJECTS) $(libdhcpctl_a_LIBADD) $(AM_V_AR)$(libdhcpctl_a_AR) libdhcpctl.a $(libdhcpctl_a_OBJECTS) $(libdhcpctl_a_LIBADD)
@ -402,9 +431,11 @@ clean-binPROGRAMS:
clean-noinstPROGRAMS: clean-noinstPROGRAMS:
-test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
cltest$(EXEEXT): $(cltest_OBJECTS) $(cltest_DEPENDENCIES) $(EXTRA_cltest_DEPENDENCIES) cltest$(EXEEXT): $(cltest_OBJECTS) $(cltest_DEPENDENCIES) $(EXTRA_cltest_DEPENDENCIES)
@rm -f cltest$(EXEEXT) @rm -f cltest$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(cltest_OBJECTS) $(cltest_LDADD) $(LIBS) $(AM_V_CCLD)$(LINK) $(cltest_OBJECTS) $(cltest_LDADD) $(LIBS)
omshell$(EXEEXT): $(omshell_OBJECTS) $(omshell_DEPENDENCIES) $(EXTRA_omshell_DEPENDENCIES) omshell$(EXEEXT): $(omshell_OBJECTS) $(omshell_DEPENDENCIES) $(EXTRA_omshell_DEPENDENCIES)
@rm -f omshell$(EXEEXT) @rm -f omshell$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(omshell_OBJECTS) $(omshell_LDADD) $(LIBS) $(AM_V_CCLD)$(LINK) $(omshell_OBJECTS) $(omshell_LDADD) $(LIBS)
@ -426,14 +457,14 @@ distclean-compile:
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj: .c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
install-man1: $(man_MANS) install-man1: $(man_MANS)
@$(NORMAL_INSTALL) @$(NORMAL_INSTALL)
@list1=''; \ @list1=''; \

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.13.1 from Makefile.am. # Makefile.in generated by automake 1.14 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2012 Free Software Foundation, Inc. # Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -15,23 +15,51 @@
@SET_MAKE@ @SET_MAKE@
VPATH = @srcdir@ VPATH = @srcdir@
am__make_dryrun = \ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
{ \ am__make_running_with_option = \
am__dry=no; \ case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \ case $$MAKEFLAGS in \
*\\[\ \ ]*) \ *\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ bs=\\; \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
*) \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \ esac; \
test $$am__dry = yes; \ fi; \
} skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
@ -330,6 +358,7 @@ uninstall-libLIBRARIES:
clean-libLIBRARIES: clean-libLIBRARIES:
-test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES) -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
libdst.a: $(libdst_a_OBJECTS) $(libdst_a_DEPENDENCIES) $(EXTRA_libdst_a_DEPENDENCIES) libdst.a: $(libdst_a_OBJECTS) $(libdst_a_DEPENDENCIES) $(EXTRA_libdst_a_DEPENDENCIES)
$(AM_V_at)-rm -f libdst.a $(AM_V_at)-rm -f libdst.a
$(AM_V_AR)$(libdst_a_AR) libdst.a $(libdst_a_OBJECTS) $(libdst_a_LIBADD) $(AM_V_AR)$(libdst_a_AR) libdst.a $(libdst_a_OBJECTS) $(libdst_a_LIBADD)
@ -353,14 +382,14 @@ distclean-compile:
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj: .c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
ID: $(am__tagged_files) ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique $(am__define_uniq_tagged_files); mkid -fID $$unique

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.13.1 from Makefile.am. # Makefile.in generated by automake 1.14 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2012 Free Software Foundation, Inc. # Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -15,23 +15,51 @@
@SET_MAKE@ @SET_MAKE@
VPATH = @srcdir@ VPATH = @srcdir@
am__make_dryrun = \ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
{ \ am__make_running_with_option = \
am__dry=no; \ case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \ case $$MAKEFLAGS in \
*\\[\ \ ]*) \ *\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ bs=\\; \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
*) \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \ esac; \
test $$am__dry = yes; \ fi; \
} skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
@ -279,8 +307,8 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
$(am__aclocal_m4_deps): $(am__aclocal_m4_deps):
config.h: stamp-h1 config.h: stamp-h1
@if test ! -f $@; then rm -f stamp-h1; else :; fi @test -f $@ || rm -f stamp-h1
@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
@rm -f stamp-h1 @rm -f stamp-h1

View File

@ -646,6 +646,7 @@ struct lease_state {
#define DDNS_UPDATE_STYLE_NONE 0 #define DDNS_UPDATE_STYLE_NONE 0
#define DDNS_UPDATE_STYLE_AD_HOC 1 #define DDNS_UPDATE_STYLE_AD_HOC 1
#define DDNS_UPDATE_STYLE_INTERIM 2 #define DDNS_UPDATE_STYLE_INTERIM 2
#define DDNS_UPDATE_STYLE_STANDARD 3
/* Server option names. */ /* Server option names. */
@ -1658,6 +1659,9 @@ typedef struct dhcp_ddns_cb {
void *transaction; void *transaction;
void *dataspace; void *dataspace;
dns_rdataclass_t dhcid_class;
char *lease_tag;
} dhcp_ddns_cb_t; } dhcp_ddns_cb_t;
extern struct ipv6_pool **pools; extern struct ipv6_pool **pools;
@ -2087,11 +2091,6 @@ struct expression *parse_domain_list(struct parse *cfile, int);
/* tree.c */ /* tree.c */
#if defined (NSUPDATE)
extern struct __res_state resolver_state;
extern int resolver_inited;
#endif
extern struct binding_scope *global_scope; extern struct binding_scope *global_scope;
pair cons (caddr_t, pair); pair cons (caddr_t, pair);
int make_const_option_cache (struct option_cache **, struct buffer **, int make_const_option_cache (struct option_cache **, struct buffer **,
@ -2119,15 +2118,6 @@ int evaluate_expression (struct binding_value **, struct packet *,
struct binding_scope **, struct expression *, struct binding_scope **, struct expression *,
const char *, int); const char *, int);
int binding_value_dereference (struct binding_value **, const char *, int); int binding_value_dereference (struct binding_value **, const char *, int);
#if defined (NSUPDATE_OLD)
int evaluate_dns_expression (ns_updrec **, struct packet *,
struct lease *,
struct client_state *,
struct option_state *,
struct option_state *,
struct binding_scope **,
struct expression *);
#endif
int evaluate_boolean_expression (int *, int evaluate_boolean_expression (int *,
struct packet *, struct lease *, struct packet *, struct lease *,
struct client_state *, struct client_state *,
@ -2817,9 +2807,9 @@ void client_dns_remove(struct client_state *client, struct iaddr *addr);
void dhcpv4_client_assignments(void); void dhcpv4_client_assignments(void);
void dhcpv6_client_assignments(void); void dhcpv6_client_assignments(void);
void form_duid(struct data_string *duid, const char *file, int line);
/* dhc6.c */ /* dhc6.c */
void form_duid(struct data_string *duid, const char *file, int line);
void dhc6_lease_destroy(struct dhc6_lease **src, const char *file, int line); void dhc6_lease_destroy(struct dhc6_lease **src, const char *file, int line);
void start_init6(struct client_state *client); void start_init6(struct client_state *client);
void start_info_request6(struct client_state *client); void start_info_request6(struct client_state *client);
@ -2946,21 +2936,18 @@ int icmp_echorequest (struct iaddr *);
isc_result_t icmp_echoreply (omapi_object_t *); isc_result_t icmp_echoreply (omapi_object_t *);
/* dns.c */ /* dns.c */
#if defined (NSUPDATE)
isc_result_t find_tsig_key (ns_tsig_key **, const char *, struct dns_zone *);
void tkey_free (ns_tsig_key **);
#endif
isc_result_t enter_dns_zone (struct dns_zone *); isc_result_t enter_dns_zone (struct dns_zone *);
isc_result_t dns_zone_lookup (struct dns_zone **, const char *); isc_result_t dns_zone_lookup (struct dns_zone **, const char *);
int dns_zone_dereference (struct dns_zone **, const char *, int); int dns_zone_dereference (struct dns_zone **, const char *, int);
#if defined (NSUPDATE) #if defined (NSUPDATE)
#define FIND_FORWARD 0 #define FIND_FORWARD 0
#define FIND_REVERSE 1 #define FIND_REVERSE 1
isc_result_t find_tsig_key (ns_tsig_key **, const char *, struct dns_zone *);
void tkey_free (ns_tsig_key **);
isc_result_t find_cached_zone (dhcp_ddns_cb_t *, int); isc_result_t find_cached_zone (dhcp_ddns_cb_t *, int);
void forget_zone (struct dns_zone **); void forget_zone (struct dns_zone **);
void repudiate_zone (struct dns_zone **); void repudiate_zone (struct dns_zone **);
//void cache_found_zone (ns_class, char *, struct in_addr *, int); int get_dhcid (dhcp_ddns_cb_t *, int, const u_int8_t *, unsigned);
int get_dhcid (struct data_string *, int, const u_int8_t *, unsigned);
void dhcid_tolease (struct data_string *, struct data_string *); void dhcid_tolease (struct data_string *, struct data_string *);
isc_result_t dhcid_fromlease (struct data_string *, struct data_string *); isc_result_t dhcid_fromlease (struct data_string *, struct data_string *);
isc_result_t ddns_update_fwd(struct data_string *, struct iaddr, isc_result_t ddns_update_fwd(struct data_string *, struct iaddr,
@ -2970,6 +2957,16 @@ isc_result_t ddns_remove_fwd(struct data_string *,
struct iaddr, struct data_string *); struct iaddr, struct data_string *);
#endif /* NSUPDATE */ #endif /* NSUPDATE */
dhcp_ddns_cb_t *ddns_cb_alloc(const char *file, int line);
void ddns_cb_free (dhcp_ddns_cb_t *ddns_cb, const char *file, int line);
void ddns_cb_forget_zone (dhcp_ddns_cb_t *ddns_cb);
isc_result_t
ddns_modify_fwd(dhcp_ddns_cb_t *ddns_cb, const char *file, int line);
isc_result_t
ddns_modify_ptr(dhcp_ddns_cb_t *ddns_cb, const char *file, int line);
void
ddns_cancel(dhcp_ddns_cb_t *ddns_cb, const char *file, int line);
/* resolv.c */ /* resolv.c */
extern char path_resolv_conf []; extern char path_resolv_conf [];
extern struct name_server *name_servers; extern struct name_server *name_servers;
@ -3337,21 +3334,6 @@ void dump_subnets (void);
void free_everything (void); void free_everything (void);
#endif #endif
/* nsupdate.c */
char *ddns_rev_name (struct lease *, struct lease_state *, struct packet *);
char *ddns_fwd_name (struct lease *, struct lease_state *, struct packet *);
int nsupdateA (const char *, const unsigned char *, u_int32_t, int);
int nsupdatePTR (const char *, const unsigned char *, u_int32_t, int);
void nsupdate (struct lease *, struct lease_state *, struct packet *, int);
int updateA (const struct data_string *, const struct data_string *,
unsigned int, struct lease *);
int updatePTR (const struct data_string *, const struct data_string *,
unsigned int, struct lease *);
int deleteA (const struct data_string *, const struct data_string *,
struct lease *);
int deletePTR (const struct data_string *, const struct data_string *,
struct lease *);
/* failover.c */ /* failover.c */
#if defined (FAILOVER_PROTOCOL) #if defined (FAILOVER_PROTOCOL)
extern dhcp_failover_state_t *failover_states; extern dhcp_failover_state_t *failover_states;
@ -3618,20 +3600,5 @@ void mark_hosts_unavailable(void);
void mark_phosts_unavailable(void); void mark_phosts_unavailable(void);
void mark_interfaces_unavailable(void); void mark_interfaces_unavailable(void);
dhcp_ddns_cb_t *ddns_cb_alloc(const char *file, int line);
void ddns_cb_free (dhcp_ddns_cb_t *ddns_cb, const char *file, int line);
void ddns_cb_forget_zone (dhcp_ddns_cb_t *ddns_cb);
//void *key_from_zone(struct dns_zone *zone);
isc_result_t
ddns_modify_fwd(dhcp_ddns_cb_t *ddns_cb, const char *file, int line);
isc_result_t
ddns_modify_ptr(dhcp_ddns_cb_t *ddns_cb, const char *file, int line);
void
ddns_cancel(dhcp_ddns_cb_t *ddns_cb, const char *file, int line);
#define MAX_ADDRESS_STRING_LEN \ #define MAX_ADDRESS_STRING_LEN \
(sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")) (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"))

View File

@ -33,6 +33,11 @@
* ``http://www.nominum.com''. * ``http://www.nominum.com''.
*/ */
/*
* The following tokens have been deprecated and aren't in use anymore.
* They have been left in place to avoid disturbing the code.
* DNS_UPDATE, DNS_DELETE, NS_UPDATE, UPDATED_DNS_RR
*/
enum dhcp_token { enum dhcp_token {
SEMI = ';', SEMI = ';',
DOT = '.', DOT = '.',

View File

@ -275,3 +275,16 @@
Care should be taken before enabling this option. */ Care should be taken before enabling this option. */
/* #define SERVER_ID_CHECK */ /* #define SERVER_ID_CHECK */
/* Include code to do a slow transition of DDNS records
from the interim to the standard version, or backwards.
The normal code will handle removing an old style record
when the name on a lease is being changed. This adds code
to handle the case where the name isn't being changed but
the old record should be removed to allow a new record to
be added. This is the slow transition as leases are only
updated as a client touches them. A fast transition would
entail updating all the records at once, probably at start
up. */
#define DDNS_UPDATE_SLOW_TRANSITION

View File

@ -3,7 +3,7 @@
Definitions for address trees... */ Definitions for address trees... */
/* /*
* Copyright (c) 2011 by Internet Systems Consortium, Inc. ("ISC") * Copyright (c) 2011,2013 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 2004,2007-2009 by Internet Systems Consortium, Inc. ("ISC") * Copyright (c) 2004,2007-2009 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 1996-2003 by Internet Software Consortium * Copyright (c) 1996-2003 by Internet Software Consortium
* *
@ -116,9 +116,6 @@ struct binding_value {
struct data_string data; struct data_string data;
unsigned long intval; unsigned long intval;
int boolean; int boolean;
#if defined (NSUPDATE_OLD)
ns_updrec *dns;
#endif
struct fundef *fundef; struct fundef *fundef;
struct binding_value *bv; struct binding_value *bv;
} value; } value;

View File

@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.9.6 from Makefile.am. # Makefile.in generated by automake 1.14 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # Copyright (C) 1994-2013 Free Software Foundation, Inc.
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
@ -14,15 +14,57 @@
@SET_MAKE@ @SET_MAKE@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@ VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = .. pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644 install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c
@ -34,8 +76,11 @@ POST_INSTALL = :
NORMAL_UNINSTALL = : NORMAL_UNINSTALL = :
PRE_UNINSTALL = : PRE_UNINSTALL = :
POST_UNINSTALL = : POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = minires subdir = minires
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@ -43,9 +88,14 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
mkinstalldirs = $(install_sh) -d mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/includes/config.h CONFIG_HEADER = $(top_builddir)/includes/config.h
CONFIG_CLEAN_FILES = CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
LIBRARIES = $(noinst_LIBRARIES) LIBRARIES = $(noinst_LIBRARIES)
AR = ar AR = ar
ARFLAGS = cru ARFLAGS = cru
AM_V_AR = $(am__v_AR_@AM_V@)
am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
am__v_AR_0 = @echo " AR " $@;
am__v_AR_1 =
libres_a_AR = $(AR) $(ARFLAGS) libres_a_AR = $(AR) $(ARFLAGS)
libres_a_LIBADD = libres_a_LIBADD =
am_libres_a_OBJECTS = res_mkupdate.$(OBJEXT) res_init.$(OBJEXT) \ am_libres_a_OBJECTS = res_mkupdate.$(OBJEXT) res_init.$(OBJEXT) \
@ -55,22 +105,66 @@ am_libres_a_OBJECTS = res_mkupdate.$(OBJEXT) res_init.$(OBJEXT) \
ns_parse.$(OBJEXT) ns_sign.$(OBJEXT) ns_name.$(OBJEXT) \ ns_parse.$(OBJEXT) ns_sign.$(OBJEXT) ns_name.$(OBJEXT) \
ns_samedomain.$(OBJEXT) ns_verify.$(OBJEXT) ns_samedomain.$(OBJEXT) ns_verify.$(OBJEXT)
libres_a_OBJECTS = $(am_libres_a_OBJECTS) libres_a_OBJECTS = $(am_libres_a_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/includes AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/includes
depcomp = $(SHELL) $(top_srcdir)/depcomp depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
am__v_CC_1 =
CCLD = $(CC) CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(libres_a_SOURCES) SOURCES = $(libres_a_SOURCES)
DIST_SOURCES = $(libres_a_SOURCES) DIST_SOURCES = $(libres_a_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags ETAGS = etags
CTAGS = ctags CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@ ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@ AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
ATF_CFLAGS = @ATF_CFLAGS@
ATF_LDFLAGS = @ATF_LDFLAGS@
AUTOCONF = @AUTOCONF@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@ AUTOMAKE = @AUTOMAKE@
@ -89,21 +183,26 @@ ECHO_T = @ECHO_T@
EGREP = @EGREP@ EGREP = @EGREP@
EXEEXT = @EXEEXT@ EXEEXT = @EXEEXT@
GREP = @GREP@ GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@ INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDAP_CFLAGS = @LDAP_CFLAGS@
LDFLAGS = @LDFLAGS@ LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@ LIBOBJS = @LIBOBJS@
LIBS = @LIBS@ LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@ LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@ MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@ OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@ PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@ PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@ PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@ RANLIB = @RANLIB@
@ -111,24 +210,35 @@ SET_MAKE = @SET_MAKE@
SHELL = @SHELL@ SHELL = @SHELL@
STRIP = @STRIP@ STRIP = @STRIP@
VERSION = @VERSION@ VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@ ac_ct_CC = @ac_ct_CC@
ac_prefix_program = @ac_prefix_program@ ac_prefix_program = @ac_prefix_program@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@ am__include = @am__include@
am__leading_dot = @am__leading_dot@ am__leading_dot = @am__leading_dot@
am__quote = @am__quote@ am__quote = @am__quote@
am__tar = @am__tar@ am__tar = @am__tar@
am__untar = @am__untar@ am__untar = @am__untar@
bindir = @bindir@ bindir = @bindir@
build = @build@
build_alias = @build_alias@ build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
byte_order = @byte_order@ byte_order = @byte_order@
datadir = @datadir@ datadir = @datadir@
datarootdir = @datarootdir@ datarootdir = @datarootdir@
docdir = @docdir@ docdir = @docdir@
dvidir = @dvidir@ dvidir = @dvidir@
exec_prefix = @exec_prefix@ exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@ host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@ htmldir = @htmldir@
includedir = @includedir@ includedir = @includedir@
infodir = @infodir@ infodir = @infodir@
@ -146,8 +256,12 @@ program_transform_name = @program_transform_name@
psdir = @psdir@ psdir = @psdir@
sbindir = @sbindir@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@ sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@ sysconfdir = @sysconfdir@
target_alias = @target_alias@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AM_CPPFLAGS = -DMINIRES_LIB -DHMAC_MD5 AM_CPPFLAGS = -DMINIRES_LIB -DHMAC_MD5
noinst_LIBRARIES = libres.a noinst_LIBRARIES = libres.a
libres_a_SOURCES = res_mkupdate.c res_init.c res_update.c res_send.c \ libres_a_SOURCES = res_mkupdate.c res_init.c res_update.c res_send.c \
@ -159,18 +273,18 @@ all: all-am
.SUFFIXES: .SUFFIXES:
.SUFFIXES: .c .o .obj .SUFFIXES: .c .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \ @for dep in $?; do \
case '$(am__configure_deps)' in \ case '$(am__configure_deps)' in \
*$$dep*) \ *$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& exit 0; \ && { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \ exit 1;; \
esac; \ esac; \
done; \ done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign minires/Makefile'; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign minires/Makefile'; \
cd $(top_srcdir) && \ $(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign minires/Makefile $(AUTOMAKE) --foreign minires/Makefile
.PRECIOUS: Makefile .PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \ @case '$?' in \
@ -184,17 +298,19 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps) $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
clean-noinstLIBRARIES: clean-noinstLIBRARIES:
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
libres.a: $(libres_a_OBJECTS) $(libres_a_DEPENDENCIES)
-rm -f libres.a libres.a: $(libres_a_OBJECTS) $(libres_a_DEPENDENCIES) $(EXTRA_libres_a_DEPENDENCIES)
$(libres_a_AR) libres.a $(libres_a_OBJECTS) $(libres_a_LIBADD) $(AM_V_at)-rm -f libres.a
$(RANLIB) libres.a $(AM_V_AR)$(libres_a_AR) libres.a $(libres_a_OBJECTS) $(libres_a_LIBADD)
$(AM_V_at)$(RANLIB) libres.a
mostlyclean-compile: mostlyclean-compile:
-rm -f *.$(OBJEXT) -rm -f *.$(OBJEXT)
@ -219,92 +335,98 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/res_update.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/res_update.Po@am__quote@
.c.o: .c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $< @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj: .c.obj:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
uninstall-info-am:
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) ID: $(am__tagged_files)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ $(am__define_uniq_tagged_files); mkid -fID $$unique
unique=`for i in $$list; do \ tags: tags-am
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ TAGS: tags
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(TAGS_FILES) $(LISP) set x; \
tags=; \
here=`pwd`; \ here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ $(am__define_uniq_tagged_files); \
unique=`for i in $$list; do \ shift; \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \ test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ if test $$# -gt 0; then \
$$tags $$unique; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi fi
ctags: CTAGS ctags: ctags-am
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP) CTAGS: ctags
tags=; \ ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
here=`pwd`; \ $(am__define_uniq_tagged_files); \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ test -z "$(CTAGS_ARGS)$$unique" \
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" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique $$unique
GTAGS: GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \ here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \ && $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here && gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-am
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags: distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES) distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; for file in $$list; do \ list='$(DISTFILES)'; \
case $$file in \ dist_files=`for file in $$list; do echo $$file; done | \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ sed -e "s|^$$srcdirstrip/||;t" \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
esac; \ case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \ fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \ else \
test -f $(distdir)/$$file \ test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file $(distdir)/$$file \ || cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \ || exit 1; \
fi; \ fi; \
done done
@ -322,16 +444,22 @@ install-am: all-am
installcheck: installcheck-am installcheck: installcheck-am
install-strip: install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ if test -z '$(STRIP)'; then \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
`test -z '$(STRIP)' || \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic: mostlyclean-generic:
clean-generic: clean-generic:
distclean-generic: distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -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: maintainer-clean-generic:
@echo "This command is intended for maintainers to use" @echo "This command is intended for maintainers to use"
@ -352,18 +480,38 @@ dvi-am:
html: html-am html: html-am
html-am:
info: info-am info: info-am
info-am: info-am:
install-data-am: install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am: install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am install-info: install-info-am
install-info-am:
install-man: install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am: installcheck-am:
maintainer-clean: maintainer-clean-am maintainer-clean: maintainer-clean-am
@ -383,18 +531,23 @@ ps: ps-am
ps-am: ps-am:
uninstall-am: uninstall-info-am uninstall-am:
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ .MAKE: install-am install-strip
clean-noinstLIBRARIES ctags distclean distclean-compile \
distclean-generic distclean-tags distdir dvi dvi-am html \ .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
html-am info info-am install install-am install-data \ clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \
install-data-am install-exec install-exec-am install-info \ distclean-compile distclean-generic distclean-tags distdir dvi \
install-info-am install-man install-strip installcheck \ dvi-am html html-am info info-am install install-am \
installcheck-am installdirs maintainer-clean \ 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 maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \ maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
uninstall-am uninstall-info-am uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables. # 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. # Otherwise a system limit (for SysV at least) may be exceeded.

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.13.1 from Makefile.am. # Makefile.in generated by automake 1.14 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2012 Free Software Foundation, Inc. # Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -16,23 +16,51 @@
VPATH = @srcdir@ VPATH = @srcdir@
am__make_dryrun = \ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
{ \ am__make_running_with_option = \
am__dry=no; \ case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \ case $$MAKEFLAGS in \
*\\[\ \ ]*) \ *\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ bs=\\; \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
*) \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \ esac; \
test $$am__dry = yes; \ fi; \
} skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
@ -349,6 +377,7 @@ uninstall-libLIBRARIES:
clean-libLIBRARIES: clean-libLIBRARIES:
-test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES) -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
libomapi.a: $(libomapi_a_OBJECTS) $(libomapi_a_DEPENDENCIES) $(EXTRA_libomapi_a_DEPENDENCIES) libomapi.a: $(libomapi_a_OBJECTS) $(libomapi_a_DEPENDENCIES) $(EXTRA_libomapi_a_DEPENDENCIES)
$(AM_V_at)-rm -f libomapi.a $(AM_V_at)-rm -f libomapi.a
$(AM_V_AR)$(libomapi_a_AR) libomapi.a $(libomapi_a_OBJECTS) $(libomapi_a_LIBADD) $(AM_V_AR)$(libomapi_a_AR) libomapi.a $(libomapi_a_OBJECTS) $(libomapi_a_LIBADD)
@ -356,6 +385,7 @@ libomapi.a: $(libomapi_a_OBJECTS) $(libomapi_a_DEPENDENCIES) $(EXTRA_libomapi_a_
clean-noinstPROGRAMS: clean-noinstPROGRAMS:
-test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
svtest$(EXEEXT): $(svtest_OBJECTS) $(svtest_DEPENDENCIES) $(EXTRA_svtest_DEPENDENCIES) svtest$(EXEEXT): $(svtest_OBJECTS) $(svtest_DEPENDENCIES) $(EXTRA_svtest_DEPENDENCIES)
@rm -f svtest$(EXEEXT) @rm -f svtest$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(svtest_OBJECTS) $(svtest_LDADD) $(LIBS) $(AM_V_CCLD)$(LINK) $(svtest_OBJECTS) $(svtest_LDADD) $(LIBS)
@ -394,14 +424,14 @@ distclean-compile:
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj: .c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
install-man3: $(man_MANS) install-man3: $(man_MANS)
@$(NORMAL_INSTALL) @$(NORMAL_INSTALL)
@list1=''; \ @list1=''; \

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.13.1 from Makefile.am. # Makefile.in generated by automake 1.14 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2012 Free Software Foundation, Inc. # Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -15,23 +15,51 @@
@SET_MAKE@ @SET_MAKE@
VPATH = @srcdir@ VPATH = @srcdir@
am__make_dryrun = \ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
{ \ am__make_running_with_option = \
am__dry=no; \ case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \ case $$MAKEFLAGS in \
*\\[\ \ ]*) \ *\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ bs=\\; \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
*) \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \ esac; \
test $$am__dry = yes; \ fi; \
} skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
@ -338,6 +366,7 @@ uninstall-sbinPROGRAMS:
clean-sbinPROGRAMS: clean-sbinPROGRAMS:
-test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
dhcrelay$(EXEEXT): $(dhcrelay_OBJECTS) $(dhcrelay_DEPENDENCIES) $(EXTRA_dhcrelay_DEPENDENCIES) dhcrelay$(EXEEXT): $(dhcrelay_OBJECTS) $(dhcrelay_DEPENDENCIES) $(EXTRA_dhcrelay_DEPENDENCIES)
@rm -f dhcrelay$(EXEEXT) @rm -f dhcrelay$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(dhcrelay_OBJECTS) $(dhcrelay_LDADD) $(LIBS) $(AM_V_CCLD)$(LINK) $(dhcrelay_OBJECTS) $(dhcrelay_LDADD) $(LIBS)
@ -355,14 +384,14 @@ distclean-compile:
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj: .c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
install-man8: $(man_MANS) install-man8: $(man_MANS)
@$(NORMAL_INSTALL) @$(NORMAL_INSTALL)
@list1=''; \ @list1=''; \

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.13.1 from Makefile.am. # Makefile.in generated by automake 1.14 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2012 Free Software Foundation, Inc. # Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -16,23 +16,51 @@
VPATH = @srcdir@ VPATH = @srcdir@
am__make_dryrun = \ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
{ \ am__make_running_with_option = \
am__dry=no; \ case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \ case $$MAKEFLAGS in \
*\\[\ \ ]*) \ *\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ bs=\\; \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
*) \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \ esac; \
test $$am__dry = yes; \ fi; \
} skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
@ -411,6 +439,7 @@ uninstall-sbinPROGRAMS:
clean-sbinPROGRAMS: clean-sbinPROGRAMS:
-test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
dhcpd$(EXEEXT): $(dhcpd_OBJECTS) $(dhcpd_DEPENDENCIES) $(EXTRA_dhcpd_DEPENDENCIES) dhcpd$(EXEEXT): $(dhcpd_OBJECTS) $(dhcpd_DEPENDENCIES) $(EXTRA_dhcpd_DEPENDENCIES)
@rm -f dhcpd$(EXEEXT) @rm -f dhcpd$(EXEEXT)
$(AM_V_CCLD)$(dhcpd_LINK) $(dhcpd_OBJECTS) $(dhcpd_LDADD) $(LIBS) $(AM_V_CCLD)$(dhcpd_LINK) $(dhcpd_OBJECTS) $(dhcpd_LDADD) $(LIBS)
@ -444,14 +473,14 @@ distclean-compile:
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj: .c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
dhcpd-dhcpd.o: dhcpd.c dhcpd-dhcpd.o: dhcpd.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dhcpd_CFLAGS) $(CFLAGS) -MT dhcpd-dhcpd.o -MD -MP -MF $(DEPDIR)/dhcpd-dhcpd.Tpo -c -o dhcpd-dhcpd.o `test -f 'dhcpd.c' || echo '$(srcdir)/'`dhcpd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dhcpd_CFLAGS) $(CFLAGS) -MT dhcpd-dhcpd.o -MD -MP -MF $(DEPDIR)/dhcpd-dhcpd.Tpo -c -o dhcpd-dhcpd.o `test -f 'dhcpd.c' || echo '$(srcdir)/'`dhcpd.c
@ -805,13 +834,12 @@ uninstall-dist_sysconfDATA:
# (which will cause the Makefiles to be regenerated when you run 'make'); # (which will cause the Makefiles to be regenerated when you run 'make');
# (2) otherwise, pass the desired values on the 'make' command line. # (2) otherwise, pass the desired values on the 'make' command line.
$(am__recursive_targets): $(am__recursive_targets):
@fail= failcom='exit 1'; \ @fail=; \
for f in x $$MAKEFLAGS; do \ if $(am__make_keepgoing); then \
case $$f in \ failcom='fail=yes'; \
*=* | --[!k]*);; \ else \
*k*) failcom='fail=yes';; \ failcom='exit 1'; \
esac; \ fi; \
done; \
dot_seen=no; \ dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \ target=`echo $@ | sed s/-recursive//`; \
case "$@" in \ case "$@" in \

View File

@ -38,6 +38,9 @@
#include "dst/md5.h" #include "dst/md5.h"
#include <dns/result.h> #include <dns/result.h>
char *ddns_standard_tag = "ddns-dhcid";
char *ddns_interim_tag = "ddns-txt";
#ifdef NSUPDATE #ifdef NSUPDATE
static void ddns_fwd_srv_connector(struct lease *lease, static void ddns_fwd_srv_connector(struct lease *lease,
@ -73,16 +76,13 @@ ddns_updates(struct packet *packet, struct lease *lease, struct lease *old,
struct data_string ddns_domainname; struct data_string ddns_domainname;
struct data_string old_ddns_fwd_name; struct data_string old_ddns_fwd_name;
struct data_string ddns_fwd_name; struct data_string ddns_fwd_name;
//struct data_string ddns_rev_name;
struct data_string ddns_dhcid; struct data_string ddns_dhcid;
struct binding_scope **scope = NULL; struct binding_scope **scope = NULL;
//struct iaddr addr;
struct data_string d1; struct data_string d1;
struct option_cache *oc; struct option_cache *oc;
int s1, s2; int s1, s2;
int result = 0; int result = 0;
int server_updates_a = 1; int server_updates_a = 1;
//int server_updates_ptr = 1;
struct buffer *bp = (struct buffer *)0; struct buffer *bp = (struct buffer *)0;
int ignorep = 0, client_ignorep = 0; int ignorep = 0, client_ignorep = 0;
int rev_name_len; int rev_name_len;
@ -91,8 +91,9 @@ ddns_updates(struct packet *packet, struct lease *lease, struct lease *old,
dhcp_ddns_cb_t *ddns_cb; dhcp_ddns_cb_t *ddns_cb;
int do_remove = 0; int do_remove = 0;
if (ddns_update_style != 2) if ((ddns_update_style != DDNS_UPDATE_STYLE_STANDARD) &&
return 0; (ddns_update_style != DDNS_UPDATE_STYLE_INTERIM))
return (0);
/* /*
* sigh, I want to cancel any previous udpates before we do anything * sigh, I want to cancel any previous udpates before we do anything
@ -151,7 +152,6 @@ ddns_updates(struct packet *packet, struct lease *lease, struct lease *old,
memset (&ddns_domainname, 0, sizeof (ddns_domainname)); memset (&ddns_domainname, 0, sizeof (ddns_domainname));
memset (&old_ddns_fwd_name, 0, sizeof (ddns_fwd_name)); memset (&old_ddns_fwd_name, 0, sizeof (ddns_fwd_name));
memset (&ddns_fwd_name, 0, sizeof (ddns_fwd_name)); memset (&ddns_fwd_name, 0, sizeof (ddns_fwd_name));
//memset (&ddns_rev_name, 0, sizeof (ddns_rev_name));
memset (&ddns_dhcid, 0, sizeof (ddns_dhcid)); memset (&ddns_dhcid, 0, sizeof (ddns_dhcid));
/* If we are allowed to accept the client's update of its own A /* If we are allowed to accept the client's update of its own A
@ -265,36 +265,23 @@ ddns_updates(struct packet *packet, struct lease *lease, struct lease *old,
goto in; goto in;
} }
/* See if there's a DHCID on the lease, and if not #if defined (DDNS_UPDATE_SLOW_TRANSITION)
* then potentially look for 'on events' for ad-hoc ddns. /*
* If the slow transition code is enabled check to see
* if the stored type (standard or interim doesn't
* match the type currently in use. If it doesn't
* try to remove and replace the DNS record
*/ */
if (!find_bound_string(&ddns_dhcid, *scope, "ddns-txt") && if (((ddns_update_style == DDNS_UPDATE_STYLE_STANDARD) &&
(old != NULL)) { find_bound_string(&ddns_dhcid, *scope, ddns_interim_tag)) ||
/* If there's no DHCID, the update was probably ((ddns_update_style == DDNS_UPDATE_STYLE_INTERIM) &&
done with the old-style ad-hoc DDNS updates. find_bound_string(&ddns_dhcid, *scope, ddns_standard_tag))) {
So if the expiry and release events look like
they're the same, run them. This should delete
the old DDNS data. */
if (old->on_star.on_expiry ==
old->on_star.on_release) {
execute_statements(NULL, NULL, lease, NULL,
NULL, NULL, scope,
old->on_star.on_expiry,
NULL);
if (old->on_star.on_expiry)
executable_statement_dereference
(&old->on_star.on_expiry,
MDL);
if (old->on_star.on_release)
executable_statement_dereference
(&old->on_star.on_release,
MDL);
/* Now, install the DDNS data the new way. */
goto in;
}
} else
data_string_forget(&ddns_dhcid, MDL); data_string_forget(&ddns_dhcid, MDL);
do_remove = 1;
goto in;
}
#endif
/* See if the administrator wants to do updates even /* See if the administrator wants to do updates even
in cases where the update already appears to have been in cases where the update already appears to have been
done. */ done. */
@ -491,23 +478,69 @@ ddns_updates(struct packet *packet, struct lease *lease, struct lease *old,
data_string_forget(&d1, MDL); data_string_forget(&d1, MDL);
} }
/*
* copy the string now so we can pass it to the dhcid routines
* via the ddns_cb pointer
*/
data_string_copy(&ddns_cb->fwd_name, &ddns_fwd_name, MDL);
/* /*
* If we are updating the A record, compute the DHCID value. * If we are updating the A record, compute the DHCID value.
* We have two options for computing the DHCID value, the older
* interim version and the newer standard version. The interim
* has some issues but is left as is to avoid compatibility issues.
*
* We select the type of DHCID to construct and the information to
* use for the digest based on 4701 section 3.3
*/ */
if ((ddns_cb->flags & DDNS_UPDATE_ADDR) != 0) { if ((ddns_cb->flags & DDNS_UPDATE_ADDR) != 0) {
if (lease6 != NULL) int ddns_type;
result = get_dhcid(&ddns_cb->dhcid, 2, int ddns_len;
lease6->ia->iaid_duid.data, if (ddns_update_style == DDNS_UPDATE_STYLE_STANDARD) {
lease6->ia->iaid_duid.len); /* The standard style */
else if ((lease != NULL) && (lease->uid != NULL) && ddns_cb->lease_tag = ddns_standard_tag;
(lease->uid_len != 0)) ddns_cb->dhcid_class = dns_rdatatype_dhcid;
result = get_dhcid (&ddns_cb->dhcid, ddns_type = 1;
DHO_DHCP_CLIENT_IDENTIFIER, ddns_len = 4;
lease -> uid, lease -> uid_len); } else {
else if (lease != NULL) /* The older interim style */
result = get_dhcid (&ddns_cb->dhcid, 0, ddns_cb->lease_tag = ddns_interim_tag;
lease -> hardware_addr.hbuf, ddns_cb->dhcid_class = dns_rdatatype_txt;
lease -> hardware_addr.hlen); /* for backwards compatibility */
ddns_type = DHO_DHCP_CLIENT_IDENTIFIER;
/* IAID incorrectly included */
ddns_len = 0;
}
if (lease6 != NULL) {
if (lease6->ia->iaid_duid.len < ddns_len)
goto badfqdn;
result = get_dhcid(ddns_cb, 2,
lease6->ia->iaid_duid.data + ddns_len,
lease6->ia->iaid_duid.len - ddns_len);
} else if ((lease != NULL) &&
(lease->uid != NULL) &&
(lease->uid_len != 0)) {
/* If this is standard check for an RFC 4361
* compliant client identifier
*/
if ((ddns_update_style == DDNS_UPDATE_STYLE_STANDARD) &&
(lease->uid[0] == 255)) {
if (lease->uid_len < 5)
goto badfqdn;
result = get_dhcid(ddns_cb, 2,
lease->uid + 5,
lease->uid_len - 5);
} else {
result = get_dhcid(ddns_cb, ddns_type,
lease->uid,
lease->uid_len);
}
} else if (lease != NULL)
result = get_dhcid(ddns_cb, 0,
lease->hardware_addr.hbuf,
lease->hardware_addr.hlen);
else else
log_fatal("Impossible condition at %s:%d.", MDL); log_fatal("Impossible condition at %s:%d.", MDL);
@ -519,8 +552,6 @@ ddns_updates(struct packet *packet, struct lease *lease, struct lease *old,
* Perform updates. * Perform updates.
*/ */
data_string_copy(&ddns_cb->fwd_name, &ddns_fwd_name, MDL);
if (ddns_cb->flags && DDNS_UPDATE_ADDR) { if (ddns_cb->flags && DDNS_UPDATE_ADDR) {
oc = lookup_option(&server_universe, options, oc = lookup_option(&server_universe, options,
SV_DDNS_CONFLICT_DETECT); SV_DDNS_CONFLICT_DETECT);
@ -713,8 +744,6 @@ ddns_updates(struct packet *packet, struct lease *lease, struct lease *old,
data_string_forget(&ddns_domainname, MDL); data_string_forget(&ddns_domainname, MDL);
data_string_forget(&old_ddns_fwd_name, MDL); data_string_forget(&old_ddns_fwd_name, MDL);
data_string_forget(&ddns_fwd_name, MDL); data_string_forget(&ddns_fwd_name, MDL);
//data_string_forget(&ddns_rev_name, MDL);
//data_string_forget(&ddns_dhcid, MDL);
if (bp) if (bp)
buffer_dereference(&bp, MDL); buffer_dereference(&bp, MDL);
@ -828,18 +857,21 @@ ddns_update_lease_text(dhcp_ddns_cb_t *ddns_cb,
case DDNS_STATE_ADD_FW_NXDOMAIN: case DDNS_STATE_ADD_FW_NXDOMAIN:
bind_ds_value(scope, "ddns-fwd-name", &ddns_cb->fwd_name); bind_ds_value(scope, "ddns-fwd-name", &ddns_cb->fwd_name);
/* convert from dns version to lease version of dhcid */ if (ddns_cb->lease_tag == ddns_standard_tag) {
memset(&lease_dhcid, 0, sizeof(lease_dhcid)); bind_ds_value(scope, ddns_standard_tag, &ddns_cb->dhcid);
dhcid_tolease(&ddns_cb->dhcid, &lease_dhcid); } else {
bind_ds_value(scope, "ddns-txt", &lease_dhcid); /* convert from dns version to lease version of dhcid */
data_string_forget(&lease_dhcid, MDL); memset(&lease_dhcid, 0, sizeof(lease_dhcid));
dhcid_tolease(&ddns_cb->dhcid, &lease_dhcid);
bind_ds_value(scope, ddns_interim_tag, &lease_dhcid);
data_string_forget(&lease_dhcid, MDL);
}
break; break;
case DDNS_STATE_REM_FW_NXRR: case DDNS_STATE_REM_FW_NXRR:
case DDNS_STATE_REM_FW_YXDHCID: case DDNS_STATE_REM_FW_YXDHCID:
unset(*scope, "ddns-fwd-name"); unset(*scope, "ddns-fwd-name");
unset(*scope, "ddns-txt"); unset(*scope, ddns_cb->lease_tag);
break; break;
} }
@ -1797,7 +1829,8 @@ ddns_removals(struct lease *lease,
if (*scope == NULL) if (*scope == NULL)
goto cleanup; goto cleanup;
if (ddns_update_style != 2) if ((ddns_update_style != DDNS_UPDATE_STYLE_STANDARD) &&
(ddns_update_style != DDNS_UPDATE_STYLE_INTERIM))
goto cleanup; goto cleanup;
/* Assume that we are removing both records */ /* Assume that we are removing both records */
@ -1829,15 +1862,22 @@ ddns_removals(struct lease *lease,
} }
/* /*
* Find the ptr name and copy it to the control block. If we don't * Find the txt or dhcid tag and copy it to the control block. If we don't
* have it this isn't an interim or rfc3??? record so we can't delete * have one this isn't an interim or standard record so we can't delete
* the A record using this mechanism but we can delete the ptr record. * the A record using this mechanism but we can delete the ptr record.
* In this case we will attempt to do any requested next step. * In this case we will attempt to do any requested next step.
*/ */
memset(&leaseid, 0, sizeof(leaseid)); memset(&leaseid, 0, sizeof(leaseid));
if (!find_bound_string (&leaseid, *scope, "ddns-txt")) { if (find_bound_string (&leaseid, *scope, ddns_standard_tag)) {
ddns_cb->flags &= ~DDNS_UPDATE_ADDR; /* We have a standard tag */
} else { ddns_cb->lease_tag = ddns_standard_tag;
ddns_cb->dhcid_class = dns_rdatatype_dhcid;
data_string_copy(&ddns_cb->dhcid, &leaseid, MDL);
data_string_forget(&leaseid, MDL);
} else if (find_bound_string (&leaseid, *scope, ddns_interim_tag)) {
/* we have an interim tag */
ddns_cb->lease_tag = ddns_interim_tag;
ddns_cb->dhcid_class = dns_rdatatype_txt;
if (dhcid_fromlease(&ddns_cb->dhcid, &leaseid) != if (dhcid_fromlease(&ddns_cb->dhcid, &leaseid) !=
ISC_R_SUCCESS) { ISC_R_SUCCESS) {
/* We couldn't convert the dhcid from the lease /* We couldn't convert the dhcid from the lease
@ -1847,7 +1887,9 @@ ddns_removals(struct lease *lease,
ddns_cb->flags &= ~DDNS_UPDATE_ADDR; ddns_cb->flags &= ~DDNS_UPDATE_ADDR;
} }
data_string_forget(&leaseid, MDL); data_string_forget(&leaseid, MDL);
} } else {
ddns_cb->flags &= ~DDNS_UPDATE_ADDR;
}
/* /*
* Find the rev name and copy it to the control block. If we don't * Find the rev name and copy it to the control block. If we don't
@ -1894,7 +1936,7 @@ ddns_removals(struct lease *lease,
else { else {
/*remove info from scope */ /*remove info from scope */
unset(*scope, "ddns-fwd-name"); unset(*scope, "ddns-fwd-name");
unset(*scope, "ddns-txt"); unset(*scope, ddns_cb->lease_tag);
} }
} }

View File

@ -76,86 +76,6 @@ option server.ddns-hostname = \n\
option server.ddns-domainname = config-option domain-name; \n\ option server.ddns-domainname = config-option domain-name; \n\
option server.ddns-rev-domainname = \"in-addr.arpa.\";"; option server.ddns-rev-domainname = \"in-addr.arpa.\";";
/* This is the old-style name service updater that is executed
whenever a lease is committed. It does not follow the DHCP-DNS
draft at all. */
char old_nsupdate [] = " \n\
on commit { \n\
if (not static and \n\
((config-option server.ddns-updates = null) or \n\
(config-option server.ddns-updates != 0))) { \n\
set new-ddns-fwd-name = \n\
concat (pick (config-option server.ddns-hostname, \n\
option host-name), \".\", \n\
pick (config-option server.ddns-domainname, \n\
config-option domain-name)); \n\
if (defined (ddns-fwd-name) and ddns-fwd-name != new-ddns-fwd-name) { \n\
switch (ns-update (delete (IN, A, ddns-fwd-name, leased-address))) { \n\
case NOERROR: \n\
unset ddns-fwd-name; \n\
on expiry or release { \n\
} \n\
} \n\
} \n\
\n\
if (not defined (ddns-fwd-name)) { \n\
set ddns-fwd-name = new-ddns-fwd-name; \n\
if defined (ddns-fwd-name) { \n\
switch (ns-update (not exists (IN, A, ddns-fwd-name, null), \n\
add (IN, A, ddns-fwd-name, leased-address, \n\
lease-time / 2))) { \n\
default: \n\
unset ddns-fwd-name; \n\
break; \n\
\n\
case NOERROR: \n\
set ddns-rev-name = \n\
concat (binary-to-ascii (10, 8, \".\", \n\
reverse (1, \n\
leased-address)), \".\", \n\
pick (config-option server.ddns-rev-domainname, \n\
\"in-addr.arpa.\")); \n\
switch (ns-update (delete (IN, PTR, ddns-rev-name, null), \n\
add (IN, PTR, ddns-rev-name, ddns-fwd-name, \n\
lease-time / 2))) \n\
{ \n\
default: \n\
unset ddns-rev-name; \n\
on release or expiry { \n\
switch (ns-update (delete (IN, A, ddns-fwd-name, \n\
leased-address))) { \n\
case NOERROR: \n\
unset ddns-fwd-name; \n\
break; \n\
} \n\
on release or expiry; \n\
} \n\
break; \n\
\n\
case NOERROR: \n\
on release or expiry { \n\
switch (ns-update (delete (IN, PTR, ddns-rev-name, null))) {\n\
case NOERROR: \n\
unset ddns-rev-name; \n\
break; \n\
} \n\
switch (ns-update (delete (IN, A, ddns-fwd-name, \n\
leased-address))) { \n\
case NOERROR: \n\
unset ddns-fwd-name; \n\
break; \n\
} \n\
on release or expiry; \n\
} \n\
} \n\
} \n\
} \n\
} \n\
unset new-ddns-fwd-name; \n\
} \n\
}";
#endif /* NSUPDATE */ #endif /* NSUPDATE */
int ddns_update_style; int ddns_update_style;
@ -875,9 +795,6 @@ void postconf_initialization (int quiet)
struct option_cache *oc; struct option_cache *oc;
char *s; char *s;
isc_result_t result; isc_result_t result;
#if defined (NSUPDATE)
struct parse *parse;
#endif
int tmp; int tmp;
/* Now try to get the lease file name. */ /* Now try to get the lease file name. */
@ -1133,49 +1050,6 @@ void postconf_initialization (int quiet)
/* Don't need the options anymore. */ /* Don't need the options anymore. */
option_state_dereference (&options, MDL); option_state_dereference (&options, MDL);
#if defined (NSUPDATE)
/* If old-style ddns updates have been requested, parse the
old-style ddns updater. */
if (ddns_update_style == 1) {
struct executable_statement **e, *s;
if (root_group -> statements) {
s = (struct executable_statement *)0;
if (!executable_statement_allocate (&s, MDL))
log_fatal ("no memory for ddns updater");
executable_statement_reference
(&s -> next, root_group -> statements, MDL);
executable_statement_dereference
(&root_group -> statements, MDL);
executable_statement_reference
(&root_group -> statements, s, MDL);
s -> op = statements_statement;
e = &s -> data.statements;
executable_statement_dereference (&s, MDL);
} else {
e = &root_group -> statements;
}
/* Set up the standard name service updater routine. */
parse = NULL;
result = new_parse(&parse, -1, old_nsupdate,
sizeof(old_nsupdate) - 1,
"old name service update routine", 0);
if (result != ISC_R_SUCCESS)
log_fatal ("can't begin parsing old ddns updater!");
if (parse != NULL) {
tmp = 0;
if (!(parse_executable_statements(e, parse, &tmp,
context_any))) {
end_parse(&parse);
log_fatal("can't parse standard ddns updater!");
}
}
end_parse(&parse);
}
#endif
} }
void postdb_startup (void) void postdb_startup (void)

View File

@ -1,6 +1,6 @@
.\" dhcpd.conf.5 .\" dhcpd.conf.5
.\" .\"
.\" Copyright (c) 2004-2012 by Internet Systems Consortium, Inc. ("ISC") .\" Copyright (c) 2004-2013 by Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (c) 1996-2003 by Internet Software Consortium .\" Copyright (c) 1996-2003 by Internet Software Consortium
.\" .\"
.\" Permission to use, copy, modify, and distribute this software for any .\" Permission to use, copy, modify, and distribute this software for any
@ -1039,7 +1039,7 @@ class "customer" {
.fi .fi
.PP .PP
Now whenever a request comes in from a customer site, the circuit ID Now whenever a request comes in from a customer site, the circuit ID
option will be checked against the class's hash table. If a subclass option will be checked against the class\'s hash table. If a subclass
is found that matches the circuit ID, the client will be classified in is found that matches the circuit ID, the client will be classified in
that subclass and treated accordingly. If no subclass is found that subclass and treated accordingly. If no subclass is found
matching the circuit ID, a new one will be created and logged in the matching the circuit ID, a new one will be created and logged in the
@ -1085,115 +1085,24 @@ the Domain Name System to be updated. These updates are RFC 2136
compliant so any DNS server supporting RFC 2136 should be able to compliant so any DNS server supporting RFC 2136 should be able to
accept updates from the DHCP server. accept updates from the DHCP server.
.PP .PP
Two DNS update schemes are currently implemented, and another is There are two DNS schemes implemented. The interim option is
planned. The two that are currently implemented are the ad-hoc DNS based on draft revisions of the DDNS documents while the standard
update mode and the interim DHCP-DNS interaction draft update mode. option is based on the RFCs for DHCP-DNS interaction and DHCIDs.
In the future we plan to add a third mode which will be the standard A third option, ad-hoc, was deprecated and has now been removed
DNS update method based on the RFCS for DHCP-DNS interaction and DHCID from the code base. The DHCP server must be configured to use
The DHCP server must be configured to use one of the two one of the two currently-supported methods, or not to do DNS updates.
currently-supported methods, or not to do dns updates. .PP
This can be done with the New installations should use the standard option. Older
installations may want to continue using the interim option for
backwards compatibility with the DNS database until the database
can be updated. This can be done with the
.I ddns-update-style .I ddns-update-style
configuration parameter. configuration parameter.
.SH THE AD-HOC DNS UPDATE SCHEME .SH THE DNS UPDATE SCHEME
The ad-hoc Dynamic DNS update scheme is the interim and standard DNS update schemes operate mostly according
.B now deprecated to work from the IETF. The interim version was based on the drafts
and in progress at the time while the standard is based on the completed
.B RFCs. The standard RFCs are:
does not work.
In future releases of the ISC DHCP server, this scheme will not likely be
available. The interim scheme works, allows for failover, and should now be
used. The following description is left here for informational purposes
only.
.PP
The ad-hoc Dynamic DNS update scheme implemented in this version of
the ISC DHCP server is a prototype design, which does not
have much to do with the standard update method that is being
standardized in the IETF DHC working group, but rather implements some
very basic, yet useful, update capabilities. This mode
.B does not work
with the
.I failover protocol
because it does not account for the possibility of two different DHCP
servers updating the same set of DNS records.
.PP
For the ad-hoc DNS update method, the client's FQDN is derived in two
parts. First, the hostname is determined. Then, the domain name is
determined, and appended to the hostname.
.PP
The DHCP server determines the client's hostname by first looking for
a \fIddns-hostname\fR configuration option, and using that if it is
present. If no such option is present, the server looks for a
valid hostname in the FQDN option sent by the client. If one is
found, it is used; otherwise, if the client sent a host-name option,
that is used. Otherwise, if there is a host declaration that applies
to the client, the name from that declaration will be used. If none
of these applies, the server will not have a hostname for the client,
and will not be able to do a DNS update.
.PP
The domain name is determined from the
.I ddns-domainname
configuration option. The default configuration for this option is:
.nf
.sp 1
option server.ddns-domainname = config-option domain-name;
.fi
So if this configuration option is not configured to a different
value (over-riding the above default), or if a domain-name option
has not been configured for the client's scope, then the server will
not attempt to perform a DNS update.
.PP
The client's fully-qualified domain name, derived as we have
described, is used as the name on which an "A" record will be stored.
The A record will contain the IP address that the client was assigned
in its lease. If there is already an A record with the same name in
the DNS server, no update of either the A or PTR records will occur -
this prevents a client from claiming that its hostname is the name of
some network server. For example, if you have a fileserver called
"fs.sneedville.edu", and the client claims its hostname is "fs", no
DNS update will be done for that client, and an error message will be
logged.
.PP
If the A record update succeeds, a PTR record update for the assigned
IP address will be done, pointing to the A record. This update is
unconditional - it will be done even if another PTR record of the same
name exists. Since the IP address has been assigned to the DHCP
server, this should be safe.
.PP
Please note that the current implementation assumes clients only have
a single network interface. A client with two network interfaces
will see unpredictable behavior. This is considered a bug, and will
be fixed in a later release. It may be helpful to enable the
.I one-lease-per-client
parameter so that roaming clients do not trigger this same behavior.
.PP
The DHCP protocol normally involves a four-packet exchange - first the
client sends a DHCPDISCOVER message, then the server sends a
DHCPOFFER, then the client sends a DHCPREQUEST, then the server sends
a DHCPACK. In the current version of the server, the server will do
a DNS update after it has received the DHCPREQUEST, and before it has
sent the DHCPACK. It only sends the DNS update if it has not sent
one for the client's address before, in order to minimize the impact
on the DHCP server.
.PP
When the client's lease expires, the DHCP server (if it is operating
at the time, or when next it operates) will remove the client's A and
PTR records from the DNS database. If the client releases its lease
by sending a DHCPRELEASE message, the server will likewise remove the
A and PTR records.
.SH THE INTERIM DNS UPDATE SCHEME
The interim DNS update scheme operates mostly according to several
drafts considered by the IETF. While the drafts have since become
RFCs the code was written before they were finalized and there are
some differences between our code and the final RFCs. We plan to
update our code, probably adding a standard DNS update option, at
some time. The basic framework is similar with the main material
difference being that a DHCID RR was assigned in the RFCs whereas
our code continues to use an experimental TXT record. The format
of the TXT record bears a resemblance to the DHCID RR but it is not
equivalent (MD5 vs SHA1, field length differences etc).
The standard RFCs are:
.PP .PP
.nf .nf
.ce 3 .ce 3
@ -1211,15 +1120,17 @@ draft-ietf-dhc-fqdn-option-??.txt
draft-ietf-dhc-ddns-resolution-??.txt draft-ietf-dhc-ddns-resolution-??.txt
.fi .fi
.PP .PP
Because our implementation is slightly different than the standard, we The basic framework for the two schemes is similar with the main
will briefly document the operation of this update style here. material difference being that a DHCID RR is used in the standard
version while the interim versions uses a TXT RR. The format
of the TXT record bears a resemblance to the DHCID RR but it is not
equivalent (MD5 vs SHA2, field length differences etc).
.PP .PP
The first point to understand about this style of DNS update is that In these two schemes the DHCP server does not necessarily
unlike the ad-hoc style, the DHCP server does not necessarily
always update both the A and the PTR records. The FQDN option always update both the A and the PTR records. The FQDN option
includes a flag which, when sent by the client, indicates that the includes a flag which, when sent by the client, indicates that the
client wishes to update its own A record. In that case, the server client wishes to update its own A record. In that case, the server
can be configured either to honor the client's intentions or ignore can be configured either to honor the client\'s intentions or ignore
them. This is done with the statement \fIallow client-updates;\fR or them. This is done with the statement \fIallow client-updates;\fR or
the statement \fIignore client-updates;\fR. By default, client the statement \fIignore client-updates;\fR. By default, client
updates are allowed. updates are allowed.
@ -1239,15 +1150,14 @@ IP address, it can update its own A record, assuming that the
"radish.org" DNS server will allow it to do so. "radish.org" DNS server will allow it to do so.
.PP .PP
If the server is configured not to allow client updates, or if the If the server is configured not to allow client updates, or if the
client doesn't want to do its own update, the server will simply client doesn\'t want to do its own update, the server will simply
choose a name for the client from either the \fBfqdn\fR option (if present) choose a name for the client from either the \fBfqdn\fR option (if present)
or the hostname option (if present). It will use its own or the hostname option (if present). It will use its own
domain name for the client, just as in the ad-hoc update scheme. domain name for the client. It will then update both the A and PTR
It will then update both the A and PTR record, using the name that it record, using the name that it chose for the client. If the client
chose for the client. If the client sends a fully-qualified domain sends a fully-qualified domain name in the \fBfqdn\fR option, the
name in the \fBfqdn\fR option, the server uses only the leftmost part of the server uses only the leftmost part of the domain name - in the
domain name - in the example above, "jschmoe" instead of example above, "jschmoe" instead of "jschmoe.radish.org".
"jschmoe.radish.org".
.PP .PP
Further, if the \fIignore client-updates;\fR directive is used, then Further, if the \fIignore client-updates;\fR directive is used, then
the server will in addition send a response in the DHCP packet, using the server will in addition send a response in the DHCP packet, using
@ -1257,49 +1167,41 @@ response is sent which indicates the client may not perform updates.
.PP .PP
Also, if the Also, if the
.I use-host-decl-names .I use-host-decl-names
configuration option is enabled, then the host declaration's configuration option is enabled, then the host declaration\'s
.I hostname .I hostname
will be used in place of the will be used in place of the
.I hostname .I hostname
option, and the same rules will apply as described above. option, and the same rules will apply as described above.
.PP .PP
The other difference between the ad-hoc scheme and the interim Both the standard and interim options also include a method to
scheme is that with the interim scheme, a method is used that allow more than one DHCP server to update the DNS database without
allows more than one DHCP server to update the DNS database without accidentally deleting A records that shouldn\'t be deleted nor failing
accidentally deleting A records that shouldn't be deleted nor failing to add A records that should be added. For the standard option the
to add A records that should be added. The scheme works as follows: method works as follows:
.PP .PP
When the DHCP server issues a client a new lease, it creates a text When the DHCP server issues a client a new lease, it creates a text
string that is an MD5 hash over the DHCP client's identification (see string that is an SHA hash over the DHCP client\'s identification (see
draft-ietf-dnsext-dhcid-rr-??.txt for details). The update adds an A RFCs 4701 & 4702 for details). The update attempts to add an A
record with the name the server chose and a TXT record containing the record with the name the server chose and a DHCID record containing the
hashed identifier string (hashid). If this update succeeds, the hashed identifier string (hashid). If this update succeeds, the
server is done. server is done.
.PP .PP
If the update fails because the A record already exists, then the DHCP If the update fails because the A record already exists, then the DHCP
server attempts to add the A record with the prerequisite that there server attempts to add the A record with the prerequisite that there
must be a TXT record in the same name as the new A record, and that must be a DHCID record in the same name as the new A record, and that
TXT record's contents must be equal to hashid. If this update DHCID record\'s contents must be equal to hashid. If this update
succeeds, then the client has its A record and PTR record. If it succeeds, then the client has its A record and PTR record. If it
fails, then the name the client has been assigned (or requested) is in fails, then the name the client has been assigned (or requested) is in
use, and can't be used by the client. At this point the DHCP server use, and can\'t be used by the client. At this point the DHCP server
gives up trying to do a DNS update for the client until the client gives up trying to do a DNS update for the client until the client
chooses a new name. chooses a new name.
.PP .PP
The interim DNS update scheme is called interim for two reasons. The server also does not update very aggressively. Because each
First, it does not quite follow the RFCs. The RFCs call for a DNS update involves a round trip to the DNS server, there is a cost
new DHCID RRtype while he interim DNS update scheme uses a TXT record. associated with doing updates even if they do not actually modify
The ddns-resolution draft called for the DHCP server to put a DHCID RR the DNS database. So the DHCP server tracks whether or not it has
on the PTR record, but the \fIinterim\fR update method does not do this. updated the record in the past (this information is stored on the
In the final RFC this requirement was relaxed such that a server may lease) and does not attempt to update records that it
add a DHCID RR to the PTR record.
.PP
In addition to these differences, the server also does not update very
aggressively. Because each DNS update involves a round trip to the
DNS server, there is a cost associated with doing updates even if they
do not actually modify the DNS database. So the DHCP server tracks
whether or not it has updated the record in the past (this information
is stored on the lease) and does not attempt to update records that it
thinks it has already updated. thinks it has already updated.
.PP .PP
This can lead to cases where the DHCP server adds a record, and then This can lead to cases where the DHCP server adds a record, and then
@ -1308,6 +1210,15 @@ never again updates the DNS because it thinks the data is already
there. In this case the data can be removed from the lease through there. In this case the data can be removed from the lease through
operator intervention, and once this has been done, the DNS will be operator intervention, and once this has been done, the DNS will be
updated the next time the client renews. updated the next time the client renews.
.PP
The interim DNS update scheme was written before the RFCs were finalized
and does not quite follow them. The RFCs call for a new DHCID RRtype
while he interim DNS update scheme uses a TXT record. In addition
the ddns-resolution draft called for the DHCP server to put a DHCID RR
on the PTR record, but the \fIinterim\fR update method does not do this.
In the final RFC this requirement was relaxed such that a server may
add a DHCID RR to the PTR record.
.PP
.SH DYNAMIC DNS UPDATE SECURITY .SH DYNAMIC DNS UPDATE SECURITY
.PP .PP
When you set your DNS server up to allow updates from the DHCP server, When you set your DNS server up to allow updates from the DHCP server,
@ -1389,24 +1300,15 @@ Also keep in mind that zone names in your DHCP configuration should end in a
configuration, zone names are not encapsulated in quotes where there are in configuration, zone names are not encapsulated in quotes where there are in
the DNS configuration. the DNS configuration.
.PP .PP
You should choose your own secret key, of course. The ISC BIND 8 and You should choose your own secret key, of course. The ISC BIND 9
9 distributions come with a program for generating secret keys called distribution comes with a program for generating secret keys called
dnssec-keygen. The version that comes with BIND 9 is likely to produce a dnssec-keygen. If you are using BIND 9\'s
substantially more random key, so we recommend you use that one even
if you are not using BIND 9 as your DNS server. If you are using BIND 9's
dnssec-keygen, the above key would be created as follows: dnssec-keygen, the above key would be created as follows:
.PP .PP
.nf .nf
dnssec-keygen -a HMAC-MD5 -b 128 -n USER DHCP_UPDATER dnssec-keygen -a HMAC-MD5 -b 128 -n USER DHCP_UPDATER
.fi .fi
.PP .PP
If you are using the BIND 8 dnskeygen program, the following command will
generate a key as seen above:
.PP
.nf
dnskeygen -H 128 -u -c -n DHCP_UPDATER
.fi
.PP
You may wish to enable logging of DNS updates on your DNS server. You may wish to enable logging of DNS updates on your DNS server.
To do so, you might write a logging statement like the following: To do so, you might write a logging statement like the following:
.PP .PP
@ -1448,15 +1350,7 @@ and the expiry event, when the commitment expires.
To declare a set of statements to execute when an event happens, you To declare a set of statements to execute when an event happens, you
must use the \fBon\fR statement, followed by the name of the event, must use the \fBon\fR statement, followed by the name of the event,
followed by a series of statements to execute when the event happens, followed by a series of statements to execute when the event happens,
enclosed in braces. Events are used to implement DNS enclosed in braces.
updates, so you should not define your own event handlers if you are
using the built-in DNS update mechanism.
.PP
The built-in version of the DNS update mechanism is in a text
string towards the top of server/dhcpd.c. If you want to use events
for things other than DNS updates, and you also want DNS updates, you
will have to start out by copying this code into your dhcpd.conf file
and modifying it.
.SH REFERENCE: DECLARATIONS .SH REFERENCE: DECLARATIONS
.PP .PP
.B The .B The
@ -2103,7 +1997,7 @@ The \fIddns-update-style\fR parameter
.PP .PP
The The
.I style .I style
parameter must be one of \fBad-hoc\fR, \fBinterim\fR or \fBnone\fR. parameter must be one of \fBstandard\fR, \fBinterim\fR or \fBnone\fR.
The \fIddns-update-style\fR statement is only meaningful in the outer The \fIddns-update-style\fR statement is only meaningful in the outer
scope - it is evaluated once after reading the dhcpd.conf file, rather scope - it is evaluated once after reading the dhcpd.conf file, rather
than each time a client is assigned an IP address, so there is no way than each time a client is assigned an IP address, so there is no way
@ -2204,16 +2098,15 @@ statement
.B do-forward-updates \fIflag\fB;\fR .B do-forward-updates \fIflag\fB;\fR
.PP .PP
The \fIdo-forward-updates\fR statement instructs the DHCP server as The \fIdo-forward-updates\fR statement instructs the DHCP server as
to whether it should attempt to update a DHCP client's A record to whether it should attempt to update a DHCP client\'s A record
when the client acquires or renews a lease. This statement has no when the client acquires or renews a lease. This statement has no
effect unless DNS updates are enabled and \fBddns-update-style\fR is effect unless DNS updates are enabled. Forward updates are enabled
set to \fBinterim\fR. Forward updates are enabled by default. If by default. If this statement is used to disable forward updates,
this statement is used to disable forward updates, the DHCP server the DHCP server will never attempt to update the client\'s A record,
will never attempt to update the client's A record, and will only ever and will only ever attempt to update the client\'s PTR record if the
attempt to update the client's PTR record if the client supplies an client supplies an FQDN that should be placed in the PTR record using
FQDN that should be placed in the PTR record using the \fBfqdn\fR option. the \fBfqdn\fR option. If forward updates are enabled, the DHCP server
If forward updates are enabled, the DHCP server will still honor the will still honor the setting of the \fBclient-updates\fR flag.
setting of the \fBclient-updates\fR flag.
.RE .RE
.PP .PP
The The

View File

@ -3,7 +3,7 @@
Tables of information only used by server... */ Tables of information only used by server... */
/* /*
* Copyright (c) 2004-2011 by Internet Systems Consortium, Inc. ("ISC") * Copyright (c) 2004-2011,2013 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 1995-2003 by Internet Software Consortium * Copyright (c) 1995-2003 by Internet Software Consortium
* *
* Permission to use, copy, modify, and distribute this software for any * Permission to use, copy, modify, and distribute this software for any
@ -330,6 +330,7 @@ struct enumeration_value ddns_styles_values [] = {
{ "none", 0 }, { "none", 0 },
{ "ad-hoc", 1 }, { "ad-hoc", 1 },
{ "interim", 2 }, { "interim", 2 },
{ "standard", 3 },
{ (char *)0, 0 } { (char *)0, 0 }
}; };

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.13.1 from Makefile.am. # Makefile.in generated by automake 1.14 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2012 Free Software Foundation, Inc. # Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -14,23 +14,51 @@
@SET_MAKE@ @SET_MAKE@
VPATH = @srcdir@ VPATH = @srcdir@
am__make_dryrun = \ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
{ \ am__make_running_with_option = \
am__dry=no; \ case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \ case $$MAKEFLAGS in \
*\\[\ \ ]*) \ *\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ bs=\\; \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
*) \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \ esac; \
test $$am__dry = yes; \ fi; \
} skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
@ -589,15 +617,19 @@ $(am__aclocal_m4_deps):
clean-checkPROGRAMS: clean-checkPROGRAMS:
-test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
dhcpd_unittests$(EXEEXT): $(dhcpd_unittests_OBJECTS) $(dhcpd_unittests_DEPENDENCIES) $(EXTRA_dhcpd_unittests_DEPENDENCIES) dhcpd_unittests$(EXEEXT): $(dhcpd_unittests_OBJECTS) $(dhcpd_unittests_DEPENDENCIES) $(EXTRA_dhcpd_unittests_DEPENDENCIES)
@rm -f dhcpd_unittests$(EXEEXT) @rm -f dhcpd_unittests$(EXEEXT)
$(AM_V_CCLD)$(dhcpd_unittests_LINK) $(dhcpd_unittests_OBJECTS) $(dhcpd_unittests_LDADD) $(LIBS) $(AM_V_CCLD)$(dhcpd_unittests_LINK) $(dhcpd_unittests_OBJECTS) $(dhcpd_unittests_LDADD) $(LIBS)
hash_unittests$(EXEEXT): $(hash_unittests_OBJECTS) $(hash_unittests_DEPENDENCIES) $(EXTRA_hash_unittests_DEPENDENCIES) hash_unittests$(EXEEXT): $(hash_unittests_OBJECTS) $(hash_unittests_DEPENDENCIES) $(EXTRA_hash_unittests_DEPENDENCIES)
@rm -f hash_unittests$(EXEEXT) @rm -f hash_unittests$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(hash_unittests_OBJECTS) $(hash_unittests_LDADD) $(LIBS) $(AM_V_CCLD)$(LINK) $(hash_unittests_OBJECTS) $(hash_unittests_LDADD) $(LIBS)
legacy_unittests$(EXEEXT): $(legacy_unittests_OBJECTS) $(legacy_unittests_DEPENDENCIES) $(EXTRA_legacy_unittests_DEPENDENCIES) legacy_unittests$(EXEEXT): $(legacy_unittests_OBJECTS) $(legacy_unittests_DEPENDENCIES) $(EXTRA_legacy_unittests_DEPENDENCIES)
@rm -f legacy_unittests$(EXEEXT) @rm -f legacy_unittests$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(legacy_unittests_OBJECTS) $(legacy_unittests_LDADD) $(LIBS) $(AM_V_CCLD)$(LINK) $(legacy_unittests_OBJECTS) $(legacy_unittests_LDADD) $(LIBS)
load_bal_unittests$(EXEEXT): $(load_bal_unittests_OBJECTS) $(load_bal_unittests_DEPENDENCIES) $(EXTRA_load_bal_unittests_DEPENDENCIES) load_bal_unittests$(EXEEXT): $(load_bal_unittests_OBJECTS) $(load_bal_unittests_DEPENDENCIES) $(EXTRA_load_bal_unittests_DEPENDENCIES)
@rm -f load_bal_unittests$(EXEEXT) @rm -f load_bal_unittests$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(load_bal_unittests_OBJECTS) $(load_bal_unittests_LDADD) $(LIBS) $(AM_V_CCLD)$(LINK) $(load_bal_unittests_OBJECTS) $(load_bal_unittests_LDADD) $(LIBS)
@ -635,14 +667,14 @@ distclean-compile:
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj: .c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
dhcp.o: ../dhcp.c dhcp.o: ../dhcp.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dhcp.o -MD -MP -MF $(DEPDIR)/dhcp.Tpo -c -o dhcp.o `test -f '../dhcp.c' || echo '$(srcdir)/'`../dhcp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dhcp.o -MD -MP -MF $(DEPDIR)/dhcp.Tpo -c -o dhcp.o `test -f '../dhcp.c' || echo '$(srcdir)/'`../dhcp.c
@ -889,13 +921,12 @@ dhcpd.obj: ../dhcpd.c
# (which will cause the Makefiles to be regenerated when you run 'make'); # (which will cause the Makefiles to be regenerated when you run 'make');
# (2) otherwise, pass the desired values on the 'make' command line. # (2) otherwise, pass the desired values on the 'make' command line.
$(am__recursive_targets): $(am__recursive_targets):
@fail= failcom='exit 1'; \ @fail=; \
for f in x $$MAKEFLAGS; do \ if $(am__make_keepgoing); then \
case $$f in \ failcom='fail=yes'; \
*=* | --[!k]*);; \ else \
*k*) failcom='fail=yes';; \ failcom='exit 1'; \
esac; \ fi; \
done; \
dot_seen=no; \ dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \ target=`echo $@ | sed s/-recursive//`; \
case "$@" in \ case "$@" in \
@ -991,7 +1022,7 @@ distclean-tags:
$(MAKE) $(AM_MAKEFLAGS) $< $(MAKE) $(AM_MAKEFLAGS) $<
# Leading 'am--fnord' is there to ensure the list of targets does not # Leading 'am--fnord' is there to ensure the list of targets does not
# exand to empty, as could happen e.g. with make check TESTS=''. # expand to empty, as could happen e.g. with make check TESTS=''.
am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
am--force-recheck: am--force-recheck:
@: @:

View File

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.13.1 from Makefile.am. # Makefile.in generated by automake 1.14 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2012 Free Software Foundation, Inc. # Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -14,23 +14,51 @@
@SET_MAKE@ @SET_MAKE@
VPATH = @srcdir@ VPATH = @srcdir@
am__make_dryrun = \ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
{ \ am__make_running_with_option = \
am__dry=no; \ case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \ case $$MAKEFLAGS in \
*\\[\ \ ]*) \ *\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ bs=\\; \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
*) \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \ esac; \
test $$am__dry = yes; \ fi; \
} skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
@ -295,6 +323,7 @@ $(am__aclocal_m4_deps):
clean-checkLIBRARIES: clean-checkLIBRARIES:
-test -z "$(check_LIBRARIES)" || rm -f $(check_LIBRARIES) -test -z "$(check_LIBRARIES)" || rm -f $(check_LIBRARIES)
libt_api.a: $(libt_api_a_OBJECTS) $(libt_api_a_DEPENDENCIES) $(EXTRA_libt_api_a_DEPENDENCIES) libt_api.a: $(libt_api_a_OBJECTS) $(libt_api_a_DEPENDENCIES) $(EXTRA_libt_api_a_DEPENDENCIES)
$(AM_V_at)-rm -f libt_api.a $(AM_V_at)-rm -f libt_api.a
$(AM_V_AR)$(libt_api_a_AR) libt_api.a $(libt_api_a_OBJECTS) $(libt_api_a_LIBADD) $(AM_V_AR)$(libt_api_a_AR) libt_api.a $(libt_api_a_OBJECTS) $(libt_api_a_LIBADD)
@ -314,14 +343,14 @@ distclean-compile:
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj: .c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
ID: $(am__tagged_files) ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique $(am__define_uniq_tagged_files); mkid -fID $$unique