mirror of
https://gitlab.isc.org/isc-projects/dhcp
synced 2025-08-22 01:49:35 +00:00
-n [master]
Add code to support the standards version of DDNS
This commit is contained in:
parent
1d851cff2c
commit
d7d9c0c7c3
80
Makefile.in
80
Makefile.in
@ -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@
|
||||
|
||||
# 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
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
@ -15,23 +15,51 @@
|
||||
@SET_MAKE@
|
||||
|
||||
VPATH = @srcdir@
|
||||
am__make_dryrun = \
|
||||
{ \
|
||||
am__dry=no; \
|
||||
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 \
|
||||
*\\[\ \ ]*) \
|
||||
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
|
||||
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
|
||||
*) \
|
||||
for am__flg in $$MAKEFLAGS; do \
|
||||
case $$am__flg in \
|
||||
*=*|--*) ;; \
|
||||
*n*) am__dry=yes; break;; \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
done;; \
|
||||
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; \
|
||||
test $$am__dry = yes; \
|
||||
}
|
||||
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@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
@ -54,7 +82,8 @@ subdir = .
|
||||
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
|
||||
$(top_srcdir)/configure $(am__configure_deps) \
|
||||
$(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
|
||||
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
||||
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');
|
||||
# (2) otherwise, pass the desired values on the 'make' command line.
|
||||
$(am__recursive_targets):
|
||||
@fail= failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
@fail=; \
|
||||
if $(am__make_keepgoing); then \
|
||||
failcom='fail=yes'; \
|
||||
else \
|
||||
failcom='exit 1'; \
|
||||
fi; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
case "$@" in \
|
||||
@ -561,10 +589,16 @@ dist-xz: distdir
|
||||
$(am__post_remove_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
|
||||
$(am__post_remove_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
|
||||
$(am__post_remove_distdir)
|
||||
|
||||
|
9
RELNOTES
9
RELNOTES
@ -75,6 +75,15 @@ work on other platforms. Please report any problems and suggested fixes to
|
||||
- Add support for using classes with v6.
|
||||
[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
|
||||
|
||||
- Address static analysis warnings.
|
||||
|
309
aclocal.m4
vendored
309
aclocal.m4
vendored
@ -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
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
@ -11,6 +11,7 @@
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# 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_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
||||
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.
|
||||
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
|
||||
# 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.
|
||||
# (This private macro should not be called outside this file.)
|
||||
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 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
|
||||
])
|
||||
|
||||
@ -50,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], [])
|
||||
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
|
||||
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
|
||||
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_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
||||
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
|
||||
|
||||
# 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
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
@ -110,7 +111,7 @@ am_aux_dir=`cd $ac_aux_dir && pwd`
|
||||
|
||||
# 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
|
||||
# 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.]])
|
||||
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
|
||||
# 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 -*-
|
||||
|
||||
# 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
|
||||
# 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],
|
||||
[{
|
||||
# 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
|
||||
# if we detect the quoting.
|
||||
case $CONFIG_FILES in
|
||||
@ -372,7 +373,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
|
||||
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
|
||||
test -z "$DEPDIR" && continue
|
||||
am__include=`sed -n 's/^am__include = //p' < "$mf"`
|
||||
test -z "am__include" && continue
|
||||
test -z "$am__include" && continue
|
||||
am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
|
||||
# Find all dependency output files, they are included files with
|
||||
# $(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 -*-
|
||||
|
||||
# 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
|
||||
# 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
|
||||
# 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([OPTIONS])
|
||||
# -----------------------------------------------
|
||||
@ -429,7 +436,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
|
||||
# arguments mandatory, and then we can depend on a new Autoconf
|
||||
# release and drop the old call support.
|
||||
AC_DEFUN([AM_INIT_AUTOMAKE],
|
||||
[AC_PREREQ([2.62])dnl
|
||||
[AC_PREREQ([2.65])dnl
|
||||
dnl Autoconf wants to disallow AM_ names. We explicitly allow
|
||||
dnl the ones we care about.
|
||||
m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
|
||||
@ -459,8 +466,7 @@ AC_SUBST([CYGPATH_W])
|
||||
dnl Distinguish between old-style and new-style calls.
|
||||
m4_ifval([$2],
|
||||
[AC_DIAGNOSE([obsolete],
|
||||
[$0: two- and three-arguments forms are deprecated. For more info, see:
|
||||
http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation])
|
||||
[$0: two- and three-arguments forms are deprecated.])
|
||||
m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
|
||||
AC_SUBST([PACKAGE], [$1])dnl
|
||||
AC_SUBST([VERSION], [$2])],
|
||||
@ -514,22 +520,60 @@ AC_PROVIDE_IFELSE([AC_PROG_OBJC],
|
||||
[_AM_DEPENDENCIES([OBJC])],
|
||||
[m4_define([AC_PROG_OBJC],
|
||||
m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
|
||||
dnl Support for Objective C++ was only introduced in Autoconf 2.65,
|
||||
dnl but we still cater to Autoconf 2.62.
|
||||
m4_ifdef([AC_PROG_OBJCXX],
|
||||
[AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
|
||||
AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
|
||||
[_AM_DEPENDENCIES([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
|
||||
dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the
|
||||
dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
|
||||
dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
|
||||
AC_REQUIRE([AM_SILENT_RULES])dnl
|
||||
dnl The testsuite driver may need to know about EXEEXT, so add the
|
||||
dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This
|
||||
dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
|
||||
AC_CONFIG_COMMANDS_PRE(dnl
|
||||
[m4_provide_if([_AM_COMPILER_EXEEXT],
|
||||
[AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
|
||||
])
|
||||
|
||||
# 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 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_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
|
||||
|
||||
|
||||
# When config.status generates a header, we must update the stamp-h file.
|
||||
# This file resides in the same directory as the config header
|
||||
# that is generated. The stamp files are numbered to have different names.
|
||||
@ -559,7 +602,7 @@ for _am_header in $config_headers :; do
|
||||
done
|
||||
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
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
@ -580,7 +623,7 @@ if test x"${install_sh}" != xset; then
|
||||
fi
|
||||
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
|
||||
# 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 -*-
|
||||
# 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
|
||||
# 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 -*-
|
||||
|
||||
# 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
|
||||
# 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 -*-
|
||||
|
||||
# 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
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
@ -704,8 +745,8 @@ AC_SUBST($1)])
|
||||
|
||||
# AM_MISSING_HAS_RUN
|
||||
# ------------------
|
||||
# Define MISSING if not defined so far and test if it supports --run.
|
||||
# If it does, set am_missing_run to use it, otherwise, to nothing.
|
||||
# Define MISSING if not defined so far and test if it is modern enough.
|
||||
# If it is, set am_missing_run to use it, otherwise, to nothing.
|
||||
AC_DEFUN([AM_MISSING_HAS_RUN],
|
||||
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
||||
AC_REQUIRE_AUX_FILE([missing])dnl
|
||||
@ -718,8 +759,8 @@ if test x"${MISSING+set}" != xset; then
|
||||
esac
|
||||
fi
|
||||
# Use eval to expand $SHELL
|
||||
if eval "$MISSING --run true"; then
|
||||
am_missing_run="$MISSING --run "
|
||||
if eval "$MISSING --is-lightweight"; then
|
||||
am_missing_run="$MISSING "
|
||||
else
|
||||
am_missing_run=
|
||||
AC_MSG_WARN(['missing' script is too old or missing])
|
||||
@ -728,7 +769,7 @@ fi
|
||||
|
||||
# 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
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
@ -757,9 +798,73 @@ AC_DEFUN([_AM_SET_OPTIONS],
|
||||
AC_DEFUN([_AM_IF_OPTION],
|
||||
[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 -*-
|
||||
|
||||
# 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
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
@ -840,7 +945,67 @@ AC_CONFIG_COMMANDS_PRE(
|
||||
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
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
@ -868,7 +1033,7 @@ fi
|
||||
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
|
||||
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
|
||||
# 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 -*-
|
||||
|
||||
# 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
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
@ -906,26 +1071,62 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
|
||||
# Substitute a variable $(am__untar) that extract such
|
||||
# a tarball read from stdin.
|
||||
# $(am__untar) < result.tar
|
||||
#
|
||||
AC_DEFUN([_AM_PROG_TAR],
|
||||
[# Always define AMTAR for backward compatibility. Yes, it's still used
|
||||
# in the wild :-( We should find a proper way to deprecate it ...
|
||||
AC_SUBST([AMTAR], ['$${TAR-tar}'])
|
||||
|
||||
# We'll loop over all known methods to create a tar archive until one works.
|
||||
_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
|
||||
|
||||
m4_if([$1], [v7],
|
||||
[am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
|
||||
[m4_case([$1], [ustar],, [pax],,
|
||||
|
||||
[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])
|
||||
# Loop over all known methods to create a tar archive until one works.
|
||||
_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
|
||||
|
||||
# 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}
|
||||
# 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
|
||||
|
||||
for _am_tool in $_am_tools; do
|
||||
case $_am_tool in
|
||||
gnutar)
|
||||
for _am_tar in tar gnutar gtar;
|
||||
do
|
||||
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"'
|
||||
@ -961,7 +1162,7 @@ do
|
||||
# and am__untar set.
|
||||
test -n "${am_cv_prog_tar_$1}" && break
|
||||
|
||||
# tar/untar a dummy directory, and stop if the command works
|
||||
# tar/untar a dummy directory, and stop if the command works.
|
||||
rm -rf conftest.dir
|
||||
mkdir conftest.dir
|
||||
echo GrepMe > conftest.dir/file
|
||||
@ -969,6 +1170,7 @@ do
|
||||
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
|
||||
@ -976,6 +1178,7 @@ rm -rf conftest.dir
|
||||
|
||||
AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
|
||||
AC_MSG_RESULT([$am_cv_prog_tar_$1])])
|
||||
|
||||
AC_SUBST([am__tar])
|
||||
AC_SUBST([am__untar])
|
||||
]) # _AM_PROG_TAR
|
||||
|
@ -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@
|
||||
|
||||
# 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
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
@ -16,23 +16,51 @@
|
||||
|
||||
|
||||
VPATH = @srcdir@
|
||||
am__make_dryrun = \
|
||||
{ \
|
||||
am__dry=no; \
|
||||
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 \
|
||||
*\\[\ \ ]*) \
|
||||
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
|
||||
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
|
||||
*) \
|
||||
for am__flg in $$MAKEFLAGS; do \
|
||||
case $$am__flg in \
|
||||
*=*|--*) ;; \
|
||||
*n*) am__dry=yes; break;; \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
done;; \
|
||||
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; \
|
||||
test $$am__dry = yes; \
|
||||
}
|
||||
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@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
@ -347,6 +375,7 @@ uninstall-sbinPROGRAMS:
|
||||
|
||||
clean-sbinPROGRAMS:
|
||||
-test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
|
||||
|
||||
dhclient$(EXEEXT): $(dhclient_OBJECTS) $(dhclient_DEPENDENCIES) $(EXTRA_dhclient_DEPENDENCIES)
|
||||
@rm -f dhclient$(EXEEXT)
|
||||
$(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
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @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:
|
||||
@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
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @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)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list1=''; \
|
||||
|
@ -119,69 +119,6 @@ static int check_timing6(struct client_state *client, u_int8_t msg_type,
|
||||
extern int onetry;
|
||||
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.
|
||||
*/
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" $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
|
||||
.\"
|
||||
.\" 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
|
||||
.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
|
||||
should not be expected to work in any consistent or useful way.
|
||||
.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
|
||||
Print version number and exit.
|
||||
.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
|
||||
requesting an address), or it creates an identifier based on the
|
||||
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
|
||||
overrides this default, with a value of either \fILL\fR or \fILLT\fR.
|
||||
stateful mode (without \fB\-S\fR, requesting an address). When DHCPv4
|
||||
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
|
||||
.BI \-N
|
||||
.\" TODO: is this for telling an already running dhclient?
|
||||
|
@ -62,6 +62,8 @@ struct sockaddr_in sockaddr_broadcast;
|
||||
struct in_addr giaddr;
|
||||
struct data_string default_duid;
|
||||
int duid_type = 0;
|
||||
int duid_v4 = 0;
|
||||
int std_dhcid = 0;
|
||||
|
||||
/* ASSERT_STATE() does nothing now; it used to be
|
||||
assert (state_is == state_shouldbe). */
|
||||
@ -287,12 +289,9 @@ main(int argc, char **argv) {
|
||||
wanted_ia_na = 0;
|
||||
}
|
||||
wanted_ia_pd++;
|
||||
#endif /* DHCPv6 */
|
||||
} else if (!strcmp(argv[i], "-D")) {
|
||||
if (local_family_set && (local_family == AF_INET)) {
|
||||
usage();
|
||||
}
|
||||
local_family_set = 1;
|
||||
local_family = AF_INET6;
|
||||
duid_v4 = 1;
|
||||
if (++i == argc)
|
||||
usage();
|
||||
if (!strcasecmp(argv[i], "LL")) {
|
||||
@ -302,7 +301,12 @@ main(int argc, char **argv) {
|
||||
} else {
|
||||
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")) {
|
||||
quiet = 0;
|
||||
} else if (!strcmp(argv[i], "--version")) {
|
||||
@ -564,12 +568,13 @@ main(int argc, char **argv) {
|
||||
}
|
||||
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. This may be moved to the
|
||||
* DHCPv4 area later.
|
||||
|
||||
/*
|
||||
* Establish a default DUID. We always do so for v6 and
|
||||
* do so if desired for v4 via the -D or -i options
|
||||
*/
|
||||
if ((local_family == AF_INET6) ||
|
||||
((local_family == AF_INET) && (duid_v4 == 1))) {
|
||||
if (default_duid.len == 0) {
|
||||
if (default_duid.buffer != NULL)
|
||||
data_string_forget(&default_duid, MDL);
|
||||
@ -577,7 +582,11 @@ main(int argc, char **argv) {
|
||||
form_duid(&default_duid, MDL);
|
||||
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 (client = ip->client ; client != NULL ;
|
||||
client = client->next) {
|
||||
@ -709,9 +718,9 @@ static void usage()
|
||||
|
||||
log_fatal("Usage: dhclient "
|
||||
#ifdef DHCPv6
|
||||
"[-4|-6] [-SNTP1dvrx] [-nw] [-p <port>] [-D LL|LLT]\n"
|
||||
"[-4|-6] [-SNTPI1dvrxi] [-nw] [-p <port>] [-D LL|LLT] \n"
|
||||
#else /* DHCPv6 */
|
||||
"[-1dvrx] [-nw] [-p <port>]\n"
|
||||
"[-I1dvrxi] [-nw] [-p <port>] [-D LL|LLT] \n"
|
||||
#endif /* DHCPv6 */
|
||||
" [-s server-addr] [-cf config-file] "
|
||||
"[-lf lease-file]\n"
|
||||
@ -2296,7 +2305,7 @@ make_client_options(struct client_state *client, struct client_lease *lease,
|
||||
unsigned i;
|
||||
struct option_cache *oc;
|
||||
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 (*op)
|
||||
@ -2309,7 +2318,7 @@ make_client_options(struct client_state *client, struct client_lease *lease,
|
||||
if (sid)
|
||||
save_option(&dhcp_universe, *op, sid);
|
||||
|
||||
oc = (struct option_cache *)0;
|
||||
oc = NULL;
|
||||
|
||||
/* Send the requested address if provided. */
|
||||
if (rip) {
|
||||
@ -2373,6 +2382,60 @@ make_client_options(struct client_state *client, struct client_lease *lease,
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 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. */
|
||||
if (client->config->on_transmission)
|
||||
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. */
|
||||
static isc_result_t
|
||||
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;
|
||||
int ignorep;
|
||||
int result;
|
||||
int ddns_v4_type;
|
||||
isc_result_t rcode;
|
||||
|
||||
/* 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))
|
||||
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
|
||||
* the client identifier, if there is one, or the interface's
|
||||
* MAC address.
|
||||
/*
|
||||
* Construct the DHCID value for use in the DDNS update process
|
||||
* We have the newer standard version and the older interim version
|
||||
* 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;
|
||||
POST(result);
|
||||
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 (((oc =
|
||||
lookup_option(&dhcpv6_universe, client->sent_options,
|
||||
/* V6 request, get the client identifier, then
|
||||
* construct the dhcid for either standard
|
||||
* or interim */
|
||||
if (((oc = lookup_option(&dhcpv6_universe,
|
||||
client->sent_options,
|
||||
D6O_CLIENTID)) != NULL) &&
|
||||
evaluate_option_cache(&client_identifier, NULL, NULL,
|
||||
client, client->sent_options, NULL,
|
||||
evaluate_option_cache(&client_identifier, NULL,
|
||||
NULL, client,
|
||||
client->sent_options, NULL,
|
||||
&global_scope, oc, MDL)) {
|
||||
/* RFC4701 defines type '2' as being for the DUID
|
||||
* 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,
|
||||
result = get_dhcid(ddns_cb, 2,
|
||||
client_identifier.data,
|
||||
client_identifier.len);
|
||||
data_string_forget(&client_identifier, MDL);
|
||||
} else
|
||||
log_fatal("Impossible condition at %s:%d.", MDL);
|
||||
} else {
|
||||
if (((oc =
|
||||
lookup_option(&dhcp_universe, client->sent_options,
|
||||
/*
|
||||
* V4 request, use the client id if there is one or the
|
||||
* mac address if there isn't. If we have a client id
|
||||
* we check to see if it is an embedded DUID.
|
||||
*/
|
||||
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,
|
||||
evaluate_option_cache(&client_identifier, NULL,
|
||||
NULL, client,
|
||||
client->sent_options, NULL,
|
||||
&global_scope, oc, MDL)) {
|
||||
result = get_dhcid(&ddns_cb->dhcid,
|
||||
DHO_DHCP_CLIENT_IDENTIFIER,
|
||||
if ((std_dhcid == 1) && (duid_v4 == 1) &&
|
||||
(client_identifier.data[0] == 255)) {
|
||||
/*
|
||||
* 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);
|
||||
} else
|
||||
result = get_dhcid(&ddns_cb->dhcid, 0,
|
||||
result = get_dhcid(ddns_cb, 0,
|
||||
client->interface->hw_address.hbuf,
|
||||
client->interface->hw_address.hlen);
|
||||
}
|
||||
|
||||
if (!result) {
|
||||
return ISC_R_SUCCESS;
|
||||
}
|
||||
@ -4342,3 +4503,4 @@ add_reject(struct packet *packet) {
|
||||
*/
|
||||
log_info("Server added to list of rejected servers.");
|
||||
}
|
||||
|
||||
|
@ -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@
|
||||
|
||||
# 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
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
@ -15,23 +15,51 @@
|
||||
@SET_MAKE@
|
||||
|
||||
VPATH = @srcdir@
|
||||
am__make_dryrun = \
|
||||
{ \
|
||||
am__dry=no; \
|
||||
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 \
|
||||
*\\[\ \ ]*) \
|
||||
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
|
||||
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
|
||||
*) \
|
||||
for am__flg in $$MAKEFLAGS; do \
|
||||
case $$am__flg in \
|
||||
*=*|--*) ;; \
|
||||
*n*) am__dry=yes; break;; \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
done;; \
|
||||
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; \
|
||||
test $$am__dry = yes; \
|
||||
}
|
||||
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@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
@ -364,6 +392,7 @@ $(am__aclocal_m4_deps):
|
||||
|
||||
clean-noinstLIBRARIES:
|
||||
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
|
||||
|
||||
libdhcp.a: $(libdhcp_a_OBJECTS) $(libdhcp_a_DEPENDENCIES) $(EXTRA_libdhcp_a_DEPENDENCIES)
|
||||
$(AM_V_at)-rm -f libdhcp.a
|
||||
$(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
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @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:
|
||||
@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
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @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)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list1=''; \
|
||||
@ -469,13 +498,12 @@ uninstall-man5:
|
||||
# (which will cause the Makefiles to be regenerated when you run 'make');
|
||||
# (2) otherwise, pass the desired values on the 'make' command line.
|
||||
$(am__recursive_targets):
|
||||
@fail= failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
@fail=; \
|
||||
if $(am__make_keepgoing); then \
|
||||
failcom='fail=yes'; \
|
||||
else \
|
||||
failcom='exit 1'; \
|
||||
fi; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
case "$@" in \
|
||||
|
@ -886,10 +886,6 @@ intern(char *atom, enum dhcp_token dfv) {
|
||||
case 'd':
|
||||
if (!strcasecmp(atom + 1, "b-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"))
|
||||
return DOMAIN;
|
||||
if (!strncasecmp (atom + 1, "omain-", 6)) {
|
||||
@ -1183,8 +1179,6 @@ intern(char *atom, enum dhcp_token dfv) {
|
||||
return TOKEN_NOT;
|
||||
if (!strcasecmp (atom + 1, "o"))
|
||||
return TOKEN_NO;
|
||||
if (!strcasecmp (atom + 1, "s-update"))
|
||||
return NS_UPDATE;
|
||||
if (!strcasecmp (atom + 1, "oerror"))
|
||||
return NS_NOERROR;
|
||||
if (!strcasecmp (atom + 1, "otauth"))
|
||||
@ -1503,8 +1497,6 @@ intern(char *atom, enum dhcp_token dfv) {
|
||||
}
|
||||
if (!strcasecmp (atom + 1, "nauthenticated"))
|
||||
return UNAUTHENTICATED;
|
||||
if (!strcasecmp (atom + 1, "pdated-dns-rr"))
|
||||
return UPDATED_DNS_RR;
|
||||
if (!strcasecmp (atom + 1, "pdate"))
|
||||
return UPDATE;
|
||||
break;
|
||||
|
161
common/dns.c
161
common/dns.c
@ -3,7 +3,7 @@
|
||||
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) 2001-2003 by Internet Software Consortium
|
||||
*
|
||||
@ -30,10 +30,12 @@
|
||||
* asynchronous DNS routines.
|
||||
*/
|
||||
|
||||
/*! \file common/dns.c
|
||||
*/
|
||||
#include "dhcpd.h"
|
||||
#include "arpa/nameser.h"
|
||||
#include <isc/md5.h>
|
||||
|
||||
#include <isc/sha2.h>
|
||||
#include <dns/result.h>
|
||||
|
||||
/*
|
||||
@ -823,19 +825,112 @@ void repudiate_zone (struct dns_zone **zone)
|
||||
dns_zone_dereference (zone, MDL);
|
||||
}
|
||||
|
||||
/* Have to use TXT records for now. */
|
||||
#define T_DHCID T_TXT
|
||||
|
||||
int get_dhcid (struct data_string *id,
|
||||
int type, const u_int8_t *data, unsigned len)
|
||||
/*!
|
||||
* \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 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];
|
||||
isc_md5_t md5;
|
||||
int i;
|
||||
|
||||
/* Types can only be 0..(2^16)-1. */
|
||||
if (type < 0 || type > 65535)
|
||||
return 0;
|
||||
return (0);
|
||||
|
||||
/*
|
||||
* Hexadecimal MD5 digest plus two byte type, NUL,
|
||||
@ -843,25 +938,10 @@ int get_dhcid (struct data_string *id,
|
||||
*/
|
||||
if (!buffer_allocate(&id -> buffer,
|
||||
(ISC_MD5_DIGESTLENGTH * 2) + 4, MDL))
|
||||
return 0;
|
||||
return (0);
|
||||
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
|
||||
* this into a dns text string. This avoid needing to
|
||||
* 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->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:
|
||||
* The name is not in use
|
||||
* 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:
|
||||
* The A RR does not exist
|
||||
* Add an A RR
|
||||
* Add a DHCID RR (currently txt)
|
||||
* Add a DHCID RR
|
||||
*/
|
||||
|
||||
static isc_result_t
|
||||
@ -1062,7 +1153,7 @@ ddns_modify_fwd_add1(dhcp_ddns_cb_t *ddns_cb,
|
||||
dataspace++;
|
||||
|
||||
/* 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,
|
||||
(unsigned char *)ddns_cb->dhcid.data,
|
||||
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 *uname)
|
||||
{
|
||||
isc_result_t result;
|
||||
isc_result_t result = ISC_R_SUCCESS;
|
||||
|
||||
/*
|
||||
* 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) {
|
||||
/* Construct the prereq list */
|
||||
/* 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,
|
||||
(unsigned char *)ddns_cb->dhcid.data,
|
||||
ddns_cb->dhcid.len, 0);
|
||||
@ -1130,7 +1221,7 @@ ddns_modify_fwd_add2(dhcp_ddns_cb_t *ddns_cb,
|
||||
/* Start constructing the update list.
|
||||
* Conflict detection override: delete DHCID RRs */
|
||||
result = make_dns_dataset(dns_rdataclass_any,
|
||||
dns_rdatatype_txt,
|
||||
ddns_cb->dhcid_class,
|
||||
dataspace, NULL, 0, 0);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
return(result);
|
||||
@ -1139,7 +1230,7 @@ ddns_modify_fwd_add2(dhcp_ddns_cb_t *ddns_cb,
|
||||
dataspace++;
|
||||
|
||||
/* 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,
|
||||
(unsigned char *)ddns_cb->dhcid.data,
|
||||
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 *uname)
|
||||
{
|
||||
isc_result_t result;
|
||||
isc_result_t result = ISC_R_SUCCESS;
|
||||
|
||||
/* Consruct the prereq list */
|
||||
/* 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,
|
||||
(unsigned char *)ddns_cb->dhcid.data,
|
||||
ddns_cb->dhcid.len, 0);
|
||||
@ -1271,7 +1362,7 @@ ddns_modify_fwd_rem2(dhcp_ddns_cb_t *ddns_cb,
|
||||
|
||||
/* Construct the update list */
|
||||
/* 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,
|
||||
(unsigned char *)ddns_cb->dhcid.data,
|
||||
ddns_cb->dhcid.len, 0);
|
||||
|
374
common/parse.c
374
common/parse.c
@ -3514,42 +3514,7 @@ int parse_numeric_expression (expr, cfile, lose)
|
||||
}
|
||||
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. */
|
||||
|
||||
int parse_non_binary (expr, cfile, lose, context)
|
||||
@ -3564,11 +3529,6 @@ int parse_non_binary (expr, cfile, lose, context)
|
||||
struct expression *nexp, **ep;
|
||||
int known;
|
||||
char *cptr;
|
||||
#if defined (NSUPDATE_OLD)
|
||||
enum expr_op opcode;
|
||||
const char *s;
|
||||
unsigned long u;
|
||||
#endif
|
||||
isc_result_t status;
|
||||
unsigned len;
|
||||
|
||||
@ -3600,13 +3560,7 @@ int parse_non_binary (expr, cfile, lose, context)
|
||||
break;
|
||||
|
||||
case TOKEN_NOT:
|
||||
skip_token(&val, (unsigned *)0, cfile);
|
||||
#if defined(NSUPDATE_OLD)
|
||||
if (context == context_dns) {
|
||||
token = peek_token (&val, (unsigned *)0, cfile);
|
||||
goto not_exists;
|
||||
}
|
||||
#endif
|
||||
skip_token(&val, NULL, cfile);
|
||||
if (!expression_allocate (expr, MDL))
|
||||
log_fatal ("can't allocate expression");
|
||||
(*expr)->op = expr_not;
|
||||
@ -3618,7 +3572,7 @@ int parse_non_binary (expr, cfile, lose, context)
|
||||
}
|
||||
*lose = 1;
|
||||
expression_dereference (expr, MDL);
|
||||
return 0;
|
||||
return (0);
|
||||
}
|
||||
if (!is_boolean_expression ((*expr) -> data.not)) {
|
||||
*lose = 1;
|
||||
@ -3650,11 +3604,7 @@ int parse_non_binary (expr, cfile, lose, context)
|
||||
break;
|
||||
|
||||
case EXISTS:
|
||||
#if defined(NSUPDATE_OLD)
|
||||
if (context == context_dns)
|
||||
goto ns_exists;
|
||||
#endif
|
||||
skip_token(&val, (unsigned *)0, cfile);
|
||||
skip_token(&val, NULL, cfile);
|
||||
if (!expression_allocate (expr, MDL))
|
||||
log_fatal ("can't allocate expression");
|
||||
(*expr)->op = expr_exists;
|
||||
@ -3666,7 +3616,7 @@ int parse_non_binary (expr, cfile, lose, context)
|
||||
(*expr)->data.option == NULL) {
|
||||
*lose = 1;
|
||||
expression_dereference (expr, MDL);
|
||||
return 0;
|
||||
return (0);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -3967,285 +3917,6 @@ int parse_non_binary (expr, cfile, lose, context)
|
||||
goto norparen;
|
||||
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 CONFIG_OPTION:
|
||||
if (!expression_allocate (expr, MDL))
|
||||
@ -4322,43 +3993,6 @@ int parse_non_binary (expr, cfile, lose, context)
|
||||
(*expr) -> op = expr_host_decl_name;
|
||||
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:
|
||||
skip_token(&val, (unsigned *)0, cfile);
|
||||
if (!expression_allocate (expr, MDL))
|
||||
|
@ -8,7 +8,7 @@ ATF_TESTS =
|
||||
|
||||
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_LDADD = $(ATF_LDFLAGS)
|
||||
@ -16,6 +16,12 @@ alloc_unittest_LDADD += ../libdhcp.a \
|
||||
../../omapip/libomapi.a ../../bind/lib/libdns.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)
|
||||
atf-run | atf-report
|
||||
|
||||
|
@ -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@
|
||||
|
||||
# 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
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
@ -14,23 +14,51 @@
|
||||
|
||||
@SET_MAKE@
|
||||
VPATH = @srcdir@
|
||||
am__make_dryrun = \
|
||||
{ \
|
||||
am__dry=no; \
|
||||
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 \
|
||||
*\\[\ \ ]*) \
|
||||
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
|
||||
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
|
||||
*) \
|
||||
for am__flg in $$MAKEFLAGS; do \
|
||||
case $$am__flg in \
|
||||
*=*|--*) ;; \
|
||||
*n*) am__dry=yes; break;; \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
done;; \
|
||||
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; \
|
||||
test $$am__dry = yes; \
|
||||
}
|
||||
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@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
@ -49,7 +77,7 @@ PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
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)
|
||||
subdir = common/tests
|
||||
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
|
||||
@ -62,7 +90,8 @@ mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/includes/config.h
|
||||
CONFIG_CLEAN_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__alloc_unittest_SOURCES_DIST = test_alloc.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@ ../libdhcp.a ../../omapip/libomapi.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_DEFAULT_V@)
|
||||
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_0 = @echo " CCLD " $@;
|
||||
am__v_CCLD_1 =
|
||||
SOURCES = $(alloc_unittest_SOURCES)
|
||||
DIST_SOURCES = $(am__alloc_unittest_SOURCES_DIST)
|
||||
SOURCES = $(alloc_unittest_SOURCES) $(dns_unittest_SOURCES)
|
||||
DIST_SOURCES = $(am__alloc_unittest_SOURCES_DIST) \
|
||||
$(am__dns_unittest_SOURCES_DIST)
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
|
||||
ctags-recursive dvi-recursive html-recursive info-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@ ../../omapip/libomapi.a ../../bind/lib/libdns.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
|
||||
|
||||
.SUFFIXES:
|
||||
@ -321,16 +363,22 @@ $(am__aclocal_m4_deps):
|
||||
|
||||
clean-checkPROGRAMS:
|
||||
-test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
|
||||
|
||||
alloc_unittest$(EXEEXT): $(alloc_unittest_OBJECTS) $(alloc_unittest_DEPENDENCIES) $(EXTRA_alloc_unittest_DEPENDENCIES)
|
||||
@rm -f alloc_unittest$(EXEEXT)
|
||||
$(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:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-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)/test_alloc.Po@am__quote@
|
||||
|
||||
@ -339,14 +387,14 @@ distclean-compile:
|
||||
@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@ 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:
|
||||
@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
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @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
|
||||
@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');
|
||||
# (2) otherwise, pass the desired values on the 'make' command line.
|
||||
$(am__recursive_targets):
|
||||
@fail= failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
@fail=; \
|
||||
if $(am__make_keepgoing); then \
|
||||
failcom='fail=yes'; \
|
||||
else \
|
||||
failcom='exit 1'; \
|
||||
fi; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
case "$@" in \
|
||||
|
175
common/tests/dns_unittest.c
Normal file
175
common/tests/dns_unittest.c
Normal 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());
|
||||
}
|
520
common/tree.c
520
common/tree.c
@ -644,15 +644,6 @@ int evaluate_expression (result, packet, lease, client_state,
|
||||
status = (evaluate_data_expression
|
||||
(&bv -> value.data, packet, lease, client_state,
|
||||
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 {
|
||||
log_error ("%s: invalid expression type: %d",
|
||||
"evaluate_expression", expr -> op);
|
||||
@ -698,19 +689,6 @@ int binding_value_dereference (struct binding_value **v,
|
||||
if (bv -> value.data.buffer)
|
||||
data_string_forget (&bv -> value.data, file, line);
|
||||
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:
|
||||
log_error ("%s(%d): invalid binding type: %d",
|
||||
file, line, bv -> type);
|
||||
@ -720,270 +698,6 @@ int binding_value_dereference (struct binding_value **v,
|
||||
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,
|
||||
in_options, cfg_options, scope, expr)
|
||||
int *result;
|
||||
@ -1055,20 +769,7 @@ int evaluate_boolean_expression (result, packet, lease, client_state,
|
||||
else
|
||||
*result = expr -> op == expr_not_equal;
|
||||
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:
|
||||
if (bv -> value.fundef == obv -> value.fundef)
|
||||
*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_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);
|
||||
return 0;
|
||||
|
||||
@ -2397,11 +2098,6 @@ int evaluate_numeric_expression (result, packet, lease, client_state,
|
||||
{
|
||||
struct data_string data;
|
||||
int status, sleft, sright;
|
||||
#if defined (NSUPDATE_OLD)
|
||||
ns_updrec *nut;
|
||||
ns_updque uq;
|
||||
struct expression *cur, *next;
|
||||
#endif
|
||||
|
||||
struct binding *binding;
|
||||
struct binding_value *bv;
|
||||
@ -2540,53 +2236,6 @@ int evaluate_numeric_expression (result, packet, lease, client_state,
|
||||
#endif
|
||||
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:
|
||||
if (scope && *scope) {
|
||||
binding = find_binding (*scope, expr -> data.variable);
|
||||
@ -2876,14 +2525,6 @@ int evaluate_numeric_expression (result, packet, lease, client_state,
|
||||
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:
|
||||
log_error ("function definition in evaluate_numeric_expr");
|
||||
return 0;
|
||||
@ -3181,38 +2822,6 @@ void expression_dereference (eptr, file, line)
|
||||
(&expr -> data.reverse.buffer, file, line);
|
||||
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_exists:
|
||||
if (expr -> data.variable)
|
||||
@ -3261,15 +2870,6 @@ void expression_dereference (eptr, file, line)
|
||||
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)
|
||||
struct expression *expr;
|
||||
{
|
||||
@ -3324,7 +2924,6 @@ int is_numeric_expression (expr)
|
||||
expr -> op == expr_extract_int32 ||
|
||||
expr -> op == expr_const_int ||
|
||||
expr -> op == expr_lease_time ||
|
||||
expr -> op == expr_dns_transaction ||
|
||||
expr -> op == expr_add ||
|
||||
expr -> op == expr_subtract ||
|
||||
expr -> op == expr_multiply ||
|
||||
@ -3339,11 +2938,7 @@ int is_numeric_expression (expr)
|
||||
int is_compound_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 ||
|
||||
expr -> op == expr_substring ||
|
||||
return (expr -> op == expr_substring ||
|
||||
expr -> op == expr_suffix ||
|
||||
expr -> op == expr_option ||
|
||||
expr -> op == expr_concat ||
|
||||
@ -3356,8 +2951,7 @@ int is_compound_expression (expr)
|
||||
expr -> op == expr_config_option ||
|
||||
expr -> op == expr_extract_int8 ||
|
||||
expr -> op == expr_extract_int16 ||
|
||||
expr -> op == expr_extract_int32 ||
|
||||
expr -> op == expr_dns_transaction);
|
||||
expr -> op == expr_extract_int32);
|
||||
}
|
||||
|
||||
static int op_val (enum expr_op);
|
||||
@ -3455,8 +3049,6 @@ enum expression_context expression_context (struct expression *expr)
|
||||
return context_numeric;
|
||||
if (is_boolean_expression (expr))
|
||||
return context_boolean;
|
||||
if (is_dns_expression (expr))
|
||||
return context_dns;
|
||||
return context_any;
|
||||
}
|
||||
|
||||
@ -3927,99 +3519,6 @@ int write_expression (file, expr, col, indent, firstp)
|
||||
"lease-time");
|
||||
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:
|
||||
col = token_print_indent (file, col, indent, "", "",
|
||||
"static");
|
||||
@ -4292,12 +3791,7 @@ int data_subexpression_length (int *rv,
|
||||
case expr_const_int:
|
||||
case expr_exists:
|
||||
case expr_known:
|
||||
case expr_dns_transaction:
|
||||
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_null:
|
||||
case expr_variable_exists:
|
||||
@ -4348,12 +3842,6 @@ int expr_valid_for_context (struct expression *expr,
|
||||
return 1;
|
||||
return 0;
|
||||
|
||||
case context_dns:
|
||||
if (is_dns_expression (expr)) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
|
||||
case context_data_or_numeric:
|
||||
if (is_numeric_expression (expr) ||
|
||||
is_data_expression (expr)) {
|
||||
|
347
compile
Executable file
347
compile
Executable 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:
|
135
config.guess
vendored
135
config.guess
vendored
@ -1,10 +1,8 @@
|
||||
#! /bin/sh
|
||||
# Attempt to guess a canonical system name.
|
||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
|
||||
# 2011, 2012, 2013 Free Software Foundation, Inc.
|
||||
# Copyright 1992-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
|
||||
# under the terms of the GNU General Public License as published by
|
||||
@ -52,9 +50,7 @@ version="\
|
||||
GNU config.guess ($timestamp)
|
||||
|
||||
Originally written by Per Bothner.
|
||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
|
||||
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
|
||||
2012, 2013 Free Software Foundation, Inc.
|
||||
Copyright 1992-2013 Free Software Foundation, Inc.
|
||||
|
||||
This is free software; see the source for copying conditions. There is NO
|
||||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
||||
@ -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_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.
|
||||
|
||||
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
@ -857,21 +874,21 @@ EOF
|
||||
exit ;;
|
||||
*:GNU:*:*)
|
||||
# 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 ;;
|
||||
*:GNU/*:*:*)
|
||||
# other systems with GNU libc and userland
|
||||
echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
|
||||
exit ;;
|
||||
i*86:Minix:*:*)
|
||||
echo ${UNAME_MACHINE}-pc-minix
|
||||
exit ;;
|
||||
aarch64:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
aarch64_be:Linux:*:*)
|
||||
UNAME_MACHINE=aarch64_be
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
alpha:Linux:*:*)
|
||||
case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
|
||||
@ -884,59 +901,54 @@ EOF
|
||||
EV68*) UNAME_MACHINE=alphaev68 ;;
|
||||
esac
|
||||
objdump --private-headers /bin/sh | grep -q ld.so.1
|
||||
if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
|
||||
if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
arc:Linux:*:* | arceb:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
arm*:Linux:*:*)
|
||||
eval $set_cc_for_build
|
||||
if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
||||
| grep -q __ARM_EABI__
|
||||
then
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
else
|
||||
if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
|
||||
| grep -q __ARM_PCS_VFP
|
||||
then
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnueabi
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
|
||||
else
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
|
||||
fi
|
||||
fi
|
||||
exit ;;
|
||||
avr32*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
cris:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-axis-linux-gnu
|
||||
echo ${UNAME_MACHINE}-axis-linux-${LIBC}
|
||||
exit ;;
|
||||
crisv32:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-axis-linux-gnu
|
||||
echo ${UNAME_MACHINE}-axis-linux-${LIBC}
|
||||
exit ;;
|
||||
frv:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
hexagon:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
i*86:Linux:*:*)
|
||||
LIBC=gnu
|
||||
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}"
|
||||
echo ${UNAME_MACHINE}-pc-linux-${LIBC}
|
||||
exit ;;
|
||||
ia64:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
m32r*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
m68*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
mips:Linux:*:* | mips64:Linux:*:*)
|
||||
eval $set_cc_for_build
|
||||
@ -955,54 +967,63 @@ EOF
|
||||
#endif
|
||||
EOF
|
||||
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:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
padre:Linux:*:*)
|
||||
echo sparc-unknown-linux-gnu
|
||||
echo sparc-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
parisc64:Linux:*:* | hppa64:Linux:*:*)
|
||||
echo hppa64-unknown-linux-gnu
|
||||
echo hppa64-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
parisc:Linux:*:* | hppa:Linux:*:*)
|
||||
# Look for CPU level
|
||||
case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
|
||||
PA7*) echo hppa1.1-unknown-linux-gnu ;;
|
||||
PA8*) echo hppa2.0-unknown-linux-gnu ;;
|
||||
*) echo hppa-unknown-linux-gnu ;;
|
||||
PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
|
||||
PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
|
||||
*) echo hppa-unknown-linux-${LIBC} ;;
|
||||
esac
|
||||
exit ;;
|
||||
ppc64:Linux:*:*)
|
||||
echo powerpc64-unknown-linux-gnu
|
||||
echo powerpc64-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
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 ;;
|
||||
s390:Linux:*:* | s390x:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-ibm-linux
|
||||
echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
|
||||
exit ;;
|
||||
sh64*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
sh*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
sparc:Linux:*:* | sparc64:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
tile*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
vax:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-dec-linux-gnu
|
||||
echo ${UNAME_MACHINE}-dec-linux-${LIBC}
|
||||
exit ;;
|
||||
x86_64:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
xtensa*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
i*86:DYNIX/ptx:4*:*)
|
||||
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
|
||||
@ -1235,19 +1256,21 @@ EOF
|
||||
exit ;;
|
||||
*:Darwin:*:*)
|
||||
UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
|
||||
case $UNAME_PROCESSOR in
|
||||
i386)
|
||||
eval $set_cc_for_build
|
||||
if test "$UNAME_PROCESSOR" = unknown ; then
|
||||
UNAME_PROCESSOR=powerpc
|
||||
fi
|
||||
if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
|
||||
if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
|
||||
(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
|
||||
grep IS_64BIT_ARCH >/dev/null
|
||||
then
|
||||
UNAME_PROCESSOR="x86_64"
|
||||
fi
|
||||
fi ;;
|
||||
unknown) UNAME_PROCESSOR=powerpc ;;
|
||||
case $UNAME_PROCESSOR in
|
||||
i386) UNAME_PROCESSOR=x86_64 ;;
|
||||
powerpc) UNAME_PROCESSOR=powerpc64 ;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
|
||||
exit ;;
|
||||
*:procnto*:*:* | *:QNX:[0123456789]*:*)
|
||||
|
30
config.sub
vendored
30
config.sub
vendored
@ -1,10 +1,8 @@
|
||||
#! /bin/sh
|
||||
# Configuration validation subroutine script.
|
||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
|
||||
# 2011, 2012, 2013 Free Software Foundation, Inc.
|
||||
# Copyright 1992-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
|
||||
# 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="\
|
||||
GNU config.sub ($timestamp)
|
||||
|
||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
|
||||
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
|
||||
2012, 2013 Free Software Foundation, Inc.
|
||||
Copyright 1992-2013 Free Software Foundation, Inc.
|
||||
|
||||
This is free software; see the source for copying conditions. There is NO
|
||||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
||||
@ -256,7 +252,7 @@ case $basic_machine in
|
||||
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
|
||||
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
|
||||
| am33_2.0 \
|
||||
| arc \
|
||||
| arc | arceb \
|
||||
| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
|
||||
| avr | avr32 \
|
||||
| be32 | be64 \
|
||||
@ -290,16 +286,17 @@ case $basic_machine in
|
||||
| mipsisa64r2 | mipsisa64r2el \
|
||||
| mipsisa64sb1 | mipsisa64sb1el \
|
||||
| mipsisa64sr71k | mipsisa64sr71kel \
|
||||
| mipsr5900 | mipsr5900el \
|
||||
| mipstx39 | mipstx39el \
|
||||
| mn10200 | mn10300 \
|
||||
| moxie \
|
||||
| mt \
|
||||
| msp430 \
|
||||
| nds32 | nds32le | nds32be \
|
||||
| nios | nios2 \
|
||||
| nios | nios2 | nios2eb | nios2el \
|
||||
| ns16k | ns32k \
|
||||
| open8 \
|
||||
| or32 \
|
||||
| or1k | or32 \
|
||||
| pdp10 | pdp11 | pj | pjl \
|
||||
| powerpc | powerpc64 | powerpc64le | powerpcle \
|
||||
| pyramid \
|
||||
@ -369,7 +366,7 @@ case $basic_machine in
|
||||
| aarch64-* | aarch64_be-* \
|
||||
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
|
||||
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
|
||||
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
|
||||
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
|
||||
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
|
||||
| avr-* | avr32-* \
|
||||
| be32-* | be64-* \
|
||||
@ -407,12 +404,13 @@ case $basic_machine in
|
||||
| mipsisa64r2-* | mipsisa64r2el-* \
|
||||
| mipsisa64sb1-* | mipsisa64sb1el-* \
|
||||
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
|
||||
| mipsr5900-* | mipsr5900el-* \
|
||||
| mipstx39-* | mipstx39el-* \
|
||||
| mmix-* \
|
||||
| mt-* \
|
||||
| msp430-* \
|
||||
| nds32-* | nds32le-* | nds32be-* \
|
||||
| nios-* | nios2-* \
|
||||
| nios-* | nios2-* | nios2eb-* | nios2el-* \
|
||||
| none-* | np1-* | ns16k-* | ns32k-* \
|
||||
| open8-* \
|
||||
| orion-* \
|
||||
@ -1354,7 +1352,7 @@ case $os in
|
||||
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
|
||||
| -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
|
||||
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
|
||||
| -sym* | -kopensolaris* \
|
||||
| -sym* | -kopensolaris* | -plan9* \
|
||||
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
|
||||
| -aos* | -aros* \
|
||||
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
||||
@ -1500,9 +1498,6 @@ case $os in
|
||||
-aros*)
|
||||
os=-aros
|
||||
;;
|
||||
-kaos*)
|
||||
os=-kaos
|
||||
;;
|
||||
-zvmoe)
|
||||
os=-zvmoe
|
||||
;;
|
||||
@ -1594,6 +1589,9 @@ case $basic_machine in
|
||||
mips*-*)
|
||||
os=-elf
|
||||
;;
|
||||
or1k-*)
|
||||
os=-elf
|
||||
;;
|
||||
or32-*)
|
||||
os=-coff
|
||||
;;
|
||||
|
163
configure
vendored
163
configure
vendored
@ -664,6 +664,10 @@ build
|
||||
MAINT
|
||||
MAINTAINER_MODE_FALSE
|
||||
MAINTAINER_MODE_TRUE
|
||||
AM_BACKSLASH
|
||||
AM_DEFAULT_VERBOSITY
|
||||
AM_DEFAULT_V
|
||||
AM_V
|
||||
am__untar
|
||||
am__tar
|
||||
AMTAR
|
||||
@ -728,6 +732,7 @@ SHELL'
|
||||
ac_subst_files=''
|
||||
ac_user_opts='
|
||||
enable_option_checking
|
||||
enable_silent_rules
|
||||
enable_maintainer_mode
|
||||
enable_dependency_tracking
|
||||
enable_debug
|
||||
@ -1383,6 +1388,8 @@ Optional Features:
|
||||
--disable-option-checking ignore unrecognized --enable/--with options
|
||||
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
|
||||
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
|
||||
--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 make rules and dependencies not useful (and
|
||||
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,
|
||||
# like AUTHORS, COPYING, and such
|
||||
am__api_version='1.12'
|
||||
am__api_version='1.14'
|
||||
|
||||
ac_aux_dir=
|
||||
for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
|
||||
@ -2881,8 +2888,8 @@ if test x"${MISSING+set}" != xset; then
|
||||
esac
|
||||
fi
|
||||
# Use eval to expand $SHELL
|
||||
if eval "$MISSING --run true"; then
|
||||
am_missing_run="$MISSING --run "
|
||||
if eval "$MISSING --is-lightweight"; then
|
||||
am_missing_run="$MISSING "
|
||||
else
|
||||
am_missing_run=
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
|
||||
@ -3122,6 +3129,45 @@ else
|
||||
fi
|
||||
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
|
||||
# Use -I$(srcdir) only when $(srcdir) != ., so that make's output
|
||||
# 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 ...
|
||||
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 -'
|
||||
|
||||
|
||||
@ -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
|
||||
# the configure and makefiles. Without it users doing things that
|
||||
# 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_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
||||
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"
|
||||
|
||||
ac_config_commands="$ac_config_commands depfiles"
|
||||
@ -6559,7 +6710,7 @@ fi
|
||||
fi
|
||||
|
||||
# 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"
|
||||
|
||||
# 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
|
||||
"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
|
||||
# if we detect the quoting.
|
||||
case $CONFIG_FILES in
|
||||
@ -7972,7 +8123,7 @@ $as_echo X"$mf" |
|
||||
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
|
||||
test -z "$DEPDIR" && continue
|
||||
am__include=`sed -n 's/^am__include = //p' < "$mf"`
|
||||
test -z "am__include" && continue
|
||||
test -z "$am__include" && continue
|
||||
am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
|
||||
# Find all dependency output files, they are included files with
|
||||
# $(DEPDIR) in their names. We invoke sed twice because it is the
|
||||
|
122
configure.ac
122
configure.ac
@ -51,8 +51,7 @@ AC_DEFINE_UNQUOTED([DHCP_BYTE_ORDER], [$byte_order],
|
||||
|
||||
# Optional compile-time DEBUGging.
|
||||
AC_ARG_ENABLE(debug,
|
||||
AC_HELP_STRING([--enable-debug],
|
||||
[create a debug-only version of the software (default is no).]),
|
||||
AS_HELP_STRING([--enable-debug],[create a debug-only version of the software (default is no).]),
|
||||
[enable_debug=yes],[enable_debug=no])
|
||||
# This is very much off by default.
|
||||
if test "$enable_debug" = "yes" ; then
|
||||
@ -83,8 +82,7 @@ fi
|
||||
|
||||
# Failover optional compile-time feature.
|
||||
AC_ARG_ENABLE(failover,
|
||||
AC_HELP_STRING([--enable-failover],
|
||||
[enable support for failover (default is yes)]))
|
||||
AS_HELP_STRING([--enable-failover],[enable support for failover (default is yes)]))
|
||||
# Failover is on by default, so define if it is not explicitly disabled.
|
||||
if test "$enable_failover" != "no"; then
|
||||
AC_DEFINE([FAILOVER_PROTOCOL], [1],
|
||||
@ -93,8 +91,7 @@ fi
|
||||
|
||||
# execute() support.
|
||||
AC_ARG_ENABLE(execute,
|
||||
AC_HELP_STRING([--enable-execute],
|
||||
[enable support for execute() in config (default is yes)]))
|
||||
AS_HELP_STRING([--enable-execute],[enable support for execute() in config (default is yes)]))
|
||||
# execute() is on by default, so define if it is not explicitly disabled.
|
||||
if test "$enable_execute" != "no" ; then
|
||||
AC_DEFINE([ENABLE_EXECUTE], [1],
|
||||
@ -103,8 +100,7 @@ fi
|
||||
|
||||
# Server tracing support.
|
||||
AC_ARG_ENABLE(tracing,
|
||||
AC_HELP_STRING([--enable-tracing],
|
||||
[enable support for server activity tracing (default is yes)]))
|
||||
AS_HELP_STRING([--enable-tracing],[enable support for server activity tracing (default is yes)]))
|
||||
# tracing is on by default, so define if it is not explicitly disabled.
|
||||
if test "$enable_tracing" != "no" ; then
|
||||
AC_DEFINE([TRACING], [1],
|
||||
@ -113,8 +109,7 @@ fi
|
||||
|
||||
# Delayed-ack feature support (experimental).
|
||||
AC_ARG_ENABLE(delayed_ack,
|
||||
AC_HELP_STRING([--enable-delayed-ack],
|
||||
[queues multiple DHCPACK replies (default is no)]))
|
||||
AS_HELP_STRING([--enable-delayed-ack],[queues multiple DHCPACK replies (default is no)]))
|
||||
if test "$enable_delayed_ack" = "yes"; then
|
||||
AC_DEFINE([DELAYED_ACK], [1],
|
||||
[Define to queue multiple DHCPACK replies per fsync.])
|
||||
@ -122,8 +117,7 @@ fi
|
||||
|
||||
# DHCPv6 optional compile-time feature.
|
||||
AC_ARG_ENABLE(dhcpv6,
|
||||
AC_HELP_STRING([--enable-dhcpv6],
|
||||
[enable support for DHCPv6 (default is yes)]))
|
||||
AS_HELP_STRING([--enable-dhcpv6],[enable support for DHCPv6 (default is yes)]))
|
||||
# DHCPv6 is on by default, so define if it is not explicitly disabled.
|
||||
if test "$enable_dhcpv6" != "no"; then
|
||||
AC_DEFINE([DHCPv6], [1],
|
||||
@ -132,11 +126,9 @@ fi
|
||||
|
||||
# PARANOIA is off by default (until we can test it with all features)
|
||||
AC_ARG_ENABLE(paranoia,
|
||||
AC_HELP_STRING([--enable-paranoia],
|
||||
[enable support for chroot/setuid (default is no)]))
|
||||
AS_HELP_STRING([--enable-paranoia],[enable support for chroot/setuid (default is no)]))
|
||||
AC_ARG_ENABLE(early_chroot,
|
||||
AC_HELP_STRING([--enable-early-chroot],
|
||||
[enable chrooting prior to configuration (default is no)]))
|
||||
AS_HELP_STRING([--enable-early-chroot],[enable chrooting prior to configuration (default is no)]))
|
||||
# If someone enables early chroot, but does not enable paranoia, do so for
|
||||
# them.
|
||||
if test "$enable_paranoia" != "yes" && \
|
||||
@ -154,8 +146,7 @@ if test "$enable_early_chroot" = "yes" ; then
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE(ipv4_pktinfo,
|
||||
AC_HELP_STRING([--enable-ipv4-pktinfo],
|
||||
[enable use of pktinfo on IPv4 sockets (default is no)]))
|
||||
AS_HELP_STRING([--enable-ipv4-pktinfo],[enable use of pktinfo on IPv4 sockets (default is no)]))
|
||||
|
||||
if test "$enable_ipv4_pktinfo" = "yes"; then
|
||||
AC_DEFINE([USE_V4_PKTINFO], [1],
|
||||
@ -163,8 +154,7 @@ if test "$enable_ipv4_pktinfo" = "yes"; then
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE(use_sockets,
|
||||
AC_HELP_STRING([--enable-use-sockets],
|
||||
[use the standard BSD socket API (default is no)]))
|
||||
AS_HELP_STRING([--enable-use-sockets],[use the standard BSD socket API (default is no)]))
|
||||
|
||||
if test "$enable_use_sockets" = "yes"; then
|
||||
AC_DEFINE([USE_SOCKETS], [1],
|
||||
@ -174,8 +164,7 @@ fi
|
||||
# Try to hnadle incorrect byte order for secs field
|
||||
# This is off by default
|
||||
AC_ARG_ENABLE(secs_byteorder,
|
||||
AC_HELP_STRING([--enable-secs-byteorder],
|
||||
[Correct bad byteorders in the secs field (default is no).]))
|
||||
AS_HELP_STRING([--enable-secs-byteorder],[Correct bad byteorders in the secs field (default is no).]))
|
||||
|
||||
if test "$enable_secs_byteorder" = "yes" ; then
|
||||
AC_DEFINE([SECS_BYTEORDER], [1],
|
||||
@ -186,8 +175,7 @@ fi
|
||||
|
||||
atf_path="no"
|
||||
AC_ARG_WITH([atf],
|
||||
AC_HELP_STRING([--with-atf=PATH],
|
||||
[specify location where atf was installed]),
|
||||
AS_HELP_STRING([--with-atf=PATH],[specify location where atf was installed]),
|
||||
[atf_path="$withval"])
|
||||
if test "$atf_path" != "no" ; then
|
||||
# Config path for pkg-config
|
||||
@ -245,8 +233,7 @@ esac
|
||||
|
||||
# Allow specification of alternate state files
|
||||
AC_ARG_WITH(srv-lease-file,
|
||||
AC_HELP_STRING([--with-srv-lease-file=PATH],
|
||||
[File for dhcpd leases
|
||||
AS_HELP_STRING([--with-srv-lease-file=PATH],[File for dhcpd leases
|
||||
(default is LOCALSTATEDIR/db/dhcpd.leases)]),
|
||||
AC_DEFINE_UNQUOTED([_PATH_DHCPD_DB], ["$withval"],
|
||||
[File for dhcpd leases.]))
|
||||
@ -276,8 +263,7 @@ fi
|
||||
echo "$with_srv_lease_file"
|
||||
|
||||
AC_ARG_WITH(srv6-lease-file,
|
||||
AC_HELP_STRING([--with-srv6-lease-file=PATH],
|
||||
[File for dhcpd6 leases
|
||||
AS_HELP_STRING([--with-srv6-lease-file=PATH],[File for dhcpd6 leases
|
||||
(default is LOCALSTATEDIR/db/dhcpd6.leases)]),
|
||||
AC_DEFINE_UNQUOTED([_PATH_DHCPD6_DB], ["$withval"],
|
||||
[File for dhcpd6 leases.]))
|
||||
@ -307,8 +293,7 @@ fi
|
||||
echo "$with_srv6_lease_file"
|
||||
|
||||
AC_ARG_WITH(cli-lease-file,
|
||||
AC_HELP_STRING([--with-cli-lease-file=PATH],
|
||||
[File for dhclient leases
|
||||
AS_HELP_STRING([--with-cli-lease-file=PATH],[File for dhclient leases
|
||||
(default is LOCALSTATEDIR/db/dhclient.leases)]),
|
||||
AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_DB], ["$withval"],
|
||||
[File for dhclient leases.]))
|
||||
@ -338,8 +323,7 @@ fi
|
||||
echo "$with_cli_lease_file"
|
||||
|
||||
AC_ARG_WITH(cli6-lease-file,
|
||||
AC_HELP_STRING([--with-cli6-lease-file=PATH],
|
||||
[File for dhclient6 leases
|
||||
AS_HELP_STRING([--with-cli6-lease-file=PATH],[File for dhclient6 leases
|
||||
(default is LOCALSTATEDIR/db/dhclient6.leases)]),
|
||||
AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_DB], ["$withval"],
|
||||
[File for dhclient6 leases.]))
|
||||
@ -369,38 +353,32 @@ fi
|
||||
echo "$with_cli6_lease_file"
|
||||
|
||||
AC_ARG_WITH(srv-pid-file,
|
||||
AC_HELP_STRING([--with-srv-pid-file=PATH],
|
||||
[File for dhcpd process information
|
||||
AS_HELP_STRING([--with-srv-pid-file=PATH],[File for dhcpd process information
|
||||
(default is LOCALSTATEDIR/run/dhcpd.pid)]),
|
||||
AC_DEFINE_UNQUOTED([_PATH_DHCPD_PID], ["$withval"],
|
||||
[File for dhcpd process information.]))
|
||||
AC_ARG_WITH(srv6-pid-file,
|
||||
AC_HELP_STRING([--with-srv6-pid-file=PATH],
|
||||
[File for dhcpd6 process information
|
||||
AS_HELP_STRING([--with-srv6-pid-file=PATH],[File for dhcpd6 process information
|
||||
(default is LOCALSTATEDIR/run/dhcpd6.pid)]),
|
||||
AC_DEFINE_UNQUOTED([_PATH_DHCPD6_PID], ["$withval"],
|
||||
[File for dhcpd6 process information.]))
|
||||
AC_ARG_WITH(cli-pid-file,
|
||||
AC_HELP_STRING([--with-cli-pid-file=PATH],
|
||||
[File for dhclient process information
|
||||
AS_HELP_STRING([--with-cli-pid-file=PATH],[File for dhclient process information
|
||||
(default is LOCALSTATEDIR/run/dhclient.pid)]),
|
||||
AC_DEFINE_UNQUOTED([_PATH_DHCLIENT_PID], ["$withval"],
|
||||
[File for dhclient process information.]))
|
||||
AC_ARG_WITH(cli6-pid-file,
|
||||
AC_HELP_STRING([--with-cli6-pid-file=PATH],
|
||||
[File for dhclient6 process information
|
||||
AS_HELP_STRING([--with-cli6-pid-file=PATH],[File for dhclient6 process information
|
||||
(default is LOCALSTATEDIR/run/dhclient6.pid)]),
|
||||
AC_DEFINE_UNQUOTED([_PATH_DHCLIENT6_PID], ["$withval"],
|
||||
[File for dhclient6 process information.]))
|
||||
AC_ARG_WITH(relay-pid-file,
|
||||
AC_HELP_STRING([--with-relay-pid-file=PATH],
|
||||
[File for dhcrelay process information
|
||||
AS_HELP_STRING([--with-relay-pid-file=PATH],[File for dhcrelay process information
|
||||
(default is LOCALSTATEDIR/run/dhcrelay.pid)]),
|
||||
AC_DEFINE_UNQUOTED([_PATH_DHCRELAY_PID], ["$withval"],
|
||||
[File for dhcrelay process information.]))
|
||||
AC_ARG_WITH(relay6-pid-file,
|
||||
AC_HELP_STRING([--with-relay6-pid-file=PATH],
|
||||
[File for dhcrelay6 process information
|
||||
AS_HELP_STRING([--with-relay6-pid-file=PATH],[File for dhcrelay6 process information
|
||||
(default is LOCALSTATEDIR/run/dhcrelay6.pid)]),
|
||||
AC_DEFINE_UNQUOTED([_PATH_DHCRELAY6_PID], ["$withval"],
|
||||
[File for dhcrelay6 process information.]))
|
||||
@ -473,51 +451,37 @@ fi
|
||||
# int value.
|
||||
#
|
||||
AC_MSG_CHECKING([for struct lifnum])
|
||||
AC_TRY_COMPILE(
|
||||
[ #include <sys/types.h>
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <net/if.h>
|
||||
],
|
||||
[ struct lifnum a;
|
||||
],
|
||||
[AC_MSG_RESULT(yes)
|
||||
]], [[ struct lifnum a;
|
||||
]])],[AC_MSG_RESULT(yes)
|
||||
AC_DEFINE([ISC_PLATFORM_HAVELIFNUM], [1],
|
||||
[Define to 1 if the system has 'struct lifnum'.])],
|
||||
[AC_MSG_RESULT(no)])
|
||||
[Define to 1 if the system has 'struct lifnum'.])],[AC_MSG_RESULT(no)])
|
||||
|
||||
AC_MSG_CHECKING([for struct if_laddrconf])
|
||||
AC_TRY_COMPILE(
|
||||
[ #include <sys/types.h>
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h>
|
||||
#include <net/if6.h>
|
||||
],
|
||||
[ struct if_laddrconf a;
|
||||
],
|
||||
[AC_MSG_RESULT(yes)
|
||||
]], [[ struct if_laddrconf a;
|
||||
]])],[AC_MSG_RESULT(yes)
|
||||
AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRCONF], [1],
|
||||
[Define to 1 if the system has 'struct if_laddrconf'.])],
|
||||
[AC_MSG_RESULT(no)])
|
||||
[Define to 1 if the system has 'struct if_laddrconf'.])],[AC_MSG_RESULT(no)])
|
||||
|
||||
AC_MSG_CHECKING([for struct if_laddrreq])
|
||||
AC_TRY_LINK(
|
||||
[#include <sys/types.h>
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
|
||||
#include <net/if6.h>
|
||||
],
|
||||
[ struct if_laddrreq a;
|
||||
],
|
||||
[AC_MSG_RESULT(yes)
|
||||
]], [[ struct if_laddrreq a;
|
||||
]])],[AC_MSG_RESULT(yes)
|
||||
AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRREQ], [1],
|
||||
[Define to 1 if the system has 'struct if_laddrreq'.])],
|
||||
[AC_MSG_RESULT(no)])
|
||||
[Define to 1 if the system has 'struct if_laddrreq'.])],[AC_MSG_RESULT(no)])
|
||||
|
||||
#
|
||||
# check for GCC noreturn attribute
|
||||
#
|
||||
AC_MSG_CHECKING(for GCC noreturn attribute)
|
||||
AC_TRY_COMPILE([],[void foo() __attribute__((noreturn));],
|
||||
[AC_MSG_RESULT(yes)
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[void foo() __attribute__((noreturn));]])],[AC_MSG_RESULT(yes)
|
||||
AC_DEFINE([ISC_DHCP_NORETURN], [__attribute__((noreturn))],
|
||||
[Define to the string for a noreturn attribute.])],
|
||||
[AC_MSG_RESULT(no)
|
||||
[Define to the string for a noreturn attribute.])],[AC_MSG_RESULT(no)
|
||||
AC_DEFINE([ISC_DHCP_NORETURN], [],
|
||||
[Define to the string for a noreturn attribute.])])
|
||||
|
||||
@ -588,8 +552,7 @@ AC_CHECK_MEMBER(struct msghdr.msg_control,,
|
||||
|
||||
libbind=
|
||||
AC_ARG_WITH(libbind,
|
||||
AC_HELP_STRING([--with-libbind=PATH],
|
||||
[bind includes and libraries are in PATH
|
||||
AS_HELP_STRING([--with-libbind=PATH],[bind includes and libraries are in PATH
|
||||
(default is ./bind)]),
|
||||
use_libbind="$withval", use_libbind="no")
|
||||
case "$use_libbind" in
|
||||
@ -606,15 +569,13 @@ esac
|
||||
|
||||
# OpenLDAP support.
|
||||
AC_ARG_WITH(ldap,
|
||||
AC_HELP_STRING([--with-ldap],
|
||||
[enable OpenLDAP support in dhcpd (default is no)]),
|
||||
AS_HELP_STRING([--with-ldap],[enable OpenLDAP support in dhcpd (default is no)]),
|
||||
[ldap=$withval],
|
||||
[ldap=no])
|
||||
|
||||
# OpenLDAP with SSL support.
|
||||
AC_ARG_WITH(ldapcrypto,
|
||||
AC_HELP_STRING([--with-ldapcrypto],
|
||||
[enable OpenLDAP crypto support in dhcpd (default is no)]),
|
||||
AS_HELP_STRING([--with-ldapcrypto],[enable OpenLDAP crypto support in dhcpd (default is no)]),
|
||||
[ldapcrypto=$withval],
|
||||
[ldapcrypto=no])
|
||||
|
||||
@ -635,7 +596,7 @@ if test x$ldap = xyes || test x$ldapcrypto = xyes ; then
|
||||
fi
|
||||
|
||||
# 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"
|
||||
|
||||
# Try to add the bind include directory
|
||||
@ -648,7 +609,7 @@ esac
|
||||
|
||||
AC_C_FLEXIBLE_ARRAY_MEMBER
|
||||
|
||||
AC_OUTPUT([
|
||||
AC_CONFIG_FILES([
|
||||
Makefile
|
||||
client/Makefile
|
||||
common/Makefile
|
||||
@ -663,6 +624,7 @@ AC_OUTPUT([
|
||||
server/tests/Makefile
|
||||
doc/devel/doxyfile
|
||||
])
|
||||
AC_OUTPUT
|
||||
|
||||
sh util/bindvar.sh
|
||||
|
||||
|
3
depcomp
3
depcomp
@ -1,7 +1,7 @@
|
||||
#! /bin/sh
|
||||
# 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.
|
||||
|
||||
@ -552,6 +552,7 @@ $ {
|
||||
G
|
||||
p
|
||||
}' >> "$depfile"
|
||||
echo >> "$depfile" # make sure the fragment doesn't end with a backslash
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
|
@ -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@
|
||||
|
||||
# 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
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
@ -16,23 +16,51 @@
|
||||
|
||||
|
||||
VPATH = @srcdir@
|
||||
am__make_dryrun = \
|
||||
{ \
|
||||
am__dry=no; \
|
||||
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 \
|
||||
*\\[\ \ ]*) \
|
||||
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
|
||||
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
|
||||
*) \
|
||||
for am__flg in $$MAKEFLAGS; do \
|
||||
case $$am__flg in \
|
||||
*=*|--*) ;; \
|
||||
*n*) am__dry=yes; break;; \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
done;; \
|
||||
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; \
|
||||
test $$am__dry = yes; \
|
||||
}
|
||||
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@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
@ -353,6 +381,7 @@ uninstall-libLIBRARIES:
|
||||
|
||||
clean-libLIBRARIES:
|
||||
-test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
|
||||
|
||||
libdhcpctl.a: $(libdhcpctl_a_OBJECTS) $(libdhcpctl_a_DEPENDENCIES) $(EXTRA_libdhcpctl_a_DEPENDENCIES)
|
||||
$(AM_V_at)-rm -f libdhcpctl.a
|
||||
$(AM_V_AR)$(libdhcpctl_a_AR) libdhcpctl.a $(libdhcpctl_a_OBJECTS) $(libdhcpctl_a_LIBADD)
|
||||
@ -402,9 +431,11 @@ clean-binPROGRAMS:
|
||||
|
||||
clean-noinstPROGRAMS:
|
||||
-test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
|
||||
|
||||
cltest$(EXEEXT): $(cltest_OBJECTS) $(cltest_DEPENDENCIES) $(EXTRA_cltest_DEPENDENCIES)
|
||||
@rm -f cltest$(EXEEXT)
|
||||
$(AM_V_CCLD)$(LINK) $(cltest_OBJECTS) $(cltest_LDADD) $(LIBS)
|
||||
|
||||
omshell$(EXEEXT): $(omshell_OBJECTS) $(omshell_DEPENDENCIES) $(EXTRA_omshell_DEPENDENCIES)
|
||||
@rm -f omshell$(EXEEXT)
|
||||
$(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
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @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:
|
||||
@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
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @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)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list1=''; \
|
||||
|
@ -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@
|
||||
|
||||
# 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
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
@ -15,23 +15,51 @@
|
||||
@SET_MAKE@
|
||||
|
||||
VPATH = @srcdir@
|
||||
am__make_dryrun = \
|
||||
{ \
|
||||
am__dry=no; \
|
||||
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 \
|
||||
*\\[\ \ ]*) \
|
||||
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
|
||||
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
|
||||
*) \
|
||||
for am__flg in $$MAKEFLAGS; do \
|
||||
case $$am__flg in \
|
||||
*=*|--*) ;; \
|
||||
*n*) am__dry=yes; break;; \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
done;; \
|
||||
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; \
|
||||
test $$am__dry = yes; \
|
||||
}
|
||||
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@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
@ -330,6 +358,7 @@ uninstall-libLIBRARIES:
|
||||
|
||||
clean-libLIBRARIES:
|
||||
-test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
|
||||
|
||||
libdst.a: $(libdst_a_OBJECTS) $(libdst_a_DEPENDENCIES) $(EXTRA_libdst_a_DEPENDENCIES)
|
||||
$(AM_V_at)-rm -f libdst.a
|
||||
$(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
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @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:
|
||||
@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
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @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)
|
||||
$(am__define_uniq_tagged_files); mkid -fID $$unique
|
||||
|
@ -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@
|
||||
|
||||
# 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
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
@ -15,23 +15,51 @@
|
||||
@SET_MAKE@
|
||||
|
||||
VPATH = @srcdir@
|
||||
am__make_dryrun = \
|
||||
{ \
|
||||
am__dry=no; \
|
||||
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 \
|
||||
*\\[\ \ ]*) \
|
||||
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
|
||||
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
|
||||
*) \
|
||||
for am__flg in $$MAKEFLAGS; do \
|
||||
case $$am__flg in \
|
||||
*=*|--*) ;; \
|
||||
*n*) am__dry=yes; break;; \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
done;; \
|
||||
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; \
|
||||
test $$am__dry = yes; \
|
||||
}
|
||||
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@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
@ -279,8 +307,8 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
$(am__aclocal_m4_deps):
|
||||
|
||||
config.h: stamp-h1
|
||||
@if test ! -f $@; then rm -f stamp-h1; else :; fi
|
||||
@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
|
||||
@test -f $@ || rm -f stamp-h1
|
||||
@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
|
||||
|
||||
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
|
||||
@rm -f stamp-h1
|
||||
|
@ -646,6 +646,7 @@ struct lease_state {
|
||||
#define DDNS_UPDATE_STYLE_NONE 0
|
||||
#define DDNS_UPDATE_STYLE_AD_HOC 1
|
||||
#define DDNS_UPDATE_STYLE_INTERIM 2
|
||||
#define DDNS_UPDATE_STYLE_STANDARD 3
|
||||
|
||||
/* Server option names. */
|
||||
|
||||
@ -1658,6 +1659,9 @@ typedef struct dhcp_ddns_cb {
|
||||
|
||||
void *transaction;
|
||||
void *dataspace;
|
||||
|
||||
dns_rdataclass_t dhcid_class;
|
||||
char *lease_tag;
|
||||
} dhcp_ddns_cb_t;
|
||||
|
||||
extern struct ipv6_pool **pools;
|
||||
@ -2087,11 +2091,6 @@ struct expression *parse_domain_list(struct parse *cfile, int);
|
||||
|
||||
|
||||
/* tree.c */
|
||||
#if defined (NSUPDATE)
|
||||
extern struct __res_state resolver_state;
|
||||
extern int resolver_inited;
|
||||
#endif
|
||||
|
||||
extern struct binding_scope *global_scope;
|
||||
pair cons (caddr_t, pair);
|
||||
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 *,
|
||||
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 *,
|
||||
struct packet *, struct lease *,
|
||||
struct client_state *,
|
||||
@ -2817,9 +2807,9 @@ void client_dns_remove(struct client_state *client, struct iaddr *addr);
|
||||
|
||||
void dhcpv4_client_assignments(void);
|
||||
void dhcpv6_client_assignments(void);
|
||||
void form_duid(struct data_string *duid, const char *file, int line);
|
||||
|
||||
/* 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 start_init6(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 *);
|
||||
|
||||
/* 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 dns_zone_lookup (struct dns_zone **, const char *);
|
||||
int dns_zone_dereference (struct dns_zone **, const char *, int);
|
||||
#if defined (NSUPDATE)
|
||||
#define FIND_FORWARD 0
|
||||
#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);
|
||||
void forget_zone (struct dns_zone **);
|
||||
void repudiate_zone (struct dns_zone **);
|
||||
//void cache_found_zone (ns_class, char *, struct in_addr *, int);
|
||||
int get_dhcid (struct data_string *, int, const u_int8_t *, unsigned);
|
||||
int get_dhcid (dhcp_ddns_cb_t *, int, const u_int8_t *, unsigned);
|
||||
void dhcid_tolease (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,
|
||||
@ -2970,6 +2957,16 @@ isc_result_t ddns_remove_fwd(struct data_string *,
|
||||
struct iaddr, struct data_string *);
|
||||
#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 */
|
||||
extern char path_resolv_conf [];
|
||||
extern struct name_server *name_servers;
|
||||
@ -3337,21 +3334,6 @@ void dump_subnets (void);
|
||||
void free_everything (void);
|
||||
#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 */
|
||||
#if defined (FAILOVER_PROTOCOL)
|
||||
extern dhcp_failover_state_t *failover_states;
|
||||
@ -3618,20 +3600,5 @@ void mark_hosts_unavailable(void);
|
||||
void mark_phosts_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 \
|
||||
(sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"))
|
||||
|
@ -33,6 +33,11 @@
|
||||
* ``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 {
|
||||
SEMI = ';',
|
||||
DOT = '.',
|
||||
|
@ -275,3 +275,16 @@
|
||||
Care should be taken before enabling this option. */
|
||||
|
||||
/* #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
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
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) 1996-2003 by Internet Software Consortium
|
||||
*
|
||||
@ -116,9 +116,6 @@ struct binding_value {
|
||||
struct data_string data;
|
||||
unsigned long intval;
|
||||
int boolean;
|
||||
#if defined (NSUPDATE_OLD)
|
||||
ns_updrec *dns;
|
||||
#endif
|
||||
struct fundef *fundef;
|
||||
struct binding_value *bv;
|
||||
} value;
|
||||
|
@ -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@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
|
||||
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
@ -14,15 +14,57 @@
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_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@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ..
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
@ -34,8 +76,11 @@ POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
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
|
||||
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
||||
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
|
||||
CONFIG_HEADER = $(top_builddir)/includes/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
LIBRARIES = $(noinst_LIBRARIES)
|
||||
AR = ar
|
||||
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_LIBADD =
|
||||
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_samedomain.$(OBJEXT) ns_verify.$(OBJEXT)
|
||||
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
|
||||
am__depfiles_maybe = depfiles
|
||||
am__mv = mv -f
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(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)
|
||||
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)
|
||||
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
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||
ATF_CFLAGS = @ATF_CFLAGS@
|
||||
ATF_LDFLAGS = @ATF_LDFLAGS@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
@ -89,21 +183,26 @@ ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
GREP = @GREP@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDAP_CFLAGS = @LDAP_CFLAGS@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_URL = @PACKAGE_URL@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
RANLIB = @RANLIB@
|
||||
@ -111,24 +210,35 @@ SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
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_prefix_program = @ac_prefix_program@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
byte_order = @byte_order@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
@ -146,8 +256,12 @@ program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
AM_CPPFLAGS = -DMINIRES_LIB -DHMAC_MD5
|
||||
noinst_LIBRARIES = libres.a
|
||||
libres_a_SOURCES = res_mkupdate.c res_init.c res_update.c res_send.c \
|
||||
@ -159,17 +273,17 @@ all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.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 \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
|
||||
&& { if test -f $@; then exit 0; else break; fi; }; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign minires/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign minires/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@ -184,17 +298,19 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
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
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(am__aclocal_m4_deps):
|
||||
|
||||
clean-noinstLIBRARIES:
|
||||
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
|
||||
libres.a: $(libres_a_OBJECTS) $(libres_a_DEPENDENCIES)
|
||||
-rm -f libres.a
|
||||
$(libres_a_AR) libres.a $(libres_a_OBJECTS) $(libres_a_LIBADD)
|
||||
$(RANLIB) libres.a
|
||||
|
||||
libres.a: $(libres_a_OBJECTS) $(libres_a_DEPENDENCIES) $(EXTRA_libres_a_DEPENDENCIES)
|
||||
$(AM_V_at)-rm -f libres.a
|
||||
$(AM_V_AR)$(libres_a_AR) libres.a $(libres_a_OBJECTS) $(libres_a_LIBADD)
|
||||
$(AM_V_at)$(RANLIB) libres.a
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
@ -219,92 +335,98 @@ distclean-compile:
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/res_update.Po@am__quote@
|
||||
|
||||
.c.o:
|
||||
@am__fastdepCC_TRUE@ if $(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
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
@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@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
|
||||
|
||||
.c.obj:
|
||||
@am__fastdepCC_TRUE@ if $(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
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@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
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
|
||||
uninstall-info-am:
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
ID: $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); mkid -fID $$unique
|
||||
tags: tags-am
|
||||
TAGS: tags
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
set x; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
$(am__define_uniq_tagged_files); \
|
||||
shift; \
|
||||
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
if test $$# -gt 0; then \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
"$$@" $$unique; \
|
||||
else \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$unique; \
|
||||
fi; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
ctags: ctags-am
|
||||
|
||||
CTAGS: ctags
|
||||
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
||||
$(am__define_uniq_tagged_files); \
|
||||
test -z "$(CTAGS_ARGS)$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
$$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
&& $(am__cd) $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) "$$here"
|
||||
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:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
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; \
|
||||
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 $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
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 \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
@ -322,16 +444,22 @@ install-am: all-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
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:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@ -352,18 +480,38 @@ dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-html: install-html-am
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-am
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-am
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
@ -383,18 +531,23 @@ ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
uninstall-am:
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||
clean-noinstLIBRARIES ctags distclean distclean-compile \
|
||||
distclean-generic distclean-tags distdir dvi dvi-am html \
|
||||
html-am info info-am install install-am install-data \
|
||||
install-data-am install-exec install-exec-am install-info \
|
||||
install-info-am install-man install-strip installcheck \
|
||||
installcheck-am installdirs maintainer-clean \
|
||||
.MAKE: install-am install-strip
|
||||
|
||||
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
|
||||
clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \
|
||||
distclean-compile distclean-generic distclean-tags distdir dvi \
|
||||
dvi-am html html-am info info-am install install-am \
|
||||
install-data install-data-am install-dvi install-dvi-am \
|
||||
install-exec install-exec-am install-html install-html-am \
|
||||
install-info install-info-am install-man install-pdf \
|
||||
install-pdf-am install-ps install-ps-am install-strip \
|
||||
installcheck installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||
mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
|
||||
uninstall-am uninstall-info-am
|
||||
mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
|
||||
uninstall-am
|
||||
|
||||
|
||||
# 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.
|
||||
|
@ -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@
|
||||
|
||||
# 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
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
@ -16,23 +16,51 @@
|
||||
|
||||
|
||||
VPATH = @srcdir@
|
||||
am__make_dryrun = \
|
||||
{ \
|
||||
am__dry=no; \
|
||||
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 \
|
||||
*\\[\ \ ]*) \
|
||||
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
|
||||
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
|
||||
*) \
|
||||
for am__flg in $$MAKEFLAGS; do \
|
||||
case $$am__flg in \
|
||||
*=*|--*) ;; \
|
||||
*n*) am__dry=yes; break;; \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
done;; \
|
||||
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; \
|
||||
test $$am__dry = yes; \
|
||||
}
|
||||
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@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
@ -349,6 +377,7 @@ uninstall-libLIBRARIES:
|
||||
|
||||
clean-libLIBRARIES:
|
||||
-test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
|
||||
|
||||
libomapi.a: $(libomapi_a_OBJECTS) $(libomapi_a_DEPENDENCIES) $(EXTRA_libomapi_a_DEPENDENCIES)
|
||||
$(AM_V_at)-rm -f libomapi.a
|
||||
$(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:
|
||||
-test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
|
||||
|
||||
svtest$(EXEEXT): $(svtest_OBJECTS) $(svtest_DEPENDENCIES) $(EXTRA_svtest_DEPENDENCIES)
|
||||
@rm -f svtest$(EXEEXT)
|
||||
$(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
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @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:
|
||||
@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
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @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)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list1=''; \
|
||||
|
@ -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@
|
||||
|
||||
# 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
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
@ -15,23 +15,51 @@
|
||||
@SET_MAKE@
|
||||
|
||||
VPATH = @srcdir@
|
||||
am__make_dryrun = \
|
||||
{ \
|
||||
am__dry=no; \
|
||||
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 \
|
||||
*\\[\ \ ]*) \
|
||||
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
|
||||
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
|
||||
*) \
|
||||
for am__flg in $$MAKEFLAGS; do \
|
||||
case $$am__flg in \
|
||||
*=*|--*) ;; \
|
||||
*n*) am__dry=yes; break;; \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
done;; \
|
||||
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; \
|
||||
test $$am__dry = yes; \
|
||||
}
|
||||
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@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
@ -338,6 +366,7 @@ uninstall-sbinPROGRAMS:
|
||||
|
||||
clean-sbinPROGRAMS:
|
||||
-test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
|
||||
|
||||
dhcrelay$(EXEEXT): $(dhcrelay_OBJECTS) $(dhcrelay_DEPENDENCIES) $(EXTRA_dhcrelay_DEPENDENCIES)
|
||||
@rm -f dhcrelay$(EXEEXT)
|
||||
$(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
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @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:
|
||||
@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
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @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)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list1=''; \
|
||||
|
@ -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@
|
||||
|
||||
# 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
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
@ -16,23 +16,51 @@
|
||||
|
||||
|
||||
VPATH = @srcdir@
|
||||
am__make_dryrun = \
|
||||
{ \
|
||||
am__dry=no; \
|
||||
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 \
|
||||
*\\[\ \ ]*) \
|
||||
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
|
||||
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
|
||||
*) \
|
||||
for am__flg in $$MAKEFLAGS; do \
|
||||
case $$am__flg in \
|
||||
*=*|--*) ;; \
|
||||
*n*) am__dry=yes; break;; \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
done;; \
|
||||
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; \
|
||||
test $$am__dry = yes; \
|
||||
}
|
||||
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@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
@ -411,6 +439,7 @@ uninstall-sbinPROGRAMS:
|
||||
|
||||
clean-sbinPROGRAMS:
|
||||
-test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
|
||||
|
||||
dhcpd$(EXEEXT): $(dhcpd_OBJECTS) $(dhcpd_DEPENDENCIES) $(EXTRA_dhcpd_DEPENDENCIES)
|
||||
@rm -f dhcpd$(EXEEXT)
|
||||
$(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
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @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:
|
||||
@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
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @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
|
||||
@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');
|
||||
# (2) otherwise, pass the desired values on the 'make' command line.
|
||||
$(am__recursive_targets):
|
||||
@fail= failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
@fail=; \
|
||||
if $(am__make_keepgoing); then \
|
||||
failcom='fail=yes'; \
|
||||
else \
|
||||
failcom='exit 1'; \
|
||||
fi; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
case "$@" in \
|
||||
|
156
server/ddns.c
156
server/ddns.c
@ -38,6 +38,9 @@
|
||||
#include "dst/md5.h"
|
||||
#include <dns/result.h>
|
||||
|
||||
char *ddns_standard_tag = "ddns-dhcid";
|
||||
char *ddns_interim_tag = "ddns-txt";
|
||||
|
||||
#ifdef NSUPDATE
|
||||
|
||||
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 old_ddns_fwd_name;
|
||||
struct data_string ddns_fwd_name;
|
||||
//struct data_string ddns_rev_name;
|
||||
struct data_string ddns_dhcid;
|
||||
struct binding_scope **scope = NULL;
|
||||
//struct iaddr addr;
|
||||
struct data_string d1;
|
||||
struct option_cache *oc;
|
||||
int s1, s2;
|
||||
int result = 0;
|
||||
int server_updates_a = 1;
|
||||
//int server_updates_ptr = 1;
|
||||
struct buffer *bp = (struct buffer *)0;
|
||||
int ignorep = 0, client_ignorep = 0;
|
||||
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;
|
||||
int do_remove = 0;
|
||||
|
||||
if (ddns_update_style != 2)
|
||||
return 0;
|
||||
if ((ddns_update_style != DDNS_UPDATE_STYLE_STANDARD) &&
|
||||
(ddns_update_style != DDNS_UPDATE_STYLE_INTERIM))
|
||||
return (0);
|
||||
|
||||
/*
|
||||
* 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 (&old_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));
|
||||
|
||||
/* If we are allowed to accept the client's update of its own A
|
||||
@ -265,35 +265,22 @@ ddns_updates(struct packet *packet, struct lease *lease, struct lease *old,
|
||||
goto in;
|
||||
}
|
||||
|
||||
/* See if there's a DHCID on the lease, and if not
|
||||
* then potentially look for 'on events' for ad-hoc ddns.
|
||||
#if defined (DDNS_UPDATE_SLOW_TRANSITION)
|
||||
/*
|
||||
* 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") &&
|
||||
(old != NULL)) {
|
||||
/* If there's no DHCID, the update was probably
|
||||
done with the old-style ad-hoc DDNS updates.
|
||||
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. */
|
||||
if (((ddns_update_style == DDNS_UPDATE_STYLE_STANDARD) &&
|
||||
find_bound_string(&ddns_dhcid, *scope, ddns_interim_tag)) ||
|
||||
((ddns_update_style == DDNS_UPDATE_STYLE_INTERIM) &&
|
||||
find_bound_string(&ddns_dhcid, *scope, ddns_standard_tag))) {
|
||||
data_string_forget(&ddns_dhcid, MDL);
|
||||
do_remove = 1;
|
||||
goto in;
|
||||
}
|
||||
} else
|
||||
data_string_forget(&ddns_dhcid, MDL);
|
||||
#endif
|
||||
|
||||
/* See if the administrator wants to do updates even
|
||||
in cases where the update already appears to have been
|
||||
@ -491,21 +478,67 @@ ddns_updates(struct packet *packet, struct lease *lease, struct lease *old,
|
||||
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.
|
||||
* 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 (lease6 != NULL)
|
||||
result = get_dhcid(&ddns_cb->dhcid, 2,
|
||||
lease6->ia->iaid_duid.data,
|
||||
lease6->ia->iaid_duid.len);
|
||||
else if ((lease != NULL) && (lease->uid != NULL) &&
|
||||
(lease->uid_len != 0))
|
||||
result = get_dhcid (&ddns_cb->dhcid,
|
||||
DHO_DHCP_CLIENT_IDENTIFIER,
|
||||
lease -> uid, lease -> uid_len);
|
||||
else if (lease != NULL)
|
||||
result = get_dhcid (&ddns_cb->dhcid, 0,
|
||||
int ddns_type;
|
||||
int ddns_len;
|
||||
if (ddns_update_style == DDNS_UPDATE_STYLE_STANDARD) {
|
||||
/* The standard style */
|
||||
ddns_cb->lease_tag = ddns_standard_tag;
|
||||
ddns_cb->dhcid_class = dns_rdatatype_dhcid;
|
||||
ddns_type = 1;
|
||||
ddns_len = 4;
|
||||
} else {
|
||||
/* The older interim style */
|
||||
ddns_cb->lease_tag = ddns_interim_tag;
|
||||
ddns_cb->dhcid_class = dns_rdatatype_txt;
|
||||
/* 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
|
||||
@ -519,8 +552,6 @@ ddns_updates(struct packet *packet, struct lease *lease, struct lease *old,
|
||||
* Perform updates.
|
||||
*/
|
||||
|
||||
data_string_copy(&ddns_cb->fwd_name, &ddns_fwd_name, MDL);
|
||||
|
||||
if (ddns_cb->flags && DDNS_UPDATE_ADDR) {
|
||||
oc = lookup_option(&server_universe, options,
|
||||
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(&old_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)
|
||||
buffer_dereference(&bp, MDL);
|
||||
|
||||
@ -828,18 +857,21 @@ ddns_update_lease_text(dhcp_ddns_cb_t *ddns_cb,
|
||||
case DDNS_STATE_ADD_FW_NXDOMAIN:
|
||||
bind_ds_value(scope, "ddns-fwd-name", &ddns_cb->fwd_name);
|
||||
|
||||
if (ddns_cb->lease_tag == ddns_standard_tag) {
|
||||
bind_ds_value(scope, ddns_standard_tag, &ddns_cb->dhcid);
|
||||
} else {
|
||||
/* convert from dns version to lease version of dhcid */
|
||||
memset(&lease_dhcid, 0, sizeof(lease_dhcid));
|
||||
dhcid_tolease(&ddns_cb->dhcid, &lease_dhcid);
|
||||
bind_ds_value(scope, "ddns-txt", &lease_dhcid);
|
||||
bind_ds_value(scope, ddns_interim_tag, &lease_dhcid);
|
||||
data_string_forget(&lease_dhcid, MDL);
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case DDNS_STATE_REM_FW_NXRR:
|
||||
case DDNS_STATE_REM_FW_YXDHCID:
|
||||
unset(*scope, "ddns-fwd-name");
|
||||
unset(*scope, "ddns-txt");
|
||||
unset(*scope, ddns_cb->lease_tag);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1797,7 +1829,8 @@ ddns_removals(struct lease *lease,
|
||||
if (*scope == NULL)
|
||||
goto cleanup;
|
||||
|
||||
if (ddns_update_style != 2)
|
||||
if ((ddns_update_style != DDNS_UPDATE_STYLE_STANDARD) &&
|
||||
(ddns_update_style != DDNS_UPDATE_STYLE_INTERIM))
|
||||
goto cleanup;
|
||||
|
||||
/* 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
|
||||
* have it this isn't an interim or rfc3??? record so we can't delete
|
||||
* Find the txt or dhcid tag and copy it to the control block. If we don't
|
||||
* 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.
|
||||
* In this case we will attempt to do any requested next step.
|
||||
*/
|
||||
memset(&leaseid, 0, sizeof(leaseid));
|
||||
if (!find_bound_string (&leaseid, *scope, "ddns-txt")) {
|
||||
ddns_cb->flags &= ~DDNS_UPDATE_ADDR;
|
||||
} else {
|
||||
if (find_bound_string (&leaseid, *scope, ddns_standard_tag)) {
|
||||
/* We have a standard tag */
|
||||
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) !=
|
||||
ISC_R_SUCCESS) {
|
||||
/* We couldn't convert the dhcid from the lease
|
||||
@ -1847,6 +1887,8 @@ ddns_removals(struct lease *lease,
|
||||
ddns_cb->flags &= ~DDNS_UPDATE_ADDR;
|
||||
}
|
||||
data_string_forget(&leaseid, MDL);
|
||||
} else {
|
||||
ddns_cb->flags &= ~DDNS_UPDATE_ADDR;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1894,7 +1936,7 @@ ddns_removals(struct lease *lease,
|
||||
else {
|
||||
/*remove info from scope */
|
||||
unset(*scope, "ddns-fwd-name");
|
||||
unset(*scope, "ddns-txt");
|
||||
unset(*scope, ddns_cb->lease_tag);
|
||||
}
|
||||
}
|
||||
|
||||
|
126
server/dhcpd.c
126
server/dhcpd.c
@ -76,86 +76,6 @@ option server.ddns-hostname = \n\
|
||||
option server.ddns-domainname = config-option domain-name; \n\
|
||||
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 */
|
||||
int ddns_update_style;
|
||||
|
||||
@ -875,9 +795,6 @@ void postconf_initialization (int quiet)
|
||||
struct option_cache *oc;
|
||||
char *s;
|
||||
isc_result_t result;
|
||||
#if defined (NSUPDATE)
|
||||
struct parse *parse;
|
||||
#endif
|
||||
int tmp;
|
||||
|
||||
/* Now try to get the lease file name. */
|
||||
@ -1133,49 +1050,6 @@ void postconf_initialization (int quiet)
|
||||
|
||||
/* Don't need the options anymore. */
|
||||
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)
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" 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
|
||||
.\"
|
||||
.\" Permission to use, copy, modify, and distribute this software for any
|
||||
@ -1039,7 +1039,7 @@ class "customer" {
|
||||
.fi
|
||||
.PP
|
||||
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
|
||||
that subclass and treated accordingly. If no subclass is found
|
||||
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
|
||||
accept updates from the DHCP server.
|
||||
.PP
|
||||
Two DNS update schemes are currently implemented, and another is
|
||||
planned. The two that are currently implemented are the ad-hoc DNS
|
||||
update mode and the interim DHCP-DNS interaction draft update mode.
|
||||
In the future we plan to add a third mode which will be the standard
|
||||
DNS update method based on the RFCS for DHCP-DNS interaction and DHCID
|
||||
The DHCP server must be configured to use one of the two
|
||||
currently-supported methods, or not to do dns updates.
|
||||
This can be done with the
|
||||
There are two DNS schemes implemented. The interim option is
|
||||
based on draft revisions of the DDNS documents while the standard
|
||||
option is based on the RFCs for DHCP-DNS interaction and DHCIDs.
|
||||
A third option, ad-hoc, was deprecated and has now been removed
|
||||
from the code base. The DHCP server must be configured to use
|
||||
one of the two currently-supported methods, or not to do DNS updates.
|
||||
.PP
|
||||
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
|
||||
configuration parameter.
|
||||
.SH THE AD-HOC DNS UPDATE SCHEME
|
||||
The ad-hoc Dynamic DNS update scheme is
|
||||
.B now deprecated
|
||||
and
|
||||
.B
|
||||
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:
|
||||
.SH THE DNS UPDATE SCHEME
|
||||
the interim and standard DNS update schemes operate mostly according
|
||||
to work from the IETF. The interim version was based on the drafts
|
||||
in progress at the time while the standard is based on the completed
|
||||
RFCs. The standard RFCs are:
|
||||
.PP
|
||||
.nf
|
||||
.ce 3
|
||||
@ -1211,15 +1120,17 @@ draft-ietf-dhc-fqdn-option-??.txt
|
||||
draft-ietf-dhc-ddns-resolution-??.txt
|
||||
.fi
|
||||
.PP
|
||||
Because our implementation is slightly different than the standard, we
|
||||
will briefly document the operation of this update style here.
|
||||
The basic framework for the two schemes is similar with the main
|
||||
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
|
||||
The first point to understand about this style of DNS update is that
|
||||
unlike the ad-hoc style, the DHCP server does not necessarily
|
||||
In these two schemes the DHCP server does not necessarily
|
||||
always update both the A and the PTR records. The FQDN option
|
||||
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
|
||||
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
|
||||
the statement \fIignore client-updates;\fR. By default, client
|
||||
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.
|
||||
.PP
|
||||
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)
|
||||
or the hostname option (if present). It will use its own
|
||||
domain name for the client, just as in the ad-hoc update scheme.
|
||||
It will then update both the A and PTR record, using the name that it
|
||||
chose for the client. If the client sends a fully-qualified domain
|
||||
name in the \fBfqdn\fR option, the server uses only the leftmost part of the
|
||||
domain name - in the example above, "jschmoe" instead of
|
||||
"jschmoe.radish.org".
|
||||
domain name for the client. It will then update both the A and PTR
|
||||
record, using the name that it chose for the client. If the client
|
||||
sends a fully-qualified domain name in the \fBfqdn\fR option, the
|
||||
server uses only the leftmost part of the domain name - in the
|
||||
example above, "jschmoe" instead of "jschmoe.radish.org".
|
||||
.PP
|
||||
Further, if the \fIignore client-updates;\fR directive is used, then
|
||||
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
|
||||
Also, if the
|
||||
.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
|
||||
will be used in place of the
|
||||
.I hostname
|
||||
option, and the same rules will apply as described above.
|
||||
.PP
|
||||
The other difference between the ad-hoc scheme and the interim
|
||||
scheme is that with the interim scheme, a method is used that
|
||||
allows more than one DHCP server to update the DNS database without
|
||||
accidentally deleting A records that shouldn't be deleted nor failing
|
||||
to add A records that should be added. The scheme works as follows:
|
||||
Both the standard and interim options also include a method to
|
||||
allow more than one DHCP server to update the DNS database without
|
||||
accidentally deleting A records that shouldn\'t be deleted nor failing
|
||||
to add A records that should be added. For the standard option the
|
||||
method works as follows:
|
||||
.PP
|
||||
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
|
||||
draft-ietf-dnsext-dhcid-rr-??.txt for details). The update adds an A
|
||||
record with the name the server chose and a TXT record containing the
|
||||
string that is an SHA hash over the DHCP client\'s identification (see
|
||||
RFCs 4701 & 4702 for details). The update attempts to add an A
|
||||
record with the name the server chose and a DHCID record containing the
|
||||
hashed identifier string (hashid). If this update succeeds, the
|
||||
server is done.
|
||||
.PP
|
||||
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
|
||||
must be a TXT record in the same name as the new A record, and that
|
||||
TXT record's contents must be equal to hashid. If this update
|
||||
must be a DHCID record in the same name as the new A record, and that
|
||||
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
|
||||
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
|
||||
chooses a new name.
|
||||
.PP
|
||||
The interim DNS update scheme is called interim for two reasons.
|
||||
First, it does not quite follow the RFCs. The RFCs call for a
|
||||
new DHCID RRtype while he interim DNS update scheme uses a TXT record.
|
||||
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
|
||||
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
|
||||
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.
|
||||
.PP
|
||||
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
|
||||
operator intervention, and once this has been done, the DNS will be
|
||||
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
|
||||
.PP
|
||||
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
|
||||
the DNS configuration.
|
||||
.PP
|
||||
You should choose your own secret key, of course. The ISC BIND 8 and
|
||||
9 distributions come with a program for generating secret keys called
|
||||
dnssec-keygen. The version that comes with BIND 9 is likely to produce a
|
||||
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
|
||||
You should choose your own secret key, of course. The ISC BIND 9
|
||||
distribution comes with a program for generating secret keys called
|
||||
dnssec-keygen. If you are using BIND 9\'s
|
||||
dnssec-keygen, the above key would be created as follows:
|
||||
.PP
|
||||
.nf
|
||||
dnssec-keygen -a HMAC-MD5 -b 128 -n USER DHCP_UPDATER
|
||||
.fi
|
||||
.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.
|
||||
To do so, you might write a logging statement like the following:
|
||||
.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
|
||||
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,
|
||||
enclosed in braces. Events are used to implement DNS
|
||||
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.
|
||||
enclosed in braces.
|
||||
.SH REFERENCE: DECLARATIONS
|
||||
.PP
|
||||
.B The
|
||||
@ -2103,7 +1997,7 @@ The \fIddns-update-style\fR parameter
|
||||
.PP
|
||||
The
|
||||
.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
|
||||
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
|
||||
@ -2204,16 +2098,15 @@ statement
|
||||
.B do-forward-updates \fIflag\fB;\fR
|
||||
.PP
|
||||
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
|
||||
effect unless DNS updates are enabled and \fBddns-update-style\fR is
|
||||
set to \fBinterim\fR. Forward updates are enabled by default. If
|
||||
this statement is used to disable forward updates, the DHCP server
|
||||
will never attempt to update the client's A record, and will only ever
|
||||
attempt to update the client's PTR record if the client supplies an
|
||||
FQDN that should be placed in the PTR record using the \fBfqdn\fR option.
|
||||
If forward updates are enabled, the DHCP server will still honor the
|
||||
setting of the \fBclient-updates\fR flag.
|
||||
effect unless DNS updates are enabled. Forward updates are enabled
|
||||
by default. If this statement is used to disable forward updates,
|
||||
the DHCP server will never attempt to update the client\'s A record,
|
||||
and will only ever attempt to update the client\'s PTR record if the
|
||||
client supplies an FQDN that should be placed in the PTR record using
|
||||
the \fBfqdn\fR option. If forward updates are enabled, the DHCP server
|
||||
will still honor the setting of the \fBclient-updates\fR flag.
|
||||
.RE
|
||||
.PP
|
||||
The
|
||||
|
@ -3,7 +3,7 @@
|
||||
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
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
@ -330,6 +330,7 @@ struct enumeration_value ddns_styles_values [] = {
|
||||
{ "none", 0 },
|
||||
{ "ad-hoc", 1 },
|
||||
{ "interim", 2 },
|
||||
{ "standard", 3 },
|
||||
{ (char *)0, 0 }
|
||||
};
|
||||
|
||||
|
@ -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@
|
||||
|
||||
# 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
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
@ -14,23 +14,51 @@
|
||||
|
||||
@SET_MAKE@
|
||||
VPATH = @srcdir@
|
||||
am__make_dryrun = \
|
||||
{ \
|
||||
am__dry=no; \
|
||||
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 \
|
||||
*\\[\ \ ]*) \
|
||||
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
|
||||
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
|
||||
*) \
|
||||
for am__flg in $$MAKEFLAGS; do \
|
||||
case $$am__flg in \
|
||||
*=*|--*) ;; \
|
||||
*n*) am__dry=yes; break;; \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
done;; \
|
||||
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; \
|
||||
test $$am__dry = yes; \
|
||||
}
|
||||
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@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
@ -589,15 +617,19 @@ $(am__aclocal_m4_deps):
|
||||
|
||||
clean-checkPROGRAMS:
|
||||
-test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
|
||||
|
||||
dhcpd_unittests$(EXEEXT): $(dhcpd_unittests_OBJECTS) $(dhcpd_unittests_DEPENDENCIES) $(EXTRA_dhcpd_unittests_DEPENDENCIES)
|
||||
@rm -f dhcpd_unittests$(EXEEXT)
|
||||
$(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)
|
||||
@rm -f hash_unittests$(EXEEXT)
|
||||
$(AM_V_CCLD)$(LINK) $(hash_unittests_OBJECTS) $(hash_unittests_LDADD) $(LIBS)
|
||||
|
||||
legacy_unittests$(EXEEXT): $(legacy_unittests_OBJECTS) $(legacy_unittests_DEPENDENCIES) $(EXTRA_legacy_unittests_DEPENDENCIES)
|
||||
@rm -f legacy_unittests$(EXEEXT)
|
||||
$(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)
|
||||
@rm -f load_bal_unittests$(EXEEXT)
|
||||
$(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
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @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:
|
||||
@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
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @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
|
||||
@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');
|
||||
# (2) otherwise, pass the desired values on the 'make' command line.
|
||||
$(am__recursive_targets):
|
||||
@fail= failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
@fail=; \
|
||||
if $(am__make_keepgoing); then \
|
||||
failcom='fail=yes'; \
|
||||
else \
|
||||
failcom='exit 1'; \
|
||||
fi; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
case "$@" in \
|
||||
@ -991,7 +1022,7 @@ distclean-tags:
|
||||
$(MAKE) $(AM_MAKEFLAGS) $<
|
||||
|
||||
# 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--force-recheck:
|
||||
@:
|
||||
|
@ -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@
|
||||
|
||||
# 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
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
@ -14,23 +14,51 @@
|
||||
|
||||
@SET_MAKE@
|
||||
VPATH = @srcdir@
|
||||
am__make_dryrun = \
|
||||
{ \
|
||||
am__dry=no; \
|
||||
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 \
|
||||
*\\[\ \ ]*) \
|
||||
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
|
||||
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
|
||||
*) \
|
||||
for am__flg in $$MAKEFLAGS; do \
|
||||
case $$am__flg in \
|
||||
*=*|--*) ;; \
|
||||
*n*) am__dry=yes; break;; \
|
||||
bs=\\; \
|
||||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
||||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
||||
esac; \
|
||||
done;; \
|
||||
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; \
|
||||
test $$am__dry = yes; \
|
||||
}
|
||||
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@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
@ -295,6 +323,7 @@ $(am__aclocal_m4_deps):
|
||||
|
||||
clean-checkLIBRARIES:
|
||||
-test -z "$(check_LIBRARIES)" || rm -f $(check_LIBRARIES)
|
||||
|
||||
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_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
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @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:
|
||||
@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
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @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)
|
||||
$(am__define_uniq_tagged_files); mkid -fID $$unique
|
||||
|
Loading…
x
Reference in New Issue
Block a user