diff --git a/Makefile.am b/Makefile.am index b1f14be..65b6ba2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,7 +1,6 @@ ## Makefile.am -- Process this file with automake to produce Makefile.in AUTOMAKE_OPTIONS = gnu -ACLOCAL_AMFLAGS = -I m4 EXTRA_DIST = \ .version \ @@ -40,7 +39,7 @@ edit_cmd = sed \ $(PATHFILES): Makefile @ rm -f $@ $@.tmp - $(AM_V_at) test -d $(dir $@) || mkdir -p $(dir $@) + $(AM_V_at) mkdir -p $$(dirname $@) $(AM_V_GEN) srcdir=''; \ test -f ./$@.in || srcdir=$(srcdir)/; \ $(edit_cmd) $${srcdir}$@.in >$@.tmp diff --git a/NEWS b/NEWS index 7e9a424..624e0f2 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,40 @@ Please send dhcpd-pools bug reports to kerolasa@iki.fi. gpg: Signature is crated using RSA key ID 8ED396E37E38D471A00530D3A9553245FDE9B739. + +Version 3.3 +Belkacem Daheb (2): + add start, end and hostname printing support for xml and json + getdata output: add start, end and hostname printing support for xml and json + +M. van Brummelen (1): + docs: fix manual page groff warning + +Sami Kerola (9): + update project web page + website: use https + chore: update web links + getdata: only emit warning when config include file cannot be read + gnulib: update bootstrap and gitignore files + build-sys: quote subshell execution in the autotools file + build-sys: update bootstrap from gnulib + output: update html javascripts + release: 3.3 + +luisδμ (1): + fix: avoid generation of unvalid JSON in summary + +Version 3.2 +Jean Benoit (1): + contrib: snmptest.pl SNMPwalk can't access to all variables/wrong sort + +Sami Kerola (5): + contrib: point out where one can find zabbix template + build-sys: update .gitignore files + config: remove unnecessary padding + build-sys: autotools and gnulib related updates + build-sys: routine update + release: 3.2 Version 3.1 Mark Sangster (1): diff --git a/README b/README index 6a9ae41..5953fba 100644 --- a/README +++ b/README @@ -28,7 +28,7 @@ Quick start. Dependencies to other projects. - http://www.gnu.org/software/gnulib/ + https://www.gnu.org/software/gnulib/ You can avoid repeated gnulib downloads by setting GNULIB_SRCDIR environment variable. For example: @@ -39,7 +39,7 @@ Dependencies to other projects. Assumign detached gnulib please remember to git pull the latest updates before building dhcpd-pools. - http://uthash.sourceforge.net/ + https://troydhanson.github.io/uthash/ See quick start. diff --git a/THANKS b/THANKS index e91502a..2aec631 100644 --- a/THANKS +++ b/THANKS @@ -47,3 +47,8 @@ José Bollo Sebastián Cramatte Mark Sangster Brent Swingle +Mathieu Morier +Jean Benoit +Belkacem Daheb +Björn Lässig +Luisδμ diff --git a/bootstrap b/bootstrap index 3d1bc08..6f289d7 100755 --- a/bootstrap +++ b/bootstrap @@ -1,34 +1,67 @@ #! /bin/sh -# Print a version string. -scriptversion=2019-01-04.17; # UTC +# DO NOT EDIT! GENERATED AUTOMATICALLY! # Bootstrap this package from checked-out sources. -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +scriptversion=2024-07-04.10; # UTC +# Copyright (C) 2003-2025 Free Software Foundation, Inc. +# # 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 3 of the License, or # (at your option) any later version. - +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. - +# # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Originally written by Paul Eggert. The canonical version of this -# script is maintained as build-aux/bootstrap in gnulib, however, to -# be useful to your project, you should place a copy of it under -# version control in the top-level directory of your project. The +# script is maintained as top/bootstrap in gnulib. However, to be +# useful to your package, you should place a copy of it under version +# control in the top-level directory of your package. The intent is +# that all customization can be done with a bootstrap.conf file also +# maintained in your version control; gnulib comes with a template +# build-aux/bootstrap.conf to get you started. + +# Please report bugs or propose patches to bug-gnulib@gnu.org. + +me="$0" +medir=`dirname "$me"` + +# Read the function library and the configuration. + +# A library of shell functions for autopull.sh, autogen.sh, and bootstrap. + +scriptlibversion=2025-02-16.12; # UTC + +# Copyright (C) 2003-2025 Free Software Foundation, Inc. +# +# 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 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Originally written by Paul Eggert. The canonical version of this +# script is maintained as top/bootstrap-funclib.sh in gnulib. However, +# to be useful to your package, you should place a copy of it under +# version control in the top-level directory of your package. The # intent is that all customization can be done with a bootstrap.conf # file also maintained in your version control; gnulib comes with a # template build-aux/bootstrap.conf to get you started. -# Please report bugs or propose patches to bug-gnulib@gnu.org. - nl=' ' @@ -36,82 +69,17 @@ nl=' LC_ALL=C export LC_ALL -# Ensure that CDPATH is not set. Otherwise, the output from cd -# would cause trouble in at least one use below. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -local_gl_dir=gl - # Honor $PERL, but work even if there is none. PERL="${PERL-perl}" -me=$0 +default_gnulib_url=https://git.savannah.gnu.org/git/gnulib.git -default_gnulib_url=git://git.sv.gnu.org/gnulib - -usage() { - cat </dev/null) +if test -z "$package"; then + package=$(sed -n "$extract_package_name" configure.ac) \ + || die 'cannot find package name in configure.ac' +fi +package=$(echo "$package" | sed "$normalize_package_name") gnulib_name=lib$package build_aux=build-aux @@ -225,14 +215,12 @@ COPYRIGHT_HOLDER='Free Software Foundation, Inc.' MSGID_BUGS_ADDRESS=bug-$package@gnu.org # Files we don't want to import. +# XXX Not used. excluded_files= # File that should exist in the top directory of a checked out hierarchy, # but not in a distribution tarball. -checkout_only_file=TODO - -# Whether to use copies instead of symlinks. -copy=false +checkout_only_file=project.doap # Set this to '.cvsignore .gitignore' in bootstrap.conf if you want # those files to be generated in directories like lib/, m4/, and po/. @@ -244,8 +232,13 @@ vc_ignore=auto # default. bootstrap_sync=false -# Use git to update gnulib sources -use_git=true +# Override the default configuration, if necessary. +# Make sure that bootstrap.conf is sourced from the current directory +# if we were invoked as "sh bootstrap". +conffile=`dirname "$me"`/bootstrap.conf +test -r "$conffile" && . "$conffile" + +# ------------------------- Build-time prerequisites ------------------------- check_exists() { if test "$1" = "--verbose"; then @@ -262,151 +255,6 @@ check_exists() { test $? -lt 126 } -# find_tool ENVVAR NAMES... -# ------------------------- -# Search for a required program. Use the value of ENVVAR, if set, -# otherwise find the first of the NAMES that can be run. -# If found, set ENVVAR to the program name, die otherwise. -# -# FIXME: code duplication, see also gnu-web-doc-update. -find_tool () -{ - find_tool_envvar=$1 - shift - find_tool_names=$@ - eval "find_tool_res=\$$find_tool_envvar" - if test x"$find_tool_res" = x; then - for i; do - if check_exists $i; then - find_tool_res=$i - break - fi - done - fi - if test x"$find_tool_res" = x; then - warn_ "one of these is required: $find_tool_names;" - die "alternatively set $find_tool_envvar to a compatible tool" - fi - eval "$find_tool_envvar=\$find_tool_res" - eval "export $find_tool_envvar" -} - -# Override the default configuration, if necessary. -# Make sure that bootstrap.conf is sourced from the current directory -# if we were invoked as "sh bootstrap". -case "$0" in - */*) test -r "$0.conf" && . "$0.conf" ;; - *) test -r "$0.conf" && . ./"$0.conf" ;; -esac - -if test "$vc_ignore" = auto; then - vc_ignore= - test -d .git && vc_ignore=.gitignore - test -d CVS && vc_ignore="$vc_ignore .cvsignore" -fi - -if test x"$gnulib_modules$gnulib_files$gnulib_extra_files" = x; then - use_gnulib=false -else - use_gnulib=true -fi - -# Translate configuration into internal form. - -# Parse options. - -for option -do - case $option in - --help) - usage - exit;; - --gnulib-srcdir=*) - GNULIB_SRCDIR=${option#--gnulib-srcdir=};; - --skip-po) - SKIP_PO=t;; - --force) - checkout_only_file=;; - --copy) - copy=true;; - --bootstrap-sync) - bootstrap_sync=true;; - --no-bootstrap-sync) - bootstrap_sync=false;; - --no-git) - use_git=false;; - *) - die "$option: unknown option";; - esac -done - -$use_git || test -d "$GNULIB_SRCDIR" \ - || die "Error: --no-git requires --gnulib-srcdir" - -if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then - die "Bootstrapping from a non-checked-out distribution is risky." -fi - -# Strip blank and comment lines to leave significant entries. -gitignore_entries() { - sed '/^#/d; /^$/d' "$@" -} - -# If $STR is not already on a line by itself in $FILE, insert it at the start. -# Entries are inserted at the start of the ignore list to ensure existing -# entries starting with ! are not overridden. Such entries support -# whitelisting exceptions after a more generic blacklist pattern. -insert_if_absent() { - file=$1 - str=$2 - test -f $file || touch $file - test -r $file || die "Error: failed to read ignore file: $file" - duplicate_entries=$(gitignore_entries $file | sort | uniq -d) - if [ "$duplicate_entries" ] ; then - die "Error: Duplicate entries in $file: " $duplicate_entries - fi - linesold=$(gitignore_entries $file | wc -l) - linesnew=$( { echo "$str"; cat $file; } | gitignore_entries | sort -u | wc -l) - if [ $linesold != $linesnew ] ; then - { echo "$str" | cat - $file > $file.bak && mv $file.bak $file; } \ - || die "insert_if_absent $file $str: failed" - fi -} - -# Adjust $PATTERN for $VC_IGNORE_FILE and insert it with -# insert_if_absent. -insert_vc_ignore() { - vc_ignore_file="$1" - pattern="$2" - case $vc_ignore_file in - *.gitignore) - # A .gitignore entry that does not start with '/' applies - # recursively to subdirectories, so prepend '/' to every - # .gitignore entry. - pattern=$(echo "$pattern" | sed s,^,/,);; - esac - insert_if_absent "$vc_ignore_file" "$pattern" -} - -# Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac. -found_aux_dir=no -grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \ - >/dev/null && found_aux_dir=yes -grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \ - >/dev/null && found_aux_dir=yes -test $found_aux_dir = yes \ - || die "configure.ac lacks 'AC_CONFIG_AUX_DIR([$build_aux])'; add it" - -# If $build_aux doesn't exist, create it now, otherwise some bits -# below will malfunction. If creating it, also mark it as ignored. -if test ! -d $build_aux; then - mkdir $build_aux - for dot_ig in x $vc_ignore; do - test $dot_ig = x && continue - insert_vc_ignore $dot_ig $build_aux - done -fi - # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old @@ -434,7 +282,7 @@ sort_ver() { # sort -V is not generally available elif [ "$p2" -gt "$p1" ] 2>/dev/null; then # numeric comparison echo "$1 $2" else # numeric, then lexicographic comparison - lp=$(printf "$p1\n$p2\n" | LANG=C sort -n | tail -n1) + lp=$(printf "%s\n%s\n" "$p1" "$p2" | LANG=C sort -n | tail -n1) if [ "$lp" = "$p2" ]; then echo "$1 $2" else @@ -481,9 +329,9 @@ check_versions() { if test "$app" = libtool; then app=libtoolize fi - # Exempt git if --no-git is in effect. + # Exempt git if git is not needed. if test "$app" = git; then - $use_git || continue + $check_git || continue fi # Honor $APP variables ($TAR, $AUTOCONF, etc.) appvar=$(echo $app | LC_ALL=C tr '[a-z]-' '[A-Z]_') @@ -497,7 +345,7 @@ check_versions() { # Handle the still-experimental Automake-NG programs specially. # They remain named as the mainstream Automake programs ("automake", # and "aclocal") to avoid gratuitous incompatibilities with - # pre-existing usages (by, say, autoreconf, or custom autogen.sh + # preexisting usages (by, say, autoreconf, or custom autogen.sh # scripts), but correctly identify themselves (as being part of # "GNU automake-ng") when asked their version. case $app in @@ -556,81 +404,86 @@ print_versions() { # can't depend on column -t } -# Find sha1sum, named gsha1sum on MacPorts, shasum on Mac OS X 10.6. -# Also find the compatible sha1 utility on the BSDs -if test x"$SKIP_PO" = x; then - find_tool SHA1SUM sha1sum gsha1sum shasum sha1 -fi +# check_build_prerequisites check_git +check_build_prerequisites() +{ + check_git="$1" -use_libtool=0 -# We'd like to use grep -E, to see if any of LT_INIT, -# AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac, -# but that's not portable enough (e.g., for Solaris). -grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \ - && use_libtool=1 -grep '^[ ]*LT_INIT' configure.ac >/dev/null \ - && use_libtool=1 -if test $use_libtool = 1; then - find_tool LIBTOOLIZE glibtoolize libtoolize -fi - -# gnulib-tool requires at least automake and autoconf. -# If either is not listed, add it (with minimum version) as a prerequisite. -case $buildreq in - *automake*) ;; - *) buildreq="automake 1.9 -$buildreq" ;; -esac -case $buildreq in - *autoconf*) ;; - *) buildreq="autoconf 2.59 -$buildreq" ;; -esac - -# When we can deduce that gnulib-tool will require patch, -# and when patch is not already listed as a prerequisite, add it, too. -if test -d "$local_gl_dir" \ - && ! find "$local_gl_dir" -name '*.diff' -exec false {} +; then + # gnulib-tool requires at least automake and autoconf. + # If either is not listed, add it (with minimum version) as a prerequisite. case $buildreq in - *patch*) ;; - *) buildreq="patch - + *automake*) ;; + *) buildreq="automake 1.9 +$buildreq" ;; + esac + case $buildreq in + *autoconf*) ;; + *) buildreq="autoconf 2.59 $buildreq" ;; esac -fi -if ! printf "$buildreq" | check_versions; then - echo >&2 - if test -f README-prereq; then - die "See README-prereq for how to get the prerequisite programs" - else - die "Please install the prerequisite programs" + # When we can deduce that gnulib-tool will require patch, + # and when patch is not already listed as a prerequisite, add it, too. + if test -d "$local_gl_dir" \ + && ! find "$local_gl_dir" -name '*.diff' -exec false {} +; then + case $buildreq in + *patch*) ;; + *) buildreq="patch - +$buildreq" ;; + esac fi -fi -# Warn the user if autom4te appears to be broken; this causes known -# issues with at least gettext 0.18.3. -probe=$(echo 'm4_quote([hi])' | autom4te -l M4sugar -t 'm4_quote:$%' -) -if test "x$probe" != xhi; then - warn_ "WARNING: your autom4te wrapper eats stdin;" - warn_ "if bootstrap fails, consider upgrading your autotools" -fi - -echo "$0: Bootstrapping from checked-out $package sources..." - -# See if we can use gnulib's git-merge-changelog merge driver. -if $use_git && test -d .git && check_exists git; then - if git config merge.merge-changelog.driver >/dev/null ; then - : - elif check_exists git-merge-changelog; then - echo "$0: initializing git-merge-changelog driver" - git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver' - git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B' - else - echo "$0: consider installing git-merge-changelog from gnulib" + if ! printf '%s' "$buildreq" | check_versions; then + echo >&2 + if test -f README-prereq; then + die "See README-prereq for how to get the prerequisite programs" + else + die "Please install the prerequisite programs" + fi fi -fi + # Warn the user if autom4te appears to be broken; this causes known + # issues with at least gettext 0.18.3. + probe=$(echo 'm4_quote([hi])' | autom4te -l M4sugar -t 'm4_quote:$%' -) + if test "x$probe" != xhi; then + warn_ "WARNING: your autom4te wrapper eats stdin;" + warn_ "if bootstrap fails, consider upgrading your autotools" + fi +} +# find_tool ENVVAR NAMES... +# ------------------------- +# Search for a required program. Use the value of ENVVAR, if set, +# otherwise find the first of the NAMES that can be run. +# If found, set ENVVAR to the program name, die otherwise. +# +# FIXME: code duplication, see also gnu-web-doc-update. +find_tool () +{ + find_tool_envvar=$1 + shift + find_tool_names=$@ + eval "find_tool_res=\$$find_tool_envvar" + if test x"$find_tool_res" = x; then + for i; do + if check_exists $i; then + find_tool_res=$i + break + fi + done + fi + if test x"$find_tool_res" = x; then + warn_ "one of these is required: $find_tool_names;" + die "alternatively set $find_tool_envvar to a compatible tool" + fi + eval "$find_tool_envvar=\$find_tool_res" + eval "export $find_tool_envvar" +} + +# --------------------- Preparing GNULIB_SRCDIR for use. --------------------- +# This is part of autopull.sh, but bootstrap needs it too, for self-upgrading. + +# cleanup_gnulib fails, removing the directory $gnulib_path first. cleanup_gnulib() { status=$? rm -fr "$gnulib_path" @@ -641,95 +494,421 @@ git_modules_config () { test -f .gitmodules && git config --file .gitmodules "$@" } -if $use_gnulib; then - if $use_git; then - gnulib_path=$(git_modules_config submodule.gnulib.path) - test -z "$gnulib_path" && gnulib_path=gnulib - fi - - # Get gnulib files. Populate $GNULIB_SRCDIR, possibly updating a - # submodule, for use in the rest of the script. - - case ${GNULIB_SRCDIR--} in - -) - # Note that $use_git is necessarily true in this case. - if git_modules_config submodule.gnulib.url >/dev/null; then - echo "$0: getting gnulib files..." - git submodule init -- "$gnulib_path" || exit $? - git submodule update -- "$gnulib_path" || exit $? - - elif [ ! -d "$gnulib_path" ]; then - echo "$0: getting gnulib files..." - - trap cleanup_gnulib 1 2 13 15 - - shallow= - if test -z "$GNULIB_REVISION"; then - git clone -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2' - fi - git clone $shallow ${GNULIB_URL:-$default_gnulib_url} "$gnulib_path" \ - || cleanup_gnulib - - trap - 1 2 13 15 +prepare_GNULIB_SRCDIR () +{ + if test -n "$GNULIB_SRCDIR"; then + # Use GNULIB_SRCDIR directly. + # We already checked that $GNULIB_SRCDIR references a directory. + # Verify that it contains a gnulib checkout. + test -f "$GNULIB_SRCDIR/gnulib-tool" \ + || die "Error: --gnulib-srcdir or \$GNULIB_SRCDIR is specified," \ + "but does not contain gnulib-tool" + if test -n "$GNULIB_REVISION" && $use_git; then + # The 'git checkout "$GNULIB_REVISION"' command succeeds if the + # GNULIB_REVISION is a commit hash that exists locally, or if it is + # branch name that can be fetched from origin. It fails, however, + # if the GNULIB_REVISION is a commit hash that only exists in + # origin. In this case, we need a 'git fetch' and then retry + # 'git checkout "$GNULIB_REVISION"'. + git -C "$GNULIB_SRCDIR" checkout "$GNULIB_REVISION" 2>/dev/null \ + || { git -C "$GNULIB_SRCDIR" fetch origin \ + && git -C "$GNULIB_SRCDIR" checkout "$GNULIB_REVISION"; } \ + || exit $? fi - GNULIB_SRCDIR=$gnulib_path - ;; - *) - # Use GNULIB_SRCDIR directly or as a reference. - if $use_git && test -d "$GNULIB_SRCDIR"/.git && \ - git_modules_config submodule.gnulib.url >/dev/null; then - echo "$0: getting gnulib files..." - if git submodule -h|grep -- --reference > /dev/null; then - # Prefer the one-liner available in git 1.6.4 or newer. - git submodule update --init --reference "$GNULIB_SRCDIR" \ - "$gnulib_path" || exit $? + else + if ! $use_git; then + die "Error: --no-git is specified," \ + "but neither --gnulib-srcdir nor \$GNULIB_SRCDIR is specified" + fi + if git submodule -h | grep -- --reference > /dev/null; then + : + else + die "git version is too old, git >= 1.6.4 is required" + fi + gnulib_path=$(git_modules_config submodule.gnulib.path) + if test -n "$gnulib_path"; then + # A submodule 'gnulib' is configured. + # Get gnulib files. Populate $gnulib_path, updating the submodule. + if test -n "$GNULIB_REFDIR" && test -d "$GNULIB_REFDIR"/.git; then + # Use GNULIB_REFDIR as a reference. + echo "$0: getting gnulib files..." + git submodule update --init --reference "$GNULIB_REFDIR" "$gnulib_path"\ + || exit $? else - # This fallback allows at least git 1.5.5. - if test -f "$gnulib_path"/gnulib-tool; then - # Since file already exists, assume submodule init already complete. + # GNULIB_REFDIR is not set or not usable. Ignore it. + if git_modules_config submodule.gnulib.url >/dev/null; then + echo "$0: getting gnulib files..." + git submodule init -- "$gnulib_path" || exit $? git submodule update -- "$gnulib_path" || exit $? else - # Older git can't clone into an empty directory. - rmdir "$gnulib_path" 2>/dev/null - git clone --reference "$GNULIB_SRCDIR" \ - "$(git_modules_config submodule.gnulib.url)" "$gnulib_path" \ - && git submodule init -- "$gnulib_path" \ - && git submodule update -- "$gnulib_path" \ - || exit $? + die "Error: submodule 'gnulib' has no configured url" + fi + fi + else + gnulib_path='gnulib' + if test ! -d "$gnulib_path"; then + # The subdirectory 'gnulib' does not yet exist. Clone into it. + echo "$0: getting gnulib files..." + trap cleanup_gnulib HUP INT PIPE TERM + gnulib_url=${GNULIB_URL:-$default_gnulib_url} + if test -n "$GNULIB_REFDIR" && test -d "$GNULIB_REFDIR"/.git; then + # Use GNULIB_REFDIR as a reference. + git clone "$GNULIB_REFDIR" "$gnulib_path" \ + && git -C "$gnulib_path" remote set-url origin "$gnulib_url" \ + && if test -z "$GNULIB_REVISION"; then + git -C "$gnulib_path" pull origin \ + && { + # We want the default branch of "$gnulib_url" (since that's + # the behaviour if GNULIB_REFDIR is not specified), not the + # current branch of "$GNULIB_REFDIR". + default_branch=`LC_ALL=C git -C "$gnulib_path" \ + remote show origin \ + | sed -n -e 's/^ *HEAD branch: //p'` + test -n "$default_branch" || default_branch='master' + git -C "$gnulib_path" checkout "$default_branch" + } + else + # The 'git checkout "$GNULIB_REVISION"' command succeeds if the + # GNULIB_REVISION is a commit hash that exists locally, or if it + # is a branch name that can be fetched from origin. It fails, + # however, if the GNULIB_REVISION is a commit hash that only + # exists in origin. In this case, we need a 'git fetch' and then + # retry 'git checkout "$GNULIB_REVISION"'. + git -C "$gnulib_path" checkout "$GNULIB_REVISION" 2>/dev/null \ + || { git -C "$gnulib_path" fetch origin \ + && git -C "$gnulib_path" checkout "$GNULIB_REVISION"; } + fi \ + || cleanup_gnulib + else + # GNULIB_REFDIR is not set or not usable. Ignore it. + shallow='--depth 2' + if test -z "$GNULIB_REVISION"; then + git clone $shallow "$gnulib_url" "$gnulib_path" \ + || cleanup_gnulib + else + # Only want a shallow checkout of $GNULIB_REVISION, but git does not + # support cloning by commit hash. So attempt a shallow fetch by + # commit hash to minimize the amount of data downloaded and changes + # needed to be processed, which can drastically reduce download and + # processing time for checkout. If the fetch by commit fails, a + # shallow fetch cannot be performed because we do not know what the + # depth of the commit is without fetching all commits. So fall back + # to fetching all commits. + # $GNULIB_REVISION can be a commit id, a tag name, or a branch name. + mkdir -p "$gnulib_path" + # Use a -c option to silence an annoying message + # "hint: Using 'master' as the name for the initial branch." + # (cf. ). + git -C "$gnulib_path" -c init.defaultBranch=master init + git -C "$gnulib_path" remote add origin "$gnulib_url" + if git -C "$gnulib_path" fetch $shallow origin "$GNULIB_REVISION" + then + # "git fetch" of the specific commit succeeded. + git -C "$gnulib_path" reset --hard FETCH_HEAD \ + || cleanup_gnulib + # "git fetch" does not fetch tags (at least in git version 2.43). + # If $GNULIB_REVISION is a tag (not a commit id or branch name), + # add the tag explicitly. + revision=`git -C "$gnulib_path" log -1 --pretty=format:%H` + branch=`LC_ALL=C git -C "$gnulib_path" remote show origin \ + | sed -n -e 's/^ \([^ ]*\) * tracked$/\1/p'` + test "$revision" = "$GNULIB_REVISION" \ + || test "$branch" = "$GNULIB_REVISION" \ + || git -C "$gnulib_path" tag "$GNULIB_REVISION" + else + # Fetch the entire repository. + git -C "$gnulib_path" fetch origin \ + || cleanup_gnulib + git -C "$gnulib_path" checkout "$GNULIB_REVISION" \ + || cleanup_gnulib + fi + fi + fi + trap - HUP INT PIPE TERM + else + # The subdirectory 'gnulib' already exists. + if test -n "$GNULIB_REVISION"; then + if test -d "$gnulib_path/.git"; then + # The 'git checkout "$GNULIB_REVISION"' command succeeds if the + # GNULIB_REVISION is a commit hash that exists locally, or if it + # is a branch name that can be fetched from origin. It fails, + # however, if the GNULIB_REVISION is a commit hash that only + # exists in origin. In this case, we need a 'git fetch' and then + # retry 'git checkout "$GNULIB_REVISION"'. + git -C "$gnulib_path" checkout "$GNULIB_REVISION" 2>/dev/null \ + || { git -C "$gnulib_path" fetch origin \ + && git -C "$gnulib_path" checkout "$GNULIB_REVISION"; } \ + || exit $? + else + die "Error: GNULIB_REVISION is specified in bootstrap.conf," \ + "but '$gnulib_path' contains no git history" + fi fi fi - GNULIB_SRCDIR=$gnulib_path fi - ;; - esac - - if test -d "$GNULIB_SRCDIR"/.git && test -n "$GNULIB_REVISION" \ - && ! git_modules_config submodule.gnulib.url >/dev/null; then - (cd "$GNULIB_SRCDIR" && git checkout "$GNULIB_REVISION") || cleanup_gnulib + # Verify that $gnulib_path contains a gnulib checkout. + test -f "$gnulib_path/gnulib-tool" \ + || die "Error: '$gnulib_path' is supposed to contain a gnulib checkout," \ + "but does not contain gnulib-tool" + GNULIB_SRCDIR=$gnulib_path fi - # $GNULIB_SRCDIR now points to the version of gnulib to use, and # we no longer need to use git or $gnulib_path below here. +} - if $bootstrap_sync; then - cmp -s "$0" "$GNULIB_SRCDIR/build-aux/bootstrap" || { - echo "$0: updating bootstrap and restarting..." - case $(sh -c 'echo "$1"' -- a) in - a) ignored=--;; - *) ignored=ignored;; - esac - exec sh -c \ - 'cp "$1" "$2" && shift && exec "${CONFIG_SHELL-/bin/sh}" "$@"' \ - $ignored "$GNULIB_SRCDIR/build-aux/bootstrap" \ - "$0" "$@" --no-bootstrap-sync +# -------- Upgrading bootstrap to the version found in GNULIB_SRCDIR. -------- + +upgrade_bootstrap () +{ + if test -f "$medir"/bootstrap-funclib.sh; then + update_lib=true + { cmp -s "$medir"/bootstrap "$GNULIB_SRCDIR/top/bootstrap" \ + && cmp -s "$medir"/bootstrap-funclib.sh \ + "$GNULIB_SRCDIR/top/bootstrap-funclib.sh" \ + && cmp -s "$medir"/autopull.sh "$GNULIB_SRCDIR/top/autopull.sh" \ + && cmp -s "$medir"/autogen.sh "$GNULIB_SRCDIR/top/autogen.sh"; \ } - fi + else + update_lib=false + cmp -s "$medir"/bootstrap "$GNULIB_SRCDIR/build-aux/bootstrap" + fi || { + if $update_lib; then + echo "$0: updating bootstrap & companions and restarting..." + else + echo "$0: updating bootstrap and restarting..." + fi + case $(sh -c 'echo "$1"' -- a) in + a) ignored=--;; + *) ignored=ignored;; + esac + u=$update_lib + exec sh -c \ + '{ if '$u' && test -f "$1"; then cp "$1" "$3"; else cp "$2" "$3"; fi; } && + { if '$u' && test -f "$4"; then cp "$4" "$5"; else rm -f "$5"; fi; } && + { if '$u' && test -f "$6"; then cp "$6" "$7"; else rm -f "$7"; fi; } && + { if '$u' && test -f "$8"; then cp "$8" "$9"; else rm -f "$9"; fi; } && + shift && shift && shift && shift && shift && + shift && shift && shift && shift && + exec "${CONFIG_SHELL-/bin/sh}" "$@"' \ + $ignored \ + "$GNULIB_SRCDIR/top/bootstrap" "$GNULIB_SRCDIR/build-aux/bootstrap" \ + "$medir/bootstrap" \ + "$GNULIB_SRCDIR/top/bootstrap-funclib.sh" "$medir/bootstrap-funclib.sh" \ + "$GNULIB_SRCDIR/top/autopull.sh" "$medir/autopull.sh" \ + "$GNULIB_SRCDIR/top/autogen.sh" "$medir/autogen.sh" \ + "$0" "$@" --no-bootstrap-sync + } +} - gnulib_tool=$GNULIB_SRCDIR/gnulib-tool - <$gnulib_tool || exit $? +# ---------------------------------------------------------------------------- + +if test x"$gnulib_modules$gnulib_files$gnulib_extra_files" = x; then + use_gnulib=false +else + use_gnulib=true fi -# Get translations. +# -------- Fetch auxiliary files from the network. -------------------------- + +autopull_usage() { + cat </dev/null 2>&1 && unset CDPATH + + # Parse options. + + # Use git to update gnulib sources + use_git=true + + for option + do + case $option in + --help) + autopull_usage + return;; + --version) + set -e + echo "autopull.sh $scriptlibversion" + echo "$copyright" + return 0 + ;; + --skip-po) + SKIP_PO=t;; + --force) + checkout_only_file=;; + --bootstrap-sync) + bootstrap_sync=true;; + --no-bootstrap-sync) + bootstrap_sync=false;; + --no-git) + use_git=false;; + *) + bootstrap_option_hook $option || die "$option: unknown option";; + esac + done + + $use_git || test -n "$GNULIB_SRCDIR" \ + || die "Error: --no-git requires \$GNULIB_SRCDIR environment variable" \ + "or --gnulib-srcdir option" + test -z "$GNULIB_SRCDIR" || test -d "$GNULIB_SRCDIR" \ + || die "Error: \$GNULIB_SRCDIR environment variable" \ + "or --gnulib-srcdir option is specified," \ + "but does not denote a directory" + + if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then + die "Running this script from a non-checked-out distribution is risky." + fi + + check_build_prerequisites $use_git + + if $use_gnulib || $bootstrap_sync; then + prepare_GNULIB_SRCDIR + if $bootstrap_sync; then + upgrade_bootstrap "$@" + fi + fi + + # Find sha1sum, named gsha1sum on MacPorts, shasum on Mac OS X 10.6. + # Also find the compatible sha1 utility on the BSDs + if test x"$SKIP_PO" = x; then + find_tool SHA1SUM sha1sum gsha1sum shasum sha1 + fi + + # See if we can use gnulib's git-merge-changelog merge driver. + if $use_git && test -d .git && check_exists git; then + if git config merge.merge-changelog.driver >/dev/null ; then + : + elif check_exists git-merge-changelog; then + echo "$0: initializing git-merge-changelog driver" + git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver' + git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B' + else + echo "$0: consider installing git-merge-changelog from gnulib" + fi + fi + + case $SKIP_PO in + '') + if test -d po; then + update_po_files po $package || return + fi + + if test -d runtime-po; then + update_po_files runtime-po $package-runtime || return + fi;; + esac + + # --------------------------------------------------------------------------- + + bootstrap_post_pull_hook \ + || die "bootstrap_post_pull_hook failed" + + # Don't proceed if there are uninitialized submodules. In particular, + # autogen.sh will remove dangling links, which might be links into + # uninitialized submodules. + # But it's OK if the 'gnulib' submodule is uninitialized, as long as + # GNULIB_SRCDIR is set. + if $use_git; then + # Uninitialized submodules are listed with an initial dash. + uninitialized=`git submodule | grep '^-' | awk '{ print $2 }'` + if test -n "$GNULIB_SRCDIR"; then + uninitialized=`echo "$uninitialized" | grep -v '^gnulib$'` + fi + if test -n "$uninitialized"; then + uninit_comma=`echo "$uninitialized" | tr '\n' ',' | sed -e 's|,$|.|'` + die "Some git submodules are not initialized: "$uninit_comma \ + "Either use option '--no-git'," \ + "or run 'git submodule update --init' and bootstrap again." + fi + fi + + if test -f "$medir"/autogen.sh; then + echo "$0: done. Now you can run '$medir/autogen.sh'." + fi +} + +# ----------------------------- Get translations. ----------------------------- download_po_files() { subdir=$1 @@ -758,9 +937,7 @@ update_po_files() { && ls "$ref_po_dir"/*.po 2>/dev/null | sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" || return - langs=$(cd $ref_po_dir && echo *.po | sed 's/\.po//g') - test "$langs" = '*' && langs=x - for po in $langs; do + for po in x $(ls $ref_po_dir | sed -n 's/\.po$//p'); do case $po in x) continue;; esac new_po="$ref_po_dir/$po.po" cksum_file="$ref_po_dir/$po.s1" @@ -774,16 +951,99 @@ update_po_files() { done } -case $SKIP_PO in -'') - if test -d po; then - update_po_files po $package || exit - fi +# -------- Generate files automatically from existing sources. -------------- - if test -d runtime-po; then - update_po_files runtime-po $package-runtime || exit - fi;; -esac +autogen_usage() { + cat < /dev/null 2>&1 + elif test -d .svn; then + svn log -r HEAD "$file" > /dev/null 2>&1 + elif test -d CVS; then + grep -F "/${file##*/}/" "$parent/CVS/Entries" 2>/dev/null | + grep '^/[^/]*/[0-9]' > /dev/null + else + warn_ "no version control for $file?" + false + fi +} + +# Strip blank and comment lines to leave significant entries. +gitignore_entries() { + sed '/^#/d; /^$/d' "$@" +} + +# If $STR is not already on a line by itself in $FILE, insert it at the start. +# Entries are inserted at the start of the ignore list to ensure existing +# entries starting with ! are not overridden. Such entries support +# whitelisting exceptions after a more generic blacklist pattern. +insert_if_absent() { + file=$1 + str=$2 + test -f $file || touch $file + test -r $file || die "Error: failed to read ignore file: $file" + duplicate_entries=$(gitignore_entries $file | sort | uniq -d) + if [ "$duplicate_entries" ] ; then + die "Error: Duplicate entries in $file: " $duplicate_entries + fi + linesold=$(gitignore_entries $file | wc -l) + linesnew=$( { echo "$str"; cat $file; } | gitignore_entries | sort -u | wc -l) + if [ $linesold != $linesnew ] ; then + { echo "$str" | cat - $file > $file.bak && mv $file.bak $file; } \ + || die "insert_if_absent $file $str: failed" + fi +} + +# Adjust $PATTERN for $VC_IGNORE_FILE and insert it with +# insert_if_absent. +insert_vc_ignore() { + vc_ignore_file="$1" + pattern="$2" + case $vc_ignore_file in + *.gitignore) + # A .gitignore entry that does not start with '/' applies + # recursively to subdirectories, so prepend '/' to every + # .gitignore entry. + pattern=$(echo "$pattern" | sed s,^,/,);; + esac + insert_if_absent "$vc_ignore_file" "$pattern" +} symlink_to_dir() { @@ -805,7 +1065,7 @@ symlink_to_dir() for dot_ig in x $vc_ignore; do test $dot_ig = x && continue ig=$parent/$dot_ig - insert_vc_ignore $ig "${dst_dir##*/}" + insert_vc_ignore $ig "${dst_dir##*/}/" done fi @@ -854,219 +1114,516 @@ symlink_to_dir() } } -version_controlled_file() { - parent=$1 - file=$2 - if test -d .git; then - git rm -n "$file" > /dev/null 2>&1 - elif test -d .svn; then - svn log -r HEAD "$file" > /dev/null 2>&1 - elif test -d CVS; then - grep -F "/${file##*/}/" "$parent/CVS/Entries" 2>/dev/null | - grep '^/[^/]*/[0-9]' > /dev/null - else - warn_ "no version control for $file?" - false - fi -} +# Regenerate all autogeneratable files that are omitted from the +# version control repository. In particular, regenerate all +# aclocal.m4, config.h.in, Makefile.in, configure files with new +# versions of autoconf or automake. +autogen() +{ + # Ensure that CDPATH is not set. Otherwise, the output from cd + # would cause trouble in at least one use below. + (unset CDPATH) >/dev/null 2>&1 && unset CDPATH -# NOTE: we have to be careful to run both autopoint and libtoolize -# before gnulib-tool, since gnulib-tool is likely to provide newer -# versions of files "installed" by these two programs. -# Then, *after* gnulib-tool (see below), we have to be careful to -# run autoreconf in such a way that it does not run either of these -# two just-pre-run programs. + # Environment variables that may be set by the user. + : "${AUTOPOINT=autopoint}" + : "${AUTORECONF=autoreconf}" -# Import from gettext. -with_gettext=yes -grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \ - with_gettext=no - -if test $with_gettext = yes || test $use_libtool = 1; then - - tempbase=.bootstrap$$ - trap "rm -f $tempbase.0 $tempbase.1" 1 2 13 15 - - > $tempbase.0 > $tempbase.1 && - find . ! -type d -print | sort > $tempbase.0 || exit - - if test $with_gettext = yes; then - # Released autopoint has the tendency to install macros that have been - # obsoleted in current gnulib, so run this before gnulib-tool. - echo "$0: $AUTOPOINT --force" - $AUTOPOINT --force || exit + if test "$vc_ignore" = auto; then + vc_ignore= + test -d .git && vc_ignore=.gitignore + test -d CVS && vc_ignore="$vc_ignore .cvsignore" fi - # Autoreconf runs aclocal before libtoolize, which causes spurious - # warnings if the initial aclocal is confused by the libtoolized - # (or worse out-of-date) macro directory. - # libtoolize 1.9b added the --install option; but we support back - # to libtoolize 1.5.22, where the install action was default. - if test $use_libtool = 1; then - install= - case $($LIBTOOLIZE --help) in - *--install*) install=--install ;; + + # Parse options. + + # Whether to use copies instead of symlinks. + copy=false + + for option + do + case $option in + --help) + autogen_usage + return;; + --version) + set -e + echo "autogen.sh $scriptlibversion" + echo "$copyright" + return 0 + ;; + --force) + checkout_only_file=;; + --copy) + copy=true;; + *) + bootstrap_option_hook $option || die "$option: unknown option";; esac - echo "running: $LIBTOOLIZE $install --copy" - $LIBTOOLIZE $install --copy - fi - - find . ! -type d -print | sort >$tempbase.1 - old_IFS=$IFS - IFS=$nl - for file in $(comm -13 $tempbase.0 $tempbase.1); do - IFS=$old_IFS - parent=${file%/*} - version_controlled_file "$parent" "$file" || { - for dot_ig in x $vc_ignore; do - test $dot_ig = x && continue - ig=$parent/$dot_ig - insert_vc_ignore "$ig" "${file##*/}" - done - } done - IFS=$old_IFS - rm -f $tempbase.0 $tempbase.1 - trap - 1 2 13 15 -fi + test -z "$GNULIB_SRCDIR" || test -d "$GNULIB_SRCDIR" \ + || die "Error: \$GNULIB_SRCDIR environment variable or --gnulib-srcdir" \ + "option is specified, but does not denote a directory" -# Import from gnulib. - -if $use_gnulib; then - gnulib_tool_options="\ - --no-changelog\ - --aux-dir=$build_aux\ - --doc-base=$doc_base\ - --lib=$gnulib_name\ - --m4-base=$m4_base/\ - --source-base=$source_base/\ - --tests-base=$tests_base\ - --local-dir=$local_gl_dir\ - $gnulib_tool_option_extras\ - " - if test $use_libtool = 1; then - case "$gnulib_tool_options " in - *' --libtool '*) ;; - *) gnulib_tool_options="$gnulib_tool_options --libtool" ;; - esac + if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then + die "Running this script from a non-checked-out distribution is risky." fi - echo "$0: $gnulib_tool $gnulib_tool_options --import ..." - $gnulib_tool $gnulib_tool_options --import $gnulib_modules \ - || die "gnulib-tool failed" - for file in $gnulib_files; do - symlink_to_dir "$GNULIB_SRCDIR" $file \ + if $use_gnulib; then + if test -z "$GNULIB_SRCDIR"; then + gnulib_path=$(test -f .gitmodules && + git config --file .gitmodules submodule.gnulib.path) + test -z "$gnulib_path" && gnulib_path=gnulib + GNULIB_SRCDIR=$gnulib_path + fi + fi + + # Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac. + found_aux_dir=no + grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'])' configure.ac \ + >/dev/null && found_aux_dir=yes + grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \ + >/dev/null && found_aux_dir=yes + test $found_aux_dir = yes \ + || die "configure.ac lacks 'AC_CONFIG_AUX_DIR([$build_aux])'; add it" + + # If $build_aux doesn't exist, create it now, otherwise some bits + # below will malfunction. If creating it, also mark it as ignored. + if test ! -d $build_aux; then + mkdir $build_aux + for dot_ig in x $vc_ignore; do + test $dot_ig = x && continue + insert_vc_ignore $dot_ig $build_aux/ + done + fi + + check_build_prerequisites false + + use_libtool=0 + # We'd like to use grep -E, to see if any of LT_INIT, + # AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac, + # but that's not portable enough (e.g., for Solaris). + grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \ + && use_libtool=1 + grep '^[ ]*LT_INIT' configure.ac >/dev/null \ + && use_libtool=1 + if test $use_libtool = 1; then + find_tool LIBTOOLIZE glibtoolize libtoolize + fi + + if $use_gnulib; then + gnulib_tool=$GNULIB_SRCDIR/gnulib-tool + <$gnulib_tool || return + fi + + # NOTE: we have to be careful to run both autopoint and libtoolize + # before gnulib-tool, since gnulib-tool is likely to provide newer + # versions of files "installed" by these two programs. + # Then, *after* gnulib-tool (see below), we have to be careful to + # run autoreconf in such a way that it does not run either of these + # two just-pre-run programs. + + # Import from gettext. + with_gettext=yes + grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \ + with_gettext=no + + if test $with_gettext = yes || test $use_libtool = 1; then + + tempbase=.bootstrap$$ + trap "rm -f $tempbase.0 $tempbase.1" HUP INT PIPE TERM + + > $tempbase.0 > $tempbase.1 && + find . ! -type d -print | sort > $tempbase.0 || return + + if test $with_gettext = yes; then + # Released autopoint has the tendency to install macros that have been + # obsoleted in current gnulib, so run this before gnulib-tool. + echo "$0: $AUTOPOINT --force" + $AUTOPOINT --force || return + fi + + # Autoreconf runs aclocal before libtoolize, which causes spurious + # warnings if the initial aclocal is confused by the libtoolized + # (or worse out-of-date) macro directory. + # libtoolize 1.9b added the --install option; but we support back + # to libtoolize 1.5.22, where the install action was default. + if test $use_libtool = 1; then + install= + case $($LIBTOOLIZE --help) in + *--install*) install=--install ;; + esac + echo "running: $LIBTOOLIZE $install --copy" + $LIBTOOLIZE $install --copy + fi + + find . ! -type d -print | sort >$tempbase.1 + old_IFS=$IFS + IFS=$nl + for file in $(comm -13 $tempbase.0 $tempbase.1); do + IFS=$old_IFS + parent=${file%/*} + version_controlled_file "$parent" "$file" || { + for dot_ig in x $vc_ignore; do + test $dot_ig = x && continue + ig=$parent/$dot_ig + insert_vc_ignore "$ig" "${file##*/}" + done + } + done + IFS=$old_IFS + + rm -f $tempbase.0 $tempbase.1 + trap - HUP INT PIPE TERM + fi + + # Import from gnulib. + + if $use_gnulib; then + gnulib_tool_options="\ + --no-changelog\ + --aux-dir=$build_aux\ + --doc-base=$doc_base\ + --lib=$gnulib_name\ + --m4-base=$m4_base/\ + --source-base=$source_base/\ + --tests-base=$tests_base\ + --local-dir=$local_gl_dir\ + $gnulib_tool_option_extras\ + " + if test $use_libtool = 1; then + case "$gnulib_tool_options " in + *' --libtool '*) ;; + *) gnulib_tool_options="$gnulib_tool_options --libtool" ;; + esac + fi + echo "$0: $gnulib_tool $gnulib_tool_options --import ..." + $gnulib_tool $gnulib_tool_options --import $gnulib_modules \ + || die "gnulib-tool failed" + + if test $with_gettext = yes && test ! -f $m4_base/gettext.m4; then + # The gnulib-tool invocation has removed $m4_base/gettext.m4, that the + # AUTOPOINT invocation had installed. This can occur when the gnulib + # module 'gettext' was previously present but is now not present any more. + # Repeat the AUTOPOINT invocation and the gnulib-tool invocation. + + echo "$0: $AUTOPOINT --force" + $AUTOPOINT --force || return + + echo "$0: $gnulib_tool $gnulib_tool_options --import ..." + $gnulib_tool $gnulib_tool_options --import $gnulib_modules \ + || die "gnulib-tool failed" + fi + + for file in $gnulib_files; do + symlink_to_dir "$GNULIB_SRCDIR" $file \ + || die "failed to symlink $file" + done + fi + + bootstrap_post_import_hook \ + || die "bootstrap_post_import_hook failed" + + # Remove any dangling symlink matching "*.m4" or "*.[ch]" in some + # gnulib-populated directories. Such .m4 files would cause aclocal to fail. + # The following requires GNU find 4.2.3 or newer. Considering the usual + # portability constraints of this script, that may seem a very demanding + # requirement, but it should be ok. Ignore any failure, which is fine, + # since this is only a convenience to help developers avoid the relatively + # unusual case in which a symlinked-to .m4 file is git-removed from gnulib + # between successive runs of this script. + find "$m4_base" "$source_base" \ + -depth \( -name '*.m4' -o -name '*.[ch]' \) \ + -type l -xtype l -delete > /dev/null 2>&1 + + # Invoke autoreconf with --force --install to ensure upgrades of tools + # such as ylwrap. + AUTORECONFFLAGS="--verbose --install --force -I $m4_base $ACLOCAL_FLAGS" + AUTORECONFFLAGS="$AUTORECONFFLAGS --no-recursive" + + # Tell autoreconf not to invoke autopoint or libtoolize; they were run above. + echo "running: AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS" + AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS \ + || die "autoreconf failed" + + # Get some extra files from gnulib, overriding existing files. + for file in $gnulib_extra_files; do + case $file in + */INSTALL) dst=INSTALL;; + build-aux/*) dst=$build_aux/${file#build-aux/};; + *) dst=$file;; + esac + symlink_to_dir "$GNULIB_SRCDIR" $file $dst \ || die "failed to symlink $file" done -fi -bootstrap_post_import_hook \ - || die "bootstrap_post_import_hook failed" - -# Don't proceed if there are uninitialized submodules. In particular, -# the next step will remove dangling links, which might be links into -# uninitialized submodules. -# -# Uninitialized submodules are listed with an initial dash. -if $use_git && git submodule | grep '^-' >/dev/null; then - die "some git submodules are not initialized. " \ - "Run 'git submodule init' and bootstrap again." -fi - -# Remove any dangling symlink matching "*.m4" or "*.[ch]" in some -# gnulib-populated directories. Such .m4 files would cause aclocal to fail. -# The following requires GNU find 4.2.3 or newer. Considering the usual -# portability constraints of this script, that may seem a very demanding -# requirement, but it should be ok. Ignore any failure, which is fine, -# since this is only a convenience to help developers avoid the relatively -# unusual case in which a symlinked-to .m4 file is git-removed from gnulib -# between successive runs of this script. -find "$m4_base" "$source_base" \ - -depth \( -name '*.m4' -o -name '*.[ch]' \) \ - -type l -xtype l -delete > /dev/null 2>&1 - -# Invoke autoreconf with --force --install to ensure upgrades of tools -# such as ylwrap. -AUTORECONFFLAGS="--verbose --install --force -I $m4_base $ACLOCAL_FLAGS" - -# Some systems (RHEL 5) are using ancient autotools, for which the -# --no-recursive option had not been invented. Detect that lack and -# omit the option when it's not supported. FIXME in 2017: remove this -# hack when RHEL 5 autotools are updated, or when they become irrelevant. -case $($AUTORECONF --help) in - *--no-recursive*) AUTORECONFFLAGS="$AUTORECONFFLAGS --no-recursive";; -esac - -# Tell autoreconf not to invoke autopoint or libtoolize; they were run above. -echo "running: AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS" -AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS \ - || die "autoreconf failed" - -# Get some extra files from gnulib, overriding existing files. -for file in $gnulib_extra_files; do - case $file in - */INSTALL) dst=INSTALL;; - build-aux/*) dst=$build_aux/${file#build-aux/};; - *) dst=$file;; - esac - symlink_to_dir "$GNULIB_SRCDIR" $file $dst \ - || die "failed to symlink $file" -done - -if test $with_gettext = yes; then - # Create gettext configuration. - echo "$0: Creating po/Makevars from po/Makevars.template ..." - rm -f po/Makevars - sed ' - /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/ - /^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/ - /^MSGID_BUGS_ADDRESS *=/s|=.*|= '"$MSGID_BUGS_ADDRESS"'| - /^XGETTEXT_OPTIONS *=/{ - s/$/ \\/ - a\ - '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+} - } - ' po/Makevars.template >po/Makevars \ - || die 'cannot generate po/Makevars' - - # If the 'gettext' module is in use, grab the latest Makefile.in.in. - # If only the 'gettext-h' module is in use, assume autopoint already - # put the correct version of this file into place. - case $gnulib_modules in - *gettext-h*) ;; - *gettext*) - cp $GNULIB_SRCDIR/build-aux/po/Makefile.in.in po/Makefile.in.in \ - || die "cannot create po/Makefile.in.in" - ;; - esac - - if test -d runtime-po; then - # Similarly for runtime-po/Makevars, but not quite the same. - rm -f runtime-po/Makevars + if test $with_gettext = yes; then + # Create gettext configuration. + echo "$0: Creating po/Makevars from po/Makevars.template ..." + rm -f po/Makevars sed ' - /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/ - /^subdir *=.*/s/=.*/= runtime-po/ - /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/ + /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/ + /^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/ + /^MSGID_BUGS_ADDRESS *=/s|=.*|= '"$MSGID_BUGS_ADDRESS"'| /^XGETTEXT_OPTIONS *=/{ s/$/ \\/ a\ - '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+} + '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+} } - ' po/Makevars.template >runtime-po/Makevars \ - || die 'cannot generate runtime-po/Makevars' + ' po/Makevars.template >po/Makevars \ + || die 'cannot generate po/Makevars' - # Copy identical files from po to runtime-po. - (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po) + # If the 'gettext' module is in use, grab the latest Makefile.in.in. + # If only the 'gettext-h' module is in use, assume autopoint already + # put the correct version of this file into place. + case $gnulib_modules in + *gettext-h*) ;; + *gettext*) + cp $GNULIB_SRCDIR/build-aux/po/Makefile.in.in po/Makefile.in.in \ + || die "cannot create po/Makefile.in.in" + ;; + esac + + if test -d runtime-po; then + # Similarly for runtime-po/Makevars, but not quite the same. + rm -f runtime-po/Makevars + sed ' + /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/ + /^subdir *=.*/s/=.*/= runtime-po/ + /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/ + /^XGETTEXT_OPTIONS *=/{ + s/$/ \\/ + a\ + '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+} + } + ' po/Makevars.template >runtime-po/Makevars \ + || die 'cannot generate runtime-po/Makevars' + + # Copy identical files from po to runtime-po. + cp -p po/Makefile.in.in po/*-quot po/*.header po/*.sed po/*.sin runtime-po + fi fi + + bootstrap_epilogue + + echo "$0: done. Now you can run './configure'." +} + +# ---------------------------------------------------------------------------- + +# Local Variables: +# eval: (add-hook 'before-save-hook 'time-stamp nil t) +# time-stamp-start: "scriptlibversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC0" +# time-stamp-end: "; # UTC" +# End: + +usage() { + cat <' configure.ac > /dev/null && gettext_external=1 -grep '^[ ]*AM_GNU_GETTEXT(\[external\]' configure.ac > /dev/null && +grep '^[ ]*AM_GNU_GETTEXT(\[external]' configure.ac > /dev/null && gettext_external=1 if test $gettext_external = 1; then diff --git a/build-aux/git-version-gen b/build-aux/git-version-gen index 3468247..a44f5d5 100755 --- a/build-aux/git-version-gen +++ b/build-aux/git-version-gen @@ -1,12 +1,12 @@ #!/bin/sh # Print a version string. -scriptversion=2012-12-31.23; # UTC +scriptversion=2022-01-27.18; # UTC -# Copyright (C) 2007-2013 Free Software Foundation, Inc. +# Copyright (C) 2007-2022 Free Software Foundation, Inc. # # 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 3 of the License, or +# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, @@ -15,9 +15,9 @@ scriptversion=2012-12-31.23; # UTC # 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 . +# along with this program. If not, see . -# This script is derived from GIT-VERSION-GEN from GIT: http://git.or.cz/. +# This script is derived from GIT-VERSION-GEN from GIT: https://git-scm.com/. # It may be run two ways: # - from a git repository in which the "git describe" command below # produces useful output (thus requiring at least one signed tag) @@ -65,19 +65,21 @@ scriptversion=2012-12-31.23; # UTC # EXTRA_DIST = $(top_srcdir)/.version # BUILT_SOURCES = $(top_srcdir)/.version # $(top_srcdir)/.version: -# echo $(VERSION) > $@-t && mv $@-t $@ +# echo '$(VERSION)' > $@-t +# mv $@-t $@ # dist-hook: -# echo $(VERSION) > $(distdir)/.tarball-version +# echo '$(VERSION)' > $(distdir)/.tarball-version me=$0 +year=`expr "$scriptversion" : '\([^-]*\)'` version="git-version-gen $scriptversion -Copyright 2011 Free Software Foundation, Inc. -There is NO warranty. You may redistribute this software -under the terms of the GNU General Public License. -For more information about these matters, see the files named COPYING." +Copyright (C) ${year} Free Software Foundation, Inc. +License GPLv3+: GNU GPL version 3 or later . +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law." usage="\ Usage: $me [OPTION]... \$srcdir/.tarball-version [TAG-NORMALIZATION-SED-SCRIPT] @@ -85,8 +87,9 @@ Print a version string. Options: - --prefix prefix of git tags (default 'v') - --fallback fallback version to use if \"git --version\" fails + --prefix PREFIX prefix of git tags (default 'v') + --fallback VERSION + fallback version to use if \"git --version\" fails --help display this help and exit --version output version information and exit @@ -100,8 +103,8 @@ while test $# -gt 0; do case $1 in --help) echo "$usage"; exit 0;; --version) echo "$version"; exit 0;; - --prefix) shift; prefix="$1";; - --fallback) shift; fallback="$1";; + --prefix) shift; prefix=${1?};; + --fallback) shift; fallback=${1?};; -*) echo "$0: Unknown option '$1'." >&2 echo "$0: Try '--help' for more information." >&2 @@ -140,11 +143,9 @@ then v=`cat $tarball_version_file` || v= case $v in *$nl*) v= ;; # reject multi-line output - [0-9]*) ;; - *) v= ;; esac test "x$v" = x \ - && echo "$0: WARNING: $tarball_version_file is missing or damaged" 1>&2 + && echo "$0: WARNING: $tarball_version_file is damaged" 1>&2 fi if test "x$v" != x @@ -166,9 +167,10 @@ then # tag or the previous older version that did not? # Newer: v6.10-77-g0f8faeb # Older: v6.10-g0f8faeb - case $v in - *-*-*) : git describe is okay three part flavor ;; - *-*) + vprefix=`expr "X$v" : 'X\(.*\)-g[^-]*$'` || vprefix=$v + case $vprefix in + *-*) : git describe is probably okay three part flavor ;; + *) : git describe is older two part flavor # Recreate the number of commits and rewrite such that the # result is the same as if we were using the newer version @@ -183,9 +185,9 @@ then ;; esac - # Change the first '-' to a '.', so version-comparing tools work properly. - # Remove the "g" in git describe's output string, to save a byte. - v=`echo "$v" | sed 's/-/./;s/\(.*\)-g/\1-/'`; + # Change the penultimate "-" to ".", for version-comparing tools. + # Remove the "g" to save a byte. + v=`echo "$v" | sed 's/-\([^-]*\)-g\([^-]*\)$/.\1-\2/'`; v_from_git=1 elif test "x$fallback" = x || git --version >/dev/null 2>&1; then v=UNKNOWN @@ -199,7 +201,7 @@ v=`echo "$v" |sed "s/^$prefix//"` # string we're using came from git. I.e., skip the test if it's "UNKNOWN" # or if it came from .tarball-version. if test "x$v_from_git" != x; then - # Don't declare a version "dirty" merely because a time stamp has changed. + # Don't declare a version "dirty" merely because a timestamp has changed. git update-index --refresh > /dev/null 2>&1 dirty=`exec 2>/dev/null;git diff-index --name-only HEAD` || dirty= @@ -214,12 +216,12 @@ if test "x$v_from_git" != x; then fi # Omit the trailing newline, so that m4_esyscmd can use the result directly. -echo "$v" | tr -d "$nl" +printf %s "$v" # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff --git a/configure.ac b/configure.ac index 92ff82c..818bee9 100644 --- a/configure.ac +++ b/configure.ac @@ -2,11 +2,11 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) -AC_CONFIG_MACRO_DIR([m4]) +AC_CONFIG_MACRO_DIRS([m4]) AC_INIT([dhcpd-pools], [m4_esyscmd([build-aux/git-version-gen .tarball-version])], [kerolasa@iki.fi],[], - [http://dhcpd-pools.sourceforge.net/]) + [https://dhcpd-pools.sourceforge.net/]) PACKAGE_MAINTAINER="Sami Kerola" AC_SUBST([PACKAGE_MAINTAINER]) AC_CONFIG_AUX_DIR([build-aux]) diff --git a/contrib/PKGBUILD b/contrib/PKGBUILD index 6fbb5cf..08770a4 100644 --- a/contrib/PKGBUILD +++ b/contrib/PKGBUILD @@ -7,7 +7,7 @@ pkgver=0 pkgrel=1 pkgdesc="ISC dhcpd lease status utility" arch=('i686' 'x86_64') -url=http://dhcpd-pools.sourceforge.net/ +url=https://dhcpd-pools.sourceforge.net/ license=('BSD') depends=('pacman') makedepends=('uthash' 'git') diff --git a/contrib/snmptest.pl b/contrib/snmptest.pl index c77b882..54093c7 100644 --- a/contrib/snmptest.pl +++ b/contrib/snmptest.pl @@ -23,9 +23,10 @@ # you set $dbg to 1 then output will be generated in /tmp. use strict; +use NetSNMP::OID; # Version info: -my $SNMPver = "snmp1.0"; +my $SNMPver = "snmp1.1"; my $DHCPver = "dhcp1.0"; my $VERSION = "$SNMPver/$DHCPver"; # @@ -193,7 +194,7 @@ sub ParseDataFile () { } close IN; if ($dbg) { - foreach (sort @validoidlist) { print DBG "ValidOID: $_\n"; } + foreach (sort Oidcmp @validoidlist) { print DBG "ValidOID: $_\n"; } } if ($dbg) { @@ -370,7 +371,7 @@ sub GetData ($) { @userquery = split (/\./, $userqueryoid); my $found = 0; - foreach (sort @validoidlist) { + foreach (sort Oidcmp @validoidlist) { $next = $_; print DBG "Comparing $userqueryoid vs. $_\n" if $dbg; @validoid = split (/\./, $_); @@ -432,6 +433,12 @@ sub Pong { $line = 0; } +sub Oidcmp { + my $oida = new NetSNMP::OID($a); + my $oidb = new NetSNMP::OID($b); + snmp_oid_compare($oida, $oidb); +} + ################################## START ################################## # # Main diff --git a/contrib/zabbix.txt b/contrib/zabbix.txt new file mode 100644 index 0000000..9ea279a --- /dev/null +++ b/contrib/zabbix.txt @@ -0,0 +1,4 @@ +Zabbix 5 template, and instructions how to use it, can be found from +Mathieu's repository. + +https://github.com/mmorier86/dhcpd-pools-zabbix-template diff --git a/lib/.gitignore b/lib/.gitignore index 03b1c1f..e2e741c 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -1,13 +1,22 @@ /alloca.h /alloca.in.h /arg-nonnull.h -/arpa/inet.h +/arpa/ +/arpa_inet.c /arpa_inet.in.h +/assert.in.h +/attribute.h /basename-lgpl.c +/basename-lgpl.h +/c32is-impl.h +/c32isprint.c +/calloc.c /c-ctype.c /c-ctype.h /c++defs.h /cdefs.h +/cloexec.c +/cloexec.h /close.c /closeout.c /closeout.h @@ -17,15 +26,15 @@ /c-strcaseeq.h /c-strcase.h /c-strncasecmp.c -/dirname.h -/dirname-lgpl.c -/dosname.h +/dup2.c /errno.in.h /error.c /error.h +/error.in.h /exitfail.c /exitfail.h /fclose.c +/fcntl.c /fcntl.h /fcntl.in.h /fd-hook.c @@ -36,6 +45,7 @@ /flexmember.h /float.c /float+.h +/float.h /float.in.h /fopen.c /fpending.c @@ -43,11 +53,15 @@ /fpurge.c /freading.c /freading.h +/free.c /fseek.c /fseeko.c /fstat.c /ftell.c /ftello.c +/getdtablesize.c +/getlocalename_l-unsafe.c +/getlocalename_l-unsafe.h /getopt1.c /getopt.c /getopt-cdefs.in.h @@ -60,11 +74,14 @@ /getprogname.c /getprogname.h /gettext.h -/glthread/* /hard-locale.c /hard-locale.h +/ialloc.c +/ialloc.h +/idx.h /inet_pton.c /intprops.h +/intprops-internal.h /inttypes.h /inttypes.in.h /isnan.c @@ -76,16 +93,60 @@ /lc-charset-dispatch.h /libc-config.h /libdhcpd_pools.la +/libdhcpd_pools_la-arpa_inet.lo +/libdhcpd_pools_la-basename-lgpl.lo +/libdhcpd_pools_la-c32isprint.lo +/libdhcpd_pools_la-c-ctype.lo +/libdhcpd_pools_la-cloexec.lo +/libdhcpd_pools_la-closeout.lo +/libdhcpd_pools_la-close-stream.lo +/libdhcpd_pools_la-c-strcasecmp.lo +/libdhcpd_pools_la-exitfail.lo +/libdhcpd_pools_la-fclose.lo +/libdhcpd_pools_la-fcntl.lo +/libdhcpd_pools_la-fd-hook.lo +/libdhcpd_pools_la-fflush.lo +/libdhcpd_pools_la-float.lo +/libdhcpd_pools_la-fopen.lo +/libdhcpd_pools_la-fpurge.lo +/libdhcpd_pools_la-freading.lo +/libdhcpd_pools_la-fseek.lo +/libdhcpd_pools_la-fseeko.lo +/libdhcpd_pools_la-getprogname.lo +/libdhcpd_pools_la-hard-locale.lo +/libdhcpd_pools_la-ialloc.lo +/libdhcpd_pools_la-localcharset.lo +/libdhcpd_pools_la-malloca.lo +/libdhcpd_pools_la-math.lo +/libdhcpd_pools_la-mbrtoc32.lo +/libdhcpd_pools_la-mbrtowc.lo +/libdhcpd_pools_la-mbszero.lo +/libdhcpd_pools_la-mktime.lo +/libdhcpd_pools_la-nstrftime.lo +/libdhcpd_pools_la-progname.lo +/libdhcpd_pools_la-quotearg.lo +/libdhcpd_pools_la-reallocarray.lo +/libdhcpd_pools_la-realloc.lo +/libdhcpd_pools_la-setlocale_null.lo +/libdhcpd_pools_la-setlocale_null-unlocked.lo +/libdhcpd_pools_la-stat-time.lo +/libdhcpd_pools_la-stdlib.lo +/libdhcpd_pools_la-sys_socket.lo +/libdhcpd_pools_la-timegm.lo +/libdhcpd_pools_la-time_rz.lo +/libdhcpd_pools_la-unistd.lo +/libdhcpd_pools_la-wctype-h.lo +/libdhcpd_pools_la-xalloc-die.lo +/libdhcpd_pools_la-xmalloc.lo /.libs/ /limits.h /limits.in.h -/*.lo /localcharset.c /localcharset.h /locale.h /locale.in.h -/localtime-buffer.c -/localtime-buffer.h +/localename.h +/localename-unsafe.c /lseek.c /Makefile.am /malloca.c @@ -94,10 +155,12 @@ /math.c /math.h /math.in.h +/mbrtoc32.c /mbrtowc.c /mbrtowc-impl.h /mbrtowc-impl-utf8.h /mbsinit.c +/mbszero.c /mbtowc-lock.c /mbtowc-lock.h /memchr.c @@ -112,29 +175,36 @@ /netinet_in.in.h /_Noreturn.h /nstrftime.c +/open.c /pathmax.h /progname.c /progname.h /quotearg.c /quotearg.h /quote.h +/reallocarray.c /realloc.c /setenv.c /setlocale-lock.c /setlocale_null.c /setlocale_null.h +/setlocale_null-unlocked.c /stat.c /stat-time.c /stat-time.h /stat-w32.c /stat-w32.h -/stdalign.in.h -/stdbool.in.h +/stdckdint.h +/stdckdint.in.h +/stddef.h /stddef.in.h /stdint.in.h /stdio.h /stdio-impl.h /stdio.in.h +/stdio-read.c +/stdio-write.c +/stdlib.c /stdlib.h /stdlib.in.h /stpncpy.c @@ -143,21 +213,18 @@ /strerror.c /strerror-override.c /strerror-override.h +/strftime.c /strftime.h /string.h /string.in.h -/stripslash.c /strstr.c /strtod.c /str-two-way.h +/sys/ /sys_socket.c -/sys/socket.h /sys_socket.in.h -/sys/stat.h /sys_stat.in.h -/sys/types.h /sys_types.in.h -/sys/uio.h /sys_uio.in.h /timegm.c /time.h @@ -166,11 +233,21 @@ /time_r.c /time_rz.c /tzset.c +/uchar.h +/uchar.in.h +/unictype/ +/unictype/bitmap.h +/unictype/ctype_print.c +/unictype/ctype_print.h +/unictype/.gitignore +/unictype.h +/unictype.in.h /unistd.c /unistd.h /unistd.in.h +/unitypes.h +/unitypes.in.h /unsetenv.c -/unused-parameter.h /verify.h /warn-on-use.h /wchar.h @@ -179,14 +256,6 @@ /wctype-h.c /wctype.in.h /windows-initguard.h -/windows-mutex.c -/windows-mutex.h -/windows-once.c -/windows-once.h -/windows-recmutex.c -/windows-recmutex.h -/windows-rwlock.c -/windows-rwlock.h /xalloc-die.c /xalloc.h /xalloc-oversized.h diff --git a/man/dhcpd-pools.1.in b/man/dhcpd-pools.1.in index 2179163..5001e24 100644 --- a/man/dhcpd-pools.1.in +++ b/man/dhcpd-pools.1.in @@ -1,4 +1,5 @@ -.TH DHCPD-POOLS "1" "2017-11-15" "@VERSION@" "User Commands" +'\" t +.TH DHCPD-POOLS "1" "2024-08-09" "@VERSION@" "User Commands" .SH NAME dhcpd-pools \- ISC dhcpd pools usage analysis .SH SYNOPSIS diff --git a/project.doap b/project.doap index e3cf0f6..b9f0a8a 100644 --- a/project.doap +++ b/project.doap @@ -3,9 +3,9 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:foaf="http://xmlns.com/foaf/0.1/"> - + dhcpd-pools - + This is dhcpd-pools ISC dhcp shared network and pool range usage analysis tool. Purpose of command is to count usage ratio of each diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index 1488541..1373053 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -343,8 +343,7 @@ int main(int argc, char **argv) .header_limit = 8, .ranges_size = 64, .ip_version = IPvUNKNOWN, - .color_mode = color_auto, - 0 + .color_mode = color_auto }; int ret_val; diff --git a/src/dhcpd-pools.h b/src/dhcpd-pools.h index 36ec255..aff6b6a 100644 --- a/src/dhcpd-pools.h +++ b/src/dhcpd-pools.h @@ -102,6 +102,9 @@ enum prefix_t { PREFIX_BINDING_STATE_ACTIVE, PREFIX_BINDING_STATE_BACKUP, PREFIX_HARDWARE_ETHERNET, + PREFIX_STARTS, + PREFIX_ENDS, + PREFIX_HOSTNAME, NUM_OF_PREFIX }; @@ -127,7 +130,6 @@ struct shared_network_t { double backups; struct shared_network_t *next; int netmask; - uint32_t pad; }; /*! \struct range_t @@ -152,7 +154,6 @@ struct output_helper_t { double tcp; double bup; int status; - uint32_t pad; }; /*! \struct status_counts_t @@ -182,7 +183,9 @@ struct leases_t { char *ethernet; UT_hash_handle hh; enum ltype type; - uint32_t pad; + char *ends; + char *starts; + char *hostname; }; /*! \enum limbits @@ -251,8 +254,7 @@ struct conf_t { skip_critical:1, /*!< Skip critical values from output. */ skip_minsize:1, /*!< Skip alarming values that are below minsize from output. */ skip_suppressed:1, /*!< Skip alarming values that are suppressed with --snet-alarms option, or they are shared networks without IP availability. */ - color_mode:2, /*!< Indicator if colors should be used in output. */ - pad_bits:4; + color_mode:2; /*!< Indicator if colors should be used in output. */ }; /* Function prototypes */ diff --git a/src/getdata.c b/src/getdata.c index 7863a6b..31734de 100644 --- a/src/getdata.c +++ b/src/getdata.c @@ -83,7 +83,7 @@ enum isc_conf_parser { int parse_leases(struct conf_t *state) { FILE *dhcpd_leases; - char *line, *ipstring, macstring[20], *stop; + char *line, *ipstring, macstring[20], *stop, endsstr[30], startsstr[30], hostnamestr[MAXLEN]; union ipaddr_t addr; struct leases_t *lease; @@ -100,6 +100,9 @@ int parse_leases(struct conf_t *state) line[0] = '\0'; ipstring = xmalloc(sizeof(char) * MAXLEN); ipstring[0] = '\0'; + endsstr[0] = '\0'; + startsstr[0] = '\0'; + hostnamestr[0] = '\0'; while (!feof(dhcpd_leases)) { if (!fgets(line, MAXLEN, dhcpd_leases) && ferror(dhcpd_leases)) error(EXIT_FAILURE, errno, "parse_leases: %s", state->dhcpdlease_file); @@ -142,8 +145,35 @@ int parse_leases(struct conf_t *state) break; memcpy(macstring, line + 20, 17); macstring[17] = '\0'; - if ((lease = find_lease(state, &addr)) != NULL) + if ((lease = find_lease(state, &addr)) != NULL) { lease->ethernet = xstrdup(macstring); + lease->starts = xstrdup(startsstr); + startsstr[0] = '\0'; + lease->ends = xstrdup(endsstr); + endsstr[0] = '\0'; + } + break; + case PREFIX_ENDS: + if (state->print_mac_addreses == 0) + break; + strncpy(endsstr, line + 7, sizeof(endsstr)-1); + endsstr[strlen(endsstr)-2] = '\0'; + break; + case PREFIX_STARTS: + if (state->print_mac_addreses == 0) + break; + strncpy(startsstr, line + 9, sizeof(startsstr)-1); + startsstr[strlen(startsstr)-2] = '\0'; + break; + case PREFIX_HOSTNAME: + if (state->print_mac_addreses == 0) + break; + strncpy(hostnamestr, line + 19, sizeof(hostnamestr)-1); + hostnamestr[strlen(hostnamestr)-3] = '\0'; + if ((lease = find_lease(state, &addr)) != NULL) { + lease->hostname = xstrdup(hostnamestr); + } + hostnamestr[0] = '\0'; break; default: /* do nothing */ ; @@ -211,8 +241,14 @@ void parse_config(struct conf_t *state, const int is_include, const char *restri shared_p->name = state->shared_net_root->name; /* Open configuration file */ dhcpd_config = fopen(config_file, "r"); - if (dhcpd_config == NULL) + if (dhcpd_config == NULL) { + if (is_include) { + error(0, errno, "cannot open inlude: %s", config_file); + return; + } + /* config if from command line, just exit with error */ error(EXIT_FAILURE, errno, "parse_config: %s", config_file); + } #ifdef HAVE_POSIX_FADVISE # ifdef POSIX_FADV_SEQUENTIAL if (posix_fadvise(fileno(dhcpd_config), 0, 0, POSIX_FADV_SEQUENTIAL) != 0) diff --git a/src/hash.c b/src/hash.c index 77ecd79..eb434df 100644 --- a/src/hash.c +++ b/src/hash.c @@ -66,6 +66,9 @@ void add_lease_v4(struct conf_t *state, union ipaddr_t *addr, enum ltype type) l->type = type; HASH_ADD_INT(state->leases, ip.v4, l); l->ethernet = NULL; + l->ends = NULL; + l->starts = NULL; + l->hostname = NULL; } void add_lease_v6(struct conf_t *state, union ipaddr_t *addr, enum ltype type) @@ -77,6 +80,9 @@ void add_lease_v6(struct conf_t *state, union ipaddr_t *addr, enum ltype type) l->type = type; HASH_ADD_V6(state->leases, ip.v6, l); l->ethernet = NULL; + l->ends = NULL; + l->starts = NULL; + l->hostname = NULL; } /*! \brief Find pointer to lease from hash array. @@ -110,6 +116,9 @@ struct leases_t *find_lease_v6(struct conf_t *state, union ipaddr_t *addr) void delete_lease(struct conf_t *state, struct leases_t *lease) { free(lease->ethernet); + free(lease->ends); + free(lease->starts); + free(lease->hostname); HASH_DEL(state->leases, lease); free(lease); } @@ -122,6 +131,9 @@ void delete_all_leases(struct conf_t *state) HASH_ITER(hh, state->leases, l, tmp) { free(l->ethernet); + free(l->ends); + free(l->starts); + free(l->hostname); HASH_DEL(state->leases, l); free(l); } @@ -134,6 +146,9 @@ void delete_all_leases(struct conf_t *state) l = state->leases; free(l->ethernet); + free(l->ends); + free(l->starts); + free(l->hostname); HASH_DEL(state->leases, l); /* leases advances to next on delete */ free(l); } diff --git a/src/mustach.c b/src/mustach.c index 45eb7a4..b197a83 100644 --- a/src/mustach.c +++ b/src/mustach.c @@ -8,7 +8,7 @@ you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,8 @@ #define _GNU_SOURCE +#include "config.h" + #include #include #include diff --git a/src/mustach.h b/src/mustach.h index 32288a1..0ceba16 100644 --- a/src/mustach.h +++ b/src/mustach.h @@ -8,7 +8,7 @@ you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/src/other.c b/src/other.c index 21a19f4..b319a2d 100644 --- a/src/other.c +++ b/src/other.c @@ -417,6 +417,12 @@ int } if (!memcmp("lease ", str, 6)) return PREFIX_LEASE; + else if (!memcmp(" starts ", str, 9)) + return PREFIX_STARTS; + else if (!memcmp(" ends ", str, 7)) + return PREFIX_ENDS; + else if (!memcmp(" client-hostname ", str, 18)) + return PREFIX_HOSTNAME; return NUM_OF_PREFIX; } @@ -472,6 +478,12 @@ int } if (!memcmp(" iaaddr ", str, 9)) return PREFIX_LEASE; + else if (!memcmp(" starts ", str, 9)) + return PREFIX_STARTS; + else if (!memcmp(" ends ", str, 7)) + return PREFIX_ENDS; + else if (!memcmp(" client-hostname ", str, 18)) + return PREFIX_HOSTNAME; return NUM_OF_PREFIX; } diff --git a/src/output.c b/src/output.c index 2d7f28d..4ff0a90 100644 --- a/src/output.c +++ b/src/output.c @@ -387,7 +387,19 @@ static int output_xml(struct conf_t *state) if (l->ethernet != NULL) { fputs(l->ethernet, outfile); } - fputs("\n\n", outfile); + fputs("\n\t", outfile); + if (l->starts != NULL) { + fputs(l->starts, outfile); + } + fputs("\n\t", outfile); + if (l->ends != NULL) { + fputs(l->ends, outfile); + } + fputs("\n\t", outfile); + if (l->hostname != NULL) { + fputs(l->hostname, outfile); + } + fputs("\n\n", outfile); } } } @@ -481,6 +493,18 @@ static int output_json(struct conf_t *state) if (l->ethernet != NULL) { fputs(l->ethernet, outfile); } + fputs("\", \"starts\":\"", outfile); + if (l->starts != NULL) { + fputs(l->starts, outfile); + } + fputs("\", \"ends\":\"", outfile); + if (l->ends != NULL) { + fputs(l->ends, outfile); + } + fputs("\", \"hostname\":\"", outfile); + if (l->hostname != NULL) { + fputs(l->hostname, outfile); + } fputs("\" }", outfile); } } @@ -587,9 +611,15 @@ static int output_json(struct conf_t *state) fprintf(outfile, " \"touched\":%g,\n", state->shared_net_root->touched); fprintf(outfile, " \"free\":%g,\n", state->shared_net_root->available - state->shared_net_root->used); - fprintf(outfile, " \"percent\":%g,\n", oh.percent); + if (fpclassify(state->shared_net_root->available) == FP_ZERO) + fprintf(outfile, " \"percent\":\"%g\",\n", oh.percent); + else + fprintf(outfile, " \"percent\":%g,\n", oh.percent); fprintf(outfile, " \"touch_count\":%g,\n", oh.tc); - fprintf(outfile, " \"touch_percent\":%g,\n", oh.tcp); + if (fpclassify(state->shared_net_root->available) == FP_ZERO) + fprintf(outfile, " \"touch_percent\":\"%g\",\n", oh.tcp); + else + fprintf(outfile, " \"touch_percent\":%g,\n", oh.tcp); if (state->backups_found == 1) { fprintf(outfile, " \"backup_count\":%g,\n", state->shared_net_root->backups); @@ -628,8 +658,8 @@ static void html_header(struct conf_t *state, FILE *restrict f) fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); - fprintf(f, "\n"); - fprintf(f, "\n"); + fprintf(f, "\n"); + fprintf(f, "\n"); fprintf(f, "\n"); @@ -652,8 +682,8 @@ static void html_footer(FILE *restrict f) fprintf(f, "Generated using %s
\n", PACKAGE_STRING); fprintf(f, "More info at %s\n", PACKAGE_URL, PACKAGE_URL); fprintf(f, "
\n"); - fprintf(f, "\n"); - fprintf(f, "\n"); + fprintf(f, "\n"); + fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); diff --git a/tests/expected/errors b/tests/expected/errors index b85e282..6903ac6 100644 --- a/tests/expected/errors +++ b/tests/expected/errors @@ -7,7 +7,16 @@ dhcpd-pools: unknown color mode: 'sometimes' === IPv5 dhcpd-pools: unknown --ip-version argument: 5 === missing conf -dhcpd-pools: parse_config: ./tests/confs/complete_NXFILE: No such file or directory +dhcpd-pools: cannot open inlude: ./tests/confs/complete_NXFILE: No such file or directory +Ranges: +shared net name first ip last ip max cur percent touch t+c t+c perc + +Shared networks: +name max cur percent touch t+c t+c perc + +Sum of all ranges: +name max cur percent touch t+c t+c perc +All networks 0 0 nan 0 0 nan === missing leases dhcpd-pools: parse_leases: ./tests/leases/complete_NXFILE: No such file or directory === html table diff --git a/tests/expected/formats b/tests/expected/formats index 9008b93..4023f89 100644 --- a/tests/expected/formats +++ b/tests/expected/formats @@ -23,8 +23,8 @@ All networks 100 43 43.000 0 43 43.000 - - + + @@ -176,10 +176,10 @@ table.dhcpd-pools th { text-transform: capitalize }
- - + + diff --git a/tests/expected/same-twice-json b/tests/expected/same-twice-json index f572972..f23d1b0 100644 --- a/tests/expected/same-twice-json +++ b/tests/expected/same-twice-json @@ -1,6 +1,6 @@ { "active_leases": [ - { "ip":"10.0.0.5", "macaddress":"00:00:00:00:00:00" } + { "ip":"10.0.0.5", "macaddress":"00:00:00:00:00:00", "starts":"", "ends":"", "hostname":"" } ], "subnets": [ { "location":"All networks", "range":"10.0.0.1 - 10.0.0.10", "first_ip":"10.0.0.1", "last_ip":"10.0.0.10", "defined":10, "used":1, "touched":0, "free":9, "percent":10, "touch_count":1, "touch_percent":10, "status":0 } diff --git a/tests/expected/same-twice-xml b/tests/expected/same-twice-xml index 93612d6..7897f7f 100644 --- a/tests/expected/same-twice-xml +++ b/tests/expected/same-twice-xml @@ -2,6 +2,9 @@ 10.0.0.5 00:00:00:00:00:00 + + + All networks diff --git a/webpages/dhcpd-pools.awk b/webpages/dhcpd-pools.awk index 38d5f18..9c1f299 100644 --- a/webpages/dhcpd-pools.awk +++ b/webpages/dhcpd-pools.awk @@ -4,12 +4,11 @@ # analysis algorithm is sane. This script is no longer # maintained, and can be considered as historic reference. # -# Licensed under the Open Software License version 1.1 -# http://opensource.org/licenses/osl.php +# Licensed under the Open Software License version 1.0 +# https://opensource.org/license/osl-1-0/ # # Sami Kerola # -# Latest version is available from http://www.iki.fi/kerolasa/dhcp/ # This is version 1.4 BEGIN { diff --git a/webpages/index.html b/webpages/index.html index 088c546..7d5b748 100644 --- a/webpages/index.html +++ b/webpages/index.html @@ -30,7 +30,7 @@ font-variant: normal; -
+

ISC dhcpd lease analysis and reporting

This is dhcpd-pools ISC dhcp @@ -49,9 +49,18 @@ any significant difference in getting analysis done.

prompt> ./dhcpd-pools --config=/etc/dhcpd.conf --leases=/var/lib/dhcp/dhcpd.leases --format=H --color=always --warning=40 --critical=50 --output=sampleoutput.html +href="https://dhcpd-pools.sourceforge.net/sampleoutput.html">sampleoutput.html

+

Is dhcpd-pools still developed?

+

In short no, it is not.

+

+ISC DHCPD has reached +EOL. Users are Kea DHCP server instead. Kea has native +statistics, so it does not require this tool and therefore the +dhcpd-pools is obsolte. +

Where I can get dhcpd-pools?

Download release package @@ -61,11 +70,11 @@ file.

git clone git://git.code.sf.net/p/dhcpd-pools/code dhcpd-pools

See also -SourceForge project page.

+SourceForge project page.

Documentation

The dhcpd-pools -manual page, and -Doxygen software +manual page, and +Doxygen software reference documentation are available online.

Getting the output you need

    @@ -80,8 +89,8 @@ try:
  1. Start filtering output. Options to try:
    --skip --limit
  2. Change --format -option to what you need, and maybe include --perfdata if you want nagios alarm +option to what you need, and maybe include +--perfdata if you want nagios alarm format.
  3. Done.
@@ -90,33 +99,33 @@ format.

The program was written because -DHCPStatus, -DHCP Usage Statistics, -reportdhcp.pl, -lease_analyzer and -dhcpd-snmp +DHCPStatus, +DHCP Usage Statistics, +reportdhcp.pl, +lease_analyzer and +dhcpd-snmp where too slow to handle huge number of leases. There is also difference in printed details. The dhcpd-pools does not print quite as much information as some other tools.

Notice that this utility is not the same as -dhcpd-pool +dhcpd-pool that is maintained by Trond Hasle Amundsen.

Just for laugh, obsolete awk proof of concept (version 1.4) -dhcpd-pools.awk

+dhcpd-pools.awk

Where to send questions, bug reports, code contributions...

-

Sami Kerola +

Sami Kerola <kerolasa@iki.fi>

-Wed Nov 15 12:47:30 GMT 2017 +Sat Nov 26 09:58:28 GMT 2022 3.0 FreeBSD License - -
+ +
0
-
+
5 ( 2 ratings )
diff --git a/webpages/robots.txt b/webpages/robots.txt index 25e6762..c9eedb4 100644 --- a/webpages/robots.txt +++ b/webpages/robots.txt @@ -1,3 +1,3 @@ -Sitemap: http://dhcpd-pools.sourceforge.net/sitemap.txt +Sitemap: https://dhcpd-pools.sourceforge.net/sitemap.txt User-agent: * Disallow: diff --git a/webpages/sampleoutput.html b/webpages/sampleoutput.html index af4d3d8..d27d3b6 100644 --- a/webpages/sampleoutput.html +++ b/webpages/sampleoutput.html @@ -5,8 +5,8 @@ - - + + @@ -14,7 +14,7 @@ table.dhcpd-pools th { text-transform: capitalize }

ISC DHCPD status

-File samples/dhcpd.leases was last modified at 2017-11-11T23:59:04+0000
+File tests/leases/formats was last modified at 2025-04-15T14:32:48+0100

Sum of all

@@ -27,8 +27,6 @@ table.dhcpd-pools th { text-transform: capitalize } - - @@ -41,8 +39,6 @@ table.dhcpd-pools th { text-transform: capitalize } - -
touch t+c t+c percbubu perc
0 43 43.000243.000
@@ -58,8 +54,6 @@ table.dhcpd-pools th { text-transform: capitalize } touch t+c t+c perc -bu -bu perc @@ -72,8 +66,6 @@ table.dhcpd-pools th { text-transform: capitalize } 0 21 52.500 -1 -2.500 example2 @@ -84,8 +76,6 @@ table.dhcpd-pools th { text-transform: capitalize } 0 17 42.500 -0 -0.000 @@ -103,8 +93,6 @@ table.dhcpd-pools th { text-transform: capitalize } touch t+c t+c perc -bu -bu perc @@ -119,8 +107,6 @@ table.dhcpd-pools th { text-transform: capitalize } 0 11 55.000 -1 -5.000 example1 @@ -133,8 +119,6 @@ table.dhcpd-pools th { text-transform: capitalize } 0 10 50.000 -0 -0.000 example2 @@ -147,8 +131,6 @@ table.dhcpd-pools th { text-transform: capitalize } 0 8 40.000 -0 -0.000 example2 @@ -161,8 +143,6 @@ table.dhcpd-pools th { text-transform: capitalize } 0 9 45.000 -0 -0.000 All networks @@ -175,17 +155,15 @@ table.dhcpd-pools th { text-transform: capitalize } 0 5 25.000 -1 -5.000
-Generated using dhcpd-pools 3.0
-More info at http://dhcpd-pools.sourceforge.net/ +Generated using dhcpd-pools 3.3
+More info at https://dhcpd-pools.sourceforge.net/
- - + + diff --git a/webpages/sitemap.txt b/webpages/sitemap.txt index f1f9fb4..28f6306 100644 --- a/webpages/sitemap.txt +++ b/webpages/sitemap.txt @@ -1,546 +1,546 @@ -http://dhcpd-pools.sourceforge.net/ -http://dhcpd-pools.sourceforge.net/dhcpd-pools.awk -http://dhcpd-pools.sourceforge.net/man.html -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/analyze_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/annotated.html -http://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/classes.html -http://dhcpd-pools.sourceforge.net/doxygen/close_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/config_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/config_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/configmake_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_000000_000001.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_000001_000002.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9.html -http://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac.html -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/dosname_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/doxygen.css -http://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/error_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/error_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/error_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fclose_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fflush_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/filename_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/filename_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/files.html -http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/float_09_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/float_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fopen_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/fpending_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/freading_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/freading_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/fseek_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/fstat_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/ftell_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/ftello_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/functions_func.html -http://dhcpd-pools.sourceforge.net/doxygen/functions.html -http://dhcpd-pools.sourceforge.net/doxygen/functions_vars.html -http://dhcpd-pools.sourceforge.net/doxygen/getdata_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-cdefs_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-cdefs_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/gettext_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_a.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_b.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_a.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_b.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_d.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_e.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_f.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_g.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_h.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_i.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_k.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_l.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_m.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_n.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_o.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_p.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_r.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_s.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_t.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_u.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_v.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_w.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_x.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_defs_y.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_d.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_e.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_enum.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_eval.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_f.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_a.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_b.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_c.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_d.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_e.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_f.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_g.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_h.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_i.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_l.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_m.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_n.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_o.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_p.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_q.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_r.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_s.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_t.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_u.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_func_x.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_g.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_h.html -http://dhcpd-pools.sourceforge.net/doxygen/globals.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_i.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_k.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_l.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_m.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_n.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_o.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_p.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_q.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_r.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_s.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_t.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_type.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_u.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_vars.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_v.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_w.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_x.html -http://dhcpd-pools.sourceforge.net/doxygen/globals_y.html -http://dhcpd-pools.sourceforge.net/doxygen/graph_legend.html -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/hash_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/index.html -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/inet_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/intprops_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/introduction_8dox.html -http://dhcpd-pools.sourceforge.net/doxygen/isnan_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/isnand_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/itold_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/limits_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/limits_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/limits_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/limits_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/lseek_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/malloc_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/malloca_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/memchr_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/minmax_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/mktime_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/__Noreturn_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/__Noreturn_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/other_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/output_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/progname_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/progname_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/progname_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/quote_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/realloc_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/sampleoutput.html -http://dhcpd-pools.sourceforge.net/doxygen/search -http://dhcpd-pools.sourceforge.net/doxygen/search/all_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_17.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_18.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/all_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/classes_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_17.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/defines_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enums_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/files_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/functions_f.html -http://dhcpd-pools.sourceforge.net/doxygen/search/nomatches.html -http://dhcpd-pools.sourceforge.net/doxygen/search/search.css -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_0.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_10.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_11.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_12.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_13.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_14.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_15.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_16.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_1.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_2.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_3.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_4.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_5.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_6.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_7.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_8.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_9.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_a.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_b.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_c.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_d.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_e.html -http://dhcpd-pools.sourceforge.net/doxygen/search/variables_f.html -http://dhcpd-pools.sourceforge.net/doxygen/setenv_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/socket_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sort_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/stat_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stat_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strdup_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/streq_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/streq_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/strerror_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/strftime_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/string_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/string_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strstr_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/strtod_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/structconf__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structexpl.html -http://dhcpd-pools.sourceforge.net/doxygen/struct__getopt__data.html -http://dhcpd-pools.sourceforge.net/doxygen/structiovec.html -http://dhcpd-pools.sourceforge.net/doxygen/structleases__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structmsghdr.html -http://dhcpd-pools.sourceforge.net/doxygen/structmustach__itf.html -http://dhcpd-pools.sourceforge.net/doxygen/structoption.html -http://dhcpd-pools.sourceforge.net/doxygen/structoutput__helper__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort.html -http://dhcpd-pools.sourceforge.net/doxygen/structquoting__options.html -http://dhcpd-pools.sourceforge.net/doxygen/structrange__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structshared__network__t.html -http://dhcpd-pools.sourceforge.net/doxygen/structslotvec.html -http://dhcpd-pools.sourceforge.net/doxygen/structsockaddr__storage.html -http://dhcpd-pools.sourceforge.net/doxygen/structtimespec.html -http://dhcpd-pools.sourceforge.net/doxygen/struct____time__t__must__be__integral.html -http://dhcpd-pools.sourceforge.net/doxygen/structtm__zone.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/tabs.css -http://dhcpd-pools.sourceforge.net/doxygen/time_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/time_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/timegm_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/time__r_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/types_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/types_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/tzset_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/uio_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/unionipaddr__t.html -http://dhcpd-pools.sourceforge.net/doxygen/unionmemory__double.html -http://dhcpd-pools.sourceforge.net/doxygen/unionrpl__max__align__t.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/verify_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h.html -http://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h_source.html -http://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c.html +https://dhcpd-pools.sourceforge.net/ +https://dhcpd-pools.sourceforge.net/dhcpd-pools.awk +https://dhcpd-pools.sourceforge.net/man.html +https://dhcpd-pools.sourceforge.net/doxygen/alloca_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/alloca_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/alloca_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/analyze_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/annotated.html +https://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/arg-nonnull_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/arpa__inet_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/basename-lgpl_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/c_09_09defs_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/c-ctype_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/classes.html +https://dhcpd-pools.sourceforge.net/doxygen/close_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/closeout_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/closeout_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/closeout_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/close-stream_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/close-stream_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/config_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/config_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/configmake_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/configmake_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/c-strcase_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/c-strcasecmp_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/c-strcaseeq_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/c-strncasecmp_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/dhcpd-pools_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/dir_000000_000001.html +https://dhcpd-pools.sourceforge.net/doxygen/dir_000001_000002.html +https://dhcpd-pools.sourceforge.net/doxygen/dir_1dacc5f4fcb865f1d9e042339dad3519.html +https://dhcpd-pools.sourceforge.net/doxygen/dir_97aefd0d527b934f1d99a682da8fe6a9.html +https://dhcpd-pools.sourceforge.net/doxygen/dir_fb441f6c77667ce4c9ebd4a5c47eafac.html +https://dhcpd-pools.sourceforge.net/doxygen/dirname_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/dirname_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/dirname-lgpl_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/dosname_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/dosname_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/doxygen.css +https://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/errno_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/error_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/error_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/error_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/exitfail_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/exitfail_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/fclose_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/fcntl_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/fcntl_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/fd-hook_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/fdopen_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/fflush_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/filename_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/filename_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/files.html +https://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/flexmember_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/float_09_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/float_09_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/float_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/float_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/fopen_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/fpending_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/fpending_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/fpending_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/fpurge_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/freading_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/freading_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/freading_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/fseek_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/fseeko_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/fstat_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/ftell_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/ftello_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/functions_func.html +https://dhcpd-pools.sourceforge.net/doxygen/functions.html +https://dhcpd-pools.sourceforge.net/doxygen/functions_vars.html +https://dhcpd-pools.sourceforge.net/doxygen/getdata_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt1_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-cdefs_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-cdefs_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-core_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-ext_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt__int_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-core_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getopt-pfx-ext_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/getprogname_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/getprogname_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/gettext_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/gettext_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_a.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_b.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_c.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_a.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_b.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_c.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_d.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_e.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_f.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_g.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_h.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_i.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_k.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_l.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_m.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_n.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_o.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_p.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_r.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_s.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_t.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_u.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_v.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_w.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_x.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_defs_y.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_d.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_e.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_enum.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_eval.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_f.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_a.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_b.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_c.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_d.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_e.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_f.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_g.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_h.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_i.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_l.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_m.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_n.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_o.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_p.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_q.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_r.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_s.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_t.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_u.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_func_x.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_g.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_h.html +https://dhcpd-pools.sourceforge.net/doxygen/globals.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_i.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_k.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_l.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_m.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_n.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_o.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_p.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_q.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_r.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_s.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_t.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_type.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_u.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_vars.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_v.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_w.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_x.html +https://dhcpd-pools.sourceforge.net/doxygen/globals_y.html +https://dhcpd-pools.sourceforge.net/doxygen/graph_legend.html +https://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/hard-locale_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/hash_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/index.html +https://dhcpd-pools.sourceforge.net/doxygen/inet_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/inet_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/inet__pton_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/intprops_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/intprops_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/introduction_8dox.html +https://dhcpd-pools.sourceforge.net/doxygen/isnan_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/isnand_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/isnanf_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/isnanl_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/itold_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/limits_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/limits_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/limits_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/limits_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/localcharset_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/localcharset_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/localtime-buffer_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/lseek_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/malloc_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/malloca_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/malloca_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/malloca_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/math_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/math_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/math_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/math_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/mbrtowc_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/mbsinit_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/memchr_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/minmax_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/minmax_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/mktime_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/mktime-internal_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/msvc-inval_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/msvc-nothrow_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/mustach_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/mustach_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/mustach_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/mustach-dhcpd-pools_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/netinet__in_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/__Noreturn_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/__Noreturn_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/nstrftime_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/other_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/output_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/pathmax_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/progname_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/progname_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/progname_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/quote_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/quote_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/quotearg_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/quotearg_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/realloc_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/sampleoutput.html +https://dhcpd-pools.sourceforge.net/doxygen/search +https://dhcpd-pools.sourceforge.net/doxygen/search/all_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_10.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_11.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_12.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_13.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_14.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_15.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_16.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_17.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_18.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_9.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_a.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_b.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_c.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_d.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_e.html +https://dhcpd-pools.sourceforge.net/doxygen/search/all_f.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_9.html +https://dhcpd-pools.sourceforge.net/doxygen/search/classes_a.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_10.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_11.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_12.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_13.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_14.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_15.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_16.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_17.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_9.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_a.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_b.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_c.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_d.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_e.html +https://dhcpd-pools.sourceforge.net/doxygen/search/defines_f.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enums_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enums_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enums_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enums_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enums_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enums_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enums_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_9.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_a.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_b.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_c.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_d.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_e.html +https://dhcpd-pools.sourceforge.net/doxygen/search/enumvalues_f.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_10.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_11.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_12.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_13.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_14.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_15.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_16.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_9.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_a.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_b.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_c.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_d.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_e.html +https://dhcpd-pools.sourceforge.net/doxygen/search/files_f.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_10.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_11.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_12.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_13.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_14.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_9.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_a.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_b.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_c.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_d.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_e.html +https://dhcpd-pools.sourceforge.net/doxygen/search/functions_f.html +https://dhcpd-pools.sourceforge.net/doxygen/search/nomatches.html +https://dhcpd-pools.sourceforge.net/doxygen/search/search.css +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/typedefs_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_0.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_10.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_11.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_12.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_13.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_14.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_15.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_16.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_1.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_2.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_3.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_4.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_5.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_6.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_7.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_8.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_9.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_a.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_b.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_c.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_d.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_e.html +https://dhcpd-pools.sourceforge.net/doxygen/search/variables_f.html +https://dhcpd-pools.sourceforge.net/doxygen/setenv_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/socket_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/socket_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/sort_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/stat_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/stat_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stat_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stat-w32_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdalign_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdbool_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stddef_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdint_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdio_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdio_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdio_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdio-impl_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdlib_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/stdlib_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stpncpy_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/strdup_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/streq_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/streq_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/strerror_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/strerror-override_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/strftime_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/strftime_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/string_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/string_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/string_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/stripslash_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/strstr_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/strtod_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/str-two-way_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/structconf__t.html +https://dhcpd-pools.sourceforge.net/doxygen/structexpl.html +https://dhcpd-pools.sourceforge.net/doxygen/struct__getopt__data.html +https://dhcpd-pools.sourceforge.net/doxygen/structiovec.html +https://dhcpd-pools.sourceforge.net/doxygen/structleases__t.html +https://dhcpd-pools.sourceforge.net/doxygen/structmsghdr.html +https://dhcpd-pools.sourceforge.net/doxygen/structmustach__itf.html +https://dhcpd-pools.sourceforge.net/doxygen/structoption.html +https://dhcpd-pools.sourceforge.net/doxygen/structoutput__helper__t.html +https://dhcpd-pools.sourceforge.net/doxygen/structoutput__sort.html +https://dhcpd-pools.sourceforge.net/doxygen/structquoting__options.html +https://dhcpd-pools.sourceforge.net/doxygen/structrange__t.html +https://dhcpd-pools.sourceforge.net/doxygen/structshared__network__t.html +https://dhcpd-pools.sourceforge.net/doxygen/structslotvec.html +https://dhcpd-pools.sourceforge.net/doxygen/structsockaddr__storage.html +https://dhcpd-pools.sourceforge.net/doxygen/structtimespec.html +https://dhcpd-pools.sourceforge.net/doxygen/struct____time__t__must__be__integral.html +https://dhcpd-pools.sourceforge.net/doxygen/structtm__zone.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__socket_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__stat_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__types_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/sys__uio_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/tabs.css +https://dhcpd-pools.sourceforge.net/doxygen/time_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/time_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/time_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/timegm_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/time-internal_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/time__r_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/time__rz_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/types_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/types_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/tzset_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/uio_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/uio_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/unionipaddr__t.html +https://dhcpd-pools.sourceforge.net/doxygen/unionmemory__double.html +https://dhcpd-pools.sourceforge.net/doxygen/unionrpl__max__align__t.html +https://dhcpd-pools.sourceforge.net/doxygen/unistd_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/unistd_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/unistd_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/unistd_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/unsetenv_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/unused-parameter_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/verify_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/verify_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/warn-on-use_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/wchar_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/wchar_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/wchar_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/wctype_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/wctype_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/wctype_8in_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/wctype-h_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/xalloc_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/xalloc-die_8c.html +https://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h.html +https://dhcpd-pools.sourceforge.net/doxygen/xalloc-oversized_8h_source.html +https://dhcpd-pools.sourceforge.net/doxygen/xmalloc_8c.html