summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Mollier <emollier@debian.org>2022-11-24 22:00:41 +0100
committerÉtienne Mollier <emollier@debian.org>2022-11-24 22:00:41 +0100
commit7fbbe1ae4143dd6e3e069ed2147f67f859ea5918 (patch)
tree6336add764774512a104dffcd7552a7fa82dc6b3
parent05fe631d28d2e4010116108e091d625ad80f11de (diff)
parent47d579b4aee6df7d94c40788e5c4d2464e154842 (diff)
Update upstream source from tag 'upstream/2.2.2+ds'
Update to upstream version '2.2.2+ds' with Debian dir 65b8953dc0df4414e9139b9336eda41942b84921
-rw-r--r--inc/Module/Install.pm451
-rw-r--r--inc/Module/Install/Base.pm83
-rw-r--r--inc/Module/Install/Can.pm163
-rw-r--r--inc/Module/Install/Fetch.pm93
-rw-r--r--inc/Module/Install/Makefile.pm418
-rw-r--r--inc/Module/Install/Metadata.pm722
-rw-r--r--inc/Module/Install/Win32.pm64
-rw-r--r--inc/Module/Install/WriteAll.pm63
-rw-r--r--inc/Module/Install/XSUtil.pm819
-rw-r--r--ldns/LICENSE26
-rw-r--r--ldns/Makefile.in1098
-rw-r--r--ldns/buffer.c177
-rw-r--r--ldns/compat/b64_ntop.c185
-rw-r--r--ldns/compat/b64_pton.c244
-rw-r--r--ldns/compat/strlcpy.c57
-rwxr-xr-xldns/config.guess1480
-rwxr-xr-xldns/config.sub1802
-rwxr-xr-xldns/configure20198
-rw-r--r--ldns/dane.c941
-rw-r--r--ldns/dname.c602
-rw-r--r--ldns/dnssec.c1953
-rw-r--r--ldns/dnssec_sign.c1614
-rw-r--r--ldns/dnssec_verify.c2813
-rw-r--r--ldns/dnssec_zone.c1203
-rw-r--r--ldns/duration.c351
-rw-r--r--ldns/error.c174
-rw-r--r--ldns/higher.c347
-rw-r--r--ldns/host2str.c2709
-rw-r--r--ldns/host2wire.c504
-rwxr-xr-xldns/install-sh541
-rw-r--r--ldns/keys.c2204
-rw-r--r--ldns/ldns/buffer.h645
-rw-r--r--ldns/ldns/common.h.in78
-rw-r--r--ldns/ldns/config.h.in677
-rw-r--r--ldns/ldns/dane.h290
-rw-r--r--ldns/ldns/dname.h212
-rw-r--r--ldns/ldns/dnssec.h565
-rw-r--r--ldns/ldns/dnssec_sign.h384
-rw-r--r--ldns/ldns/dnssec_verify.h857
-rw-r--r--ldns/ldns/dnssec_zone.h483
-rw-r--r--ldns/ldns/duration.h109
-rw-r--r--ldns/ldns/error.h150
-rw-r--r--ldns/ldns/higher.h113
-rw-r--r--ldns/ldns/host2str.h902
-rw-r--r--ldns/ldns/host2wire.h197
-rw-r--r--ldns/ldns/keys.h640
-rw-r--r--ldns/ldns/ldns.h158
-rw-r--r--ldns/ldns/net.h.in254
-rw-r--r--ldns/ldns/packet.h905
-rw-r--r--ldns/ldns/parse.h167
-rw-r--r--ldns/ldns/radix.h240
-rw-r--r--ldns/ldns/rbtree.h230
-rw-r--r--ldns/ldns/rdata.h454
-rw-r--r--ldns/ldns/resolver.h808
-rw-r--r--ldns/ldns/rr.h935
-rw-r--r--ldns/ldns/rr_functions.h363
-rw-r--r--ldns/ldns/sha1.h38
-rw-r--r--ldns/ldns/sha2.h149
-rw-r--r--ldns/ldns/str2host.h329
-rw-r--r--ldns/ldns/tsig.h101
-rw-r--r--ldns/ldns/update.h116
-rw-r--r--ldns/ldns/util.h.in393
-rw-r--r--ldns/ldns/wire2host.h194
-rw-r--r--ldns/ldns/zone.h176
-rw-r--r--ldns/ltmain.sh11436
-rw-r--r--ldns/net.c1036
-rwxr-xr-xldns/packaging/ldns-config.in32
-rw-r--r--ldns/packaging/libldns.pc.in13
-rw-r--r--ldns/packet.c1176
-rw-r--r--ldns/parse.c438
-rw-r--r--ldns/radix.c1593
-rw-r--r--ldns/rbtree.c670
-rw-r--r--ldns/rdata.c760
-rw-r--r--ldns/resolver.c1598
-rw-r--r--ldns/rr.c2760
-rw-r--r--ldns/rr_functions.c427
-rw-r--r--ldns/sha1.c178
-rw-r--r--ldns/sha2.c998
-rw-r--r--ldns/str2host.c1802
-rw-r--r--ldns/tsig.c488
-rw-r--r--ldns/update.c325
-rw-r--r--ldns/util.c782
-rw-r--r--ldns/wire2host.c497
-rw-r--r--ldns/zone.c317
84 files changed, 0 insertions, 83737 deletions
diff --git a/inc/Module/Install.pm b/inc/Module/Install.pm
deleted file mode 100644
index 7ba98c2..0000000
--- a/inc/Module/Install.pm
+++ /dev/null
@@ -1,451 +0,0 @@
-#line 1
-package Module::Install;
-
-# For any maintainers:
-# The load order for Module::Install is a bit magic.
-# It goes something like this...
-#
-# IF ( host has Module::Install installed, creating author mode ) {
-# 1. Makefile.PL calls "use inc::Module::Install"
-# 2. $INC{inc/Module/Install.pm} set to installed version of inc::Module::Install
-# 3. The installed version of inc::Module::Install loads
-# 4. inc::Module::Install calls "require Module::Install"
-# 5. The ./inc/ version of Module::Install loads
-# } ELSE {
-# 1. Makefile.PL calls "use inc::Module::Install"
-# 2. $INC{inc/Module/Install.pm} set to ./inc/ version of Module::Install
-# 3. The ./inc/ version of Module::Install loads
-# }
-
-use 5.006;
-use strict 'vars';
-use Cwd ();
-use File::Find ();
-use File::Path ();
-
-use vars qw{$VERSION $MAIN};
-BEGIN {
- # All Module::Install core packages now require synchronised versions.
- # This will be used to ensure we don't accidentally load old or
- # different versions of modules.
- # This is not enforced yet, but will be some time in the next few
- # releases once we can make sure it won't clash with custom
- # Module::Install extensions.
- $VERSION = '1.19';
-
- # Storage for the pseudo-singleton
- $MAIN = undef;
-
- *inc::Module::Install::VERSION = *VERSION;
- @inc::Module::Install::ISA = __PACKAGE__;
-
-}
-
-sub import {
- my $class = shift;
- my $self = $class->new(@_);
- my $who = $self->_caller;
-
- #-------------------------------------------------------------
- # all of the following checks should be included in import(),
- # to allow "eval 'require Module::Install; 1' to test
- # installation of Module::Install. (RT #51267)
- #-------------------------------------------------------------
-
- # Whether or not inc::Module::Install is actually loaded, the
- # $INC{inc/Module/Install.pm} is what will still get set as long as
- # the caller loaded module this in the documented manner.
- # If not set, the caller may NOT have loaded the bundled version, and thus
- # they may not have a MI version that works with the Makefile.PL. This would
- # result in false errors or unexpected behaviour. And we don't want that.
- my $file = join( '/', 'inc', split /::/, __PACKAGE__ ) . '.pm';
- unless ( $INC{$file} ) { die <<"END_DIE" }
-
-Please invoke ${\__PACKAGE__} with:
-
- use inc::${\__PACKAGE__};
-
-not:
-
- use ${\__PACKAGE__};
-
-END_DIE
-
- # This reportedly fixes a rare Win32 UTC file time issue, but
- # as this is a non-cross-platform XS module not in the core,
- # we shouldn't really depend on it. See RT #24194 for detail.
- # (Also, this module only supports Perl 5.6 and above).
- eval "use Win32::UTCFileTime" if $^O eq 'MSWin32' && $] >= 5.006;
-
- # If the script that is loading Module::Install is from the future,
- # then make will detect this and cause it to re-run over and over
- # again. This is bad. Rather than taking action to touch it (which
- # is unreliable on some platforms and requires write permissions)
- # for now we should catch this and refuse to run.
- if ( -f $0 ) {
- my $s = (stat($0))[9];
-
- # If the modification time is only slightly in the future,
- # sleep briefly to remove the problem.
- my $a = $s - time;
- if ( $a > 0 and $a < 5 ) { sleep 5 }
-
- # Too far in the future, throw an error.
- my $t = time;
- if ( $s > $t ) { die <<"END_DIE" }
-
-Your installer $0 has a modification time in the future ($s > $t).
-
-This is known to create infinite loops in make.
-
-Please correct this, then run $0 again.
-
-END_DIE
- }
-
-
- # Build.PL was formerly supported, but no longer is due to excessive
- # difficulty in implementing every single feature twice.
- if ( $0 =~ /Build.PL$/i ) { die <<"END_DIE" }
-
-Module::Install no longer supports Build.PL.
-
-It was impossible to maintain duel backends, and has been deprecated.
-
-Please remove all Build.PL files and only use the Makefile.PL installer.
-
-END_DIE
-
- #-------------------------------------------------------------
-
- # To save some more typing in Module::Install installers, every...
- # use inc::Module::Install
- # ...also acts as an implicit use strict.
- $^H |= strict::bits(qw(refs subs vars));
-
- #-------------------------------------------------------------
-
- unless ( -f $self->{file} ) {
- foreach my $key (keys %INC) {
- delete $INC{$key} if $key =~ /Module\/Install/;
- }
-
- local $^W;
- require "$self->{path}/$self->{dispatch}.pm";
- File::Path::mkpath("$self->{prefix}/$self->{author}");
- $self->{admin} = "$self->{name}::$self->{dispatch}"->new( _top => $self );
- $self->{admin}->init;
- @_ = ($class, _self => $self);
- goto &{"$self->{name}::import"};
- }
-
- local $^W;
- *{"${who}::AUTOLOAD"} = $self->autoload;
- $self->preload;
-
- # Unregister loader and worker packages so subdirs can use them again
- delete $INC{'inc/Module/Install.pm'};
- delete $INC{'Module/Install.pm'};
-
- # Save to the singleton
- $MAIN = $self;
-
- return 1;
-}
-
-sub autoload {
- my $self = shift;
- my $who = $self->_caller;
- my $cwd = Cwd::getcwd();
- my $sym = "${who}::AUTOLOAD";
- $sym->{$cwd} = sub {
- my $pwd = Cwd::getcwd();
- if ( my $code = $sym->{$pwd} ) {
- # Delegate back to parent dirs
- goto &$code unless $cwd eq $pwd;
- }
- unless ($$sym =~ s/([^:]+)$//) {
- # XXX: it looks like we can't retrieve the missing function
- # via $$sym (usually $main::AUTOLOAD) in this case.
- # I'm still wondering if we should slurp Makefile.PL to
- # get some context or not ...
- my ($package, $file, $line) = caller;
- die <<"EOT";
-Unknown function is found at $file line $line.
-Execution of $file aborted due to runtime errors.
-
-If you're a contributor to a project, you may need to install
-some Module::Install extensions from CPAN (or other repository).
-If you're a user of a module, please contact the author.
-EOT
- }
- my $method = $1;
- if ( uc($method) eq $method ) {
- # Do nothing
- return;
- } elsif ( $method =~ /^_/ and $self->can($method) ) {
- # Dispatch to the root M:I class
- return $self->$method(@_);
- }
-
- # Dispatch to the appropriate plugin
- unshift @_, ( $self, $1 );
- goto &{$self->can('call')};
- };
-}
-
-sub preload {
- my $self = shift;
- unless ( $self->{extensions} ) {
- $self->load_extensions(
- "$self->{prefix}/$self->{path}", $self
- );
- }
-
- my @exts = @{$self->{extensions}};
- unless ( @exts ) {
- @exts = $self->{admin}->load_all_extensions;
- }
-
- my %seen;
- foreach my $obj ( @exts ) {
- while (my ($method, $glob) = each %{ref($obj) . '::'}) {
- next unless $obj->can($method);
- next if $method =~ /^_/;
- next if $method eq uc($method);
- $seen{$method}++;
- }
- }
-
- my $who = $self->_caller;
- foreach my $name ( sort keys %seen ) {
- local $^W;
- *{"${who}::$name"} = sub {
- ${"${who}::AUTOLOAD"} = "${who}::$name";
- goto &{"${who}::AUTOLOAD"};
- };
- }
-}
-
-sub new {
- my ($class, %args) = @_;
-
- delete $INC{'FindBin.pm'};
- {
- # to suppress the redefine warning
- local $SIG{__WARN__} = sub {};
- require FindBin;
- }
-
- # ignore the prefix on extension modules built from top level.
- my $base_path = Cwd::abs_path($FindBin::Bin);
- unless ( Cwd::abs_path(Cwd::getcwd()) eq $base_path ) {
- delete $args{prefix};
- }
- return $args{_self} if $args{_self};
-
- $base_path = VMS::Filespec::unixify($base_path) if $^O eq 'VMS';
-
- $args{dispatch} ||= 'Admin';
- $args{prefix} ||= 'inc';
- $args{author} ||= ($^O eq 'VMS' ? '_author' : '.author');
- $args{bundle} ||= 'inc/BUNDLES';
- $args{base} ||= $base_path;
- $class =~ s/^\Q$args{prefix}\E:://;
- $args{name} ||= $class;
- $args{version} ||= $class->VERSION;
- unless ( $args{path} ) {
- $args{path} = $args{name};
- $args{path} =~ s!::!/!g;
- }
- $args{file} ||= "$args{base}/$args{prefix}/$args{path}.pm";
- $args{wrote} = 0;
-
- bless( \%args, $class );
-}
-
-sub call {
- my ($self, $method) = @_;
- my $obj = $self->load($method) or return;
- splice(@_, 0, 2, $obj);
- goto &{$obj->can($method)};
-}
-
-sub load {
- my ($self, $method) = @_;
-
- $self->load_extensions(
- "$self->{prefix}/$self->{path}", $self
- ) unless $self->{extensions};
-
- foreach my $obj (@{$self->{extensions}}) {
- return $obj if $obj->can($method);
- }
-
- my $admin = $self->{admin} or die <<"END_DIE";
-The '$method' method does not exist in the '$self->{prefix}' path!
-Please remove the '$self->{prefix}' directory and run $0 again to load it.
-END_DIE
-
- my $obj = $admin->load($method, 1);
- push @{$self->{extensions}}, $obj;
-
- $obj;
-}
-
-sub load_extensions {
- my ($self, $path, $top) = @_;
-
- my $should_reload = 0;
- unless ( grep { ! ref $_ and lc $_ eq lc $self->{prefix} } @INC ) {
- unshift @INC, $self->{prefix};
- $should_reload = 1;
- }
-
- foreach my $rv ( $self->find_extensions($path) ) {
- my ($file, $pkg) = @{$rv};
- next if $self->{pathnames}{$pkg};
-
- local $@;
- my $new = eval { local $^W; require $file; $pkg->can('new') };
- unless ( $new ) {
- warn $@ if $@;
- next;
- }
- $self->{pathnames}{$pkg} =
- $should_reload ? delete $INC{$file} : $INC{$file};
- push @{$self->{extensions}}, &{$new}($pkg, _top => $top );
- }
-
- $self->{extensions} ||= [];
-}
-
-sub find_extensions {
- my ($self, $path) = @_;
-
- my @found;
- File::Find::find( {no_chdir => 1, wanted => sub {
- my $file = $File::Find::name;
- return unless $file =~ m!^\Q$path\E/(.+)\.pm\Z!is;
- my $subpath = $1;
- return if lc($subpath) eq lc($self->{dispatch});
-
- $file = "$self->{path}/$subpath.pm";
- my $pkg = "$self->{name}::$subpath";
- $pkg =~ s!/!::!g;
-
- # If we have a mixed-case package name, assume case has been preserved
- # correctly. Otherwise, root through the file to locate the case-preserved
- # version of the package name.
- if ( $subpath eq lc($subpath) || $subpath eq uc($subpath) ) {
- my $content = Module::Install::_read($File::Find::name);
- my $in_pod = 0;
- foreach ( split /\n/, $content ) {
- $in_pod = 1 if /^=\w/;
- $in_pod = 0 if /^=cut/;
- next if ($in_pod || /^=cut/); # skip pod text
- next if /^\s*#/; # and comments
- if ( m/^\s*package\s+($pkg)\s*;/i ) {
- $pkg = $1;
- last;
- }
- }
- }
-
- push @found, [ $file, $pkg ];
- }}, $path ) if -d $path;
-
- @found;
-}
-
-
-
-
-
-#####################################################################
-# Common Utility Functions
-
-sub _caller {
- my $depth = 0;
- my $call = caller($depth);
- while ( $call eq __PACKAGE__ ) {
- $depth++;
- $call = caller($depth);
- }
- return $call;
-}
-
-sub _read {
- local *FH;
- open( FH, '<', $_[0] ) or die "open($_[0]): $!";
- binmode FH;
- my $string = do { local $/; <FH> };
- close FH or die "close($_[0]): $!";
- return $string;
-}
-
-sub _readperl {
- my $string = Module::Install::_read($_[0]);
- $string =~ s/(?:\015{1,2}\012|\015|\012)/\n/sg;
- $string =~ s/(\n)\n*__(?:DATA|END)__\b.*\z/$1/s;
- $string =~ s/\n\n=\w+.+?\n\n=cut\b.+?\n+/\n\n/sg;
- return $string;
-}
-
-sub _readpod {
- my $string = Module::Install::_read($_[0]);
- $string =~ s/(?:\015{1,2}\012|\015|\012)/\n/sg;
- return $string if $_[0] =~ /\.pod\z/;
- $string =~ s/(^|\n=cut\b.+?\n+)[^=\s].+?\n(\n=\w+|\z)/$1$2/sg;
- $string =~ s/\n*=pod\b[^\n]*\n+/\n\n/sg;
- $string =~ s/\n*=cut\b[^\n]*\n+/\n\n/sg;
- $string =~ s/^\n+//s;
- return $string;
-}
-
-sub _write {
- local *FH;
- open( FH, '>', $_[0] ) or die "open($_[0]): $!";
- binmode FH;
- foreach ( 1 .. $#_ ) {
- print FH $_[$_] or die "print($_[0]): $!";
- }
- close FH or die "close($_[0]): $!";
-}
-
-# _version is for processing module versions (eg, 1.03_05) not
-# Perl versions (eg, 5.8.1).
-sub _version {
- my $s = shift || 0;
- my $d =()= $s =~ /(\.)/g;
- if ( $d >= 2 ) {
- # Normalise multipart versions
- $s =~ s/(\.)(\d{1,3})/sprintf("$1%03d",$2)/eg;
- }
- $s =~ s/^(\d+)\.?//;
- my $l = $1 || 0;
- my @v = map {
- $_ . '0' x (3 - length $_)
- } $s =~ /(\d{1,3})\D?/g;
- $l = $l . '.' . join '', @v if @v;
- return $l + 0;
-}
-
-sub _cmp {
- _version($_[1]) <=> _version($_[2]);
-}
-
-# Cloned from Params::Util::_CLASS
-sub _CLASS {
- (
- defined $_[0]
- and
- ! ref $_[0]
- and
- $_[0] =~ m/^[^\W\d]\w*(?:::\w+)*\z/s
- ) ? $_[0] : undef;
-}
-
-1;
-
-# Copyright 2008 - 2012 Adam Kennedy.
diff --git a/inc/Module/Install/Base.pm b/inc/Module/Install/Base.pm
deleted file mode 100644
index 9fa42c2..0000000
--- a/inc/Module/Install/Base.pm
+++ /dev/null
@@ -1,83 +0,0 @@
-#line 1
-package Module::Install::Base;
-
-use strict 'vars';
-use vars qw{$VERSION};
-BEGIN {
- $VERSION = '1.19';
-}
-
-# Suspend handler for "redefined" warnings
-BEGIN {
- my $w = $SIG{__WARN__};
- $SIG{__WARN__} = sub { $w };
-}
-
-#line 42
-
-sub new {
- my $class = shift;
- unless ( defined &{"${class}::call"} ) {
- *{"${class}::call"} = sub { shift->_top->call(@_) };
- }
- unless ( defined &{"${class}::load"} ) {
- *{"${class}::load"} = sub { shift->_top->load(@_) };
- }
- bless { @_ }, $class;
-}
-
-#line 61
-
-sub AUTOLOAD {
- local $@;
- my $func = eval { shift->_top->autoload } or return;
- goto &$func;
-}
-
-#line 75
-
-sub _top {
- $_[0]->{_top};
-}
-
-#line 90
-
-sub admin {
- $_[0]->_top->{admin}
- or
- Module::Install::Base::FakeAdmin->new;
-}
-
-#line 106
-
-sub is_admin {
- ! $_[0]->admin->isa('Module::Install::Base::FakeAdmin');
-}
-
-sub DESTROY {}
-
-package Module::Install::Base::FakeAdmin;
-
-use vars qw{$VERSION};
-BEGIN {
- $VERSION = $Module::Install::Base::VERSION;
-}
-
-my $fake;
-
-sub new {
- $fake ||= bless(\@_, $_[0]);
-}
-
-sub AUTOLOAD {}
-
-sub DESTROY {}
-
-# Restore warning handler
-BEGIN {
- $SIG{__WARN__} = $SIG{__WARN__}->();
-}
-
-1;
-
-#line 159
diff --git a/inc/Module/Install/Can.pm b/inc/Module/Install/Can.pm
deleted file mode 100644
index d65c753..0000000
--- a/inc/Module/Install/Can.pm
+++ /dev/null
@@ -1,163 +0,0 @@
-#line 1
-package Module::Install::Can;
-
-use strict;
-use Config ();
-use ExtUtils::MakeMaker ();
-use Module::Install::Base ();
-
-use vars qw{$VERSION @ISA $ISCORE};
-BEGIN {
- $VERSION = '1.19';
- @ISA = 'Module::Install::Base';
- $ISCORE = 1;
-}
-
-# check if we can load some module
-### Upgrade this to not have to load the module if possible
-sub can_use {
- my ($self, $mod, $ver) = @_;
- $mod =~ s{::|\\}{/}g;
- $mod .= '.pm' unless $mod =~ /\.pm$/i;
-
- my $pkg = $mod;
- $pkg =~ s{/}{::}g;
- $pkg =~ s{\.pm$}{}i;
-
- local $@;
- eval { require $mod; $pkg->VERSION($ver || 0); 1 };
-}
-
-# Check if we can run some command
-sub can_run {
- my ($self, $cmd) = @_;
-
- my $_cmd = $cmd;
- return $_cmd if (-x $_cmd or $_cmd = MM->maybe_command($_cmd));
-
- for my $dir ((split /$Config::Config{path_sep}/, $ENV{PATH}), '.') {
- next if $dir eq '';
- require File::Spec;
- my $abs = File::Spec->catfile($dir, $cmd);
- return $abs if (-x $abs or $abs = MM->maybe_command($abs));
- }
-
- return;
-}
-
-# Can our C compiler environment build XS files
-sub can_xs {
- my $self = shift;
-
- # Ensure we have the CBuilder module
- $self->configure_requires( 'ExtUtils::CBuilder' => 0.27 );
-
- # Do we have the configure_requires checker?
- local $@;
- eval "require ExtUtils::CBuilder;";
- if ( $@ ) {
- # They don't obey configure_requires, so it is
- # someone old and delicate. Try to avoid hurting
- # them by falling back to an older simpler test.
- return $self->can_cc();
- }
-
- # Do we have a working C compiler
- my $builder = ExtUtils::CBuilder->new(
- quiet => 1,
- );
- unless ( $builder->have_compiler ) {
- # No working C compiler
- return 0;
- }
-
- # Write a C file representative of what XS becomes
- require File::Temp;
- my ( $FH, $tmpfile ) = File::Temp::tempfile(
- "compilexs-XXXXX",
- SUFFIX => '.c',
- );
- binmode $FH;
- print $FH <<'END_C';
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-int main(int argc, char **argv) {
- return 0;
-}
-
-int boot_sanexs() {
- return 1;
-}
-
-END_C
- close $FH;
-
- # Can the C compiler access the same headers XS does
- my @libs = ();
- my $object = undef;
- eval {
- local $^W = 0;
- $object = $builder->compile(
- source => $tmpfile,
- );
- @libs = $builder->link(
- objects => $object,
- module_name => 'sanexs',
- );
- };
- my $result = $@ ? 0 : 1;
-
- # Clean up all the build files
- foreach ( $tmpfile, $object, @libs ) {
- next unless defined $_;
- 1 while unlink;
- }
-
- return $result;
-}
-
-# Can we locate a (the) C compiler
-sub can_cc {
- my $self = shift;
-
- if ($^O eq 'VMS') {
- require ExtUtils::CBuilder;
- my $builder = ExtUtils::CBuilder->new(
- quiet => 1,
- );
- return $builder->have_compiler;
- }
-
- my @chunks = split(/ /, $Config::Config{cc}) or return;
-
- # $Config{cc} may contain args; try to find out the program part
- while (@chunks) {
- return $self->can_run("@chunks") || (pop(@chunks), next);
- }
-
- return;
-}
-
-# Fix Cygwin bug on maybe_command();
-if ( $^O eq 'cygwin' ) {
- require ExtUtils::MM_Cygwin;
- require ExtUtils::MM_Win32;
- if ( ! defined(&ExtUtils::MM_Cygwin::maybe_command) ) {
- *ExtUtils::MM_Cygwin::maybe_command = sub {
- my ($self, $file) = @_;
- if ($file =~ m{^/cygdrive/}i and ExtUtils::MM_Win32->can('maybe_command')) {
- ExtUtils::MM_Win32->maybe_command($file);
- } else {
- ExtUtils::MM_Unix->maybe_command($file);
- }
- }
- }
-}
-
-1;
-
-__END__
-
-#line 245
diff --git a/inc/Module/Install/Fetch.pm b/inc/Module/Install/Fetch.pm
deleted file mode 100644
index 3072b08..0000000
--- a/inc/Module/Install/Fetch.pm
+++ /dev/null
@@ -1,93 +0,0 @@
-#line 1
-package Module::Install::Fetch;
-
-use strict;
-use Module::Install::Base ();
-
-use vars qw{$VERSION @ISA $ISCORE};
-BEGIN {
- $VERSION = '1.19';
- @ISA = 'Module::Install::Base';
- $ISCORE = 1;
-}
-
-sub get_file {
- my ($self, %args) = @_;
- my ($scheme, $host, $path, $file) =
- $args{url} =~ m|^(\w+)://([^/]+)(.+)/(.+)| or return;
-
- if ( $scheme eq 'http' and ! eval { require LWP::Simple; 1 } ) {
- $args{url} = $args{ftp_url}
- or (warn("LWP support unavailable!\n"), return);
- ($scheme, $host, $path, $file) =
- $args{url} =~ m|^(\w+)://([^/]+)(.+)/(.+)| or return;
- }
-
- $|++;
- print "Fetching '$file' from $host... ";
-
- unless (eval { require Socket; Socket::inet_aton($host) }) {
- warn "'$host' resolve failed!\n";
- return;
- }
-
- return unless $scheme eq 'ftp' or $scheme eq 'http';
-
- require Cwd;
- my $dir = Cwd::getcwd();
- chdir $args{local_dir} or return if exists $args{local_dir};
-
- if (eval { require LWP::Simple; 1 }) {
- LWP::Simple::mirror($args{url}, $file);
- }
- elsif (eval { require Net::FTP; 1 }) { eval {
- # use Net::FTP to get past firewall
- my $ftp = Net::FTP->new($host, Passive => 1, Timeout => 600);
- $ftp->login("anonymous", 'anonymous@example.com');
- $ftp->cwd($path);
- $ftp->binary;
- $ftp->get($file) or (warn("$!\n"), return);
- $ftp->quit;
- } }
- elsif (my $ftp = $self->can_run('ftp')) { eval {
- # no Net::FTP, fallback to ftp.exe
- require FileHandle;
- my $fh = FileHandle->new;
-
- local $SIG{CHLD} = 'IGNORE';
- unless ($fh->open("|$ftp -n")) {
- warn "Couldn't open ftp: $!\n";
- chdir $dir; return;
- }
-
- my @dialog = split(/\n/, <<"END_FTP");
-open $host
-user anonymous anonymous\@example.com
-cd $path
-binary
-get $file $file
-quit
-END_FTP
- foreach (@dialog) { $fh->print("$_\n") }
- $fh->close;
- } }
- else {
- warn "No working 'ftp' program available!\n";
- chdir $dir; return;
- }
-
- unless (-f $file) {
- warn "Fetching failed: $@\n";
- chdir $dir; return;
- }
-
- return if exists $args{size} and -s $file != $args{size};
- system($args{run}) if exists $args{run};
- unlink($file) if $args{remove};
-
- print(((!exists $args{check_for} or -e $args{check_for})
- ? "done!" : "failed! ($!)"), "\n");
- chdir $dir; return !$?;
-}
-
-1;
diff --git a/inc/Module/Install/Makefile.pm b/inc/Module/Install/Makefile.pm
deleted file mode 100644
index 13a4464..0000000
--- a/inc/Module/Install/Makefile.pm
+++ /dev/null
@@ -1,418 +0,0 @@
-#line 1
-package Module::Install::Makefile;
-
-use strict 'vars';
-use ExtUtils::MakeMaker ();
-use Module::Install::Base ();
-use Fcntl qw/:flock :seek/;
-
-use vars qw{$VERSION @ISA $ISCORE};
-BEGIN {
- $VERSION = '1.19';
- @ISA = 'Module::Install::Base';
- $ISCORE = 1;
-}
-
-sub Makefile { $_[0] }
-
-my %seen = ();
-
-sub prompt {
- shift;
-
- # Infinite loop protection
- my @c = caller();
- if ( ++$seen{"$c[1]|$c[2]|$_[0]"} > 3 ) {
- die "Caught an potential prompt infinite loop ($c[1]|$c[2]|$_[0])";
- }
-
- # In automated testing or non-interactive session, always use defaults
- if ( ($ENV{AUTOMATED_TESTING} or -! -t STDIN) and ! $ENV{PERL_MM_USE_DEFAULT} ) {
- local $ENV{PERL_MM_USE_DEFAULT} = 1;
- goto &ExtUtils::MakeMaker::prompt;
- } else {
- goto &ExtUtils::MakeMaker::prompt;
- }
-}
-
-# Store a cleaned up version of the MakeMaker version,
-# since we need to behave differently in a variety of
-# ways based on the MM version.
-my $makemaker = eval $ExtUtils::MakeMaker::VERSION;
-
-# If we are passed a param, do a "newer than" comparison.
-# Otherwise, just return the MakeMaker version.
-sub makemaker {
- ( @_ < 2 or $makemaker >= eval($_[1]) ) ? $makemaker : 0
-}
-
-# Ripped from ExtUtils::MakeMaker 6.56, and slightly modified
-# as we only need to know here whether the attribute is an array
-# or a hash or something else (which may or may not be appendable).
-my %makemaker_argtype = (
- C => 'ARRAY',
- CONFIG => 'ARRAY',
-# CONFIGURE => 'CODE', # ignore
- DIR => 'ARRAY',
- DL_FUNCS => 'HASH',
- DL_VARS => 'ARRAY',
- EXCLUDE_EXT => 'ARRAY',
- EXE_FILES => 'ARRAY',
- FUNCLIST => 'ARRAY',
- H => 'ARRAY',
- IMPORTS => 'HASH',
- INCLUDE_EXT => 'ARRAY',
- LIBS => 'ARRAY', # ignore ''
- MAN1PODS => 'HASH',
- MAN3PODS => 'HASH',
- META_ADD => 'HASH',
- META_MERGE => 'HASH',
- PL_FILES => 'HASH',
- PM => 'HASH',
- PMLIBDIRS => 'ARRAY',
- PMLIBPARENTDIRS => 'ARRAY',
- PREREQ_PM => 'HASH',
- CONFIGURE_REQUIRES => 'HASH',
- SKIP => 'ARRAY',
- TYPEMAPS => 'ARRAY',
- XS => 'HASH',
-# VERSION => ['version',''], # ignore
-# _KEEP_AFTER_FLUSH => '',
-
- clean => 'HASH',
- depend => 'HASH',
- dist => 'HASH',
- dynamic_lib=> 'HASH',
- linkext => 'HASH',
- macro => 'HASH',
- postamble => 'HASH',
- realclean => 'HASH',
- test => 'HASH',
- tool_autosplit => 'HASH',
-
- # special cases where you can use makemaker_append
- CCFLAGS => 'APPENDABLE',
- DEFINE => 'APPENDABLE',
- INC => 'APPENDABLE',
- LDDLFLAGS => 'APPENDABLE',
- LDFROM => 'APPENDABLE',
-);
-
-sub makemaker_args {
- my ($self, %new_args) = @_;
- my $args = ( $self->{makemaker_args} ||= {} );
- foreach my $key (keys %new_args) {
- if ($makemaker_argtype{$key}) {
- if ($makemaker_argtype{$key} eq 'ARRAY') {
- $args->{$key} = [] unless defined $args->{$key};
- unless (ref $args->{$key} eq 'ARRAY') {
- $args->{$key} = [$args->{$key}]
- }
- push @{$args->{$key}},
- ref $new_args{$key} eq 'ARRAY'
- ? @{$new_args{$key}}
- : $new_args{$key};
- }
- elsif ($makemaker_argtype{$key} eq 'HASH') {
- $args->{$key} = {} unless defined $args->{$key};
- foreach my $skey (keys %{ $new_args{$key} }) {
- $args->{$key}{$skey} = $new_args{$key}{$skey};
- }
- }
- elsif ($makemaker_argtype{$key} eq 'APPENDABLE') {
- $self->makemaker_append($key => $new_args{$key});
- }
- }
- else {
- if (defined $args->{$key}) {
- warn qq{MakeMaker attribute "$key" is overriden; use "makemaker_append" to append values\n};
- }
- $args->{$key} = $new_args{$key};
- }
- }
- return $args;
-}
-
-# For mm args that take multiple space-separated args,
-# append an argument to the current list.
-sub makemaker_append {
- my $self = shift;
- my $name = shift;
- my $args = $self->makemaker_args;
- $args->{$name} = defined $args->{$name}
- ? join( ' ', $args->{$name}, @_ )
- : join( ' ', @_ );
-}
-
-sub build_subdirs {
- my $self = shift;
- my $subdirs = $self->makemaker_args->{DIR} ||= [];
- for my $subdir (@_) {
- push @$subdirs, $subdir;
- }
-}
-
-sub clean_files {
- my $self = shift;
- my $clean = $self->makemaker_args->{clean} ||= {};
- %$clean = (
- %$clean,
- FILES => join ' ', grep { length $_ } ($clean->{FILES} || (), @_),
- );
-}
-
-sub realclean_files {
- my $self = shift;
- my $realclean = $self->makemaker_args->{realclean} ||= {};
- %$realclean = (
- %$realclean,
- FILES => join ' ', grep { length $_ } ($realclean->{FILES} || (), @_),
- );
-}
-
-sub libs {
- my $self = shift;
- my $libs = ref $_[0] ? shift : [ shift ];
- $self->makemaker_args( LIBS => $libs );
-}
-
-sub inc {
- my $self = shift;
- $self->makemaker_args( INC => shift );
-}
-
-sub _wanted_t {
-}
-
-sub tests_recursive {
- my $self = shift;
- my $dir = shift || 't';
- unless ( -d $dir ) {
- die "tests_recursive dir '$dir' does not exist";
- }
- my %tests = map { $_ => 1 } split / /, ($self->tests || '');
- require File::Find;
- File::Find::find(
- sub { /\.t$/ and -f $_ and $tests{"$File::Find::dir/*.t"} = 1 },
- $dir
- );
- $self->tests( join ' ', sort keys %tests );
-}
-
-sub write {
- my $self = shift;
- die "&Makefile->write() takes no arguments\n" if @_;
-
- # Check the current Perl version
- my $perl_version = $self->perl_version;
- if ( $perl_version ) {
- eval "use $perl_version; 1"
- or die "ERROR: perl: Version $] is installed, "
- . "but we need version >= $perl_version";
- }
-
- # Make sure we have a new enough MakeMaker
- require ExtUtils::MakeMaker;
-
- if ( $perl_version and $self->_cmp($perl_version, '5.006') >= 0 ) {
- # This previous attempted to inherit the version of
- # ExtUtils::MakeMaker in use by the module author, but this
- # was found to be untenable as some authors build releases
- # using future dev versions of EU:MM that nobody else has.
- # Instead, #toolchain suggests we use 6.59 which is the most
- # stable version on CPAN at time of writing and is, to quote
- # ribasushi, "not terminally fucked, > and tested enough".
- # TODO: We will now need to maintain this over time to push
- # the version up as new versions are released.
- $self->build_requires( 'ExtUtils::MakeMaker' => 6.59 );
- $self->configure_requires( 'ExtUtils::MakeMaker' => 6.59 );
- } else {
- # Allow legacy-compatibility with 5.005 by depending on the
- # most recent EU:MM that supported 5.005.
- $self->build_requires( 'ExtUtils::MakeMaker' => 6.36 );
- $self->configure_requires( 'ExtUtils::MakeMaker' => 6.36 );
- }
-
- # Generate the MakeMaker params
- my $args = $self->makemaker_args;
- $args->{DISTNAME} = $self->name;
- $args->{NAME} = $self->module_name || $self->name;
- $args->{NAME} =~ s/-/::/g;
- $args->{VERSION} = $self->version or die <<'EOT';
-ERROR: Can't determine distribution version. Please specify it
-explicitly via 'version' in Makefile.PL, or set a valid $VERSION
-in a module, and provide its file path via 'version_from' (or
-'all_from' if you prefer) in Makefile.PL.
-EOT
-
- if ( $self->tests ) {
- my @tests = split ' ', $self->tests;
- my %seen;
- $args->{test} = {
- TESTS => (join ' ', grep {!$seen{$_}++} @tests),
- };
- } elsif ( $Module::Install::ExtraTests::use_extratests ) {
- # Module::Install::ExtraTests doesn't set $self->tests and does its own tests via harness.
- # So, just ignore our xt tests here.
- } elsif ( -d 'xt' and ($Module::Install::AUTHOR or $ENV{RELEASE_TESTING}) ) {
- $args->{test} = {
- TESTS => join( ' ', map { "$_/*.t" } grep { -d $_ } qw{ t xt } ),
- };
- }
- if ( $] >= 5.005 ) {
- $args->{ABSTRACT} = $self->abstract;
- $args->{AUTHOR} = join ', ', @{$self->author || []};
- }
- if ( $self->makemaker(6.10) ) {
- $args->{NO_META} = 1;
- #$args->{NO_MYMETA} = 1;
- }
- if ( $self->makemaker(6.17) and $self->sign ) {
- $args->{SIGN} = 1;
- }
- unless ( $self->is_admin ) {
- delete $args->{SIGN};
- }
- if ( $self->makemaker(6.31) and $self->license ) {
- $args->{LICENSE} = $self->license;
- }
-
- my $prereq = ($args->{PREREQ_PM} ||= {});
- %$prereq = ( %$prereq,
- map { @$_ } # flatten [module => version]
- map { @$_ }
- grep $_,
- ($self->requires)
- );
-
- # Remove any reference to perl, PREREQ_PM doesn't support it
- delete $args->{PREREQ_PM}->{perl};
-
- # Merge both kinds of requires into BUILD_REQUIRES
- my $build_prereq = ($args->{BUILD_REQUIRES} ||= {});
- %$build_prereq = ( %$build_prereq,
- map { @$_ } # flatten [module => version]
- map { @$_ }
- grep $_,
- ($self->configure_requires, $self->build_requires)
- );
-
- # Remove any reference to perl, BUILD_REQUIRES doesn't support it
- delete $args->{BUILD_REQUIRES}->{perl};
-
- # Delete bundled dists from prereq_pm, add it to Makefile DIR
- my $subdirs = ($args->{DIR} || []);
- if ($self->bundles) {
- my %processed;
- foreach my $bundle (@{ $self->bundles }) {
- my ($mod_name, $dist_dir) = @$bundle;
- delete $prereq->{$mod_name};
- $dist_dir = File::Basename::basename($dist_dir); # dir for building this module
- if (not exists $processed{$dist_dir}) {
- if (-d $dist_dir) {
- # List as sub-directory to be processed by make
- push @$subdirs, $dist_dir;
- }
- # Else do nothing: the module is already present on the system
- $processed{$dist_dir} = undef;
- }
- }
- }
-
- unless ( $self->makemaker('6.55_03') ) {
- %$prereq = (%$prereq,%$build_prereq);
- delete $args->{BUILD_REQUIRES};
- }
-
- if ( my $perl_version = $self->perl_version ) {
- eval "use $perl_version; 1"
- or die "ERROR: perl: Version $] is installed, "
- . "but we need version >= $perl_version";
-
- if ( $self->makemaker(6.48) ) {
- $args->{MIN_PERL_VERSION} = $perl_version;
- }
- }
-
- if ($self->installdirs) {
- warn qq{old INSTALLDIRS (probably set by makemaker_args) is overriden by installdirs\n} if $args->{INSTALLDIRS};
- $args->{INSTALLDIRS} = $self->installdirs;
- }
-
- my %args = map {
- ( $_ => $args->{$_} ) } grep {defined($args->{$_} )
- } keys %$args;
-
- my $user_preop = delete $args{dist}->{PREOP};
- if ( my $preop = $self->admin->preop($user_preop) ) {
- foreach my $key ( keys %$preop ) {
- $args{dist}->{$key} = $preop->{$key};
- }
- }
-
- my $mm = ExtUtils::MakeMaker::WriteMakefile(%args);
- $self->fix_up_makefile($mm->{FIRST_MAKEFILE} || 'Makefile');
-}
-
-sub fix_up_makefile {
- my $self = shift;
- my $makefile_name = shift;
- my $top_class = ref($self->_top) || '';
- my $top_version = $self->_top->VERSION || '';
-
- my $preamble = $self->preamble
- ? "# Preamble by $top_class $top_version\n"
- . $self->preamble
- : '';
- my $postamble = "# Postamble by $top_class $top_version\n"
- . ($self->postamble || '');
-
- local *MAKEFILE;
- open MAKEFILE, "+< $makefile_name" or die "fix_up_makefile: Couldn't open $makefile_name: $!";
- eval { flock MAKEFILE, LOCK_EX };
- my $makefile = do { local $/; <MAKEFILE> };
-
- $makefile =~ s/\b(test_harness\(\$\(TEST_VERBOSE\), )/$1'inc', /;
- $makefile =~ s/( -I\$\(INST_ARCHLIB\))/ -Iinc$1/g;
- $makefile =~ s/( "-I\$\(INST_LIB\)")/ "-Iinc"$1/g;
- $makefile =~ s/^(FULLPERL = .*)/$1 "-Iinc"/m;
- $makefile =~ s/^(PERL = .*)/$1 "-Iinc"/m;
-
- # Module::Install will never be used to build the Core Perl
- # Sometimes PERL_LIB and PERL_ARCHLIB get written anyway, which breaks
- # PREFIX/PERL5LIB, and thus, install_share. Blank them if they exist
- $makefile =~ s/^PERL_LIB = .+/PERL_LIB =/m;
- #$makefile =~ s/^PERL_ARCHLIB = .+/PERL_ARCHLIB =/m;
-
- # Perl 5.005 mentions PERL_LIB explicitly, so we have to remove that as well.
- $makefile =~ s/(\"?)-I\$\(PERL_LIB\)\1//g;
-
- # XXX - This is currently unused; not sure if it breaks other MM-users
- # $makefile =~ s/^pm_to_blib\s+:\s+/pm_to_blib :: /mg;
-
- seek MAKEFILE, 0, SEEK_SET;
- truncate MAKEFILE, 0;
- print MAKEFILE "$preamble$makefile$postamble" or die $!;
- close MAKEFILE or die $!;
-
- 1;
-}
-
-sub preamble {
- my ($self, $text) = @_;
- $self->{preamble} = $text . $self->{preamble} if defined $text;
- $self->{preamble};
-}
-
-sub postamble {
- my ($self, $text) = @_;
- $self->{postamble} ||= $self->admin->postamble;
- $self->{postamble} .= $text if defined $text;
- $self->{postamble}
-}
-
-1;
-
-__END__
-
-#line 544
diff --git a/inc/Module/Install/Metadata.pm b/inc/Module/Install/Metadata.pm
deleted file mode 100644
index 11bf971..0000000
--- a/inc/Module/Install/Metadata.pm
+++ /dev/null
@@ -1,722 +0,0 @@
-#line 1
-package Module::Install::Metadata;
-
-use strict 'vars';
-use Module::Install::Base ();
-
-use vars qw{$VERSION @ISA $ISCORE};
-BEGIN {
- $VERSION = '1.19';
- @ISA = 'Module::Install::Base';
- $ISCORE = 1;
-}
-
-my @boolean_keys = qw{
- sign
-};
-
-my @scalar_keys = qw{
- name
- module_name
- abstract
- version
- distribution_type
- tests
- installdirs
-};
-
-my @tuple_keys = qw{
- configure_requires
- build_requires
- requires
- recommends
- bundles
- resources
-};
-
-my @resource_keys = qw{
- homepage
- bugtracker
- repository
-};
-
-my @array_keys = qw{
- keywords
- author
-};
-
-*authors = \&author;
-
-sub Meta { shift }
-sub Meta_BooleanKeys { @boolean_keys }
-sub Meta_ScalarKeys { @scalar_keys }
-sub Meta_TupleKeys { @tuple_keys }
-sub Meta_ResourceKeys { @resource_keys }
-sub Meta_ArrayKeys { @array_keys }
-
-foreach my $key ( @boolean_keys ) {
- *$key = sub {
- my $self = shift;
- if ( defined wantarray and not @_ ) {
- return $self->{values}->{$key};
- }
- $self->{values}->{$key} = ( @_ ? $_[0] : 1 );
- return $self;
- };
-}
-
-foreach my $key ( @scalar_keys ) {
- *$key = sub {
- my $self = shift;
- return $self->{values}->{$key} if defined wantarray and !@_;
- $self->{values}->{$key} = shift;
- return $self;
- };
-}
-
-foreach my $key ( @array_keys ) {
- *$key = sub {
- my $self = shift;
- return $self->{values}->{$key} if defined wantarray and !@_;
- $self->{values}->{$key} ||= [];
- push @{$self->{values}->{$key}}, @_;
- return $self;
- };
-}
-
-foreach my $key ( @resource_keys ) {
- *$key = sub {
- my $self = shift;
- unless ( @_ ) {
- return () unless $self->{values}->{resources};
- return map { $_->[1] }
- grep { $_->[0] eq $key }
- @{ $self->{values}->{resources} };
- }
- return $self->{values}->{resources}->{$key} unless @_;
- my $uri = shift or die(
- "Did not provide a value to $key()"
- );
- $self->resources( $key => $uri );
- return 1;
- };
-}
-
-foreach my $key ( grep { $_ ne "resources" } @tuple_keys) {
- *$key = sub {
- my $self = shift;
- return $self->{values}->{$key} unless @_;
- my @added;
- while ( @_ ) {
- my $module = shift or last;
- my $version = shift || 0;
- push @added, [ $module, $version ];
- }
- push @{ $self->{values}->{$key} }, @added;
- return map {@$_} @added;
- };
-}
-
-# Resource handling
-my %lc_resource = map { $_ => 1 } qw{
- homepage
- license
- bugtracker
- repository
-};
-
-sub resources {
- my $self = shift;
- while ( @_ ) {
- my $name = shift or last;
- my $value = shift or next;
- if ( $name eq lc $name and ! $lc_resource{$name} ) {
- die("Unsupported reserved lowercase resource '$name'");
- }
- $self->{values}->{resources} ||= [];
- push @{ $self->{values}->{resources} }, [ $name, $value ];
- }
- $self->{values}->{resources};
-}
-
-# Aliases for build_requires that will have alternative
-# meanings in some future version of META.yml.
-sub test_requires { shift->build_requires(@_) }
-sub install_requires { shift->build_requires(@_) }
-
-# Aliases for installdirs options
-sub install_as_core { $_[0]->installdirs('perl') }
-sub install_as_cpan { $_[0]->installdirs('site') }
-sub install_as_site { $_[0]->installdirs('site') }
-sub install_as_vendor { $_[0]->installdirs('vendor') }
-
-sub dynamic_config {
- my $self = shift;
- my $value = @_ ? shift : 1;
- if ( $self->{values}->{dynamic_config} ) {
- # Once dynamic we never change to static, for safety
- return 0;
- }
- $self->{values}->{dynamic_config} = $value ? 1 : 0;
- return 1;
-}
-
-# Convenience command
-sub static_config {
- shift->dynamic_config(0);
-}
-
-sub perl_version {
- my $self = shift;
- return $self->{values}->{perl_version} unless @_;
- my $version = shift or die(
- "Did not provide a value to perl_version()"
- );
-
- # Normalize the version
- $version = $self->_perl_version($version);
-
- # We don't support the really old versions
- unless ( $version >= 5.005 ) {
- die "Module::Install only supports 5.005 or newer (use ExtUtils::MakeMaker)\n";
- }
-
- $self->{values}->{perl_version} = $version;
-}
-
-sub all_from {
- my ( $self, $file ) = @_;
-
- unless ( defined($file) ) {
- my $name = $self->name or die(
- "all_from called with no args without setting name() first"
- );
- $file = join('/', 'lib', split(/-/, $name)) . '.pm';
- $file =~ s{.*/}{} unless -e $file;
- unless ( -e $file ) {
- die("all_from cannot find $file from $name");
- }
- }
- unless ( -f $file ) {
- die("The path '$file' does not exist, or is not a file");
- }
-
- $self->{values}{all_from} = $file;
-
- # Some methods pull from POD instead of code.
- # If there is a matching .pod, use that instead
- my $pod = $file;
- $pod =~ s/\.pm$/.pod/i;
- $pod = $file unless -e $pod;
-
- # Pull the different values
- $self->name_from($file) unless $self->name;
- $self->version_from($file) unless $self->version;
- $self->perl_version_from($file) unless $self->perl_version;
- $self->author_from($pod) unless @{$self->author || []};
- $self->license_from($pod) unless $self->license;
- $self->abstract_from($pod) unless $self->abstract;
-
- return 1;
-}
-
-sub provides {
- my $self = shift;
- my $provides = ( $self->{values}->{provides} ||= {} );
- %$provides = (%$provides, @_) if @_;
- return $provides;
-}
-
-sub auto_provides {
- my $self = shift;
- return $self unless $self->is_admin;
- unless (-e 'MANIFEST') {
- warn "Cannot deduce auto_provides without a MANIFEST, skipping\n";
- return $self;
- }
- # Avoid spurious warnings as we are not checking manifest here.
- local $SIG{__WARN__} = sub {1};
- require ExtUtils::Manifest;
- local *ExtUtils::Manifest::manicheck = sub { return };
-
- require Module::Build;
- my $build = Module::Build->new(
- dist_name => $self->name,
- dist_version => $self->version,
- license => $self->license,
- );
- $self->provides( %{ $build->find_dist_packages || {} } );
-}
-
-sub feature {
- my $self = shift;
- my $name = shift;
- my $features = ( $self->{values}->{features} ||= [] );
- my $mods;
-
- if ( @_ == 1 and ref( $_[0] ) ) {
- # The user used ->feature like ->features by passing in the second
- # argument as a reference. Accomodate for that.
- $mods = $_[0];
- } else {
- $mods = \@_;
- }
-
- my $count = 0;
- push @$features, (
- $name => [
- map {
- ref($_) ? ( ref($_) eq 'HASH' ) ? %$_ : @$_ : $_
- } @$mods
- ]
- );
-
- return @$features;
-}
-
-sub features {
- my $self = shift;
- while ( my ( $name, $mods ) = splice( @_, 0, 2 ) ) {
- $self->feature( $name, @$mods );
- }
- return $self->{values}->{features}
- ? @{ $self->{values}->{features} }
- : ();
-}
-
-sub no_index {
- my $self = shift;
- my $type = shift;
- push @{ $self->{values}->{no_index}->{$type} }, @_ if $type;
- return $self->{values}->{no_index};
-}
-
-sub read {
- my $self = shift;
- $self->include_deps( 'YAML::Tiny', 0 );
-
- require YAML::Tiny;
- my $data = YAML::Tiny::LoadFile('META.yml');
-
- # Call methods explicitly in case user has already set some values.
- while ( my ( $key, $value ) = each %$data ) {
- next unless $self->can($key);
- if ( ref $value eq 'HASH' ) {
- while ( my ( $module, $version ) = each %$value ) {
- $self->can($key)->($self, $module => $version );
- }
- } else {
- $self->can($key)->($self, $value);
- }
- }
- return $self;
-}
-
-sub write {
- my $self = shift;
- return $self unless $self->is_admin;
- $self->admin->write_meta;
- return $self;
-}
-
-sub version_from {
- require ExtUtils::MM_Unix;
- my ( $self, $file ) = @_;
- $self->version( ExtUtils::MM_Unix->parse_version($file) );
-
- # for version integrity check
- $self->makemaker_args( VERSION_FROM => $file );
-}
-
-sub abstract_from {
- require ExtUtils::MM_Unix;
- my ( $self, $file ) = @_;
- $self->abstract(
- bless(
- { DISTNAME => $self->name },
- 'ExtUtils::MM_Unix'
- )->parse_abstract($file)
- );
-}
-
-# Add both distribution and module name
-sub name_from {
- my ($self, $file) = @_;
- if (
- Module::Install::_read($file) =~ m/
- ^ \s*
- package \s*
- ([\w:]+)
- [\s|;]*
- /ixms
- ) {
- my ($name, $module_name) = ($1, $1);
- $name =~ s{::}{-}g;
- $self->name($name);
- unless ( $self->module_name ) {
- $self->module_name($module_name);
- }
- } else {
- die("Cannot determine name from $file\n");
- }
-}
-
-sub _extract_perl_version {
- if (
- $_[0] =~ m/
- ^\s*
- (?:use|require) \s*
- v?
- ([\d_\.]+)
- \s* ;
- /ixms
- ) {
- my $perl_version = $1;
- $perl_version =~ s{_}{}g;
- return $perl_version;
- } else {
- return;
- }
-}
-
-sub perl_version_from {
- my $self = shift;
- my $perl_version=_extract_perl_version(Module::Install::_read($_[0]));
- if ($perl_version) {
- $self->perl_version($perl_version);
- } else {
- warn "Cannot determine perl version info from $_[0]\n";
- return;
- }
-}
-
-sub author_from {
- my $self = shift;
- my $content = Module::Install::_read($_[0]);
- if ($content =~ m/
- =head \d \s+ (?:authors?)\b \s*
- ([^\n]*)
- |
- =head \d \s+ (?:licen[cs]e|licensing|copyright|legal)\b \s*
- .*? copyright .*? \d\d\d[\d.]+ \s* (?:\bby\b)? \s*
- ([^\n]*)
- /ixms) {
- my $author = $1 || $2;
-
- # XXX: ugly but should work anyway...
- if (eval "require Pod::Escapes; 1") {
- # Pod::Escapes has a mapping table.
- # It's in core of perl >= 5.9.3, and should be installed
- # as one of the Pod::Simple's prereqs, which is a prereq
- # of Pod::Text 3.x (see also below).
- $author =~ s{ E<( (\d+) | ([A-Za-z]+) )> }
- {
- defined $2
- ? chr($2)
- : defined $Pod::Escapes::Name2character_number{$1}
- ? chr($Pod::Escapes::Name2character_number{$1})
- : do {
- warn "Unknown escape: E<$1>";
- "E<$1>";
- };
- }gex;
- }
- elsif (eval "require Pod::Text; 1" && $Pod::Text::VERSION < 3) {
- # Pod::Text < 3.0 has yet another mapping table,
- # though the table name of 2.x and 1.x are different.
- # (1.x is in core of Perl < 5.6, 2.x is in core of
- # Perl < 5.9.3)
- my $mapping = ($Pod::Text::VERSION < 2)
- ? \%Pod::Text::HTML_Escapes
- : \%Pod::Text::ESCAPES;
- $author =~ s{ E<( (\d+) | ([A-Za-z]+) )> }
- {
- defined $2
- ? chr($2)
- : defined $mapping->{$1}
- ? $mapping->{$1}
- : do {
- warn "Unknown escape: E<$1>";
- "E<$1>";
- };
- }gex;
- }
- else {
- $author =~ s{E<lt>}{<}g;
- $author =~ s{E<gt>}{>}g;
- }
- $self->author($author);
- } else {
- warn "Cannot determine author info from $_[0]\n";
- }
-}
-
-#Stolen from M::B
-my %license_urls = (
- perl => 'http://dev.perl.org/licenses/',
- apache => 'http://apache.org/licenses/LICENSE-2.0',
- apache_1_1 => 'http://apache.org/licenses/LICENSE-1.1',
- artistic => 'http://opensource.org/licenses/artistic-license.php',
- artistic_2 => 'http://opensource.org/licenses/artistic-license-2.0.php',
- lgpl => 'http://opensource.org/licenses/lgpl-license.php',
- lgpl2 => 'http://opensource.org/licenses/lgpl-2.1.php',
- lgpl3 => 'http://opensource.org/licenses/lgpl-3.0.html',
- bsd => 'http://opensource.org/licenses/bsd-license.php',
- gpl => 'http://opensource.org/licenses/gpl-license.php',
- gpl2 => 'http://opensource.org/licenses/gpl-2.0.php',
- gpl3 => 'http://opensource.org/licenses/gpl-3.0.html',
- mit => 'http://opensource.org/licenses/mit-license.php',
- mozilla => 'http://opensource.org/licenses/mozilla1.1.php',
- open_source => undef,
- unrestricted => undef,
- restrictive => undef,
- unknown => undef,
-);
-
-sub license {
- my $self = shift;
- return $self->{values}->{license} unless @_;
- my $license = shift or die(
- 'Did not provide a value to license()'
- );
- $license = __extract_license($license) || lc $license;
- $self->{values}->{license} = $license;
-
- # Automatically fill in license URLs
- if ( $license_urls{$license} ) {
- $self->resources( license => $license_urls{$license} );
- }
-
- return 1;
-}
-
-sub _extract_license {
- my $pod = shift;
- my $matched;
- return __extract_license(
- ($matched) = $pod =~ m/
- (=head \d \s+ L(?i:ICEN[CS]E|ICENSING)\b.*?)
- (=head \d.*|=cut.*|)\z
- /xms
- ) || __extract_license(
- ($matched) = $pod =~ m/
- (=head \d \s+ (?:C(?i:OPYRIGHTS?)|L(?i:EGAL))\b.*?)
- (=head \d.*|=cut.*|)\z
- /xms
- );
-}
-
-sub __extract_license {
- my $license_text = shift or return;
- my @phrases = (
- '(?:under )?the same (?:terms|license) as (?:perl|the perl (?:\d )?programming language)' => 'perl', 1,
- '(?:under )?the terms of (?:perl|the perl programming language) itself' => 'perl', 1,
- 'Artistic and GPL' => 'perl', 1,
- 'GNU general public license' => 'gpl', 1,
- 'GNU public license' => 'gpl', 1,
- 'GNU lesser general public license' => 'lgpl', 1,
- 'GNU lesser public license' => 'lgpl', 1,
- 'GNU library general public license' => 'lgpl', 1,
- 'GNU library public license' => 'lgpl', 1,
- 'GNU Free Documentation license' => 'unrestricted', 1,
- 'GNU Affero General Public License' => 'open_source', 1,
- '(?:Free)?BSD license' => 'bsd', 1,
- 'Artistic license 2\.0' => 'artistic_2', 1,
- 'Artistic license' => 'artistic', 1,
- 'Apache (?:Software )?license' => 'apache', 1,
- 'GPL' => 'gpl', 1,
- 'LGPL' => 'lgpl', 1,
- 'BSD' => 'bsd', 1,
- 'Artistic' => 'artistic', 1,
- 'MIT' => 'mit', 1,
- 'Mozilla Public License' => 'mozilla', 1,
- 'Q Public License' => 'open_source', 1,
- 'OpenSSL License' => 'unrestricted', 1,
- 'SSLeay License' => 'unrestricted', 1,
- 'zlib License' => 'open_source', 1,
- 'proprietary' => 'proprietary', 0,
- );
- while ( my ($pattern, $license, $osi) = splice(@phrases, 0, 3) ) {
- $pattern =~ s#\s+#\\s+#gs;
- if ( $license_text =~ /\b$pattern\b/i ) {
- return $license;
- }
- }
- return '';
-}
-
-sub license_from {
- my $self = shift;
- if (my $license=_extract_license(Module::Install::_read($_[0]))) {
- $self->license($license);
- } else {
- warn "Cannot determine license info from $_[0]\n";
- return 'unknown';
- }
-}
-
-sub _extract_bugtracker {
- my @links = $_[0] =~ m#L<(
- https?\Q://rt.cpan.org/\E[^>]+|
- https?\Q://github.com/\E[\w_]+/[\w_]+/issues|
- https?\Q://code.google.com/p/\E[\w_\-]+/issues/list
- )>#gx;
- my %links;
- @links{@links}=();
- @links=keys %links;
- return @links;
-}
-
-sub bugtracker_from {
- my $self = shift;
- my $content = Module::Install::_read($_[0]);
- my @links = _extract_bugtracker($content);
- unless ( @links ) {
- warn "Cannot determine bugtracker info from $_[0]\n";
- return 0;
- }
- if ( @links > 1 ) {
- warn "Found more than one bugtracker link in $_[0]\n";
- return 0;
- }
-
- # Set the bugtracker
- bugtracker( $links[0] );
- return 1;
-}
-
-sub requires_from {
- my $self = shift;
- my $content = Module::Install::_readperl($_[0]);
- my @requires = $content =~ m/^use\s+([^\W\d]\w*(?:::\w+)*)\s+(v?[\d\.]+)/mg;
- while ( @requires ) {
- my $module = shift @requires;
- my $version = shift @requires;
- $self->requires( $module => $version );
- }
-}
-
-sub test_requires_from {
- my $self = shift;
- my $content = Module::Install::_readperl($_[0]);
- my @requires = $content =~ m/^use\s+([^\W\d]\w*(?:::\w+)*)\s+([\d\.]+)/mg;
- while ( @requires ) {
- my $module = shift @requires;
- my $version = shift @requires;
- $self->test_requires( $module => $version );
- }
-}
-
-# Convert triple-part versions (eg, 5.6.1 or 5.8.9) to
-# numbers (eg, 5.006001 or 5.008009).
-# Also, convert double-part versions (eg, 5.8)
-sub _perl_version {
- my $v = $_[-1];
- $v =~ s/^([1-9])\.([1-9]\d?\d?)$/sprintf("%d.%03d",$1,$2)/e;
- $v =~ s/^([1-9])\.([1-9]\d?\d?)\.(0|[1-9]\d?\d?)$/sprintf("%d.%03d%03d",$1,$2,$3 || 0)/e;
- $v =~ s/(\.\d\d\d)000$/$1/;
- $v =~ s/_.+$//;
- if ( ref($v) ) {
- # Numify
- $v = $v + 0;
- }
- return $v;
-}
-
-sub add_metadata {
- my $self = shift;
- my %hash = @_;
- for my $key (keys %hash) {
- warn "add_metadata: $key is not prefixed with 'x_'.\n" .
- "Use appopriate function to add non-private metadata.\n" unless $key =~ /^x_/;
- $self->{values}->{$key} = $hash{$key};
- }
-}
-
-
-######################################################################
-# MYMETA Support
-
-sub WriteMyMeta {
- die "WriteMyMeta has been deprecated";
-}
-
-sub write_mymeta_yaml {
- my $self = shift;
-
- # We need YAML::Tiny to write the MYMETA.yml file
- unless ( eval { require YAML::Tiny; 1; } ) {
- return 1;
- }
-
- # Generate the data
- my $meta = $self->_write_mymeta_data or return 1;
-
- # Save as the MYMETA.yml file
- print "Writing MYMETA.yml\n";
- YAML::Tiny::DumpFile('MYMETA.yml', $meta);
-}
-
-sub write_mymeta_json {
- my $self = shift;
-
- # We need JSON to write the MYMETA.json file
- unless ( eval { require JSON; 1; } ) {
- return 1;
- }
-
- # Generate the data
- my $meta = $self->_write_mymeta_data or return 1;
-
- # Save as the MYMETA.yml file
- print "Writing MYMETA.json\n";
- Module::Install::_write(
- 'MYMETA.json',
- JSON->new->pretty(1)->canonical->encode($meta),
- );
-}
-
-sub _write_mymeta_data {
- my $self = shift;
-
- # If there's no existing META.yml there is nothing we can do
- return undef unless -f 'META.yml';
-
- # We need Parse::CPAN::Meta to load the file
- unless ( eval { require Parse::CPAN::Meta; 1; } ) {
- return undef;
- }
-
- # Merge the perl version into the dependencies
- my $val = $self->Meta->{values};
- my $perl = delete $val->{perl_version};
- if ( $perl ) {
- $val->{requires} ||= [];
- my $requires = $val->{requires};
-
- # Canonize to three-dot version after Perl 5.6
- if ( $perl >= 5.006 ) {
- $perl =~ s{^(\d+)\.(\d\d\d)(\d*)}{join('.', $1, int($2||0), int($3||0))}e
- }
- unshift @$requires, [ perl => $perl ];
- }
-
- # Load the advisory META.yml file
- my @yaml = Parse::CPAN::Meta::LoadFile('META.yml');
- my $meta = $yaml[0];
-
- # Overwrite the non-configure dependency hashes
- delete $meta->{requires};
- delete $meta->{build_requires};
- delete $meta->{recommends};
- if ( exists $val->{requires} ) {
- $meta->{requires} = { map { @$_ } @{ $val->{requires} } };
- }
- if ( exists $val->{build_requires} ) {
- $meta->{build_requires} = { map { @$_ } @{ $val->{build_requires} } };
- }
-
- return $meta;
-}
-
-1;
diff --git a/inc/Module/Install/Win32.pm b/inc/Module/Install/Win32.pm
deleted file mode 100644
index f7aa615..0000000
--- a/inc/Module/Install/Win32.pm
+++ /dev/null
@@ -1,64 +0,0 @@
-#line 1
-package Module::Install::Win32;
-
-use strict;
-use Module::Install::Base ();
-
-use vars qw{$VERSION @ISA $ISCORE};
-BEGIN {
- $VERSION = '1.19';
- @ISA = 'Module::Install::Base';
- $ISCORE = 1;
-}
-
-# determine if the user needs nmake, and download it if needed
-sub check_nmake {
- my $self = shift;
- $self->load('can_run');
- $self->load('get_file');
-
- require Config;
- return unless (
- $^O eq 'MSWin32' and
- $Config::Config{make} and
- $Config::Config{make} =~ /^nmake\b/i and
- ! $self->can_run('nmake')
- );
-
- print "The required 'nmake' executable not found, fetching it...\n";
-
- require File::Basename;
- my $rv = $self->get_file(
- url => 'http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe',
- ftp_url => 'ftp://ftp.microsoft.com/Softlib/MSLFILES/Nmake15.exe',
- local_dir => File::Basename::dirname($^X),
- size => 51928,
- run => 'Nmake15.exe /o > nul',
- check_for => 'Nmake.exe',
- remove => 1,
- );
-
- die <<'END_MESSAGE' unless $rv;
-
--------------------------------------------------------------------------------
-
-Since you are using Microsoft Windows, you will need the 'nmake' utility
-before installation. It's available at:
-
- http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe
- or
- ftp://ftp.microsoft.com/Softlib/MSLFILES/Nmake15.exe
-
-Please download the file manually, save it to a directory in %PATH% (e.g.
-C:\WINDOWS\COMMAND\), then launch the MS-DOS command line shell, "cd" to
-that directory, and run "Nmake15.exe" from there; that will create the
-'nmake.exe' file needed by this module.
-
-You may then resume the installation process described in README.
-
--------------------------------------------------------------------------------
-END_MESSAGE
-
-}
-
-1;
diff --git a/inc/Module/Install/WriteAll.pm b/inc/Module/Install/WriteAll.pm
deleted file mode 100644
index 2db861a..0000000
--- a/inc/Module/Install/WriteAll.pm
+++ /dev/null
@@ -1,63 +0,0 @@
-#line 1
-package Module::Install::WriteAll;
-
-use strict;
-use Module::Install::Base ();
-
-use vars qw{$VERSION @ISA $ISCORE};
-BEGIN {
- $VERSION = '1.19';
- @ISA = qw{Module::Install::Base};
- $ISCORE = 1;
-}
-
-sub WriteAll {
- my $self = shift;
- my %args = (
- meta => 1,
- sign => 0,
- inline => 0,
- check_nmake => 1,
- @_,
- );
-
- $self->sign(1) if $args{sign};
- $self->admin->WriteAll(%args) if $self->is_admin;
-
- $self->check_nmake if $args{check_nmake};
- unless ( $self->makemaker_args->{PL_FILES} ) {
- # XXX: This still may be a bit over-defensive...
- unless ($self->makemaker(6.25)) {
- $self->makemaker_args( PL_FILES => {} ) if -f 'Build.PL';
- }
- }
-
- # Until ExtUtils::MakeMaker support MYMETA.yml, make sure
- # we clean it up properly ourself.
- $self->realclean_files('MYMETA.yml');
-
- if ( $args{inline} ) {
- $self->Inline->write;
- } else {
- $self->Makefile->write;
- }
-
- # The Makefile write process adds a couple of dependencies,
- # so write the META.yml files after the Makefile.
- if ( $args{meta} ) {
- $self->Meta->write;
- }
-
- # Experimental support for MYMETA
- if ( $ENV{X_MYMETA} ) {
- if ( $ENV{X_MYMETA} eq 'JSON' ) {
- $self->Meta->write_mymeta_json;
- } else {
- $self->Meta->write_mymeta_yaml;
- }
- }
-
- return 1;
-}
-
-1;
diff --git a/inc/Module/Install/XSUtil.pm b/inc/Module/Install/XSUtil.pm
deleted file mode 100644
index b11e6ef..0000000
--- a/inc/Module/Install/XSUtil.pm
+++ /dev/null
@@ -1,819 +0,0 @@
-#line 1
-package Module::Install::XSUtil;
-
-use 5.005_03;
-
-$VERSION = '0.45';
-
-use Module::Install::Base;
-@ISA = qw(Module::Install::Base);
-
-use strict;
-
-use Config;
-
-use File::Spec;
-use File::Find;
-
-use constant _VERBOSE => $ENV{MI_VERBOSE} ? 1 : 0;
-
-my %ConfigureRequires = (
- 'ExtUtils::ParseXS' => 3.18, # shipped with Perl 5.18.0
-);
-
-my %BuildRequires = (
-);
-
-my %Requires = (
- 'XSLoader' => 0.02,
-);
-
-my %ToInstall;
-
-my $UseC99 = 0;
-my $UseCplusplus = 0;
-
-sub _verbose{
- print STDERR q{# }, @_, "\n";
-}
-
-sub _xs_debugging{
- return $ENV{XS_DEBUG} || scalar( grep{ $_ eq '-g' } @ARGV );
-}
-
-sub _xs_initialize{
- my($self) = @_;
-
- unless($self->{xsu_initialized}){
- $self->{xsu_initialized} = 1;
-
- if(!$self->cc_available()){
- warn "This distribution requires a C compiler, but it's not available, stopped.\n";
- exit;
- }
-
- $self->configure_requires(%ConfigureRequires);
- $self->build_requires(%BuildRequires);
- $self->requires(%Requires);
-
- $self->makemaker_args->{OBJECT} = '$(O_FILES)';
- $self->clean_files('$(O_FILES)');
- $self->clean_files('*.stackdump') if $^O eq 'cygwin';
-
- if($self->_xs_debugging()){
- # override $Config{optimize}
- if(_is_msvc()){
- $self->makemaker_args->{OPTIMIZE} = '-Zi';
- }
- else{
- $self->makemaker_args->{OPTIMIZE} = '-g -ggdb -g3';
- }
- $self->cc_define('-DXS_ASSERT');
- }
- }
- return;
-}
-
-# GNU C Compiler
-sub _is_gcc{
- return $Config{gccversion};
-}
-
-# Microsoft Visual C++ Compiler (cl.exe)
-sub _is_msvc{
- return $Config{cc} =~ /\A cl \b /xmsi;
-}
-
-{
- my $cc_available;
-
- sub cc_available {
- return defined $cc_available ?
- $cc_available :
- ($cc_available = shift->can_cc())
- ;
- }
-
- # cf. https://github.com/sjn/toolchain-site/blob/219db464af9b2f19b04fec05547ac10180a469f3/lancaster-consensus.md
- my $want_xs;
- sub want_xs {
- my($self, $default) = @_;
- return $want_xs if defined $want_xs;
-
- # you're using this module, you must want XS by default
- # unless PERL_ONLY is true.
- $default = !$ENV{PERL_ONLY} if not defined $default;
-
- foreach my $arg(@ARGV){
-
- my ($k, $v) = split '=', $arg; # MM-style named args
- if ($k eq 'PUREPERL_ONLY' && defined $v) {
- return $want_xs = !$v;
- }
- elsif($arg eq '--pp'){ # old-style
- return $want_xs = 0;
- }
- elsif($arg eq '--xs'){
- return $want_xs = 1;
- }
- }
-
- if ($ENV{PERL_MM_OPT}) {
- my($v) = $ENV{PERL_MM_OPT} =~ /\b PUREPERL_ONLY = (\S+) /xms;
- if (defined $v) {
- return $want_xs = !$v;
- }
- }
-
- return $want_xs = $default;
- }
-}
-
-sub use_ppport{
- my($self, $dppp_version) = @_;
- return if $self->{_ppport_ok}++;
-
- $self->_xs_initialize();
-
- my $filename = 'ppport.h';
-
- $dppp_version ||= 3.19; # the more, the better
- $self->configure_requires('Devel::PPPort' => $dppp_version);
- $self->build_requires('Devel::PPPort' => $dppp_version);
-
- print "Writing $filename\n";
-
- my $e = do{
- local $@;
- eval qq{
- use Devel::PPPort;
- Devel::PPPort::WriteFile(q{$filename});
- };
- $@;
- };
- if($e){
- print "Cannot create $filename because: $@\n";
- }
-
- if(-e $filename){
- $self->clean_files($filename);
- $self->cc_define('-DUSE_PPPORT');
- $self->cc_append_to_inc('.');
- }
- return;
-}
-
-sub use_xshelper {
- my($self, $opt) = @_;
- $self->_xs_initialize();
- $self->use_ppport();
-
- my $file = 'xshelper.h';
- open my $fh, '>', $file or die "Cannot open $file for writing: $!";
- print $fh $self->_xshelper_h();
- close $fh or die "Cannot close $file: $!";
- if(defined $opt) {
- if($opt eq '-clean') {
- $self->clean_files($file);
- }
- else {
- $self->realclean_files($file);
- }
- }
- return;
-}
-
-sub _gccversion {
- my $res = `$Config{cc} --version`;
- my ($version) = $res =~ /\(GCC\) ([0-9.]+)/;
- no warnings 'numeric', 'uninitialized';
- return sprintf '%g', $version;
-}
-
-sub cc_warnings{
- my($self) = @_;
-
- $self->_xs_initialize();
-
- if(_is_gcc()){
- $self->cc_append_to_ccflags(qw(-Wall));
-
- my $gccversion = _gccversion();
- if($gccversion >= 4.0){
- $self->cc_append_to_ccflags(qw(-Wextra));
- if(!($UseC99 or $UseCplusplus)) {
- # Note: MSVC++ doesn't support C99,
- # so -Wdeclaration-after-statement helps
- # ensure C89 specs.
- $self->cc_append_to_ccflags(qw(-Wdeclaration-after-statement));
- }
- if($gccversion >= 4.1 && !$UseCplusplus) {
- $self->cc_append_to_ccflags(qw(-Wc++-compat));
- }
- }
- else{
- $self->cc_append_to_ccflags(qw(-W -Wno-comment));
- }
- }
- elsif(_is_msvc()){
- $self->cc_append_to_ccflags(qw(-W3));
- }
- else{
- # TODO: support other compilers
- }
-
- return;
-}
-
-sub c99_available {
- my($self) = @_;
-
- return 0 if not $self->cc_available();
-
- require File::Temp;
- require File::Basename;
-
- my $tmpfile = File::Temp->new(SUFFIX => '.c');
-
- $tmpfile->print(<<'C99');
-// include a C99 header
-#include <stdbool.h>
-inline // a C99 keyword with C99 style comments
-int test_c99() {
- int i = 0;
- i++;
- int j = i - 1; // another C99 feature: declaration after statement
- return j;
-}
-C99
-
- $tmpfile->close();
-
- system "$Config{cc} -c " . $tmpfile->filename;
-
- (my $objname = File::Basename::basename($tmpfile->filename)) =~ s/\Q.c\E$/$Config{_o}/;
- unlink $objname or warn "Cannot unlink $objname (ignored): $!";
-
- return $? == 0;
-}
-
-sub requires_c99 {
- my($self) = @_;
- if(!$self->c99_available) {
- warn "This distribution requires a C99 compiler, but $Config{cc} seems not to support C99, stopped.\n";
- exit;
- }
- $self->_xs_initialize();
- $UseC99 = 1;
- return;
-}
-
-sub requires_cplusplus {
- my($self) = @_;
- if(!$self->cc_available) {
- warn "This distribution requires a C++ compiler, but $Config{cc} seems not to support C++, stopped.\n";
- exit;
- }
- $self->_xs_initialize();
- $UseCplusplus = 1;
- return;
-}
-
-sub cc_append_to_inc{
- my($self, @dirs) = @_;
-
- $self->_xs_initialize();
-
- for my $dir(@dirs){
- unless(-d $dir){
- warn("'$dir' not found: $!\n");
- }
-
- _verbose "inc: -I$dir" if _VERBOSE;
- }
-
- my $mm = $self->makemaker_args;
- my $paths = join q{ }, map{ s{\\}{\\\\}g; qq{"-I$_"} } @dirs;
-
- if($mm->{INC}){
- $mm->{INC} .= q{ } . $paths;
- }
- else{
- $mm->{INC} = $paths;
- }
- return;
-}
-
-sub cc_libs {
- my ($self, @libs) = @_;
-
- @libs = map{
- my($name, $dir) = ref($_) eq 'ARRAY' ? @{$_} : ($_, undef);
- my $lib;
- if(defined $dir) {
- $lib = ($dir =~ /^-/ ? qq{$dir } : qq{-L$dir });
- }
- else {
- $lib = '';
- }
- $lib .= ($name =~ /^-/ ? qq{$name} : qq{-l$name});
- _verbose "libs: $lib" if _VERBOSE;
- $lib;
- } @libs;
-
- $self->cc_append_to_libs( @libs );
-}
-
-sub cc_append_to_libs{
- my($self, @libs) = @_;
-
- $self->_xs_initialize();
-
- return unless @libs;
-
- my $libs = join q{ }, @libs;
-
- my $mm = $self->makemaker_args;
-
- if ($mm->{LIBS}){
- $mm->{LIBS} .= q{ } . $libs;
- }
- else{
- $mm->{LIBS} = $libs;
- }
- return $libs;
-}
-
-sub cc_assert_lib {
- my ($self, @dcl_args) = @_;
-
- if ( ! $self->{xsu_loaded_checklib} ) {
- my $loaded_lib = 0;
- foreach my $checklib (qw(inc::Devel::CheckLib Devel::CheckLib)) {
- eval "use $checklib 0.4";
- if (!$@) {
- $loaded_lib = 1;
- last;
- }
- }
-
- if (! $loaded_lib) {
- warn "Devel::CheckLib not found in inc/ nor \@INC";
- exit 0;
- }
-
- $self->{xsu_loaded_checklib}++;
- $self->configure_requires( "Devel::CheckLib" => "0.4" );
- $self->build_requires( "Devel::CheckLib" => "0.4" );
- }
-
- Devel::CheckLib::check_lib_or_exit(@dcl_args);
-}
-
-sub cc_append_to_ccflags{
- my($self, @ccflags) = @_;
-
- $self->_xs_initialize();
-
- my $mm = $self->makemaker_args;
-
- $mm->{CCFLAGS} ||= $Config{ccflags};
- $mm->{CCFLAGS} .= q{ } . join q{ }, @ccflags;
- return;
-}
-
-sub cc_define{
- my($self, @defines) = @_;
-
- $self->_xs_initialize();
-
- my $mm = $self->makemaker_args;
- if(exists $mm->{DEFINE}){
- $mm->{DEFINE} .= q{ } . join q{ }, @defines;
- }
- else{
- $mm->{DEFINE} = join q{ }, @defines;
- }
- return;
-}
-
-sub requires_xs_module {
- my $self = shift;
-
- return $self->requires() unless @_;
-
- $self->_xs_initialize();
-
- my %added = $self->requires(@_);
- my(@inc, @libs);
-
- my $rx_lib = qr{ \. (?: lib | a) \z}xmsi;
- my $rx_dll = qr{ \. dll \z}xmsi; # for Cygwin
-
- while(my $module = each %added){
- my $mod_basedir = File::Spec->join(split /::/, $module);
- my $rx_header = qr{\A ( .+ \Q$mod_basedir\E ) .+ \. h(?:pp)? \z}xmsi;
-
- SCAN_INC: foreach my $inc_dir(@INC){
- my @dirs = grep{ -e } File::Spec->join($inc_dir, 'auto', $mod_basedir), File::Spec->join($inc_dir, $mod_basedir);
-
- next SCAN_INC unless @dirs;
-
- my $n_inc = scalar @inc;
- find(sub{
- if(my($incdir) = $File::Find::name =~ $rx_header){
- push @inc, $incdir;
- }
- elsif($File::Find::name =~ $rx_lib){
- my($libname) = $_ =~ /\A (?:lib)? (\w+) /xmsi;
- push @libs, [$libname, $File::Find::dir];
- }
- elsif($File::Find::name =~ $rx_dll){
- # XXX: hack for Cygwin
- my $mm = $self->makemaker_args;
- $mm->{macro}->{PERL_ARCHIVE_AFTER} ||= '';
- $mm->{macro}->{PERL_ARCHIVE_AFTER} .= ' ' . $File::Find::name;
- }
- }, @dirs);
-
- if($n_inc != scalar @inc){
- last SCAN_INC;
- }
- }
- }
-
- my %uniq = ();
- $self->cc_append_to_inc (grep{ !$uniq{ $_ }++ } @inc);
-
- %uniq = ();
- $self->cc_libs(grep{ !$uniq{ $_->[0] }++ } @libs);
-
- return %added;
-}
-
-sub cc_src_paths{
- my($self, @dirs) = @_;
-
- $self->_xs_initialize();
-
- return unless @dirs;
-
- my $mm = $self->makemaker_args;
-
- my $XS_ref = $mm->{XS} ||= {};
- my $C_ref = $mm->{C} ||= [];
-
- my $_obj = $Config{_o};
-
- my @src_files;
- find(sub{
- if(/ \. (?: xs | c (?: c | pp | xx )? ) \z/xmsi){ # *.{xs, c, cc, cpp, cxx}
- push @src_files, $File::Find::name;
- }
- }, @dirs);
-
- my $xs_to = $UseCplusplus ? '.cpp' : '.c';
- foreach my $src_file(@src_files){
- my $c = $src_file;
- if($c =~ s/ \.xs \z/$xs_to/xms){
- $XS_ref->{$src_file} = $c;
-
- _verbose "xs: $src_file" if _VERBOSE;
- }
- else{
- _verbose "c: $c" if _VERBOSE;
- }
-
- push @{$C_ref}, $c unless grep{ $_ eq $c } @{$C_ref};
- }
-
- $self->clean_files(map{
- File::Spec->catfile($_, '*.gcov'),
- File::Spec->catfile($_, '*.gcda'),
- File::Spec->catfile($_, '*.gcno'),
- } @dirs);
- $self->cc_append_to_inc('.');
-
- return;
-}
-
-sub cc_include_paths{
- my($self, @dirs) = @_;
-
- $self->_xs_initialize();
-
- push @{ $self->{xsu_include_paths} ||= []}, @dirs;
-
- my $h_map = $self->{xsu_header_map} ||= {};
-
- foreach my $dir(@dirs){
- my $prefix = quotemeta( File::Spec->catfile($dir, '') );
- find(sub{
- return unless / \.h(?:pp)? \z/xms;
-
- (my $h_file = $File::Find::name) =~ s/ \A $prefix //xms;
- $h_map->{$h_file} = $File::Find::name;
- }, $dir);
- }
-
- $self->cc_append_to_inc(@dirs);
-
- return;
-}
-
-sub install_headers{
- my $self = shift;
- my $h_files;
- if(@_ == 0){
- $h_files = $self->{xsu_header_map} or die "install_headers: cc_include_paths not specified.\n";
- }
- elsif(@_ == 1 && ref($_[0]) eq 'HASH'){
- $h_files = $_[0];
- }
- else{
- $h_files = +{ map{ $_ => undef } @_ };
- }
-
- $self->_xs_initialize();
-
- my @not_found;
- my $h_map = $self->{xsu_header_map} || {};
-
- while(my($ident, $path) = each %{$h_files}){
- $path ||= $h_map->{$ident} || File::Spec->join('.', $ident);
- $path = File::Spec->canonpath($path);
-
- unless($path && -e $path){
- push @not_found, $ident;
- next;
- }
-
- $ToInstall{$path} = File::Spec->join('$(INST_ARCHAUTODIR)', $ident);
-
- _verbose "install: $path as $ident" if _VERBOSE;
- my @funcs = $self->_extract_functions_from_header_file($path);
- if(@funcs){
- $self->cc_append_to_funclist(@funcs);
- }
- }
-
- if(@not_found){
- die "Header file(s) not found: @not_found\n";
- }
-
- return;
-}
-
-my $home_directory;
-
-sub _extract_functions_from_header_file{
- my($self, $h_file) = @_;
-
- my @functions;
-
- ($home_directory) = <~> unless defined $home_directory;
-
- # get header file contents through cpp(1)
- my $contents = do {
- my $mm = $self->makemaker_args;
-
- my $cppflags = q{"-I}. File::Spec->join($Config{archlib}, 'CORE') . q{"};
- $cppflags =~ s/~/$home_directory/g;
-
- $cppflags .= ' ' . $mm->{INC} if $mm->{INC};
-
- $cppflags .= ' ' . ($mm->{CCFLAGS} || $Config{ccflags});
- $cppflags .= ' ' . $mm->{DEFINE} if $mm->{DEFINE};
-
- my $add_include = _is_msvc() ? '-FI' : '-include';
- $cppflags .= ' ' . join ' ',
- map{ qq{$add_include "$_"} } qw(EXTERN.h perl.h XSUB.h);
-
- my $cppcmd = qq{$Config{cpprun} $cppflags $h_file};
- # remove all the -arch options to workaround gcc errors:
- # "-E, -S, -save-temps and -M options are not allowed
- # with multiple -arch flags"
- $cppcmd =~ s/ -arch \s* \S+ //xmsg;
- _verbose("extract functions from: $cppcmd") if _VERBOSE;
- `$cppcmd`;
- };
-
- unless(defined $contents){
- die "Cannot call C pre-processor ($Config{cpprun}): $! ($?)";
- }
-
- # remove other include file contents
- my $chfile = q/\# (?:line)? \s+ \d+ /;
- $contents =~ s{
- ^$chfile \s+ (?!"\Q$h_file\E")
- .*?
- ^(?= $chfile)
- }{}xmsig;
-
- if(_VERBOSE){
- local *H;
- open H, "> $h_file.out"
- and print H $contents
- and close H;
- }
-
- while($contents =~ m{
- ([^\\;\s]+ # type
- \s+
- ([a-zA-Z_][a-zA-Z0-9_]*) # function name
- \s*
- \( [^;#]* \) # argument list
- [\w\s\(\)]* # attributes or something
- ;) # end of declaration
- }xmsg){
- my $decl = $1;
- my $name = $2;
-
- next if $decl =~ /\b typedef \b/xms;
- next if $name =~ /^_/xms; # skip something private
-
- push @functions, $name;
-
- if(_VERBOSE){
- $decl =~ tr/\n\r\t / /s;
- $decl =~ s/ (\Q$name\E) /<$name>/xms;
- _verbose("decl: $decl");
- }
- }
-
- return @functions;
-}
-
-
-sub cc_append_to_funclist{
- my($self, @functions) = @_;
-
- $self->_xs_initialize();
-
- my $mm = $self->makemaker_args;
-
- push @{$mm->{FUNCLIST} ||= []}, @functions;
- $mm->{DL_FUNCS} ||= { '$(NAME)' => [] };
-
- return;
-}
-
-sub _xshelper_h {
- my $h = <<'XSHELPER_H';
-:/* THIS FILE IS AUTOMATICALLY GENERATED BY Module::Install::XSUtil $VERSION. */
-:/*
-:=head1 NAME
-:
-:xshelper.h - Helper C header file for XS modules
-:
-:=head1 DESCRIPTION
-:
-: // This includes all the perl header files and ppport.h
-: #include "xshelper.h"
-:
-:=head1 SEE ALSO
-:
-:L<Module::Install::XSUtil>, where this file is distributed as a part of
-:
-:=head1 AUTHOR
-:
-:Fuji, Goro (gfx) E<lt>gfuji at cpan.orgE<gt>
-:
-:=head1 LISENCE
-:
-:Copyright (c) 2010, Fuji, Goro (gfx). All rights reserved.
-:
-:This library is free software; you can redistribute it and/or modify
-:it under the same terms as Perl itself.
-:
-:=cut
-:*/
-:
-:#ifdef __cplusplus
-:extern "C" {
-:#endif
-:
-:#define PERL_NO_GET_CONTEXT /* we want efficiency */
-:#include <EXTERN.h>
-:#include <perl.h>
-:#define NO_XSLOCKS /* for exceptions */
-:#include <XSUB.h>
-:
-:#ifdef __cplusplus
-:} /* extern "C" */
-:#endif
-:
-:#include "ppport.h"
-:
-:/* portability stuff not supported by ppport.h yet */
-:
-:#ifndef STATIC_INLINE /* from 5.13.4 */
-:# if defined(__GNUC__) || defined(__cplusplus) || (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))
-:# define STATIC_INLINE static inline
-:# else
-:# define STATIC_INLINE static
-:# endif
-:#endif /* STATIC_INLINE */
-:
-:#ifndef __attribute__format__
-:#define __attribute__format__(a,b,c) /* nothing */
-:#endif
-:
-:#ifndef LIKELY /* they are just a compiler's hint */
-:#define LIKELY(x) (!!(x))
-:#define UNLIKELY(x) (!!(x))
-:#endif
-:
-:#ifndef newSVpvs_share
-:#define newSVpvs_share(s) Perl_newSVpvn_share(aTHX_ STR_WITH_LEN(s), 0U)
-:#endif
-:
-:#ifndef get_cvs
-:#define get_cvs(name, flags) get_cv(name, flags)
-:#endif
-:
-:#ifndef GvNAME_get
-:#define GvNAME_get GvNAME
-:#endif
-:#ifndef GvNAMELEN_get
-:#define GvNAMELEN_get GvNAMELEN
-:#endif
-:
-:#ifndef CvGV_set
-:#define CvGV_set(cv, gv) (CvGV(cv) = (gv))
-:#endif
-:
-:/* general utility */
-:
-:#if PERL_BCDVERSION >= 0x5008005
-:#define LooksLikeNumber(x) looks_like_number(x)
-:#else
-:#define LooksLikeNumber(x) (SvPOKp(x) ? looks_like_number(x) : (I32)SvNIOKp(x))
-:#endif
-:
-:#define newAV_mortal() (AV*)sv_2mortal((SV*)newAV())
-:#define newHV_mortal() (HV*)sv_2mortal((SV*)newHV())
-:#define newRV_inc_mortal(sv) sv_2mortal(newRV_inc(sv))
-:#define newRV_noinc_mortal(sv) sv_2mortal(newRV_noinc(sv))
-:
-:#define DECL_BOOT(name) EXTERN_C XS(CAT2(boot_, name))
-:#define CALL_BOOT(name) STMT_START { \
-: PUSHMARK(SP); \
-: CALL_FPTR(CAT2(boot_, name))(aTHX_ cv); \
-: } STMT_END
-XSHELPER_H
- $h =~ s/^://xmsg;
- $h =~ s/\$VERSION\b/$Module::Install::XSUtil::VERSION/xms;
- return $h;
-}
-
-package
- MY;
-
-# XXX: We must append to PM inside ExtUtils::MakeMaker->new().
-sub init_PM {
- my $self = shift;
-
- $self->SUPER::init_PM(@_);
-
- while(my($k, $v) = each %ToInstall){
- $self->{PM}{$k} = $v;
- }
- return;
-}
-
-# append object file names to CCCMD
-sub const_cccmd {
- my $self = shift;
-
- my $cccmd = $self->SUPER::const_cccmd(@_);
- return q{} unless $cccmd;
-
- if (Module::Install::XSUtil::_is_msvc()){
- $cccmd .= ' -Fo$@';
- }
- else {
- $cccmd .= ' -o $@';
- }
-
- return $cccmd
-}
-
-sub xs_c {
- my($self) = @_;
- my $mm = $self->SUPER::xs_c();
- $mm =~ s/ \.c /.cpp/xmsg if $UseCplusplus;
- return $mm;
-}
-
-sub xs_o {
- my($self) = @_;
- my $mm = $self->SUPER::xs_o();
- $mm =~ s/ \.c /.cpp/xmsg if $UseCplusplus;
- return $mm;
-}
-
-1;
-__END__
-
-#line 1030
diff --git a/ldns/LICENSE b/ldns/LICENSE
deleted file mode 100644
index 6d4c6be..0000000
--- a/ldns/LICENSE
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright (c) 2005,2006, NLnetLabs
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * Neither the name of NLnetLabs nor the names of its
- contributors may be used to endorse or promote products derived from this
- software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
diff --git a/ldns/Makefile.in b/ldns/Makefile.in
deleted file mode 100644
index 442067d..0000000
--- a/ldns/Makefile.in
+++ /dev/null
@@ -1,1098 +0,0 @@
-# Standard installation pathnames
-# See the file LICENSE for the license
-SHELL = @SHELL@
-VERSION = @PACKAGE_VERSION@
-version_info = @VERSION_INFO@
-srcdir = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-bindir = @bindir@
-mandir = @mandir@
-datarootdir = @datarootdir@
-datadir = @datadir@
-libdir = @libdir@
-includedir = @includedir@
-sysconfdir = @sysconfdir@
-doxygen = @doxygen@
-pywrapdir = $(srcdir)/contrib/python
-pyldnsxwrapdir = $(srcdir)/contrib/ldnsx
-p5_dns_ldns_dir = $(srcdir)/contrib/DNS-LDNS
-PERL = @PERL@
-swig = @swig@
-swigpy_flags = -python @SWIGPY3@
-python_site = @PYTHON_SITE_PKG@
-pyldns_inst = @PYLDNSINST@
-pyldns_uninst = @PYLDNSUNINST@
-pyldnsx_inst = @PYLDNSXINST@
-pyldnsx_uninst = @PYLDNSXUNINST@
-libtool = @libtool@
-CONFIG_FILES = @CONFIG_FILES@
-
-LDNS_TRUST_ANCHOR_FILE = @LDNS_TRUST_ANCHOR_FILE@
-DEFAULT_CAFILE = @DEFAULT_CAFILE@
-DEFAULT_CAPATH = @DEFAULT_CAPATH@
-
-edit = sed \
- -e 's|@LDNS_TRUST_ANCHOR_FILE[@]|$(LDNS_TRUST_ANCHOR_FILE)|g' \
- -e 's|@DEFAULT_CAFILE[@]|$(DEFAULT_CAFILE)|g' \
- -e 's|@DEFAULT_CAPATH[@]|$(DEFAULT_CAPATH)|g'
-
-# override $U variable which is used by autotools for deansification (for
-# K&R C compilers), but causes problems if $U is defined in the env).
-U=
-CC = @CC@
-CFLAGS = @CFLAGS@
-CPPFLAGS = -I. -I$(srcdir) @CPPFLAGS@ @DEFS@ -DLDNS_TRUST_ANCHOR_FILE="\"$(LDNS_TRUST_ANCHOR_FILE)\""
-LDFLAGS = @LDFLAGS@
-LIBS = @LIBS@
-LIBOBJDIR = compat/
-LIBOBJS = @LIBOBJS@
-PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
-PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
-PYTHON_X_CFLAGS = @PYTHON_X_CFLAGS@
-LIBSSL_CPPFLAGS = @LIBSSL_CPPFLAGS@
-LIBSSL_LDFLAGS = @LIBSSL_LDFLAGS@
-LIBSSL_LIBS = @LIBSSL_LIBS@
-LIBSSL_SSL_LIBS = @LIBSSL_SSL_LIBS@
-LIBPCAP_LIBS = @LIBPCAP_LIBS@
-RUNTIME_PATH = @RUNTIME_PATH@
-LIBTOOL = $(libtool) --tag=CC --quiet
-LINT = splint
-LINTFLAGS = +quiet -weak -warnposix -unrecog -Din_addr_t=uint32_t -Du_int=unsigned -Du_char=uint8_t -preproc -Drlimit=rlimit64 -D__gnuc_va_list=va_list
-# Extra flags from configure
-LINTFLAGS += @LINTFLAGS@
-LINTFLAGS += "-DBN_ULONG=unsigned long" -Dkrb5_int32=int "-Dkrb5_ui_4=unsigned int" -DPQ_64BIT=uint64_t -DRC4_INT=unsigned -fixedformalarray -D"ENGINE=unsigned" -D"RSA=unsigned" -D"DSA=unsigned" -D"EVP_PKEY=unsigned" -D"EVP_MD=unsigned" -D"SSL=unsigned" -D"SSL_CTX=unsigned" -D"X509=unsigned" -D"RC4_KEY=unsigned" -D"EVP_MD_CTX=unsigned" -D"EC_KEY=unsigned" -D"EC_POINT=unsigned" -D"EC_GROUP=unsigned" -D"EVP_PKEY_ASN1_METHOD=struct evp_pkey_asn1_method_st" -D"EVP_PKEY_CTX=struct evp_pkey_ctx_st"
-# compat with OpenBSD
-LINTFLAGS += "-Dsigset_t=long"
-# FreeBSD8
-LINTFLAGS += "-D__uint16_t=uint16_t" -D"__pure2=" -D"__wchar_t=wchar_t" -D"__packed=" -D"__aligned(x)="
-# Ubuntu oneiric"
-LINTFLAGS += -D"__BEGIN_DECLS=" -D"__ssize_t=ssize_t" -D"__intptr_t=intptr_t" -D"__nonnull(x)=" -D"__THROW=" -D"__wur=" -D"__off_t=unsigned" -D"__off64_t=unsigned" -D"__useconds_t=unsigned" -D"__uid_t=unsigned" -D"__gid_t=unsigned" -D"__attribute_deprecated__=" -D"__pid_t=unsigned" -D"__restrict=" -D"__END_DECLS=" -D"__BEGIN_NAMESPACE_STD=" -D"__END_NAMESPACE_STD=" -D"__BEGIN_NAMESPACE_C99=" -D"__END_NAMESPACE_C99=" -D"__socklen_t=unsigned" -D"sa_family_t=unsigned " -D"__mode_t=unsigned" -D"u_int16_t=uint16_t" -D"u_int32_t=uint32_t" -D"u_int8_t=uint8_t" -D"u_short=unsigned short" -D"__u16=uint16_t" -D"__u32=uint32_t" -D"__u64=uint64_t"
-# FreeBSD 9
-LINTFLAGS += -D"_RuneLocale=int"
-DEPFLAG = @DEPFLAG@
-
-INSTALL = $(srcdir)/install-sh
-
-LIBLOBJS = $(LIBOBJS:.o=.lo)
-LDNS_LOBJS = buffer.lo dane.lo dname.lo dnssec.lo dnssec_sign.lo dnssec_verify.lo dnssec_zone.lo duration.lo error.lo higher.lo host2str.lo host2wire.lo keys.lo net.lo packet.lo parse.lo radix.lo rbtree.lo rdata.lo resolver.lo rr.lo rr_functions.lo sha1.lo sha2.lo str2host.lo tsig.lo update.lo util.lo wire2host.lo zone.lo
-LDNS_LOBJS_EX = ^linktest\.c$$
-LDNS_ALL_LOBJS = $(LDNS_LOBJS) $(LIBLOBJS)
-LIB = libldns.la
-
-LDNS_HEADERS = buffer.h dane.h dname.h dnssec.h dnssec_sign.h dnssec_verify.h dnssec_zone.h duration.h error.h higher.h host2str.h host2wire.h keys.h ldns.h packet.h parse.h radix.h rbtree.h rdata.h resolver.h rr_functions.h rr.h sha1.h sha2.h str2host.h tsig.h update.h wire2host.h zone.h
-LDNS_HEADERS_EX = ^config\.h|common\.h|util\.h|net\.h$$
-LDNS_HEADERS_GEN= common.h util.h net.h
-
-PYLDNS_I_FILES = $(pywrapdir)/file_py3.i $(pywrapdir)/ldns_buffer.i $(pywrapdir)/ldns_dname.i $(pywrapdir)/ldns_dnssec.i $(pywrapdir)/ldns.i $(pywrapdir)/ldns_key.i $(pywrapdir)/ldns_packet.i $(pywrapdir)/ldns_rdf.i $(pywrapdir)/ldns_resolver.i $(pywrapdir)/ldns_rr.i $(pywrapdir)/ldns_zone.i
-
-DRILL_LOBJS = drill/chasetrace.lo drill/dnssec.lo drill/drill.lo drill/drill_util.lo drill/error.lo drill/root.lo drill/securetrace.lo drill/work.lo
-
-EXAMPLE_LOBJS = examples/ldns-chaos.lo examples/ldns-compare-zones.lo examples/ldns-dane.lo examples/ldnsd.lo examples/ldns-dpa.lo examples/ldns-gen-zone.lo examples/ldns-key2ds.lo examples/ldns-keyfetcher.lo examples/ldns-keygen.lo examples/ldns-mx.lo examples/ldns-notify.lo examples/ldns-nsec3-hash.lo examples/ldns-read-zone.lo examples/ldns-resolver.lo examples/ldns-revoke.lo examples/ldns-rrsig.lo examples/ldns-signzone.lo examples/ldns-test-edns.lo examples/ldns-testns.lo examples/ldns-testpkts.lo examples/ldns-update.lo examples/ldns-verify-zone.lo examples/ldns-version.lo examples/ldns-walk.lo examples/ldns-zcat.lo examples/ldns-zsplit.lo
-EXAMPLE_PROGS = examples/ldns-chaos examples/ldns-compare-zones examples/ldnsd examples/ldns-gen-zone examples/ldns-key2ds examples/ldns-keyfetcher examples/ldns-keygen examples/ldns-mx examples/ldns-notify examples/ldns-read-zone examples/ldns-resolver examples/ldns-rrsig examples/ldns-test-edns examples/ldns-update examples/ldns-version examples/ldns-walk examples/ldns-zcat examples/ldns-zsplit
-EX_PROGS_BASENM = ldns-chaos ldns-compare-zones ldns-dane ldnsd ldns-dpa ldns-gen-zone ldns-key2ds ldns-keyfetcher ldns-keygen ldns-mx ldns-notify ldns-nsec3-hash ldns-read-zone ldns-resolver ldns-revoke ldns-rrsig ldns-signzone ldns-test-edns ldns-testns ldns-testpkts ldns-update ldns-verify-zone ldns-version ldns-walk ldns-zcat ldns-zsplit
-EXAMPLE_PROGS_EX= ^examples/ldns-testpkts\.c|examples/ldns-testns\.c|examples/ldns-dane\.c|examples/ldns-dpa\.c|examples/ldns-nsec3-hash\.c|examples/ldns-revoke\.c|examples/ldns-signzone\.c|examples/ldns-verify-zone\.c$$
-TESTNS = examples/ldns-testns
-TESTNS_LOBJS = examples/ldns-testns.lo examples/ldns-testpkts.lo
-LDNS_DPA = examples/ldns-dpa
-LDNS_DPA_LOBJS = examples/ldns-dpa.lo
-LDNS_DANE = examples/ldns-dane
-LDNS_DANE_LOBJS = examples/ldns-dane.lo
-EX_SSL_PROGS = examples/ldns-nsec3-hash examples/ldns-revoke examples/ldns-signzone examples/ldns-verify-zone
-EX_SSL_LOBJS = examples/ldns-nsec3-hash.lo examples/ldns-revoke.lo examples/ldns-signzone.lo examples/ldns-verify-zone.lo
-
-COMPILE = $(CC) $(CPPFLAGS) $(CFLAGS)
-COMP_LIB = $(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS)
-LINK = $(CC) $(CFLAGS) $(LDFLAGS) $(LIBS)
-LINK_LIB = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) $(LIBS) -version-info $(version_info) -no-undefined
-LINK_EXE = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) $(LIBSSL_LDFLAGS)
-
-.PHONY: clean realclean docclean manpages doc lint all lib pyldns test
-.PHONY: install uninstall install-doc uninstall-doc uninstall-pyldns
-.PHONY: install-h uninstall-h install-lib uninstall-lib install-pyldns
-
-all: setup-builddir lib linktest manpages @P5_DNS_LDNS@ @PYLDNS@ @DRILL@ @EXAMPLES@
-
-.SUFFIXES: .c .o .a .lo .h .i
-
-.c.lo:
- $(COMP_LIB) $(LIBSSL_CPPFLAGS) -c $< -o $@
-
-$(LDNS_LOBJS) $(LIBLOBJS) $(DRILL_LOBJS) $(EXAMPLE_LOBJS):
- $(COMP_LIB) $(LIBSSL_CPPFLAGS) -c $(srcdir)/$(@:.lo=.c) -o $@
-
-setup-builddir:
- @if test ! -d compat ; then mkdir compat ; fi
- @if test ! -d drill ; then mkdir drill ; fi
- @if test ! -d examples ; then mkdir examples ; fi
- @if test ! -h config.h ; then ln -s ldns/config.h . ; fi
- @if test ! -h lib ; then ln -s .libs lib ; fi ;
- @if test ! -d include ; then $(INSTALL) -d include; fi
- @if test ! -h include/ldns ; then ln -s ../ldns include/ldns || echo "include/ldns exists"; fi
-
-putdown-builddir:
- rm -f include/ldns lib config.h
- test ! -d include || rmdir include || :
- if test -d examples -a ! -f examples/README; then rmdir examples || : ; fi
- if test -d drill -a ! -f drill/README ; then rmdir drill || : ; fi
- if test -d compat -a ! -f compat/malloc.c; then rmdir compat || : ; fi
-
-drill: no-drill-config-h drill/drill drill/drill.1
-no-drill-config-h:
- @if test -e $(srcdir)/drill/config.h -o -e drill/config.h ; \
- then echo "A config.h was detected in the drill subdirectory." ; \
- echo "This does not work when building drill from here." ; \
- echo "Either remove the config.h from the subdirectory" ; \
- echo "or build drill there." ; \
- exit -1 ; \
- fi
-
-drill/drill: $(DRILL_LOBJS) $(LIB) $(LIBLOBJS)
- $(LINK_EXE) $(DRILL_LOBJS) $(LIBLOBJS) $(LIBS) $(LIBSSL_LIBS) -lldns -o drill/drill
-
-drill/drill.1: $(srcdir)/drill/drill.1.in
- $(edit) $(srcdir)/drill/drill.1.in > drill/drill.1
-
-install-drill: drill/drill drill/drill.1
- $(INSTALL) -m 755 -d $(DESTDIR)$(bindir)
- $(INSTALL) -m 755 -d $(DESTDIR)$(mandir)
- $(INSTALL) -m 755 -d $(DESTDIR)$(mandir)/man1
- $(LIBTOOL) --mode=install cp drill/drill $(DESTDIR)$(bindir)
- $(INSTALL) -m 644 drill/drill.1 $(DESTDIR)$(mandir)/man1/drill.1
-
-uninstall-drill:
- rm -f $(DESTDIR)$(bindir)/drill $(DESTDIR)$(mandir)/man1/drill.1
- test ! -d $(DESTDIR)$(mandir) || rmdir -p $(DESTDIR)$(mandir)/man1 || :;
- test ! -d $(DESTDIR)$(bindir) || rmdir -p $(DESTDIR)$(bindir) || : ;
-
-clean-drill:
- $(LIBTOOL) --mode clean rm -f $(DRILL_LOBJS) drill/drill drill/drill.1
-
-examples: no-examples-config-h $(EXAMPLE_PROGS) $(TESTNS) $(LDNS_DPA) $(LDNS_DANE) $(EX_SSL_PROGS) examples/ldns-dane.1 examples/ldns-verify-zone.1
-no-examples-config-h:
- @if test -e $(srcdir)/examples/config.h -o -e examples/config.h ; \
- then echo "A config.h was detected in the examples subdirectory." ; \
- echo "This does not work when building examples from here." ; \
- echo "Either remove the config.h from the subdirectory" ; \
- echo "or build examples there." ; \
- exit -1 ; \
- fi
-
-$(EXAMPLE_PROGS):
- $(LINK_EXE) $@.lo $(LIBLOBJS) $(LIBS) -lldns -o $@
-
-$(TESTNS):
- $(LINK_EXE) $(TESTNS_LOBJS) $(LIBLOBJS) $(LIBS) -lldns -o $(TESTNS)
-
-$(LDNS_DPA):
- $(LINK_EXE) $(LDNS_DPA_LOBJS) $(LIBLOBJS) $(LIBS) $(LIBPCAP_LIBS) -lldns \
- -o $(LDNS_DPA)
-
-$(LDNS_DANE):
- $(LINK_EXE) $(LDNS_DANE_LOBJS) $(LIBLOBJS) -lldns $(LIBS) $(LIBSSL_SSL_LIBS) \
- -o $(LDNS_DANE)
-
-$(EX_SSL_PROGS):
- $(LINK_EXE) $@.lo $(LIBLOBJS) $(LIBS) $(LIBSSL_LIBS) -lldns -o $@
-
-examples/ldns-dane.1: $(srcdir)/examples/ldns-dane.1.in
- $(edit) $(srcdir)/examples/ldns-dane.1.in > examples/ldns-dane.1
-
-examples/ldns-verify-zone.1: $(srcdir)/examples/ldns-verify-zone.1.in
- $(edit) $(srcdir)/examples/ldns-verify-zone.1.in > examples/ldns-verify-zone.1
-
-install-examples: $(EXAMPLE_PROGS) $(TESTNS) $(LDNS_DPA) $(LDNS_DANE) $(EX_SSL_PROGS) examples/ldns-dane.1 examples/ldns-verify-zone.1
- $(INSTALL) -m 755 -d $(DESTDIR)$(bindir)
- $(INSTALL) -m 755 -d $(DESTDIR)$(mandir)
- $(INSTALL) -m 755 -d $(DESTDIR)$(mandir)/man1
- for p in $(EXAMPLE_PROGS) $(TESTNS) $(LDNS_DPA) $(LDNS_DANE) $(EX_SSL_PROGS) ; do \
- $(LIBTOOL) --mode=install cp $$p $(DESTDIR)$(bindir) ; \
- if test -f $$p.1 ; \
- then $(INSTALL) -m 644 $$p.1 $(DESTDIR)$(mandir)/man1 ; \
- else $(INSTALL) -m 644 $(srcdir)/$$p.1 $(DESTDIR)$(mandir)/man1 ; \
- fi ; \
- done
-
-uninstall-examples:
- for p in $(EX_PROGS_BASENM) ; do \
- rm -f $(DESTDIR)$(bindir)/$$p $(DESTDIR)$(mandir)/man1/$$p.1 ;\
- done
- test ! -d $(DESTDIR)$(mandir) || rmdir -p $(DESTDIR)$(mandir)/man1 || :;
- test ! -d $(DESTDIR)$(bindir) || rmdir -p $(DESTDIR)$(bindir) || : ;
-
-clean-examples:
- $(LIBTOOL) --mode clean rm -f $(EXAMPLE_PROGS)
- $(LIBTOOL) --mode clean rm -f $(TESTNS) $(LDNS_DPA) $(LDNS_DANE) $(EX_SSL_PROGS)
- $(LIBTOOL) --mode clean rm -f $(EXAMPLE_LOBJS)
- $(LIBTOOL) --mode clean rm -f examples/ldns-dane.1 examples/ldns-verify-zone.1
-
-linktest: $(srcdir)/linktest.c libldns.la
- $(COMP_LIB) $(LIBSSL_CPPFLAGS) -c $(srcdir)/linktest.c -o linktest.lo
- $(LINK_EXE) linktest.lo $(LIBS) $(LIBSSL_LIBS) -lldns -o linktest
-
-lib: libldns.la
-
-lib-export-all: libldns.la-export-all
-
-libldns.la: $(LDNS_ALL_LOBJS)
- $(LINK_LIB) $(LIBSSL_LDFLAGS) $(LIBSSL_LIBS) -export-symbols-regex '^(ldns_|b32_[pn]to[pn]|mktime_from_utc|qsort_rr_compare_nsec3)' -o libldns.la $(LDNS_ALL_LOBJS) -rpath $(libdir) $(RUNTIME_PATH)
-
-libldns.la-export-all: $(LDNS_ALL_LOBJS)
- $(LINK_LIB) -o libldns.la $(LDNS_ALL_LOBJS) -rpath $(libdir) $(RUNTIME_PATH)
-
-mancheck:
- sh -c 'find . -name \*.\[13\] -exec troff -z {} \;' 2>&1 | sed "s/^\.\///" | sed "s/\(:[0\-9]\+:\)/\1 warning:/g"
-
-doxygen:
- @if test ! -e doc/header.html ; then \
- $(INSTALL) -c -m 644 $(srcdir)/doc/header.html doc/ ; \
- fi ;
- $(doxygen) $(srcdir)/libdns.doxygen
-
-doc: manpages $(doxygen)
- @$(INSTALL) -d doc
-
-manpages: $(srcdir)/doc/function_manpages
- @$(INSTALL) -d doc/man/man3
- @if [ -f $(srcdir)/doc/man/man3/ldns_rr.3 ] ; \
- then \
- if test -d ldns ; then \
- echo "is builddir srcdir" > ldns/YES ; \
- if [ ! -f $(srcdir)/ldns/YES ]; then \
- echo "Copying manpages..."; \
- for m in $(srcdir)/doc/man/man3/*.3 ; \
- do \
- $(INSTALL) -c -C -m 444 $${m} doc/man/man3/ ; \
- done; \
- fi ;\
- rm -f ldns/YES; \
- fi; \
- else \
- echo "Generating manpages..."; \
- cat $(srcdir)/ldns/*.h \
- | $(srcdir)/doc/doxyparse.pl -m $(srcdir)/doc/function_manpages \
- | grep -v ^doxygen | grep -v ^cat > doc/ldns_manpages; \
- fi
-
-manpage-create-errors: $(srcdir)/doc/function_manpages
- @$(INSTALL) -d doc
- @cat $(srcdir)/ldns/*.h \
- | $(srcdir)/doc/doxyparse.pl -e \
- -m $(srcdir)/doc/function_manpages >/dev/null
-
-manpage-errors:
- @man --version >/dev/null 2>&1 && \
- for m in `cat $(srcdir)/ldns/*.h | $(srcdir)/doc/doxyparse.pl -m $(srcdir)/doc/function_manpages 2>&1 | grep -v ^doxygen | grep -v ^cat` ; do\
- LC_ALL=en_US.UTF-8 MANROFFSEQ='' MANWIDTH=80 \
- man --warnings -E UTF-8 -l -Tutf8 -Z doc/man/man3/$${m}.3 2>&1 >/dev/null \
- | awk "-vpage=$${m}.3" '{printf("%s: ", page);print}'; \
- if ! lexgrog doc/man/man3/$${m}.3 >/dev/null 2>&1 ; \
- then \
- echo doc/man/man3/$${m}.3: manpage-has-bad-whatis-entry; \
- fi; \
- done || echo "WARNING!: Cannot detect manpage errors on `uname`"
-
-pyldns: _ldns.la
-
-$(pywrapdir)/ldns_wrapper.c: $(PYLDNS_I_FILES) ldns/config.h
- $(swig) $(swigpy_flags) -o $@ $(PYTHON_CPPFLAGS) $(pywrapdir)/ldns.i
-
-ldns_wrapper.lo: $(pywrapdir)/ldns_wrapper.c ldns/config.h
- $(COMP_LIB) -I./include/ldns $(LIBSSL_CPPFLAGS) $(PYTHON_CPPFLAGS) $(PYTHON_X_CFLAGS) -c $(pywrapdir)/ldns_wrapper.c -o $@
-
-_ldns.la: ldns_wrapper.lo libldns.la
- $(LIBTOOL) --tag=CC --mode=link $(CC) $(CFLAGS) $(PYTHON_CFLAGS) $(LDFLAGS) $(PYTHON_LDFLAGS) -module -version-info $(version_info) -no-undefined -o $@ ldns_wrapper.lo -rpath $(python_site) -L. -L.libs -lldns $(LIBS)
-
-$(p5_dns_ldns_dir)/Makefile: $(p5_dns_ldns_dir)/Makefile.PL
- BUILDDIR=`pwd`; cd $(p5_dns_ldns_dir); LD_LIBRARY_PATH="$$BUILDDIR/.libs:$$LD_LIBRARY_PATH" DYLD_LIBRARY_PATH="$$BUILDDIR/.libs:$$DYLD_LIBRARY_PATH" $(PERL) Makefile.PL LIBS="-L$$BUILDDIR/.libs -lldns" INC="-I$$BUILDDIR"
-
-$(p5_dns_ldns_dir)/blib/arch/auto/DNS/LDNS/LDNS.so: $(p5_dns_ldns_dir)/Makefile
- cd $(p5_dns_ldns_dir); $(MAKE)
-
-p5-dns-ldns: $(p5_dns_ldns_dir)/blib/arch/auto/DNS/LDNS/LDNS.so
-
-install-p5-dns-ldns: $(p5_dns_ldns_dir)/Makefile
- cd $(p5_dns_ldns_dir); $(MAKE) install
-
-uninstall-p5-dns-ldns: $(p5_dns_ldns_dir)/Makefile
- cd $(p5_dns_ldns_dir); $(MAKE) uninstall
-
-clean-p5-dns-ldns: $(p5_dns_ldns_dir)/Makefile
- cd $(p5_dns_ldns_dir); $(MAKE) clean
-
-test-p5-dns-ldns: $(p5_dns_ldns_dir)/Makefile
- cd $(p5_dns_ldns_dir); $(MAKE) test
-
-install: install-h install-lib install-pc @INSTALL_CONFIG@ install-manpages $(pyldns_inst) $(pyldnsx_inst) @INSTALL_P5_DNS_LDNS@ @INSTALL_DRILL@ @INSTALL_EXAMPLES@
-
-uninstall: uninstall-manpages @UNINSTALL_CONFIG@ uninstall-h uninstall-lib uninstall-pc $(pyldns_uninst) $(pyldnsx_uninst) @UNINSTALL_P5_DNS_LDNS@ @UNINSTALL_DRILL@ @UNINSTALL_EXAMPLES@
-
-destclean: uninstall
-
-install-config:
- $(INSTALL) -d $(DESTDIR)$(bindir)
- $(INSTALL) -c -m 755 packaging/ldns-config $(DESTDIR)$(bindir)
-
-uninstall-config:
- rm -f $(DESTDIR)$(bindir)/ldns-config
- test ! -d $(DESTDIR)$(bindir) || rmdir -p $(DESTDIR)$(bindir) || echo "ok, dir already gone"
-
-install-config-manpage:
- ${INSTALL} -d $(DESTDIR)$(mandir)/man1
- ${INSTALL} -c -m 444 $(srcdir)/packaging/ldns-config.1 $(DESTDIR)$(mandir)/man1/
-
-
-uninstall-config-manpage:
- rm -f $(DESTDIR)$(mandir)/man1/ldns-config.1
- test ! -d $(DESTDIR)$(mandir)/man1 || rmdir -p $(DESTDIR)$(mandir)/man1 || echo "ok, dir already gone"
-
-install-manpages: manpages @INSTALL_CONFIG_MANPAGE@
- ${INSTALL} -d $(DESTDIR)$(mandir)/man3
- for f in doc/man/man3/*; do \
- ${INSTALL} -c -m 444 $$f $(DESTDIR)$(mandir)/man3/; \
- done
-
-uninstall-manpages: @UNINSTALL_CONFIG_MANPAGE@
- for m in `cat $(srcdir)/ldns/*.h | perl $(srcdir)/doc/doxyparse.pl -m $(srcdir)/doc/function_manpages 2>&1 | grep -v ^doxygen | grep -v ^cat` ; do \
- rm -f $(DESTDIR)$(mandir)/man3/$$m.3 ; done
- test ! -d $(DESTDIR)$(mandir)/man3 || rmdir -p $(DESTDIR)$(mandir)/man3 || echo "ok, dir already gone"
-
-install-h: lib
- $(INSTALL) -m 755 -d $(DESTDIR)$(includedir)/ldns
- for i in $(LDNS_HEADERS); do \
- $(INSTALL) -c -m 644 $(srcdir)/ldns/$$i $(DESTDIR)$(includedir)/ldns/; done
- for i in $(LDNS_HEADERS_GEN); do \
- $(INSTALL) -c -m 644 ldns/$$i $(DESTDIR)$(includedir)/ldns/; done
-
-uninstall-h:
- for i in $(LDNS_HEADERS) $(LDNS_HEADERS_GEN); do \
- rm -f $(DESTDIR)$(includedir)/ldns/$$i; done
- test ! -d $(DESTDIR)$(includedir)/ldns || rmdir -p $(DESTDIR)$(includedir)/ldns || echo "ok, dir already gone"
- exit 0
-
-packaging/libldns.pc: packaging/libldns.pc.in
- ./config.status $@
-
-install-pc: packaging/libldns.pc
- $(INSTALL) -m 644 packaging/libldns.pc $(DESTDIR)$(libdir)/pkgconfig/ldns.pc
-
-uninstall-pc:
- $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/pkgconfig/ldns.pc
- test ! -d $(DESTDIR)$(libdir)/pkgconfig || rmdir -p $(DESTDIR)$(libdir)/pkgconfig || echo "ok, dir already gone"
-
-install-lib: lib
- $(INSTALL) -m 755 -d $(DESTDIR)$(libdir)
- $(LIBTOOL) --mode=install cp libldns.la $(DESTDIR)$(libdir)
- $(LIBTOOL) --mode=finish $(DESTDIR)$(libdir)
-
-uninstall-lib:
- $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/libldns.la
- test ! -d $(DESTDIR)$(libdir) || rmdir -p $(DESTDIR)$(libdir) || echo "ok, dir already gone"
-
-install-pyldns: @PYLDNS@
- $(INSTALL) -m 755 -d $(DESTDIR)$(python_site)/ldns
- $(INSTALL) -c -m 644 $(pywrapdir)/ldns.py $(DESTDIR)$(python_site)/ldns.py
- $(LIBTOOL) --mode=install cp _ldns.la $(DESTDIR)$(python_site)
- $(LIBTOOL) --mode=finish $(DESTDIR)$(python_site)
-
-uninstall-pyldns:
- rm -f $(DESTDIR)$(python_site)/ldns/*
- test ! -d $(DESTDIR)$(python_site)/ldns || rmdir $(DESTDIR)$(python_site)/ldns || echo "ok, dir already gone"
-
-install-pyldnsx:
- $(INSTALL) -c -m 644 $(pyldnsxwrapdir)/ldnsx.py $(DESTDIR)$(python_site)/ldnsx.py
-
-uninstall-pyldnsx:
- rm -f $(DESTDIR)$(python_site)/ldnsx.py
-
-clean-manpages:
- for m in `cat $(srcdir)/ldns/*.h | $(srcdir)/doc/doxyparse.pl -m $(srcdir)/doc/function_manpages 2>&1 | grep -v ^doxygen | grep -v ^cat` ; do\
- rm -f doc/man/man3/$${m}.3 ; done
- rm -f doc/ldns_manpages
- test ! -d doc/man/man3 || rmdir -p doc/man/man3 || :
-
-clean-lib:
- $(LIBTOOL) --mode clean rm -f $(LDNS_LOBJS) $(LIBLOBJS)
- $(LIBTOOL) --mode clean rm -f linktest libldns.la
- $(LIBTOOL) --mode clean rm -f $(pywrapdir)/ldns_wrapper.c
- $(LIBTOOL) --mode clean rm -f $(pywrapdir)/ldns.py
-
-clean: @CLEAN_DRILL@ @CLEAN_EXAMPLES@ @CLEAN_P5_DNS_LDNS@ clean-manpages clean-lib putdown-builddir
-
-realclean: clean docclean
- rm -f config.status
- rm -f config.log
- rm -f $(CONFIG_FILES)
- rm -f ldns/config.h
- if test -d packaging -a ! -f packaging/ldns-config.in ; then \
- rmdir packaging || : ; fi
- rm -f libtool
- if test -d ldns ; then \
- echo "is builddir srcdir" > ldns/YES ; \
- if test -f $(srcdir)/ldns/YES ; then \
- echo Leaving headers files because srcdir == builddir;\
- rm -f ldns/YES; \
- else \
- echo Removing header files in builddir;\
- for f in `(cd $(srcdir); echo ldns/*.h)`; do \
- rm -f $$f ; done ; \
- rm -f ldns/YES; \
- test ! -d ldns || rmdir ldns || : ; \
- fi ;\
- fi
-
-docclean:
- rm -rf doc/html/
- rm -rf doc/man/
- rm -rf doc/latex/
- rm -f doc/*.txt
- rm -f doc/*.tex
- rm -f doc/ldns_manpages
-
-distclean: realclean
- rm -fr autom4te.cache
- rm -f config.guess config.sub configure ltmain.sh ldns/config.h.in
-
-## No need for changes here
-
-lint: lint-lib @LINT_DRILL@ @LINT_EXAMPLES@
-lint-lib:
- for i in $(srcdir)/*.c; do \
- $(LINT) $(LINTFLAGS) -I. -I$(srcdir) $(srcdir)/$$i ; \
- if test $$? -ne 0 ; then exit 1 ; fi ; \
- done
-
-lint-drill:
- for i in $(srcdir)/drill/*.c; do \
- $(LINT) $(LINTFLAGS) -I. -I$(srcdir) $(srcdir)/$$i ; \
- if test $$? -ne 0 ; then exit 1 ; fi ; \
- done
-
-lint-examples:
- for i in $(srcdir)/examples/*.c; do \
- $(LINT) $(LINTFLAGS) -I. -I$(srcdir) $(srcdir)/$$i ; \
- if test $$? -ne 0 ; then exit 1 ; fi ; \
- done
-
-tags: $(srcdir)/*.c ldns/*.[ch]
- ctags -f $(srcdir)/tags $(srcdir)/*.[ch] ldns/*.[ch]
-
-allclean: test-clean clean
-
-test-clean:
- tpkg -b test clean
-
-test: @TEST_P5_DNS_LDNS@
- ./test/test_all.sh
-
-
-# Recreate symbols file, only needed when API changes
-# make clean first (and after this make clean; make again)
-symbols: lib-export-all
- nm -g lib/libldns.so | cut -d " " -f 3 | grep ldns | sort > $(srcdir)/ldns_symbols.def
-
-TMP_FILE=temporary.tmp
-sources:
- for mf in $(srcdir)/Makefile.in Makefile ; do \
- if test -e $$mf ; then \
- cp $$mf $$mf.bak ;\
- sed -e 's/^LDNS_LOBJS[ ]*=.*$$/LDNS_LOBJS = '"`(cd $(srcdir); ls -1 *.c | egrep -v '$(LDNS_LOBJS_EX)' | sed 's/\.c/\.lo/g' | tr '\n' ' ')`"'/g' \
- -e 's/^LDNS_HEADERS[ ]*=.*$$/LDNS_HEADERS = '"`(cd $(srcdir)/ldns; ls -1 *.h | egrep -v '$(LDNS_HEADERS_EX)' | tr '\n' ' ')`"'/g' \
- -e 's?^PYLDNS_I_FILES[ ]*=.*$$?PYLDNS_I_FILES = '"`(cd $(srcdir)/contrib; echo python/*.i | sed 's/python/\$$(pywrapdir)/g')`"'?g' \
- -e 's?^DRILL_LOBJS[ ]*=.*$$?DRILL_LOBJS = '"`(cd $(srcdir); echo drill/*.c | sed 's/\.c/\.lo/g')`"'?g' \
- -e 's?^EXAMPLE_LOBJS[ ]*=.*$$?EXAMPLE_LOBJS = '"`(cd $(srcdir); echo examples/*.c | sed 's/\.c/\.lo/g')`"'?g' \
- -e 's?^EXAMPLE_PROGS[ ]*=.*$$?EXAMPLE_PROGS = '"`(cd $(srcdir); ls -1 examples/*.c | egrep -v '$(EXAMPLE_PROGS_EX)' | sed 's/\.c//g' | tr '\n' ' ')`"'?g' \
- -e 's?^EX_PROGS_BASENM[ ]*=.*$$?EX_PROGS_BASENM = '"`(cd $(srcdir); ls -1 examples/*.c | sed -e 's/\.c//g' -e 's?examples/??g' | tr '\n' ' ')`"'?g' \
- $$mf > $(TMP_FILE) ;\
- mv $(TMP_FILE) $$mf ;\
- fi;\
- done
-
-
-# dependency generation
-DEPEND_TMP=depend1073.tmp
-DEPEND_TMP2=depend1074.tmp
-DEPEND_TARGET=Makefile
-DEPEND_TARGET2=$(srcdir)/Makefile.in
-# actions: generate deplines from gcc,
-# then, filter out home/xx, /usr/xx and /opt/xx lines (some cc already do this)
-# then, remove empty " \" lines
-# then, add srcdir before .c and .h in deps.
-# then, remove srcdir from the (generated) parser and lexer.
-# and mention the .lo
-depend:
- if test ! -e config.h ; then ln -s ldns/config.h . ; fi
- echo "" > $(DEPEND_TMP)
- for builddir in `pwd` ; do \
- for subdir in . compat examples drill; do \
- (cd $(srcdir) ; $(CC) $(DEPFLAG) $(CPPFLAGS) $(CFLAGS) -I$$builddir -I$$subdir $$subdir/*.c) | \
- sed -e 's!'$$HOME'[^ ]* !!g' -e 's!'$$HOME'[^ ]*$$!!g' \
- -e 's!/usr[^ ]* !!g' -e 's!/usr[^ ]*$$!!g' \
- -e 's!/opt[^ ]* !!g' -e 's!/opt[^ ]*$$!!g' | \
- sed -e '/^ \\$$/d' | \
- sed -e 's? *\([^ ]*\.[ch]\)? $$(srcdir)/\1?g' | \
- sed -e 's? *\([^ ]*\.inc\)? $$(srcdir)/\1?g' | \
- sed -e 's?$$(srcdir)/ldns/config.h?ldns/config.h?g' \
- -e 's?$$(srcdir)/config.h?ldns/config.h?g' \
- -e 's?$$(srcdir)/ldns/common.h?ldns/common.h?g' \
- -e 's?$$(srcdir)/ldns/util.h?ldns/util.h?g' \
- -e 's?$$(srcdir)/ldns/net.h?ldns/net.h?g' \
- -e 's!\(.*\)\.o[ :]*!'"$$subdir/"'\1.lo '"$$subdir/"'\1.o: !g' \
- -e 's?^\.\/??g' -e 's? \.\/? ?g' \
- >> $(DEPEND_TMP) ;\
- done; \
- done
- for p in $(EXAMPLE_PROGS) $(LDNS_DPA) $(LDNS_DANE) $(EX_SSL_PROGS); do \
- echo "$$p: $$p.lo $$p.o \$$(LIB)" >> $(DEPEND_TMP) ; done
- echo "$(TESTNS): `for o in $(TESTNS_LOBJS) ; do \
- echo -n "$$o $${o%lo}o " ; done` \$$(LIB)" \
- >> $(DEPEND_TMP)
- cp $(DEPEND_TARGET) $(DEPEND_TMP2)
- head -`egrep -n "# Dependencies" $(DEPEND_TARGET) | tail -1 | sed -e 's/:.*$$//'` $(DEPEND_TMP2) > $(DEPEND_TARGET)
- cat $(DEPEND_TMP) >> $(DEPEND_TARGET)
- @if diff $(DEPEND_TARGET) $(DEPEND_TMP2); then echo " $(DEPEND_TARGET) unchanged"; else echo " Updated $(DEPEND_TARGET))"; fi
- @if test -f $(DEPEND_TARGET2); then \
- cp $(DEPEND_TARGET2) $(DEPEND_TMP2); \
- head -`egrep -n "# Dependencies" $(DEPEND_TARGET2) | tail -1 | sed -e 's/:.*$$//'` $(DEPEND_TMP2) > $(DEPEND_TARGET2); \
- cat $(DEPEND_TMP) >> $(DEPEND_TARGET2); \
- if diff $(DEPEND_TARGET2) $(DEPEND_TMP2); then echo " $(DEPEND_TARGET2) unchanged"; else echo " Updated $(DEPEND_TARGET2))"; fi; \
- fi
- rm -f $(DEPEND_TMP) $(DEPEND_TMP2)
-
-# Dependencies
-
-buffer.lo buffer.o: $(srcdir)/buffer.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h \
- $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h \
- $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h \
- $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-dane.lo dane.o: $(srcdir)/dane.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h \
- $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h \
- $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h \
- $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-dname.lo dname.o: $(srcdir)/dname.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h \
- $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h \
- $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h \
- $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-dnssec.lo dnssec.o: $(srcdir)/dnssec.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h \
- $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h \
- $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h \
- $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-dnssec_sign.lo dnssec_sign.o: $(srcdir)/dnssec_sign.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-dnssec_verify.lo dnssec_verify.o: $(srcdir)/dnssec_verify.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-dnssec_zone.lo dnssec_zone.o: $(srcdir)/dnssec_zone.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-duration.lo duration.o: $(srcdir)/duration.c ldns/config.h $(srcdir)/ldns/duration.h
-error.lo error.o: $(srcdir)/error.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h \
- $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h \
- $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h \
- $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-higher.lo higher.o: $(srcdir)/higher.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h \
- $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h \
- $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h \
- $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-host2str.lo host2str.o: $(srcdir)/host2str.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-host2wire.lo host2wire.o: $(srcdir)/host2wire.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-keys.lo keys.o: $(srcdir)/keys.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h \
- $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h \
- $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h \
- $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-linktest.lo linktest.o: $(srcdir)/linktest.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-net.lo net.o: $(srcdir)/net.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h \
- $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h \
- $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h \
- $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-packet.lo packet.o: $(srcdir)/packet.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h \
- $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h \
- $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h \
- $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-parse.lo parse.o: $(srcdir)/parse.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h \
- $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h \
- $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h \
- $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-radix.lo radix.o: $(srcdir)/radix.c ldns/config.h $(srcdir)/ldns/radix.h $(srcdir)/ldns/error.h ldns/util.h \
- ldns/common.h
-rbtree.lo rbtree.o: $(srcdir)/rbtree.c ldns/config.h $(srcdir)/ldns/rbtree.h ldns/util.h ldns/common.h
-rdata.lo rdata.o: $(srcdir)/rdata.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h \
- $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h \
- $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h \
- $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-resolver.lo resolver.o: $(srcdir)/resolver.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-rr.lo rr.o: $(srcdir)/rr.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h \
- $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h \
- $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h \
- $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-rr_functions.lo rr_functions.o: $(srcdir)/rr_functions.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-sha1.lo sha1.o: $(srcdir)/sha1.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h \
- $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h \
- $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h \
- $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-sha2.lo sha2.o: $(srcdir)/sha2.c ldns/config.h $(srcdir)/ldns/sha2.h
-str2host.lo str2host.o: $(srcdir)/str2host.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-tsig.lo tsig.o: $(srcdir)/tsig.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h \
- $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h \
- $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h \
- $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-update.lo update.o: $(srcdir)/update.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h \
- $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h \
- $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h \
- $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-util.lo util.o: $(srcdir)/util.c ldns/config.h $(srcdir)/ldns/rdata.h ldns/common.h $(srcdir)/ldns/error.h \
- ldns/util.h $(srcdir)/ldns/rr.h $(srcdir)/ldns/buffer.h
-wire2host.lo wire2host.o: $(srcdir)/wire2host.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-zone.lo zone.o: $(srcdir)/zone.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h \
- $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h \
- $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h \
- $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-compat/b64_ntop.lo compat/b64_ntop.o: $(srcdir)/compat/b64_ntop.c ldns/config.h
-compat/b64_pton.lo compat/b64_pton.o: $(srcdir)/compat/b64_pton.c ldns/config.h
-compat/calloc.lo compat/calloc.o: $(srcdir)/compat/calloc.c ldns/config.h
-compat/ctime_r.lo compat/ctime_r.o: $(srcdir)/compat/ctime_r.c ldns/config.h
-compat/fake-rfc2553.lo compat/fake-rfc2553.o: $(srcdir)/compat/fake-rfc2553.c ldns/config.h ldns/common.h \
- $(srcdir)/compat/fake-rfc2553.h
-compat/gmtime_r.lo compat/gmtime_r.o: $(srcdir)/compat/gmtime_r.c ldns/config.h
-compat/inet_aton.lo compat/inet_aton.o: $(srcdir)/compat/inet_aton.c ldns/config.h
-compat/inet_ntop.lo compat/inet_ntop.o: $(srcdir)/compat/inet_ntop.c ldns/config.h
-compat/inet_pton.lo compat/inet_pton.o: $(srcdir)/compat/inet_pton.c ldns/config.h
-compat/isascii.lo compat/isascii.o: $(srcdir)/compat/isascii.c ldns/config.h
-compat/isblank.lo compat/isblank.o: $(srcdir)/compat/isblank.c ldns/config.h
-compat/localtime_r.lo compat/localtime_r.o: $(srcdir)/compat/localtime_r.c ldns/config.h
-compat/malloc.lo compat/malloc.o: $(srcdir)/compat/malloc.c ldns/config.h
-compat/memmove.lo compat/memmove.o: $(srcdir)/compat/memmove.c ldns/config.h
-compat/realloc.lo compat/realloc.o: $(srcdir)/compat/realloc.c ldns/config.h
-compat/snprintf.lo compat/snprintf.o: $(srcdir)/compat/snprintf.c ldns/config.h
-compat/strlcpy.lo compat/strlcpy.o: $(srcdir)/compat/strlcpy.c ldns/config.h
-compat/timegm.lo compat/timegm.o: $(srcdir)/compat/timegm.c ldns/config.h
-examples/ldns-chaos.lo examples/ldns-chaos.o: $(srcdir)/examples/ldns-chaos.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldns-compare-zones.lo examples/ldns-compare-zones.o: $(srcdir)/examples/ldns-compare-zones.c ldns/config.h $(srcdir)/ldns/ldns.h \
- ldns/util.h ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h \
- $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h \
- $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h \
- $(srcdir)/ldns/rbtree.h $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h \
- $(srcdir)/ldns/duration.h $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h \
- $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h \
- $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldns-dane.lo examples/ldns-dane.o: $(srcdir)/examples/ldns-dane.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldnsd.lo examples/ldnsd.o: $(srcdir)/examples/ldnsd.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h \
- $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h \
- $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h \
- $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldns-dpa.lo examples/ldns-dpa.o: $(srcdir)/examples/ldns-dpa.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h $(srcdir)/examples/ldns-dpa.h
-examples/ldns-gen-zone.lo examples/ldns-gen-zone.o: $(srcdir)/examples/ldns-gen-zone.c ldns/config.h $(srcdir)/ldns/ldns.h \
- ldns/util.h ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h \
- $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h \
- $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h \
- $(srcdir)/ldns/rbtree.h $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h \
- $(srcdir)/ldns/duration.h $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h \
- $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h \
- $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldns-key2ds.lo examples/ldns-key2ds.o: $(srcdir)/examples/ldns-key2ds.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldns-keyfetcher.lo examples/ldns-keyfetcher.o: $(srcdir)/examples/ldns-keyfetcher.c ldns/config.h $(srcdir)/ldns/ldns.h \
- ldns/util.h ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h \
- $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h \
- $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h \
- $(srcdir)/ldns/rbtree.h $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h \
- $(srcdir)/ldns/duration.h $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h \
- $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h \
- $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldns-keygen.lo examples/ldns-keygen.o: $(srcdir)/examples/ldns-keygen.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldns-mx.lo examples/ldns-mx.o: $(srcdir)/examples/ldns-mx.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldns-notify.lo examples/ldns-notify.o: $(srcdir)/examples/ldns-notify.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldns-nsec3-hash.lo examples/ldns-nsec3-hash.o: $(srcdir)/examples/ldns-nsec3-hash.c ldns/config.h $(srcdir)/ldns/ldns.h \
- ldns/util.h ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h \
- $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h \
- $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h \
- $(srcdir)/ldns/rbtree.h $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h \
- $(srcdir)/ldns/duration.h $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h \
- $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h \
- $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldns-read-zone.lo examples/ldns-read-zone.o: $(srcdir)/examples/ldns-read-zone.c ldns/config.h $(srcdir)/ldns/ldns.h \
- ldns/util.h ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h \
- $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h \
- $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h \
- $(srcdir)/ldns/rbtree.h $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h \
- $(srcdir)/ldns/duration.h $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h \
- $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h \
- $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldns-resolver.lo examples/ldns-resolver.o: $(srcdir)/examples/ldns-resolver.c ldns/config.h $(srcdir)/ldns/ldns.h \
- ldns/util.h ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h \
- $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h \
- $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h \
- $(srcdir)/ldns/rbtree.h $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h \
- $(srcdir)/ldns/duration.h $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h \
- $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h \
- $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldns-revoke.lo examples/ldns-revoke.o: $(srcdir)/examples/ldns-revoke.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldns-rrsig.lo examples/ldns-rrsig.o: $(srcdir)/examples/ldns-rrsig.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldns-signzone.lo examples/ldns-signzone.o: $(srcdir)/examples/ldns-signzone.c ldns/config.h $(srcdir)/ldns/ldns.h \
- ldns/util.h ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h \
- $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h \
- $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h \
- $(srcdir)/ldns/rbtree.h $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h \
- $(srcdir)/ldns/duration.h $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h \
- $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h \
- $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldns-test-edns.lo examples/ldns-test-edns.o: $(srcdir)/examples/ldns-test-edns.c ldns/config.h $(srcdir)/ldns/ldns.h \
- ldns/util.h ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h \
- $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h \
- $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h \
- $(srcdir)/ldns/rbtree.h $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h \
- $(srcdir)/ldns/duration.h $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h \
- $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h \
- $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldns-testns.lo examples/ldns-testns.o: $(srcdir)/examples/ldns-testns.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h $(srcdir)/examples/ldns-testpkts.h
-examples/ldns-testpkts.lo examples/ldns-testpkts.o: $(srcdir)/examples/ldns-testpkts.c ldns/config.h $(srcdir)/ldns/ldns.h \
- ldns/util.h ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h \
- $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h \
- $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h \
- $(srcdir)/ldns/rbtree.h $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h \
- $(srcdir)/ldns/duration.h $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h \
- $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h \
- $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h \
- $(srcdir)/examples/ldns-testpkts.h
-examples/ldns-update.lo examples/ldns-update.o: $(srcdir)/examples/ldns-update.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldns-verify-zone.lo examples/ldns-verify-zone.o: $(srcdir)/examples/ldns-verify-zone.c ldns/config.h $(srcdir)/ldns/ldns.h \
- ldns/util.h ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h \
- $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h \
- $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h \
- $(srcdir)/ldns/rbtree.h $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h \
- $(srcdir)/ldns/duration.h $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h \
- $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h \
- $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldns-version.lo examples/ldns-version.o: $(srcdir)/examples/ldns-version.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldns-walk.lo examples/ldns-walk.o: $(srcdir)/examples/ldns-walk.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldns-zcat.lo examples/ldns-zcat.o: $(srcdir)/examples/ldns-zcat.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldns-zsplit.lo examples/ldns-zsplit.o: $(srcdir)/examples/ldns-zsplit.c ldns/config.h $(srcdir)/ldns/ldns.h ldns/util.h \
- ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h \
- $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h \
- $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h \
- $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h \
- $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-drill/chasetrace.lo drill/chasetrace.o: $(srcdir)/drill/chasetrace.c $(srcdir)/drill/drill.h ldns/config.h \
- $(srcdir)/drill/drill_util.h $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h $(srcdir)/ldns/buffer.h \
- $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h \
- $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h \
- $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h $(srcdir)/ldns/host2str.h \
- $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h $(srcdir)/ldns/higher.h \
- $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-drill/dnssec.lo drill/dnssec.o: $(srcdir)/drill/dnssec.c $(srcdir)/drill/drill.h ldns/config.h $(srcdir)/drill/drill_util.h \
- $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h \
- $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h \
- $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h \
- $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h \
- $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h \
- ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h $(srcdir)/ldns/wire2host.h \
- $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-drill/drill.lo drill/drill.o: $(srcdir)/drill/drill.c $(srcdir)/drill/drill.h ldns/config.h $(srcdir)/drill/drill_util.h \
- $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h \
- $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h \
- $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h \
- $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h \
- $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h \
- ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h $(srcdir)/ldns/wire2host.h \
- $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-drill/drill_util.lo drill/drill_util.o: $(srcdir)/drill/drill_util.c $(srcdir)/drill/drill.h ldns/config.h \
- $(srcdir)/drill/drill_util.h $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h $(srcdir)/ldns/buffer.h \
- $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h \
- $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h \
- $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h $(srcdir)/ldns/host2str.h \
- $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h $(srcdir)/ldns/higher.h \
- $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-drill/error.lo drill/error.o: $(srcdir)/drill/error.c $(srcdir)/drill/drill.h ldns/config.h $(srcdir)/drill/drill_util.h \
- $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h \
- $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h \
- $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h \
- $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h \
- $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h \
- ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h $(srcdir)/ldns/wire2host.h \
- $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-drill/root.lo drill/root.o: $(srcdir)/drill/root.c $(srcdir)/drill/drill.h ldns/config.h $(srcdir)/drill/drill_util.h \
- $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h \
- $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h \
- $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h \
- $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h \
- $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h \
- ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h $(srcdir)/ldns/wire2host.h \
- $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-drill/securetrace.lo drill/securetrace.o: $(srcdir)/drill/securetrace.c $(srcdir)/drill/drill.h ldns/config.h \
- $(srcdir)/drill/drill_util.h $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h $(srcdir)/ldns/buffer.h \
- $(srcdir)/ldns/error.h $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h \
- $(srcdir)/ldns/dnssec.h $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h \
- $(srcdir)/ldns/tsig.h $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h $(srcdir)/ldns/host2str.h \
- $(srcdir)/ldns/dnssec_verify.h $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h $(srcdir)/ldns/higher.h \
- $(srcdir)/ldns/host2wire.h ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h \
- $(srcdir)/ldns/wire2host.h $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h \
- $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-drill/work.lo drill/work.o: $(srcdir)/drill/work.c $(srcdir)/drill/drill.h ldns/config.h $(srcdir)/drill/drill_util.h \
- $(srcdir)/ldns/ldns.h ldns/util.h ldns/common.h $(srcdir)/ldns/buffer.h $(srcdir)/ldns/error.h \
- $(srcdir)/ldns/dane.h $(srcdir)/ldns/rdata.h $(srcdir)/ldns/rr.h $(srcdir)/ldns/dname.h $(srcdir)/ldns/dnssec.h \
- $(srcdir)/ldns/packet.h $(srcdir)/ldns/keys.h $(srcdir)/ldns/zone.h $(srcdir)/ldns/resolver.h $(srcdir)/ldns/tsig.h \
- $(srcdir)/ldns/dnssec_zone.h $(srcdir)/ldns/rbtree.h $(srcdir)/ldns/host2str.h $(srcdir)/ldns/dnssec_verify.h \
- $(srcdir)/ldns/dnssec_sign.h $(srcdir)/ldns/duration.h $(srcdir)/ldns/higher.h $(srcdir)/ldns/host2wire.h \
- ldns/net.h $(srcdir)/ldns/str2host.h $(srcdir)/ldns/update.h $(srcdir)/ldns/wire2host.h \
- $(srcdir)/ldns/rr_functions.h $(srcdir)/ldns/parse.h $(srcdir)/ldns/radix.h $(srcdir)/ldns/sha1.h $(srcdir)/ldns/sha2.h
-examples/ldns-chaos: examples/ldns-chaos.lo examples/ldns-chaos.o $(LIB)
-examples/ldns-compare-zones: examples/ldns-compare-zones.lo examples/ldns-compare-zones.o $(LIB)
-examples/ldnsd: examples/ldnsd.lo examples/ldnsd.o $(LIB)
-examples/ldns-gen-zone: examples/ldns-gen-zone.lo examples/ldns-gen-zone.o $(LIB)
-examples/ldns-key2ds: examples/ldns-key2ds.lo examples/ldns-key2ds.o $(LIB)
-examples/ldns-keyfetcher: examples/ldns-keyfetcher.lo examples/ldns-keyfetcher.o $(LIB)
-examples/ldns-keygen: examples/ldns-keygen.lo examples/ldns-keygen.o $(LIB)
-examples/ldns-mx: examples/ldns-mx.lo examples/ldns-mx.o $(LIB)
-examples/ldns-notify: examples/ldns-notify.lo examples/ldns-notify.o $(LIB)
-examples/ldns-read-zone: examples/ldns-read-zone.lo examples/ldns-read-zone.o $(LIB)
-examples/ldns-resolver: examples/ldns-resolver.lo examples/ldns-resolver.o $(LIB)
-examples/ldns-rrsig: examples/ldns-rrsig.lo examples/ldns-rrsig.o $(LIB)
-examples/ldns-test-edns: examples/ldns-test-edns.lo examples/ldns-test-edns.o $(LIB)
-examples/ldns-update: examples/ldns-update.lo examples/ldns-update.o $(LIB)
-examples/ldns-version: examples/ldns-version.lo examples/ldns-version.o $(LIB)
-examples/ldns-walk: examples/ldns-walk.lo examples/ldns-walk.o $(LIB)
-examples/ldns-zcat: examples/ldns-zcat.lo examples/ldns-zcat.o $(LIB)
-examples/ldns-zsplit: examples/ldns-zsplit.lo examples/ldns-zsplit.o $(LIB)
-examples/ldns-dpa: examples/ldns-dpa.lo examples/ldns-dpa.o $(LIB)
-examples/ldns-dane: examples/ldns-dane.lo examples/ldns-dane.o $(LIB)
-examples/ldns-nsec3-hash: examples/ldns-nsec3-hash.lo examples/ldns-nsec3-hash.o $(LIB)
-examples/ldns-revoke: examples/ldns-revoke.lo examples/ldns-revoke.o $(LIB)
-examples/ldns-signzone: examples/ldns-signzone.lo examples/ldns-signzone.o $(LIB)
-examples/ldns-verify-zone: examples/ldns-verify-zone.lo examples/ldns-verify-zone.o $(LIB)
-examples/ldns-testns: examples/ldns-testns.lo examples/ldns-testns.o examples/ldns-testpkts.lo examples/ldns-testpkts.o $(LIB)
diff --git a/ldns/buffer.c b/ldns/buffer.c
deleted file mode 100644
index e008831..0000000
--- a/ldns/buffer.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * buffer.c -- generic memory buffer .
- *
- * Copyright (c) 2001-2008, NLnet Labs. All rights reserved.
- *
- * See LICENSE for the license.
- *
- */
-
-#include <ldns/config.h>
-
-#include <ldns/ldns.h>
-#include <ldns/buffer.h>
-
-ldns_buffer *
-ldns_buffer_new(size_t capacity)
-{
- ldns_buffer *buffer = LDNS_MALLOC(ldns_buffer);
-
- if (!buffer) {
- return NULL;
- }
-
- buffer->_data = (uint8_t *) LDNS_XMALLOC(uint8_t, capacity);
- if (!buffer->_data) {
- LDNS_FREE(buffer);
- return NULL;
- }
-
- buffer->_position = 0;
- buffer->_limit = buffer->_capacity = capacity;
- buffer->_fixed = 0;
- buffer->_status = LDNS_STATUS_OK;
-
- ldns_buffer_invariant(buffer);
-
- return buffer;
-}
-
-void
-ldns_buffer_new_frm_data(ldns_buffer *buffer, const void *data, size_t size)
-{
- assert(data != NULL);
-
- buffer->_position = 0;
- buffer->_limit = buffer->_capacity = size;
- buffer->_fixed = 0;
- buffer->_data = LDNS_XMALLOC(uint8_t, size);
- if(!buffer->_data) {
- buffer->_status = LDNS_STATUS_MEM_ERR;
- return;
- }
- memcpy(buffer->_data, data, size);
- buffer->_status = LDNS_STATUS_OK;
-
- ldns_buffer_invariant(buffer);
-}
-
-bool
-ldns_buffer_set_capacity(ldns_buffer *buffer, size_t capacity)
-{
- void *data;
-
- ldns_buffer_invariant(buffer);
- assert(buffer->_position <= capacity);
-
- data = (uint8_t *) LDNS_XREALLOC(buffer->_data, uint8_t, capacity);
- if (!data) {
- buffer->_status = LDNS_STATUS_MEM_ERR;
- return false;
- } else {
- buffer->_data = data;
- buffer->_limit = buffer->_capacity = capacity;
- return true;
- }
-}
-
-bool
-ldns_buffer_reserve(ldns_buffer *buffer, size_t amount)
-{
- ldns_buffer_invariant(buffer);
- assert(!buffer->_fixed);
- if (buffer->_capacity < buffer->_position + amount) {
- size_t new_capacity = buffer->_capacity * 3 / 2;
-
- if (new_capacity < buffer->_position + amount) {
- new_capacity = buffer->_position + amount;
- }
- if (!ldns_buffer_set_capacity(buffer, new_capacity)) {
- buffer->_status = LDNS_STATUS_MEM_ERR;
- return false;
- }
- }
- buffer->_limit = buffer->_capacity;
- return true;
-}
-
-int
-ldns_buffer_printf(ldns_buffer *buffer, const char *format, ...)
-{
- va_list args;
- int written = 0;
- size_t remaining;
-
- if (ldns_buffer_status_ok(buffer)) {
- ldns_buffer_invariant(buffer);
- assert(buffer->_limit == buffer->_capacity);
-
- remaining = ldns_buffer_remaining(buffer);
- va_start(args, format);
- written = vsnprintf((char *) ldns_buffer_current(buffer), remaining,
- format, args);
- va_end(args);
- if (written == -1) {
- buffer->_status = LDNS_STATUS_INTERNAL_ERR;
- return -1;
- } else if ((size_t) written >= remaining) {
- if (!ldns_buffer_reserve(buffer, (size_t) written + 1)) {
- buffer->_status = LDNS_STATUS_MEM_ERR;
- return -1;
- }
- va_start(args, format);
- written = vsnprintf((char *) ldns_buffer_current(buffer),
- ldns_buffer_remaining(buffer), format, args);
- va_end(args);
- if (written == -1) {
- buffer->_status = LDNS_STATUS_INTERNAL_ERR;
- return -1;
- }
- }
- buffer->_position += written;
- }
- return written;
-}
-
-void
-ldns_buffer_free(ldns_buffer *buffer)
-{
- if (!buffer) {
- return;
- }
-
- if (!buffer->_fixed)
- LDNS_FREE(buffer->_data);
-
- LDNS_FREE(buffer);
-}
-
-void *
-ldns_buffer_export(ldns_buffer *buffer)
-{
- buffer->_fixed = 1;
- return buffer->_data;
-}
-
-int
-ldns_bgetc(ldns_buffer *buffer)
-{
- if (!ldns_buffer_available_at(buffer, buffer->_position, sizeof(uint8_t))) {
- ldns_buffer_set_position(buffer, ldns_buffer_limit(buffer));
- /* ldns_buffer_rewind(buffer);*/
- return EOF;
- }
- return (int)ldns_buffer_read_u8(buffer);
-}
-
-void
-ldns_buffer_copy(ldns_buffer* result, const ldns_buffer* from)
-{
- size_t tocopy = ldns_buffer_limit(from);
-
- if(tocopy > ldns_buffer_capacity(result))
- tocopy = ldns_buffer_capacity(result);
- ldns_buffer_clear(result);
- ldns_buffer_write(result, ldns_buffer_begin(from), tocopy);
- ldns_buffer_flip(result);
-}
diff --git a/ldns/compat/b64_ntop.c b/ldns/compat/b64_ntop.c
deleted file mode 100644
index 6895aca..0000000
--- a/ldns/compat/b64_ntop.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Copyright (c) 1996, 1998 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/*
- * Portions Copyright (c) 1995 by International Business Machines, Inc.
- *
- * International Business Machines, Inc. (hereinafter called IBM) grants
- * permission under its copyrights to use, copy, modify, and distribute this
- * Software with or without fee, provided that the above copyright notice and
- * all paragraphs of this notice appear in all copies, and that the name of IBM
- * not be used in connection with the marketing of any product incorporating
- * the Software or modifications thereof, without specific, written prior
- * permission.
- *
- * To the extent it has a right to do so, IBM grants an immunity from suit
- * under its patents, if any, for the use, sale or manufacture of products to
- * the extent that such products are used for performing Domain Name System
- * dynamic updates in TCP/IP networks by means of the Software. No immunity is
- * granted for any product per se or for any other function of any product.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL,
- * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN
- * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-#include <ldns/config.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-
-static const char Base64[] =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-static const char Pad64 = '=';
-
-/* (From RFC1521 and draft-ietf-dnssec-secext-03.txt)
- The following encoding technique is taken from RFC 1521 by Borenstein
- and Freed. It is reproduced here in a slightly edited form for
- convenience.
-
- A 65-character subset of US-ASCII is used, enabling 6 bits to be
- represented per printable character. (The extra 65th character, "=",
- is used to signify a special processing function.)
-
- The encoding process represents 24-bit groups of input bits as output
- strings of 4 encoded characters. Proceeding from left to right, a
- 24-bit input group is formed by concatenating 3 8-bit input groups.
- These 24 bits are then treated as 4 concatenated 6-bit groups, each
- of which is translated into a single digit in the base64 alphabet.
-
- Each 6-bit group is used as an index into an array of 64 printable
- characters. The character referenced by the index is placed in the
- output string.
-
- Table 1: The Base64 Alphabet
-
- Value Encoding Value Encoding Value Encoding Value Encoding
- 0 A 17 R 34 i 51 z
- 1 B 18 S 35 j 52 0
- 2 C 19 T 36 k 53 1
- 3 D 20 U 37 l 54 2
- 4 E 21 V 38 m 55 3
- 5 F 22 W 39 n 56 4
- 6 G 23 X 40 o 57 5
- 7 H 24 Y 41 p 58 6
- 8 I 25 Z 42 q 59 7
- 9 J 26 a 43 r 60 8
- 10 K 27 b 44 s 61 9
- 11 L 28 c 45 t 62 +
- 12 M 29 d 46 u 63 /
- 13 N 30 e 47 v
- 14 O 31 f 48 w (pad) =
- 15 P 32 g 49 x
- 16 Q 33 h 50 y
-
- Special processing is performed if fewer than 24 bits are available
- at the end of the data being encoded. A full encoding quantum is
- always completed at the end of a quantity. When fewer than 24 input
- bits are available in an input group, zero bits are added (on the
- right) to form an integral number of 6-bit groups. Padding at the
- end of the data is performed using the '=' character.
-
- Since all base64 input is an integral number of octets, only the
- -------------------------------------------------
- following cases can arise:
-
- (1) the final quantum of encoding input is an integral
- multiple of 24 bits; here, the final unit of encoded
- output will be an integral multiple of 4 characters
- with no "=" padding,
- (2) the final quantum of encoding input is exactly 8 bits;
- here, the final unit of encoded output will be two
- characters followed by two "=" padding characters, or
- (3) the final quantum of encoding input is exactly 16 bits;
- here, the final unit of encoded output will be three
- characters followed by one "=" padding character.
- */
-
-int
-ldns_b64_ntop(uint8_t const *src, size_t srclength, char *target, size_t targsize) {
- size_t datalength = 0;
- uint8_t input[3];
- uint8_t output[4];
- size_t i;
-
- if (srclength == 0) {
- if (targsize > 0) {
- target[0] = '\0';
- return 0;
- } else {
- return -1;
- }
- }
-
- while (2 < srclength) {
- input[0] = *src++;
- input[1] = *src++;
- input[2] = *src++;
- srclength -= 3;
-
- output[0] = input[0] >> 2;
- output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
- output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
- output[3] = input[2] & 0x3f;
- assert(output[0] < 64);
- assert(output[1] < 64);
- assert(output[2] < 64);
- assert(output[3] < 64);
-
- if (datalength + 4 > targsize) {
- return (-1);
- }
- target[datalength++] = Base64[output[0]];
- target[datalength++] = Base64[output[1]];
- target[datalength++] = Base64[output[2]];
- target[datalength++] = Base64[output[3]];
- }
-
- /* Now we worry about padding. */
- if (0 != srclength) {
- /* Get what's left. */
- input[0] = input[1] = input[2] = (uint8_t) '\0';
- for (i = 0; i < srclength; i++)
- input[i] = *src++;
-
- output[0] = input[0] >> 2;
- output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
- output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
- assert(output[0] < 64);
- assert(output[1] < 64);
- assert(output[2] < 64);
-
- if (datalength + 4 > targsize) {
- return (-2);
- }
- target[datalength++] = Base64[output[0]];
- target[datalength++] = Base64[output[1]];
- if (srclength == 1) {
- target[datalength++] = Pad64;
- } else {
- target[datalength++] = Base64[output[2]];
- }
- target[datalength++] = Pad64;
- }
- if (datalength >= targsize) {
- return (-3);
- }
- target[datalength] = '\0'; /* Returned value doesn't count \0. */
- return (int) (datalength);
-}
diff --git a/ldns/compat/b64_pton.c b/ldns/compat/b64_pton.c
deleted file mode 100644
index 18d8c8e..0000000
--- a/ldns/compat/b64_pton.c
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Copyright (c) 1996, 1998 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-/*
- * Portions Copyright (c) 1995 by International Business Machines, Inc.
- *
- * International Business Machines, Inc. (hereinafter called IBM) grants
- * permission under its copyrights to use, copy, modify, and distribute this
- * Software with or without fee, provided that the above copyright notice and
- * all paragraphs of this notice appear in all copies, and that the name of IBM
- * not be used in connection with the marketing of any product incorporating
- * the Software or modifications thereof, without specific, written prior
- * permission.
- *
- * To the extent it has a right to do so, IBM grants an immunity from suit
- * under its patents, if any, for the use, sale or manufacture of products to
- * the extent that such products are used for performing Domain Name System
- * dynamic updates in TCP/IP networks by means of the Software. No immunity is
- * granted for any product per se or for any other function of any product.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL,
- * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN
- * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
- */
-#include <ldns/config.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-
-static const char Base64[] =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-static const char Pad64 = '=';
-
-/* (From RFC1521 and draft-ietf-dnssec-secext-03.txt)
- The following encoding technique is taken from RFC 1521 by Borenstein
- and Freed. It is reproduced here in a slightly edited form for
- convenience.
-
- A 65-character subset of US-ASCII is used, enabling 6 bits to be
- represented per printable character. (The extra 65th character, "=",
- is used to signify a special processing function.)
-
- The encoding process represents 24-bit groups of input bits as output
- strings of 4 encoded characters. Proceeding from left to right, a
- 24-bit input group is formed by concatenating 3 8-bit input groups.
- These 24 bits are then treated as 4 concatenated 6-bit groups, each
- of which is translated into a single digit in the base64 alphabet.
-
- Each 6-bit group is used as an index into an array of 64 printable
- characters. The character referenced by the index is placed in the
- output string.
-
- Table 1: The Base64 Alphabet
-
- Value Encoding Value Encoding Value Encoding Value Encoding
- 0 A 17 R 34 i 51 z
- 1 B 18 S 35 j 52 0
- 2 C 19 T 36 k 53 1
- 3 D 20 U 37 l 54 2
- 4 E 21 V 38 m 55 3
- 5 F 22 W 39 n 56 4
- 6 G 23 X 40 o 57 5
- 7 H 24 Y 41 p 58 6
- 8 I 25 Z 42 q 59 7
- 9 J 26 a 43 r 60 8
- 10 K 27 b 44 s 61 9
- 11 L 28 c 45 t 62 +
- 12 M 29 d 46 u 63 /
- 13 N 30 e 47 v
- 14 O 31 f 48 w (pad) =
- 15 P 32 g 49 x
- 16 Q 33 h 50 y
-
- Special processing is performed if fewer than 24 bits are available
- at the end of the data being encoded. A full encoding quantum is
- always completed at the end of a quantity. When fewer than 24 input
- bits are available in an input group, zero bits are added (on the
- right) to form an integral number of 6-bit groups. Padding at the
- end of the data is performed using the '=' character.
-
- Since all base64 input is an integral number of octets, only the
- -------------------------------------------------
- following cases can arise:
-
- (1) the final quantum of encoding input is an integral
- multiple of 24 bits; here, the final unit of encoded
- output will be an integral multiple of 4 characters
- with no "=" padding,
- (2) the final quantum of encoding input is exactly 8 bits;
- here, the final unit of encoded output will be two
- characters followed by two "=" padding characters, or
- (3) the final quantum of encoding input is exactly 16 bits;
- here, the final unit of encoded output will be three
- characters followed by one "=" padding character.
- */
-
-/* skips all whitespace anywhere.
- converts characters, four at a time, starting at (or after)
- src from base - 64 numbers into three 8 bit bytes in the target area.
- it returns the number of data bytes stored at the target, or -1 on error.
- */
-
-int
-ldns_b64_pton(char const *origsrc, uint8_t *target, size_t targsize)
-{
- unsigned char const* src = (unsigned char*)origsrc;
- int tarindex, state, ch;
- char *pos;
-
- state = 0;
- tarindex = 0;
-
- if (strlen(origsrc) == 0) {
- return 0;
- }
-
- while ((ch = *src++) != '\0') {
- if (isspace((unsigned char)ch)) /* Skip whitespace anywhere. */
- continue;
-
- if (ch == Pad64)
- break;
-
- pos = strchr(Base64, ch);
- if (pos == 0) {
- /* A non-base64 character. */
- return (-1);
- }
-
- switch (state) {
- case 0:
- if (target) {
- if ((size_t)tarindex >= targsize)
- return (-1);
- target[tarindex] = (pos - Base64) << 2;
- }
- state = 1;
- break;
- case 1:
- if (target) {
- if ((size_t)tarindex + 1 >= targsize)
- return (-1);
- target[tarindex] |= (pos - Base64) >> 4;
- target[tarindex+1] = ((pos - Base64) & 0x0f)
- << 4 ;
- }
- tarindex++;
- state = 2;
- break;
- case 2:
- if (target) {
- if ((size_t)tarindex + 1 >= targsize)
- return (-1);
- target[tarindex] |= (pos - Base64) >> 2;
- target[tarindex+1] = ((pos - Base64) & 0x03)
- << 6;
- }
- tarindex++;
- state = 3;
- break;
- case 3:
- if (target) {
- if ((size_t)tarindex >= targsize)
- return (-1);
- target[tarindex] |= (pos - Base64);
- }
- tarindex++;
- state = 0;
- break;
- default:
- abort();
- }
- }
-
- /*
- * We are done decoding Base-64 chars. Let's see if we ended
- * on a byte boundary, and/or with erroneous trailing characters.
- */
-
- if (ch == Pad64) { /* We got a pad char. */
- ch = *src++; /* Skip it, get next. */
- switch (state) {
- case 0: /* Invalid = in first position */
- case 1: /* Invalid = in second position */
- return (-1);
-
- case 2: /* Valid, means one byte of info */
- /* Skip any number of spaces. */
- for ((void)NULL; ch != '\0'; ch = *src++)
- if (!isspace((unsigned char)ch))
- break;
- /* Make sure there is another trailing = sign. */
- if (ch != Pad64)
- return (-1);
- ch = *src++; /* Skip the = */
- /* Fall through to "single trailing =" case. */
- /* FALLTHROUGH */
-
- case 3: /* Valid, means two bytes of info */
- /*
- * We know this char is an =. Is there anything but
- * whitespace after it?
- */
- for ((void)NULL; ch != '\0'; ch = *src++)
- if (!isspace((unsigned char)ch))
- return (-1);
-
- /*
- * Now make sure for cases 2 and 3 that the "extra"
- * bits that slopped past the last full byte were
- * zeros. If we don't check them, they become a
- * subliminal channel.
- */
- if (target && target[tarindex] != 0)
- return (-1);
- }
- } else {
- /*
- * We ended by seeing the end of the string. Make sure we
- * have no partial bytes lying around.
- */
- if (state != 0)
- return (-1);
- }
-
- return (tarindex);
-}
diff --git a/ldns/compat/strlcpy.c b/ldns/compat/strlcpy.c
deleted file mode 100644
index d6c34c1..0000000
--- a/ldns/compat/strlcpy.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* from openssh 4.3p2 compat/strlcpy.c */
-/*
- * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/* OPENBSD ORIGINAL: lib/libc/string/strlcpy.c */
-
-#include <ldns/config.h>
-#ifndef HAVE_STRLCPY
-
-#include <sys/types.h>
-#include <string.h>
-
-/*
- * Copy src to string dst of size siz. At most siz-1 characters
- * will be copied. Always NUL terminates (unless siz == 0).
- * Returns strlen(src); if retval >= siz, truncation occurred.
- */
-size_t
-strlcpy(char *dst, const char *src, size_t siz)
-{
- char *d = dst;
- const char *s = src;
- size_t n = siz;
-
- /* Copy as many bytes as will fit */
- if (n != 0 && --n != 0) {
- do {
- if ((*d++ = *s++) == 0)
- break;
- } while (--n != 0);
- }
-
- /* Not enough room in dst, add NUL and traverse rest of src */
- if (n == 0) {
- if (siz != 0)
- *d = '\0'; /* NUL-terminate dst */
- while (*s++)
- ;
- }
-
- return(s - src - 1); /* count does not include NUL */
-}
-
-#endif /* !HAVE_STRLCPY */
diff --git a/ldns/config.guess b/ldns/config.guess
deleted file mode 100755
index b1f709e..0000000
--- a/ldns/config.guess
+++ /dev/null
@@ -1,1480 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-# Copyright 1992-2018 Free Software Foundation, Inc.
-
-timestamp='2018-08-29'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 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 <https://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program. This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
-#
-# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
-#
-# You can get the latest version of this script from:
-# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
-#
-# Please send patches to <config-patches@gnu.org>.
-
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Options:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright 1992-2018 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
- --version | -v )
- echo "$version" ; exit ;;
- --help | --h* | -h )
- echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help" >&2
- exit 1 ;;
- * )
- break ;;
- esac
-done
-
-if test $# != 0; then
- echo "$me: too many arguments$help" >&2
- exit 1
-fi
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-tmp=
-# shellcheck disable=SC2172
-trap 'test -z "$tmp" || rm -fr "$tmp"' 1 2 13 15
-trap 'exitcode=$?; test -z "$tmp" || rm -fr "$tmp"; exit $exitcode' 0
-
-set_cc_for_build() {
- : "${TMPDIR=/tmp}"
- # shellcheck disable=SC2039
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
- dummy=$tmp/dummy
- case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in
- ,,) echo "int x;" > "$dummy.c"
- for driver in cc gcc c89 c99 ; do
- if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
- CC_FOR_BUILD="$driver"
- break
- fi
- done
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
- esac
-}
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if test -f /.attbin/uname ; then
- PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-case "$UNAME_SYSTEM" in
-Linux|GNU|GNU/*)
- # If the system lacks a compiler, then just pick glibc.
- # We could probably try harder.
- LIBC=gnu
-
- set_cc_for_build
- cat <<-EOF > "$dummy.c"
- #include <features.h>
- #if defined(__UCLIBC__)
- LIBC=uclibc
- #elif defined(__dietlibc__)
- LIBC=dietlibc
- #else
- LIBC=gnu
- #endif
- EOF
- eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`"
-
- # If ldd exists, use it to detect musl libc.
- if command -v ldd >/dev/null && \
- ldd --version 2>&1 | grep -q ^musl
- then
- LIBC=musl
- fi
- ;;
-esac
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
- *:NetBSD:*:*)
- # NetBSD (nbsd) targets should (where applicable) match one or
- # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
- # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
- # switched to ELF, *-*-netbsd* would select the old
- # object file format. This provides both forward
- # compatibility and a consistent mechanism for selecting the
- # object file format.
- #
- # Note: NetBSD doesn't particularly care about the vendor
- # portion of the name. We always set it to "unknown".
- sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
- "/sbin/$sysctl" 2>/dev/null || \
- "/usr/sbin/$sysctl" 2>/dev/null || \
- echo unknown)`
- case "$UNAME_MACHINE_ARCH" in
- armeb) machine=armeb-unknown ;;
- arm*) machine=arm-unknown ;;
- sh3el) machine=shl-unknown ;;
- sh3eb) machine=sh-unknown ;;
- sh5el) machine=sh5le-unknown ;;
- earmv*)
- arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
- endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
- machine="${arch}${endian}"-unknown
- ;;
- *) machine="$UNAME_MACHINE_ARCH"-unknown ;;
- esac
- # The Operating System including object format, if it has switched
- # to ELF recently (or will in the future) and ABI.
- case "$UNAME_MACHINE_ARCH" in
- earm*)
- os=netbsdelf
- ;;
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- set_cc_for_build
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ELF__
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
- os=netbsd
- else
- os=netbsdelf
- fi
- ;;
- *)
- os=netbsd
- ;;
- esac
- # Determine ABI tags.
- case "$UNAME_MACHINE_ARCH" in
- earm*)
- expr='s/^earmv[0-9]/-eabi/;s/eb$//'
- abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
- ;;
- esac
- # The OS release
- # Debian GNU/NetBSD machines have a different userland, and
- # thus, need a distinct triplet. However, they do not need
- # kernel version information, so it can be replaced with a
- # suitable tag, in the style of linux-gnu.
- case "$UNAME_VERSION" in
- Debian*)
- release='-gnu'
- ;;
- *)
- release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2`
- ;;
- esac
- # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
- # contains redundant information, the shorter form:
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "$machine-${os}${release}${abi-}"
- exit ;;
- *:Bitrig:*:*)
- UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
- echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE"
- exit ;;
- *:OpenBSD:*:*)
- UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
- echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE"
- exit ;;
- *:LibertyBSD:*:*)
- UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
- echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE"
- exit ;;
- *:MidnightBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE"
- exit ;;
- *:ekkoBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE"
- exit ;;
- *:SolidBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
- exit ;;
- macppc:MirBSD:*:*)
- echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
- exit ;;
- *:MirBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE"
- exit ;;
- *:Sortix:*:*)
- echo "$UNAME_MACHINE"-unknown-sortix
- exit ;;
- *:Redox:*:*)
- echo "$UNAME_MACHINE"-unknown-redox
- exit ;;
- mips:OSF1:*.*)
- echo mips-dec-osf1
- exit ;;
- alpha:OSF1:*:*)
- case $UNAME_RELEASE in
- *4.0)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
- ;;
- *5.*)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
- ;;
- esac
- # According to Compaq, /usr/sbin/psrinfo has been available on
- # OSF/1 and Tru64 systems produced since 1995. I hope that
- # covers most systems running today. This code pipes the CPU
- # types through head -n 1, so we only detect the type of CPU 0.
- ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
- case "$ALPHA_CPU_TYPE" in
- "EV4 (21064)")
- UNAME_MACHINE=alpha ;;
- "EV4.5 (21064)")
- UNAME_MACHINE=alpha ;;
- "LCA4 (21066/21068)")
- UNAME_MACHINE=alpha ;;
- "EV5 (21164)")
- UNAME_MACHINE=alphaev5 ;;
- "EV5.6 (21164A)")
- UNAME_MACHINE=alphaev56 ;;
- "EV5.6 (21164PC)")
- UNAME_MACHINE=alphapca56 ;;
- "EV5.7 (21164PC)")
- UNAME_MACHINE=alphapca57 ;;
- "EV6 (21264)")
- UNAME_MACHINE=alphaev6 ;;
- "EV6.7 (21264A)")
- UNAME_MACHINE=alphaev67 ;;
- "EV6.8CB (21264C)")
- UNAME_MACHINE=alphaev68 ;;
- "EV6.8AL (21264B)")
- UNAME_MACHINE=alphaev68 ;;
- "EV6.8CX (21264D)")
- UNAME_MACHINE=alphaev68 ;;
- "EV6.9A (21264/EV69A)")
- UNAME_MACHINE=alphaev69 ;;
- "EV7 (21364)")
- UNAME_MACHINE=alphaev7 ;;
- "EV7.9 (21364A)")
- UNAME_MACHINE=alphaev79 ;;
- esac
- # A Pn.n version is a patched version.
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`"
- # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
- exitcode=$?
- trap '' 0
- exit $exitcode ;;
- Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
- exit ;;
- *:[Aa]miga[Oo][Ss]:*:*)
- echo "$UNAME_MACHINE"-unknown-amigaos
- exit ;;
- *:[Mm]orph[Oo][Ss]:*:*)
- echo "$UNAME_MACHINE"-unknown-morphos
- exit ;;
- *:OS/390:*:*)
- echo i370-ibm-openedition
- exit ;;
- *:z/VM:*:*)
- echo s390-ibm-zvmoe
- exit ;;
- *:OS400:*:*)
- echo powerpc-ibm-os400
- exit ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix"$UNAME_RELEASE"
- exit ;;
- arm*:riscos:*:*|arm*:RISCOS:*:*)
- echo arm-unknown-riscos
- exit ;;
- SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit ;;
- Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
- # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit ;;
- NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit ;;
- DRS?6000:unix:4.0:6*)
- echo sparc-icl-nx6
- exit ;;
- DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
- case `/usr/bin/uname -p` in
- sparc) echo sparc-icl-nx7; exit ;;
- esac ;;
- s390x:SunOS:*:*)
- echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
- exit ;;
- sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
- exit ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
- exit ;;
- i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
- echo i386-pc-auroraux"$UNAME_RELEASE"
- exit ;;
- i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
- UNAME_REL="`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
- case `isainfo -b` in
- 32)
- echo i386-pc-solaris2"$UNAME_REL"
- ;;
- 64)
- echo x86_64-pc-solaris2"$UNAME_REL"
- ;;
- esac
- exit ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
- # it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
- exit ;;
- sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
- Series*|S4*)
- UNAME_RELEASE=`uname -v`
- ;;
- esac
- # Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`"
- exit ;;
- sun3*:SunOS:*:*)
- echo m68k-sun-sunos"$UNAME_RELEASE"
- exit ;;
- sun*:*:4.2BSD:*)
- UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
- test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
- case "`/bin/arch`" in
- sun3)
- echo m68k-sun-sunos"$UNAME_RELEASE"
- ;;
- sun4)
- echo sparc-sun-sunos"$UNAME_RELEASE"
- ;;
- esac
- exit ;;
- aushp:SunOS:*:*)
- echo sparc-auspex-sunos"$UNAME_RELEASE"
- exit ;;
- # The situation for MiNT is a little confusing. The machine name
- # can be virtually everything (everything which is not
- # "atarist" or "atariste" at least should have a processor
- # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
- # to the lowercase version "mint" (or "freemint"). Finally
- # the system name "TOS" denotes a system which is actually not
- # MiNT. But MiNT is downward compatible to TOS, so this should
- # be no problem.
- atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint"$UNAME_RELEASE"
- exit ;;
- atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint"$UNAME_RELEASE"
- exit ;;
- *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint"$UNAME_RELEASE"
- exit ;;
- milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint"$UNAME_RELEASE"
- exit ;;
- hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint"$UNAME_RELEASE"
- exit ;;
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint"$UNAME_RELEASE"
- exit ;;
- m68k:machten:*:*)
- echo m68k-apple-machten"$UNAME_RELEASE"
- exit ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten"$UNAME_RELEASE"
- exit ;;
- RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit ;;
- RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix"$UNAME_RELEASE"
- exit ;;
- VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix"$UNAME_RELEASE"
- exit ;;
- 2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix"$UNAME_RELEASE"
- exit ;;
- mips:*:*:UMIPS | mips:*:*:RISCos)
- set_cc_for_build
- sed 's/^ //' << EOF > "$dummy.c"
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
- #if defined (host_mips) && defined (MIPSEB)
- #if defined (SYSTYPE_SYSV)
- printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_SVR4)
- printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
- printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0);
- #endif
- #endif
- exit (-1);
- }
-EOF
- $CC_FOR_BUILD -o "$dummy" "$dummy.c" &&
- dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
- SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
- { echo "$SYSTEM_NAME"; exit; }
- echo mips-mips-riscos"$UNAME_RELEASE"
- exit ;;
- Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit ;;
- Motorola:*:4.3:PL8-*)
- echo powerpc-harris-powermax
- exit ;;
- Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
- echo powerpc-harris-powermax
- exit ;;
- Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit ;;
- m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit ;;
- m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit ;;
- m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit ;;
- AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ]
- then
- if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \
- [ "$TARGET_BINARY_INTERFACE"x = x ]
- then
- echo m88k-dg-dgux"$UNAME_RELEASE"
- else
- echo m88k-dg-dguxbcs"$UNAME_RELEASE"
- fi
- else
- echo i586-dg-dgux"$UNAME_RELEASE"
- fi
- exit ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit ;;
- M88*:*:R3*:*)
- # Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit ;;
- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit ;;
- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit ;;
- *:IRIX*:*:*)
- echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`"
- exit ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i*86:AIX:*:*)
- echo i386-ibm-aix
- exit ;;
- ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
- fi
- echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV"
- exit ;;
- *:AIX:2:3)
- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- set_cc_for_build
- sed 's/^ //' << EOF > "$dummy.c"
- #include <sys/systemcfg.h>
-
- main()
- {
- if (!__power_pc())
- exit(1);
- puts("powerpc-ibm-aix3.2.5");
- exit(0);
- }
-EOF
- if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
- then
- echo "$SYSTEM_NAME"
- else
- echo rs6000-ibm-aix3.2.5
- fi
- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
- else
- echo rs6000-ibm-aix3.2
- fi
- exit ;;
- *:AIX:*:[4567])
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
- if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
- IBM_ARCH=rs6000
- else
- IBM_ARCH=powerpc
- fi
- if [ -x /usr/bin/lslpp ] ; then
- IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
- awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
- else
- IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
- fi
- echo "$IBM_ARCH"-ibm-aix"$IBM_REV"
- exit ;;
- *:AIX:*:*)
- echo rs6000-ibm-aix
- exit ;;
- ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
- echo romp-ibm-bsd4.4
- exit ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to
- exit ;; # report: romp-ibm BSD 4.3
- *:BOSX:*:*)
- echo rs6000-bull-bosx
- exit ;;
- DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit ;;
- 9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit ;;
- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit ;;
- 9000/[34678]??:HP-UX:*:*)
- HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
- case "$UNAME_MACHINE" in
- 9000/31?) HP_ARCH=m68000 ;;
- 9000/[34]??) HP_ARCH=m68k ;;
- 9000/[678][0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
- sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- case "$sc_cpu_version" in
- 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
- 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
- 532) # CPU_PA_RISC2_0
- case "$sc_kernel_bits" in
- 32) HP_ARCH=hppa2.0n ;;
- 64) HP_ARCH=hppa2.0w ;;
- '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20
- esac ;;
- esac
- fi
- if [ "$HP_ARCH" = "" ]; then
- set_cc_for_build
- sed 's/^ //' << EOF > "$dummy.c"
-
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
-
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
-
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
- case CPU_PA_RISC2_0:
- #if defined(_SC_KERNEL_BITS)
- switch (bits)
- {
- case 64: puts ("hppa2.0w"); break;
- case 32: puts ("hppa2.0n"); break;
- default: puts ("hppa2.0"); break;
- } break;
- #else /* !defined(_SC_KERNEL_BITS) */
- puts ("hppa2.0"); break;
- #endif
- default: puts ("hppa1.0"); break;
- }
- exit (0);
- }
-EOF
- (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"`
- test -z "$HP_ARCH" && HP_ARCH=hppa
- fi ;;
- esac
- if [ "$HP_ARCH" = hppa2.0w ]
- then
- set_cc_for_build
-
- # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
- # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
- # generating 64-bit code. GNU and HP use different nomenclature:
- #
- # $ CC_FOR_BUILD=cc ./config.guess
- # => hppa2.0w-hp-hpux11.23
- # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
- # => hppa64-hp-hpux11.23
-
- if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
- grep -q __LP64__
- then
- HP_ARCH=hppa2.0w
- else
- HP_ARCH=hppa64
- fi
- fi
- echo "$HP_ARCH"-hp-hpux"$HPUX_REV"
- exit ;;
- ia64:HP-UX:*:*)
- HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
- echo ia64-hp-hpux"$HPUX_REV"
- exit ;;
- 3050*:HI-UX:*:*)
- set_cc_for_build
- sed 's/^ //' << EOF > "$dummy.c"
- #include <unistd.h>
- int
- main ()
- {
- long cpu = sysconf (_SC_CPU_VERSION);
- /* The order matters, because CPU_IS_HP_MC68K erroneously returns
- true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
- results, however. */
- if (CPU_IS_PA_RISC (cpu))
- {
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
- default: puts ("hppa-hitachi-hiuxwe2"); break;
- }
- }
- else if (CPU_IS_HP_MC68K (cpu))
- puts ("m68k-hitachi-hiuxwe2");
- else puts ("unknown-hitachi-hiuxwe2");
- exit (0);
- }
-EOF
- $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
- { echo "$SYSTEM_NAME"; exit; }
- echo unknown-hitachi-hiuxwe2
- exit ;;
- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
- echo hppa1.1-hp-bsd
- exit ;;
- 9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit ;;
- *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit ;;
- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
- echo hppa1.1-hp-osf
- exit ;;
- hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit ;;
- i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo "$UNAME_MACHINE"-unknown-osf1mk
- else
- echo "$UNAME_MACHINE"-unknown-osf1
- fi
- exit ;;
- parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*[A-Z]90:*:*:*)
- echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \
- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
- -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*TS:*:*:*)
- echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*SV1:*:*:*)
- echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- *:UNICOS/mp:*:*)
- echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
- FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
- FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- 5000:UNIX_System_V:4.*:*)
- FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
- FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE"
- exit ;;
- sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi"$UNAME_RELEASE"
- exit ;;
- *:BSD/OS:*:*)
- echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
- exit ;;
- arm:FreeBSD:*:*)
- UNAME_PROCESSOR=`uname -p`
- set_cc_for_build
- if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ARM_PCS_VFP
- then
- echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi
- else
- echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf
- fi
- exit ;;
- *:FreeBSD:*:*)
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
- exit ;;
- i*:CYGWIN*:*)
- echo "$UNAME_MACHINE"-pc-cygwin
- exit ;;
- *:MINGW64*:*)
- echo "$UNAME_MACHINE"-pc-mingw64
- exit ;;
- *:MINGW*:*)
- echo "$UNAME_MACHINE"-pc-mingw32
- exit ;;
- *:MSYS*:*)
- echo "$UNAME_MACHINE"-pc-msys
- exit ;;
- i*:PW*:*)
- echo "$UNAME_MACHINE"-pc-pw32
- exit ;;
- *:Interix*:*)
- case "$UNAME_MACHINE" in
- x86)
- echo i586-pc-interix"$UNAME_RELEASE"
- exit ;;
- authenticamd | genuineintel | EM64T)
- echo x86_64-unknown-interix"$UNAME_RELEASE"
- exit ;;
- IA64)
- echo ia64-unknown-interix"$UNAME_RELEASE"
- exit ;;
- esac ;;
- i*:UWIN*:*)
- echo "$UNAME_MACHINE"-pc-uwin
- exit ;;
- amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
- echo x86_64-unknown-cygwin
- exit ;;
- prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
- exit ;;
- *:GNU:*:*)
- # the GNU system
- echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`"
- exit ;;
- *:GNU/*:*:*)
- # other systems with GNU libc and userland
- echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC"
- exit ;;
- *:Minix:*:*)
- echo "$UNAME_MACHINE"-unknown-minix
- exit ;;
- aarch64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- aarch64_be:Linux:*:*)
- UNAME_MACHINE=aarch64_be
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- alpha:Linux:*:*)
- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
- EV5) UNAME_MACHINE=alphaev5 ;;
- EV56) UNAME_MACHINE=alphaev56 ;;
- PCA56) UNAME_MACHINE=alphapca56 ;;
- PCA57) UNAME_MACHINE=alphapca56 ;;
- EV6) UNAME_MACHINE=alphaev6 ;;
- EV67) UNAME_MACHINE=alphaev67 ;;
- EV68*) UNAME_MACHINE=alphaev68 ;;
- esac
- objdump --private-headers /bin/sh | grep -q ld.so.1
- if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- arc:Linux:*:* | arceb:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- arm*:Linux:*:*)
- set_cc_for_build
- if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ARM_EABI__
- then
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- else
- if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ARM_PCS_VFP
- then
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi
- else
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf
- fi
- fi
- exit ;;
- avr32*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- cris:Linux:*:*)
- echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
- exit ;;
- crisv32:Linux:*:*)
- echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
- exit ;;
- e2k:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- frv:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- hexagon:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- i*86:Linux:*:*)
- echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
- exit ;;
- ia64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- k1om:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- m32r*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- m68*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- mips:Linux:*:* | mips64:Linux:*:*)
- set_cc_for_build
- sed 's/^ //' << EOF > "$dummy.c"
- #undef CPU
- #undef ${UNAME_MACHINE}
- #undef ${UNAME_MACHINE}el
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=${UNAME_MACHINE}el
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=${UNAME_MACHINE}
- #else
- CPU=
- #endif
- #endif
-EOF
- eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`"
- test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; }
- ;;
- mips64el:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- openrisc*:Linux:*:*)
- echo or1k-unknown-linux-"$LIBC"
- exit ;;
- or32:Linux:*:* | or1k*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- padre:Linux:*:*)
- echo sparc-unknown-linux-"$LIBC"
- exit ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-"$LIBC"
- exit ;;
- parisc:Linux:*:* | hppa:Linux:*:*)
- # Look for CPU level
- case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;;
- PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;;
- *) echo hppa-unknown-linux-"$LIBC" ;;
- esac
- exit ;;
- ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-"$LIBC"
- exit ;;
- ppc:Linux:*:*)
- echo powerpc-unknown-linux-"$LIBC"
- exit ;;
- ppc64le:Linux:*:*)
- echo powerpc64le-unknown-linux-"$LIBC"
- exit ;;
- ppcle:Linux:*:*)
- echo powerpcle-unknown-linux-"$LIBC"
- exit ;;
- riscv32:Linux:*:* | riscv64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- s390:Linux:*:* | s390x:Linux:*:*)
- echo "$UNAME_MACHINE"-ibm-linux-"$LIBC"
- exit ;;
- sh64*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- sh*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- sparc:Linux:*:* | sparc64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- tile*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- vax:Linux:*:*)
- echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
- exit ;;
- x86_64:Linux:*:*)
- echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
- exit ;;
- xtensa*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- i*86:DYNIX/ptx:4*:*)
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
- # earlier versions are messed up and put the nodename in both
- # sysname and nodename.
- echo i386-sequent-sysv4
- exit ;;
- i*86:UNIX_SV:4.2MP:2.*)
- # Unixware is an offshoot of SVR4, but it has its own version
- # number series starting with 2...
- # I am not positive that other SVR4 systems won't match this,
- # I just have to hope. -- rms.
- # Use sysv4.2uw... so that sysv4* matches it.
- echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION"
- exit ;;
- i*86:OS/2:*:*)
- # If we were able to find `uname', then EMX Unix compatibility
- # is probably installed.
- echo "$UNAME_MACHINE"-pc-os2-emx
- exit ;;
- i*86:XTS-300:*:STOP)
- echo "$UNAME_MACHINE"-unknown-stop
- exit ;;
- i*86:atheos:*:*)
- echo "$UNAME_MACHINE"-unknown-atheos
- exit ;;
- i*86:syllable:*:*)
- echo "$UNAME_MACHINE"-pc-syllable
- exit ;;
- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
- echo i386-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
- i*86:*DOS:*:*)
- echo "$UNAME_MACHINE"-pc-msdosdjgpp
- exit ;;
- i*86:*:4.*:*)
- UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL"
- else
- echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL"
- fi
- exit ;;
- i*86:*:5:[678]*)
- # UnixWare 7.x, OpenUNIX and OpenServer 6.
- case `/bin/uname -X | grep "^Machine"` in
- *486*) UNAME_MACHINE=i486 ;;
- *Pentium) UNAME_MACHINE=i586 ;;
- *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
- esac
- echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}"
- exit ;;
- i*86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL"
- elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
- (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
- && UNAME_MACHINE=i686
- (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
- && UNAME_MACHINE=i686
- echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL"
- else
- echo "$UNAME_MACHINE"-pc-sysv32
- fi
- exit ;;
- pc:*:*:*)
- # Left here for compatibility:
- # uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i586.
- # Note: whatever this is, it MUST be the same as what config.sub
- # prints for the "djgpp" host, or else GDB configure will decide that
- # this is a cross-build.
- echo i586-pc-msdosdjgpp
- exit ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit ;;
- paragon:*:*:*)
- echo i860-intel-osf1
- exit ;;
- i860:*:4.*:*) # i860-SVR4
- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4
- else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4
- fi
- exit ;;
- mini*:CTIX:SYS*5:*)
- # "miniframe"
- echo m68010-convergent-sysv
- exit ;;
- mc68k:UNIX:SYSTEM5:3.51m)
- echo m68k-convergent-sysv
- exit ;;
- M680?0:D-NIX:5.3:*)
- echo m68k-diab-dnix
- exit ;;
- M68*:*:R3V[5678]*:*)
- test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
- 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
- OS_REL=''
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4; exit; } ;;
- NCR*:*:4.2:* | MPRAS*:*:4.2:*)
- OS_REL='.3'
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && { echo i586-ncr-sysv4.3"$OS_REL"; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
- && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
- m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
- mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit ;;
- TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
- rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
- echo powerpc-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
- SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv"$UNAME_RELEASE"
- exit ;;
- RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
- RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
- *:SINIX-*:*:*)
- if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- echo "$UNAME_MACHINE"-sni-sysv4
- else
- echo ns32k-sni-sysv
- fi
- exit ;;
- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes@openmarket.com>.
- # How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit ;;
- *:*:*:FTX*)
- # From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit ;;
- i*86:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo "$UNAME_MACHINE"-stratus-vos
- exit ;;
- *:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo hppa1.1-stratus-vos
- exit ;;
- mc68*:A/UX:*:*)
- echo m68k-apple-aux"$UNAME_RELEASE"
- exit ;;
- news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit ;;
- R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
- echo mips-nec-sysv"$UNAME_RELEASE"
- else
- echo mips-unknown-sysv"$UNAME_RELEASE"
- fi
- exit ;;
- BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit ;;
- BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit ;;
- BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit ;;
- BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
- echo i586-pc-haiku
- exit ;;
- x86_64:Haiku:*:*)
- echo x86_64-unknown-haiku
- exit ;;
- SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux"$UNAME_RELEASE"
- exit ;;
- SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux"$UNAME_RELEASE"
- exit ;;
- SX-6:SUPER-UX:*:*)
- echo sx6-nec-superux"$UNAME_RELEASE"
- exit ;;
- SX-7:SUPER-UX:*:*)
- echo sx7-nec-superux"$UNAME_RELEASE"
- exit ;;
- SX-8:SUPER-UX:*:*)
- echo sx8-nec-superux"$UNAME_RELEASE"
- exit ;;
- SX-8R:SUPER-UX:*:*)
- echo sx8r-nec-superux"$UNAME_RELEASE"
- exit ;;
- SX-ACE:SUPER-UX:*:*)
- echo sxace-nec-superux"$UNAME_RELEASE"
- exit ;;
- Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody"$UNAME_RELEASE"
- exit ;;
- *:Rhapsody:*:*)
- echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
- exit ;;
- *:Darwin:*:*)
- UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
- set_cc_for_build
- if test "$UNAME_PROCESSOR" = unknown ; then
- UNAME_PROCESSOR=powerpc
- fi
- if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then
- if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
- if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_64BIT_ARCH >/dev/null
- then
- case $UNAME_PROCESSOR in
- i386) UNAME_PROCESSOR=x86_64 ;;
- powerpc) UNAME_PROCESSOR=powerpc64 ;;
- esac
- fi
- # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
- if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_PPC >/dev/null
- then
- UNAME_PROCESSOR=powerpc
- fi
- fi
- elif test "$UNAME_PROCESSOR" = i386 ; then
- # Avoid executing cc on OS X 10.9, as it ships with a stub
- # that puts up a graphical alert prompting to install
- # developer tools. Any system running Mac OS X 10.7 or
- # later (Darwin 11 and later) is required to have a 64-bit
- # processor. This is not true of the ARM version of Darwin
- # that Apple uses in portable devices.
- UNAME_PROCESSOR=x86_64
- fi
- echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
- exit ;;
- *:procnto*:*:* | *:QNX:[0123456789]*:*)
- UNAME_PROCESSOR=`uname -p`
- if test "$UNAME_PROCESSOR" = x86; then
- UNAME_PROCESSOR=i386
- UNAME_MACHINE=pc
- fi
- echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE"
- exit ;;
- *:QNX:*:4*)
- echo i386-pc-qnx
- exit ;;
- NEO-*:NONSTOP_KERNEL:*:*)
- echo neo-tandem-nsk"$UNAME_RELEASE"
- exit ;;
- NSE-*:NONSTOP_KERNEL:*:*)
- echo nse-tandem-nsk"$UNAME_RELEASE"
- exit ;;
- NSR-*:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk"$UNAME_RELEASE"
- exit ;;
- NSV-*:NONSTOP_KERNEL:*:*)
- echo nsv-tandem-nsk"$UNAME_RELEASE"
- exit ;;
- NSX-*:NONSTOP_KERNEL:*:*)
- echo nsx-tandem-nsk"$UNAME_RELEASE"
- exit ;;
- *:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit ;;
- BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit ;;
- DS/*:UNIX_System_V:*:*)
- echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE"
- exit ;;
- *:Plan9:*:*)
- # "uname -m" is not consistent, so use $cputype instead. 386
- # is converted to i386 for consistency with other x86
- # operating systems.
- # shellcheck disable=SC2154
- if test "$cputype" = 386; then
- UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
- fi
- echo "$UNAME_MACHINE"-unknown-plan9
- exit ;;
- *:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit ;;
- *:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit ;;
- KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit ;;
- XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit ;;
- *:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit ;;
- *:ITS:*:*)
- echo pdp10-unknown-its
- exit ;;
- SEI:*:*:SEIUX)
- echo mips-sei-seiux"$UNAME_RELEASE"
- exit ;;
- *:DragonFly:*:*)
- echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
- exit ;;
- *:*VMS:*:*)
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- case "$UNAME_MACHINE" in
- A*) echo alpha-dec-vms ; exit ;;
- I*) echo ia64-dec-vms ; exit ;;
- V*) echo vax-dec-vms ; exit ;;
- esac ;;
- *:XENIX:*:SysV)
- echo i386-pc-xenix
- exit ;;
- i*86:skyos:*:*)
- echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`"
- exit ;;
- i*86:rdos:*:*)
- echo "$UNAME_MACHINE"-pc-rdos
- exit ;;
- i*86:AROS:*:*)
- echo "$UNAME_MACHINE"-pc-aros
- exit ;;
- x86_64:VMkernel:*:*)
- echo "$UNAME_MACHINE"-unknown-esx
- exit ;;
- amd64:Isilon\ OneFS:*:*)
- echo x86_64-unknown-onefs
- exit ;;
-esac
-
-echo "$0: unable to guess system type" >&2
-
-case "$UNAME_MACHINE:$UNAME_SYSTEM" in
- mips:Linux | mips64:Linux)
- # If we got here on MIPS GNU/Linux, output extra information.
- cat >&2 <<EOF
-
-NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize
-the system type. Please install a C compiler and try again.
-EOF
- ;;
-esac
-
-cat >&2 <<EOF
-
-This script (version $timestamp), has failed to recognize the
-operating system you are using. If your script is old, overwrite *all*
-copies of config.guess and config.sub with the latest versions from:
-
- https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
-and
- https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
-
-If $0 has already been updated, send the following data and any
-information you think might be pertinent to config-patches@gnu.org to
-provide the necessary information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo = `(hostinfo) 2>/dev/null`
-/bin/universe = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = "$UNAME_MACHINE"
-UNAME_RELEASE = "$UNAME_RELEASE"
-UNAME_SYSTEM = "$UNAME_SYSTEM"
-UNAME_VERSION = "$UNAME_VERSION"
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/ldns/config.sub b/ldns/config.sub
deleted file mode 100755
index dad7123..0000000
--- a/ldns/config.sub
+++ /dev/null
@@ -1,1802 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-# Copyright 1992-2018 Free Software Foundation, Inc.
-
-timestamp='2018-05-24'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# 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 <https://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program. This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
-
-
-# Please send patches to <config-patches@gnu.org>.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# You can get the latest version of this script from:
-# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support. The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
-
-Canonicalize a configuration name.
-
-Options:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright 1992-2018 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
- --version | -v )
- echo "$version" ; exit ;;
- --help | --h* | -h )
- echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help"
- exit 1 ;;
-
- *local*)
- # First pass through any local machine types.
- echo "$1"
- exit ;;
-
- * )
- break ;;
- esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
- exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
- exit 1;;
-esac
-
-# Split fields of configuration type
-IFS="-" read -r field1 field2 field3 field4 <<EOF
-$1
-EOF
-
-# Separate into logical components for further validation
-case $1 in
- *-*-*-*-*)
- echo Invalid configuration \`"$1"\': more than four components >&2
- exit 1
- ;;
- *-*-*-*)
- basic_machine=$field1-$field2
- os=$field3-$field4
- ;;
- *-*-*)
- # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
- # parts
- maybe_os=$field2-$field3
- case $maybe_os in
- nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc \
- | linux-newlib* | linux-musl* | linux-uclibc* | uclinux-uclibc* \
- | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
- | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
- | storm-chaos* | os2-emx* | rtmk-nova*)
- basic_machine=$field1
- os=$maybe_os
- ;;
- android-linux)
- basic_machine=$field1-unknown
- os=linux-android
- ;;
- *)
- basic_machine=$field1-$field2
- os=$field3
- ;;
- esac
- ;;
- *-*)
- # Second component is usually, but not always the OS
- case $field2 in
- # Prevent following clause from handling this valid os
- sun*os*)
- basic_machine=$field1
- os=$field2
- ;;
- # Manufacturers
- dec* | mips* | sequent* | encore* | pc532* | sgi* | sony* \
- | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
- | unicom* | ibm* | next | hp | isi* | apollo | altos* \
- | convergent* | ncr* | news | 32* | 3600* | 3100* | hitachi* \
- | c[123]* | convex* | sun | crds | omron* | dg | ultra | tti* \
- | harris | dolphin | highlevel | gould | cbm | ns | masscomp \
- | apple | axis | knuth | cray | microblaze* \
- | sim | cisco | oki | wec | wrs | winbond)
- basic_machine=$field1-$field2
- os=
- ;;
- *)
- basic_machine=$field1
- os=$field2
- ;;
- esac
- ;;
- *)
- # Convert single-component short-hands not valid as part of
- # multi-component configurations.
- case $field1 in
- 386bsd)
- basic_machine=i386-pc
- os=bsd
- ;;
- a29khif)
- basic_machine=a29k-amd
- os=udi
- ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=scout
- ;;
- am29k)
- basic_machine=a29k-none
- os=bsd
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=sysv
- ;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- os=amigaos
- ;;
- amigaunix | amix)
- basic_machine=m68k-unknown
- os=sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=sysv
- ;;
- apollo68bsd)
- basic_machine=m68k-apollo
- os=bsd
- ;;
- aros)
- basic_machine=i386-pc
- os=aros
- ;;
- aux)
- basic_machine=m68k-apple
- os=aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=dynix
- ;;
- blackfin)
- basic_machine=bfin-unknown
- os=linux
- ;;
- cegcc)
- basic_machine=arm-unknown
- os=cegcc
- ;;
- cray)
- basic_machine=j90-cray
- os=unicos
- ;;
- craynv)
- basic_machine=craynv-cray
- os=unicosmp
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=sysv3
- ;;
- dicos)
- basic_machine=i686-pc
- os=dicos
- ;;
- djgpp)
- basic_machine=i586-pc
- os=msdosdjgpp
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=ebmon
- ;;
- es1800 | OSE68k | ose68k | ose | OSE)
- basic_machine=m68k-ericsson
- os=ose
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=sysv
- ;;
- go32)
- basic_machine=i386-pc
- os=go32
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=hms
- ;;
- h8300xray)
- basic_machine=h8300-hitachi
- os=xray
- ;;
- h8500hms)
- basic_machine=h8500-hitachi
- os=hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=sysv3
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=hpux
- ;;
- hppaosf)
- basic_machine=hppa1.1-hp
- os=osf
- ;;
- hppro)
- basic_machine=hppa1.1-hp
- os=proelf
- ;;
- i386mach)
- basic_machine=i386-mach
- os=mach
- ;;
- vsta)
- basic_machine=i386-unknown
- os=vsta
- ;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=sysv
- ;;
- m68knommu)
- basic_machine=m68k-unknown
- os=linux
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=sysv
- ;;
- mingw64)
- basic_machine=x86_64-pc
- os=mingw64
- ;;
- mingw32)
- basic_machine=i686-pc
- os=mingw32
- ;;
- mingw32ce)
- basic_machine=arm-unknown
- os=mingw32ce
- ;;
- monitor)
- basic_machine=m68k-rom68k
- os=coff
- ;;
- morphos)
- basic_machine=powerpc-unknown
- os=morphos
- ;;
- moxiebox)
- basic_machine=moxie-unknown
- os=moxiebox
- ;;
- msdos)
- basic_machine=i386-pc
- os=msdos
- ;;
- msys)
- basic_machine=i686-pc
- os=msys
- ;;
- mvs)
- basic_machine=i370-ibm
- os=mvs
- ;;
- nacl)
- basic_machine=le32-unknown
- os=nacl
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=sysv4
- ;;
- netbsd386)
- basic_machine=i386-unknown
- os=netbsd
- ;;
- netwinder)
- basic_machine=armv4l-rebel
- os=linux
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=newsos
- ;;
- necv70)
- basic_machine=v70-nec
- os=sysv
- ;;
- nh3000)
- basic_machine=m68k-harris
- os=cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=nindy
- ;;
- mon960)
- basic_machine=i960-intel
- os=mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- os=nonstopux
- ;;
- os400)
- basic_machine=powerpc-ibm
- os=os400
- ;;
- OSE68000 | ose68000)
- basic_machine=m68000-ericsson
- os=ose
- ;;
- os68k)
- basic_machine=m68k-none
- os=os68k
- ;;
- paragon)
- basic_machine=i860-intel
- os=osf
- ;;
- parisc)
- basic_machine=hppa-unknown
- os=linux
- ;;
- pw32)
- basic_machine=i586-unknown
- os=pw32
- ;;
- rdos | rdos64)
- basic_machine=x86_64-pc
- os=rdos
- ;;
- rdos32)
- basic_machine=i386-pc
- os=rdos
- ;;
- rom68k)
- basic_machine=m68k-rom68k
- os=coff
- ;;
- sa29200)
- basic_machine=a29k-amd
- os=udi
- ;;
- sei)
- basic_machine=mips-sei
- os=seiux
- ;;
- sps7)
- basic_machine=m68k-bull
- os=sysv2
- ;;
- stratus)
- basic_machine=i860-stratus
- os=sysv4
- ;;
- sun2os3)
- basic_machine=m68000-sun
- os=sunos3
- ;;
- sun2os4)
- basic_machine=m68000-sun
- os=sunos4
- ;;
- sun3os3)
- basic_machine=m68k-sun
- os=sunos3
- ;;
- sun3os4)
- basic_machine=m68k-sun
- os=sunos4
- ;;
- sun4os3)
- basic_machine=sparc-sun
- os=sunos3
- ;;
- sun4os4)
- basic_machine=sparc-sun
- os=sunos4
- ;;
- sun4sol2)
- basic_machine=sparc-sun
- os=solaris2
- ;;
- sv1)
- basic_machine=sv1-cray
- os=unicos
- ;;
- symmetry)
- basic_machine=i386-sequent
- os=dynix
- ;;
- t3e)
- basic_machine=alphaev5-cray
- os=unicos
- ;;
- t90)
- basic_machine=t90-cray
- os=unicos
- ;;
- toad1)
- basic_machine=pdp10-xkl
- os=tops20
- ;;
- tpf)
- basic_machine=s390x-ibm
- os=tpf
- ;;
- udi29k)
- basic_machine=a29k-amd
- os=udi
- ;;
- ultra3)
- basic_machine=a29k-nyu
- os=sym1
- ;;
- v810 | necv810)
- basic_machine=v810-nec
- os=none
- ;;
- vaxv)
- basic_machine=vax-dec
- os=sysv
- ;;
- vms)
- basic_machine=vax-dec
- os=vms
- ;;
- vxworks960)
- basic_machine=i960-wrs
- os=vxworks
- ;;
- vxworks68)
- basic_machine=m68k-wrs
- os=vxworks
- ;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=vxworks
- ;;
- xbox)
- basic_machine=i686-pc
- os=mingw32
- ;;
- ymp)
- basic_machine=ymp-cray
- os=unicos
- ;;
- *)
- basic_machine=$1
- os=
- ;;
- esac
- ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
- 1750a | 580 \
- | a29k \
- | aarch64 | aarch64_be \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
- | am33_2.0 \
- | arc | arceb \
- | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv6m | armv[78][arm] \
- | avr | avr32 \
- | ba \
- | be32 | be64 \
- | bfin \
- | c4x | c8051 | clipper | csky \
- | d10v | d30v | dlx | dsp16xx \
- | e2k | epiphany \
- | fido | fr30 | frv | ft32 \
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | hexagon \
- | i370 | i860 | i960 | ia16 | ia64 \
- | ip2k | iq2000 \
- | k1om \
- | le32 | le64 \
- | lm32 \
- | m32c | m32r | m32rle | m68000 | m68k | m88k \
- | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64el \
- | mips64octeon | mips64octeonel \
- | mips64orion | mips64orionel \
- | mips64r5900 | mips64r5900el \
- | mips64vr | mips64vrel \
- | mips64vr4100 | mips64vr4100el \
- | mips64vr4300 | mips64vr4300el \
- | mips64vr5000 | mips64vr5000el \
- | mips64vr5900 | mips64vr5900el \
- | mipsisa32 | mipsisa32el \
- | mipsisa32r2 | mipsisa32r2el \
- | mipsisa32r6 | mipsisa32r6el \
- | mipsisa64 | mipsisa64el \
- | mipsisa64r2 | mipsisa64r2el \
- | mipsisa64r6 | mipsisa64r6el \
- | mipsisa64sb1 | mipsisa64sb1el \
- | mipsisa64sr71k | mipsisa64sr71kel \
- | mipsr5900 | mipsr5900el \
- | mipstx39 | mipstx39el \
- | mn10200 | mn10300 \
- | moxie \
- | mt \
- | msp430 \
- | nds32 | nds32le | nds32be \
- | nfp \
- | nios | nios2 | nios2eb | nios2el \
- | ns16k | ns32k \
- | open8 | or1k | or1knd | or32 \
- | pdp10 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
- | pru \
- | pyramid \
- | riscv32 | riscv64 \
- | rl78 | rx \
- | score \
- | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
- | sh64 | sh64le \
- | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
- | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
- | spu \
- | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
- | ubicom32 \
- | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
- | visium \
- | wasm32 \
- | x86 | xc16x | xstormy16 | xtensa \
- | z8k | z80)
- basic_machine=$basic_machine-unknown
- ;;
- c54x)
- basic_machine=tic54x-unknown
- ;;
- c55x)
- basic_machine=tic55x-unknown
- ;;
- c6x)
- basic_machine=tic6x-unknown
- ;;
- leon|leon[3-9])
- basic_machine=sparc-$basic_machine
- ;;
- m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
- basic_machine=$basic_machine-unknown
- os=${os:-none}
- ;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65)
- ;;
- m9s12z | m68hcs12z | hcs12z | s12z)
- basic_machine=s12z-unknown
- os=${os:-none}
- ;;
- ms1)
- basic_machine=mt-unknown
- ;;
- strongarm | thumb | xscale)
- basic_machine=arm-unknown
- ;;
- xgate)
- basic_machine=$basic_machine-unknown
- os=${os:-none}
- ;;
- xscaleeb)
- basic_machine=armeb-unknown
- ;;
-
- xscaleel)
- basic_machine=armel-unknown
- ;;
-
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i*86 | x86_64)
- basic_machine=$basic_machine-pc
- ;;
- # Recognize the basic CPU types with company name.
- 580-* \
- | a29k-* \
- | aarch64-* | aarch64_be-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | amd64-* | arc-* | arceb-* \
- | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
- | avr-* | avr32-* \
- | ba-* \
- | be32-* | be64-* \
- | bfin-* | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c4x-* \
- | c8051-* | clipper-* | craynv-* | csky-* | cydra-* \
- | d10v-* | d30v-* | dlx-* \
- | e2k-* | elxsi-* \
- | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
- | h8300-* | h8500-* \
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- | hexagon-* \
- | i*86-* | i860-* | i960-* | ia16-* | ia64-* \
- | ip2k-* | iq2000-* \
- | k1om-* \
- | le32-* | le64-* \
- | lm32-* \
- | m32c-* | m32r-* | m32rle-* \
- | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
- | microblaze-* | microblazeel-* \
- | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
- | mips16-* \
- | mips64-* | mips64el-* \
- | mips64octeon-* | mips64octeonel-* \
- | mips64orion-* | mips64orionel-* \
- | mips64r5900-* | mips64r5900el-* \
- | mips64vr-* | mips64vrel-* \
- | mips64vr4100-* | mips64vr4100el-* \
- | mips64vr4300-* | mips64vr4300el-* \
- | mips64vr5000-* | mips64vr5000el-* \
- | mips64vr5900-* | mips64vr5900el-* \
- | mipsisa32-* | mipsisa32el-* \
- | mipsisa32r2-* | mipsisa32r2el-* \
- | mipsisa32r6-* | mipsisa32r6el-* \
- | mipsisa64-* | mipsisa64el-* \
- | mipsisa64r2-* | mipsisa64r2el-* \
- | mipsisa64r6-* | mipsisa64r6el-* \
- | mipsisa64sb1-* | mipsisa64sb1el-* \
- | mipsisa64sr71k-* | mipsisa64sr71kel-* \
- | mipsr5900-* | mipsr5900el-* \
- | mipstx39-* | mipstx39el-* \
- | mmix-* \
- | mt-* \
- | msp430-* \
- | nds32-* | nds32le-* | nds32be-* \
- | nfp-* \
- | nios-* | nios2-* | nios2eb-* | nios2el-* \
- | none-* | np1-* | ns16k-* | ns32k-* \
- | open8-* \
- | or1k*-* \
- | orion-* \
- | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | powerpcspe-* \
- | pru-* \
- | pyramid-* \
- | riscv32-* | riscv64-* \
- | rl78-* | romp-* | rs6000-* | rx-* \
- | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
- | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
- | sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
- | tahoe-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
- | tile*-* \
- | tron-* \
- | ubicom32-* \
- | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
- | vax-* \
- | visium-* \
- | wasm32-* \
- | we32k-* \
- | x86-* | x86_64-* | xc16x-* | xps100-* \
- | xstormy16-* | xtensa*-* \
- | ymp-* \
- | z8k-* | z80-*)
- ;;
- # Recognize the basic CPU types without company name, with glob match.
- xtensa*)
- basic_machine=$basic_machine-unknown
- ;;
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
- 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- basic_machine=m68000-att
- ;;
- 3b*)
- basic_machine=we32k-att
- ;;
- abacus)
- basic_machine=abacus-unknown
- ;;
- alliant | fx80)
- basic_machine=fx80-alliant
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- ;;
- amiga | amiga-*)
- basic_machine=m68k-unknown
- ;;
- asmjs)
- basic_machine=asmjs-unknown
- ;;
- blackfin-*)
- basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- os=linux
- ;;
- bluegene*)
- basic_machine=powerpc-ibm
- os=cnk
- ;;
- c54x-*)
- basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- c55x-*)
- basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- c6x-*)
- basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- c90)
- basic_machine=c90-cray
- os=${os:-unicos}
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=bsd
- ;;
- cr16 | cr16-*)
- basic_machine=cr16-unknown
- os=${os:-elf}
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- crisv32 | crisv32-* | etraxfs*)
- basic_machine=crisv32-axis
- ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
- crx)
- basic_machine=crx-unknown
- os=${os:-elf}
- ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
- ;;
- decsystem10* | dec10*)
- basic_machine=pdp10-dec
- os=tops10
- ;;
- decsystem20* | dec20*)
- basic_machine=pdp10-dec
- os=tops20
- ;;
- delta | 3300 | motorola-3300 | motorola-delta \
- | 3300-motorola | delta-motorola)
- basic_machine=m68k-motorola
- ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=${os:-bosx}
- ;;
- dpx2*)
- basic_machine=m68k-bull
- os=sysv3
- ;;
- e500v[12])
- basic_machine=powerpc-unknown
- os=$os"spe"
- ;;
- e500v[12]-*)
- basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- os=$os"spe"
- ;;
- encore | umax | mmax)
- basic_machine=ns32k-encore
- ;;
- elxsi)
- basic_machine=elxsi-elxsi
- os=${os:-bsd}
- ;;
- fx2800)
- basic_machine=i860-alliant
- ;;
- genix)
- basic_machine=ns32k-ns
- ;;
- h3050r* | hiux*)
- basic_machine=hppa1.1-hitachi
- os=hiuxwe2
- ;;
- hp300-*)
- basic_machine=m68k-hp
- ;;
- hp3k9[0-9][0-9] | hp9[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k2[0-9][0-9] | hp9k31[0-9])
- basic_machine=m68000-hp
- ;;
- hp9k3[2-9][0-9])
- basic_machine=m68k-hp
- ;;
- hp9k6[0-9][0-9] | hp6[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k7[0-79][0-9] | hp7[0-79][0-9])
- basic_machine=hppa1.1-hp
- ;;
- hp9k78[0-9] | hp78[0-9])
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][13679] | hp8[0-9][13679])
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][0-9] | hp8[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
- ;;
- i*86v32)
- basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
- os=sysv32
- ;;
- i*86v4*)
- basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
- os=sysv4
- ;;
- i*86v)
- basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
- os=sysv
- ;;
- i*86sol2)
- basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
- os=solaris2
- ;;
- j90 | j90-cray)
- basic_machine=j90-cray
- os=${os:-unicos}
- ;;
- iris | iris4d)
- basic_machine=mips-sgi
- case $os in
- irix*)
- ;;
- *)
- os=irix4
- ;;
- esac
- ;;
- leon-*|leon[3-9]-*)
- basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'`
- ;;
- m68knommu-*)
- basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- os=linux
- ;;
- microblaze*)
- basic_machine=microblaze-xilinx
- ;;
- miniframe)
- basic_machine=m68000-convergent
- ;;
- *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
- basic_machine=m68k-atari
- os=mint
- ;;
- mips3*-*)
- basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`
- ;;
- mips3*)
- basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown
- ;;
- ms1-*)
- basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'`
- ;;
- news-3600 | risc-news)
- basic_machine=mips-sony
- os=newsos
- ;;
- next | m*-next)
- basic_machine=m68k-next
- case $os in
- nextstep* )
- ;;
- ns2*)
- os=nextstep2
- ;;
- *)
- os=nextstep3
- ;;
- esac
- ;;
- np1)
- basic_machine=np1-gould
- ;;
- neo-tandem)
- basic_machine=neo-tandem
- ;;
- nse-tandem)
- basic_machine=nse-tandem
- ;;
- nsr-tandem)
- basic_machine=nsr-tandem
- ;;
- nsv-tandem)
- basic_machine=nsv-tandem
- ;;
- nsx-tandem)
- basic_machine=nsx-tandem
- ;;
- op50n-* | op60c-*)
- basic_machine=hppa1.1-oki
- os=proelf
- ;;
- openrisc | openrisc-*)
- basic_machine=or32-unknown
- ;;
- pa-hitachi)
- basic_machine=hppa1.1-hitachi
- os=hiuxwe2
- ;;
- parisc-*)
- basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- os=linux
- ;;
- pbd)
- basic_machine=sparc-tti
- ;;
- pbb)
- basic_machine=m68k-tti
- ;;
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
- pc98)
- basic_machine=i386-pc
- ;;
- pc98-*)
- basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- pentium | p5 | k5 | k6 | nexgen | viac3)
- basic_machine=i586-pc
- ;;
- pentiumpro | p6 | 6x86 | athlon | athlon_*)
- basic_machine=i686-pc
- ;;
- pentiumii | pentium2 | pentiumiii | pentium3)
- basic_machine=i686-pc
- ;;
- pentium4)
- basic_machine=i786-pc
- ;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
- basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- pentiumpro-* | p6-* | 6x86-* | athlon-*)
- basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
- basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- pentium4-*)
- basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- pn)
- basic_machine=pn-gould
- ;;
- power) basic_machine=power-ibm
- ;;
- ppc | ppcbe) basic_machine=powerpc-unknown
- ;;
- ppc-* | ppcbe-*)
- basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle)
- basic_machine=powerpcle-unknown
- ;;
- ppcle-* | powerpclittle-*)
- basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- ppc64) basic_machine=powerpc64-unknown
- ;;
- ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- ppc64le | powerpc64little)
- basic_machine=powerpc64le-unknown
- ;;
- ppc64le-* | powerpc64little-*)
- basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- ps2)
- basic_machine=i386-ibm
- ;;
- rm[46]00)
- basic_machine=mips-siemens
- ;;
- rtpc | rtpc-*)
- basic_machine=romp-ibm
- ;;
- s390 | s390-*)
- basic_machine=s390-ibm
- ;;
- s390x | s390x-*)
- basic_machine=s390x-ibm
- ;;
- sb1)
- basic_machine=mipsisa64sb1-unknown
- ;;
- sb1el)
- basic_machine=mipsisa64sb1el-unknown
- ;;
- sde)
- basic_machine=mipsisa32-sde
- os=${os:-elf}
- ;;
- sequent)
- basic_machine=i386-sequent
- ;;
- sh5el)
- basic_machine=sh5le-unknown
- ;;
- simso-wrs)
- basic_machine=sparclite-wrs
- os=vxworks
- ;;
- spur)
- basic_machine=spur-unknown
- ;;
- st2000)
- basic_machine=m68k-tandem
- ;;
- strongarm-* | thumb-*)
- basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- sun2)
- basic_machine=m68000-sun
- ;;
- sun3 | sun3-*)
- basic_machine=m68k-sun
- ;;
- sun4)
- basic_machine=sparc-sun
- ;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
- ;;
- tile*)
- basic_machine=$basic_machine-unknown
- os=linux-gnu
- ;;
- tx39)
- basic_machine=mipstx39-unknown
- ;;
- tx39el)
- basic_machine=mipstx39el-unknown
- ;;
- tower | tower-32)
- basic_machine=m68k-ncr
- ;;
- vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
- ;;
- w65*)
- basic_machine=w65-wdc
- os=none
- ;;
- w89k-*)
- basic_machine=hppa1.1-winbond
- os=proelf
- ;;
- x64)
- basic_machine=x86_64-pc
- ;;
- xps | xps100)
- basic_machine=xps100-honeywell
- ;;
- xscale-* | xscalee[bl]-*)
- basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'`
- ;;
- none)
- basic_machine=none-none
- os=${os:-none}
- ;;
-
-# Here we handle the default manufacturer of certain CPU types. It is in
-# some cases the only manufacturer, in others, it is the most popular.
- w89k)
- basic_machine=hppa1.1-winbond
- ;;
- op50n)
- basic_machine=hppa1.1-oki
- ;;
- op60c)
- basic_machine=hppa1.1-oki
- ;;
- romp)
- basic_machine=romp-ibm
- ;;
- mmix)
- basic_machine=mmix-knuth
- ;;
- rs6000)
- basic_machine=rs6000-ibm
- ;;
- vax)
- basic_machine=vax-dec
- ;;
- pdp11)
- basic_machine=pdp11-dec
- ;;
- we32k)
- basic_machine=we32k-att
- ;;
- sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
- basic_machine=sh-unknown
- ;;
- cydra)
- basic_machine=cydra-cydrome
- ;;
- orion)
- basic_machine=orion-highlevel
- ;;
- orion105)
- basic_machine=clipper-highlevel
- ;;
- mac | mpw | mac-mpw)
- basic_machine=m68k-apple
- ;;
- pmac | pmac-mpw)
- basic_machine=powerpc-apple
- ;;
- *-unknown)
- # Make sure to match an already-canonicalized machine name.
- ;;
- *)
- echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2
- exit 1
- ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
- *-digital*)
- basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'`
- ;;
- *-commodore*)
- basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'`
- ;;
- *)
- ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x$os != x ]
-then
-case $os in
- # First match some system type aliases that might get confused
- # with valid system types.
- # solaris* is a basic system type, with this one exception.
- auroraux)
- os=auroraux
- ;;
- bluegene*)
- os=cnk
- ;;
- solaris1 | solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
- ;;
- solaris)
- os=solaris2
- ;;
- unixware*)
- os=sysv4.2uw
- ;;
- gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
- ;;
- # es1800 is here to avoid being matched by es* (a different OS)
- es1800*)
- os=ose
- ;;
- # Some version numbers need modification
- chorusos*)
- os=chorusos
- ;;
- isc)
- os=isc2.2
- ;;
- sco6)
- os=sco5v6
- ;;
- sco5)
- os=sco3.2v5
- ;;
- sco4)
- os=sco3.2v4
- ;;
- sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- ;;
- sco3.2v[4-9]* | sco5v6*)
- # Don't forget version if it is 3.2v4 or newer.
- ;;
- scout)
- # Don't match below
- ;;
- sco*)
- os=sco3.2v2
- ;;
- psos*)
- os=psos
- ;;
- # Now accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST end in a * to match a version number.
- # sysv* is not here because it comes later, after sysvr4.
- gnu* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
- | *vms* | esix* | aix* | cnk* | sunos | sunos[34]*\
- | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
- | sym* | kopensolaris* | plan9* \
- | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
- | aos* | aros* | cloudabi* | sortix* \
- | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
- | clix* | riscos* | uniplus* | iris* | rtu* | xenix* \
- | knetbsd* | mirbsd* | netbsd* \
- | bitrig* | openbsd* | solidbsd* | libertybsd* \
- | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \
- | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
- | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
- | udi* | eabi* | lites* | ieee* | go32* | aux* | hcos* \
- | chorusrdb* | cegcc* | glidix* \
- | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
- | midipix* | mingw32* | mingw64* | linux-gnu* | linux-android* \
- | linux-newlib* | linux-musl* | linux-uclibc* \
- | uxpv* | beos* | mpeix* | udk* | moxiebox* \
- | interix* | uwin* | mks* | rhapsody* | darwin* \
- | openstep* | oskit* | conix* | pw32* | nonstopux* \
- | storm-chaos* | tops10* | tenex* | tops20* | its* \
- | os2* | vos* | palmos* | uclinux* | nucleus* \
- | morphos* | superux* | rtmk* | windiss* \
- | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
- | skyos* | haiku* | rdos* | toppers* | drops* | es* \
- | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
- | midnightbsd*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- qnx*)
- case $basic_machine in
- x86-* | i*86-*)
- ;;
- *)
- os=nto-$os
- ;;
- esac
- ;;
- hiux*)
- os=hiuxwe2
- ;;
- nto-qnx*)
- ;;
- nto*)
- os=`echo $os | sed -e 's|nto|nto-qnx|'`
- ;;
- sim | xray | os68k* | v88r* \
- | windows* | osx | abug | netware* | os9* \
- | macos* | mpw* | magic* | mmixware* | mon960* | lnews*)
- ;;
- linux-dietlibc)
- os=linux-dietlibc
- ;;
- linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
- ;;
- lynx*178)
- os=lynxos178
- ;;
- lynx*5)
- os=lynxos5
- ;;
- lynx*)
- os=lynxos
- ;;
- mac*)
- os=`echo "$os" | sed -e 's|mac|macos|'`
- ;;
- opened*)
- os=openedition
- ;;
- os400*)
- os=os400
- ;;
- sunos5*)
- os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
- ;;
- sunos6*)
- os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
- ;;
- wince*)
- os=wince
- ;;
- utek*)
- os=bsd
- ;;
- dynix*)
- os=bsd
- ;;
- acis*)
- os=aos
- ;;
- atheos*)
- os=atheos
- ;;
- syllable*)
- os=syllable
- ;;
- 386bsd)
- os=bsd
- ;;
- ctix* | uts*)
- os=sysv
- ;;
- nova*)
- os=rtmk-nova
- ;;
- ns2)
- os=nextstep2
- ;;
- nsk*)
- os=nsk
- ;;
- # Preserve the version number of sinix5.
- sinix5.*)
- os=`echo $os | sed -e 's|sinix|sysv|'`
- ;;
- sinix*)
- os=sysv4
- ;;
- tpf*)
- os=tpf
- ;;
- triton*)
- os=sysv3
- ;;
- oss*)
- os=sysv3
- ;;
- svr4*)
- os=sysv4
- ;;
- svr3)
- os=sysv3
- ;;
- sysvr4)
- os=sysv4
- ;;
- # This must come after sysvr4.
- sysv*)
- ;;
- ose*)
- os=ose
- ;;
- *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
- os=mint
- ;;
- zvmoe)
- os=zvmoe
- ;;
- dicos*)
- os=dicos
- ;;
- pikeos*)
- # Until real need of OS specific support for
- # particular features comes up, bare metal
- # configurations are quite functional.
- case $basic_machine in
- arm*)
- os=eabi
- ;;
- *)
- os=elf
- ;;
- esac
- ;;
- nacl*)
- ;;
- ios)
- ;;
- none)
- ;;
- *-eabi)
- ;;
- *)
- echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2
- exit 1
- ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system. Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
- score-*)
- os=elf
- ;;
- spu-*)
- os=elf
- ;;
- *-acorn)
- os=riscix1.2
- ;;
- arm*-rebel)
- os=linux
- ;;
- arm*-semi)
- os=aout
- ;;
- c4x-* | tic4x-*)
- os=coff
- ;;
- c8051-*)
- os=elf
- ;;
- clipper-intergraph)
- os=clix
- ;;
- hexagon-*)
- os=elf
- ;;
- tic54x-*)
- os=coff
- ;;
- tic55x-*)
- os=coff
- ;;
- tic6x-*)
- os=coff
- ;;
- # This must come before the *-dec entry.
- pdp10-*)
- os=tops20
- ;;
- pdp11-*)
- os=none
- ;;
- *-dec | vax-*)
- os=ultrix4.2
- ;;
- m68*-apollo)
- os=domain
- ;;
- i386-sun)
- os=sunos4.0.2
- ;;
- m68000-sun)
- os=sunos3
- ;;
- m68*-cisco)
- os=aout
- ;;
- mep-*)
- os=elf
- ;;
- mips*-cisco)
- os=elf
- ;;
- mips*-*)
- os=elf
- ;;
- or32-*)
- os=coff
- ;;
- *-tti) # must be before sparc entry or we get the wrong os.
- os=sysv3
- ;;
- sparc-* | *-sun)
- os=sunos4.1.1
- ;;
- pru-*)
- os=elf
- ;;
- *-be)
- os=beos
- ;;
- *-ibm)
- os=aix
- ;;
- *-knuth)
- os=mmixware
- ;;
- *-wec)
- os=proelf
- ;;
- *-winbond)
- os=proelf
- ;;
- *-oki)
- os=proelf
- ;;
- *-hp)
- os=hpux
- ;;
- *-hitachi)
- os=hiux
- ;;
- i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=sysv
- ;;
- *-cbm)
- os=amigaos
- ;;
- *-dg)
- os=dgux
- ;;
- *-dolphin)
- os=sysv3
- ;;
- m68k-ccur)
- os=rtu
- ;;
- m88k-omron*)
- os=luna
- ;;
- *-next)
- os=nextstep
- ;;
- *-sequent)
- os=ptx
- ;;
- *-crds)
- os=unos
- ;;
- *-ns)
- os=genix
- ;;
- i370-*)
- os=mvs
- ;;
- *-gould)
- os=sysv
- ;;
- *-highlevel)
- os=bsd
- ;;
- *-encore)
- os=bsd
- ;;
- *-sgi)
- os=irix
- ;;
- *-siemens)
- os=sysv4
- ;;
- *-masscomp)
- os=rtu
- ;;
- f30[01]-fujitsu | f700-fujitsu)
- os=uxpv
- ;;
- *-rom68k)
- os=coff
- ;;
- *-*bug)
- os=coff
- ;;
- *-apple)
- os=macos
- ;;
- *-atari*)
- os=mint
- ;;
- *-wrs)
- os=vxworks
- ;;
- *)
- os=none
- ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer. We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
- *-unknown)
- case $os in
- riscix*)
- vendor=acorn
- ;;
- sunos*)
- vendor=sun
- ;;
- cnk*|-aix*)
- vendor=ibm
- ;;
- beos*)
- vendor=be
- ;;
- hpux*)
- vendor=hp
- ;;
- mpeix*)
- vendor=hp
- ;;
- hiux*)
- vendor=hitachi
- ;;
- unos*)
- vendor=crds
- ;;
- dgux*)
- vendor=dg
- ;;
- luna*)
- vendor=omron
- ;;
- genix*)
- vendor=ns
- ;;
- clix*)
- vendor=intergraph
- ;;
- mvs* | opened*)
- vendor=ibm
- ;;
- os400*)
- vendor=ibm
- ;;
- ptx*)
- vendor=sequent
- ;;
- tpf*)
- vendor=ibm
- ;;
- vxsim* | vxworks* | windiss*)
- vendor=wrs
- ;;
- aux*)
- vendor=apple
- ;;
- hms*)
- vendor=hitachi
- ;;
- mpw* | macos*)
- vendor=apple
- ;;
- *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
- vendor=atari
- ;;
- vos*)
- vendor=stratus
- ;;
- esac
- basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"`
- ;;
-esac
-
-echo "$basic_machine-$os"
-exit
-
-# Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/ldns/configure b/ldns/configure
deleted file mode 100755
index 1a36dc8..0000000
--- a/ldns/configure
+++ /dev/null
@@ -1,20198 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for ldns 1.7.1.
-#
-# Report bugs to <libdns@nlnetlabs.nl>.
-#
-#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
-#
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# Use a proper internal environment variable to ensure we don't fall
- # into an infinite loop, continuously re-executing ourselves.
- if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
- _as_can_reexec=no; export _as_can_reexec;
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
- fi
- # We don't want this to propagate to other subprocesses.
- { _as_can_reexec=; unset _as_can_reexec;}
-if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '\${1+\"\$@\"}'='\"\$@\"'
- setopt NO_GLOB_SUBST
-else
- case \`(set -o) 2>/dev/null\` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-"
- as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
- exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
- as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
- as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
- eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
- test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1
-
- test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
- ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
- ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
- ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
- PATH=/empty FPATH=/empty; export PATH FPATH
- test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
- || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
- as_have_required=yes
-else
- as_have_required=no
-fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- as_found=:
- case $as_dir in #(
- /*)
- for as_base in sh bash ksh sh5; do
- # Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
- CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
- break 2
-fi
-fi
- done;;
- esac
- as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
- if test "x$CONFIG_SHELL" != x; then :
- export CONFIG_SHELL
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
-fi
-
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
- else
- $as_echo "$0: Please tell bug-autoconf@gnu.org and
-$0: libdns@nlnetlabs.nl about your system, including any
-$0: error possibly output before this message. Then install
-$0: a modern shell, or manually run the script under such a
-$0: shell if you do have one."
- fi
- exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-
- as_lineno_1=$LINENO as_lineno_1a=$LINENO
- as_lineno_2=$LINENO as_lineno_2a=$LINENO
- eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
- test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
- # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
- # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
- # already done that, so ensure we don't try to do so again and fall
- # in an infinite loop. This has already happened in practice.
- _as_can_reexec=no; export _as_can_reexec
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME='ldns'
-PACKAGE_TARNAME='libdns'
-PACKAGE_VERSION='1.7.1'
-PACKAGE_STRING='ldns 1.7.1'
-PACKAGE_BUGREPORT='libdns@nlnetlabs.nl'
-PACKAGE_URL=''
-
-ac_unique_file="packet.c"
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include <memory.h>
-# endif
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_subst_vars='LTLIBOBJS
-CONFIG_FILES
-ldns_build_config_have_attr_unused
-ldns_build_config_have_attr_format
-ldns_build_config_have_ssl
-DEFAULT_CAPATH
-DEFAULT_CAFILE
-LDNS_TRUST_ANCHOR_FILE
-WINDRES
-ldns_build_config_have_b32_pton
-ldns_build_config_have_b32_ntop
-LIBOBJS
-ldns_build_config_have_socklen_t
-LIBPCAP_LIBS
-include_unistd_h
-include_systypes_h
-include_inttypes_h
-ldns_build_config_have_inttypes_h
-include_sys_socket_h
-LIBSSL_SSL_LIBS
-LIBSSL_LIBS
-LIBSSL_LDFLAGS
-LIBSSL_CPPFLAGS
-ldns_build_config_use_dane_ta_usage
-ldns_build_config_use_dane_verify
-ldns_build_config_use_dane
-RUNTIME_PATH
-HAVE_SSL
-libtool
-CLEAN_P5_DNS_LDNS
-UNINSTALL_P5_DNS_LDNS
-INSTALL_P5_DNS_LDNS
-TEST_P5_DNS_LDNS
-P5_DNS_LDNS
-PERL
-PYLDNSXUNINST
-PYLDNSXINST
-PYLDNSUNINST
-PYLDNSINST
-PYLDNSX
-PYTHON_X_CFLAGS
-swig
-PYLDNS
-SWIG_LIB
-SWIG
-SWIGPY3
-PYTHON_EXTRA_LDFLAGS
-PYTHON_EXTRA_LIBS
-PYTHON_SITE_PKG
-PYTHON_LDFLAGS
-PYTHON_CPPFLAGS
-PYTHON
-PYTHON_VERSION
-UNINSTALL_CONFIG_MANPAGE
-UNINSTALL_CONFIG
-INSTALL_CONFIG_MANPAGE
-INSTALL_CONFIG
-LINT_EXAMPLES
-CLEAN_EXAMPLES
-UNINSTALL_EXAMPLES
-INSTALL_EXAMPLES
-EXAMPLES
-LINT_DRILL
-CLEAN_DRILL
-UNINSTALL_DRILL
-INSTALL_DRILL
-DRILL
-doxygen
-LINTFLAGS
-SET_MAKE
-DEPFLAG
-LT_SYS_LIBRARY_PATH
-OTOOL64
-OTOOL
-LIPO
-NMEDIT
-DSYMUTIL
-MANIFEST_TOOL
-AWK
-RANLIB
-STRIP
-ac_ct_AR
-AR
-DLLTOOL
-OBJDUMP
-FILECMD
-LN_S
-NM
-ac_ct_DUMPBIN
-DUMPBIN
-LD
-FGREP
-SED
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-LIBTOOL
-EGREP
-GREP
-CPP
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-VERSION_INFO
-LDNS_VERSION_MICRO
-LDNS_VERSION_MINOR
-LDNS_VERSION_MAJOR
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-enable_shared
-enable_static
-with_pic
-enable_fast_install
-with_aix_soname
-with_gnu_ld
-with_sysroot
-enable_libtool_lock
-with_drill
-with_examples
-enable_ldns_config
-enable_stderr_msgs
-enable_poll
-with_pyldns
-with_pyldnsx
-with_p5_dns_ldns
-with_ssl
-enable_sha2
-enable_gost
-enable_gost_anyway
-enable_ecdsa
-enable_dsa
-enable_ed25519
-enable_ed448
-enable_dane
-enable_dane_verify
-enable_dane_ta_usage
-enable_full_dane
-enable_no_dane_ta_usage
-enable_no_dane_verify
-enable_rrtype_ninfo
-enable_rrtype_rkey
-enable_rrtype_openpgpkey
-enable_rrtype_ta
-enable_rrtype_avc
-enable_rrtype_doa
-enable_rrtype_amtrelay
-enable_rpath
-with_xcode_sdk
-with_trust_anchor
-with_ca_file
-with_ca_path
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP
-LT_SYS_LIBRARY_PATH
-PYTHON_VERSION'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *=) ac_optarg= ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir=$ac_optarg ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build_alias ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build_alias=$ac_optarg ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file=$ac_optarg ;;
-
- --config-cache | -C)
- cache_file=config.cache ;;
-
- -datadir | --datadir | --datadi | --datad)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=\$ac_optarg ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix=$ac_optarg ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he | -h)
- ac_init_help=long ;;
- -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
- ac_init_help=recursive ;;
- -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
- ac_init_help=short ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host_alias ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host_alias=$ac_optarg ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$ac_optarg ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir=$ac_optarg ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir=$ac_optarg ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir=$ac_optarg ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir=$ac_optarg ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- localstatedir=$ac_optarg ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir=$ac_optarg ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c | -n)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir=$ac_optarg ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix=$ac_optarg ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix=$ac_optarg ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix=$ac_optarg ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name=$ac_optarg ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$ac_optarg ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir=$ac_optarg ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir=$ac_optarg ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site=$ac_optarg ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir=$ac_optarg ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir=$ac_optarg ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target_alias ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target_alias=$ac_optarg ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers | -V)
- ac_init_version=: ;;
-
- -with-* | --with-*)
- ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=no ;;
-
- --x)
- # Obsolete; use --with-x.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes=$ac_optarg ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries=$ac_optarg ;;
-
- -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- case $ac_envvar in #(
- '' | [0-9]* | *[!_$as_cr_alnum]* )
- as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
- esac
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
- : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
- esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- # Remove trailing slashes.
- case $ac_val in
- */ )
- ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
- eval $ac_var=\$ac_val;;
- esac
- # Be sure to have absolute directory names.
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
- if test "x$build_alias" = x; then
- cross_compiling=maybe
- elif test "x$build_alias" != "x$host_alias"; then
- cross_compiling=yes
- fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- as_fn_error $? "pwd does not report name of working directory"
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then the parent directory.
- ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_myself" : 'X\(//\)[^/]' \| \
- X"$as_myself" : 'X\(//\)$' \| \
- X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- srcdir=$ac_confdir
- if test ! -r "$srcdir/$ac_unique_file"; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat <<_ACEOF
-\`configure' configures ldns 1.7.1 to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE. See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
- -h, --help display this help and exit
- --help=short display options specific to this package
- --help=recursive display the short help of all the included packages
- -V, --version display version information and exit
- -q, --quiet, --silent do not print \`checking ...' messages
- --cache-file=FILE cache test results in FILE [disabled]
- -C, --config-cache alias for \`--cache-file=config.cache'
- -n, --no-create do not create output files
- --srcdir=DIR find the sources in DIR [configure dir or \`..']
-
-Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/libdns]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-
-System types:
- --build=BUILD configure for building on BUILD [guessed]
- --host=HOST cross-compile to build programs to run on HOST [BUILD]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
- case $ac_init_help in
- short | recursive ) echo "Configuration of ldns 1.7.1:";;
- esac
- cat <<\_ACEOF
-
-Optional Features:
- --disable-option-checking ignore unrecognized --enable/--with options
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --enable-shared[=PKGS] build shared libraries [default=yes]
- --enable-static[=PKGS] build static libraries [default=yes]
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
- --disable-ldns-config disable installation of ldns-config
- (default=enabled)
- --enable-stderr-msgs Enable printing to stderr (default=disabled)
- --enable-poll This platform supports poll(7)
- --disable-sha2 Disable SHA256 and SHA512 RRSIG support
- --disable-gost Disable GOST support
- --enable-gost-anyway Enable GOST even whithout a GOST engine installed
- --disable-ecdsa Disable ECDSA support
- --disable-dsa Disable DSA support
- --disable-ed25519 Disable (experimental) ED25519 support. Default is
- detect
- --disable-ed448 Disable (experimental) ED448 support. Default is
- detect
- --disable-dane Disable DANE support
- --disable-dane-verify Disable DANE verify support
- --disable-dane-ta-usage Disable DANE-TA usage type support
-
- --enable-rrtype-ninfo Enable draft RR type ninfo.
- --enable-rrtype-rkey Enable draft RR type rkey.
- --disable-rrtype-openpgpkey
- Disable openpgpkey RR type.
- --enable-rrtype-ta Enable draft RR type ta.
- --enable-rrtype-avc Enable draft RR type avc.
- --enable-rrtype-doa Enable draft RR type DOA.
- --enable-rrtype-amtrelay
- Enable draft RR type AMTRELAY.
- --disable-rpath disable hardcoded rpath (default=enabled)
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use
- both]
- --with-aix-soname=aix|svr4|both
- shared library versioning (aka "SONAME") variant to
- provide on AIX, [default=aix].
- --with-gnu-ld assume the C compiler uses GNU ld [default=no]
- --with-sysroot[=DIR] Search for dependent libraries within DIR (or the
- compiler's sysroot if not specified).
- --with-drill Also build drill.
- --with-examples Also build examples.
- --with-pyldns generate python library, or --without-pyldns to
- disable Python support.
- --without-pyldnsx Do not install the ldnsx python module, or
- --with-pyldnsx to install it.
- --with-p5-dns-ldns generate DNS::LDNS perl bindings
- --with-ssl=pathname enable SSL (will check /usr/local/ssl /usr/lib/ssl
- /usr/ssl /usr/pkg /usr/local /opt/local
- /usr/local/opt/openssl /usr/sfw /usr)
- --with-xcode-sdk Set xcode SDK version. Default is autodetect
- --with-trust-anchor=KEYFILE
- Default location of the trust anchor file for drill
- and ldns-dane. [default=SYSCONFDIR/unbound/root.key]
- --with-ca-file=CAFILE File containing CA certificates for ldns-dane
- --with-ca-path=CAPATH Directory containing CA certificate files for
- ldns-dane
-
-Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
- nonstandard directory <lib dir>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
- CPP C preprocessor
- LT_SYS_LIBRARY_PATH
- User-defined run-time library search path.
- PYTHON_VERSION
- The installed Python version to use, for example '2.3'. This
- string will be appended to the Python interpreter canonical
- name.
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to <libdns@nlnetlabs.nl>.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" ||
- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
- continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
- if test -f "$ac_srcdir/configure.gnu"; then
- echo &&
- $SHELL "$ac_srcdir/configure.gnu" --help=recursive
- elif test -f "$ac_srcdir/configure"; then
- echo &&
- $SHELL "$ac_srcdir/configure" --help=recursive
- else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-ldns configure 1.7.1
-generated by GNU Autoconf 2.69
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
- exit
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
- if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } > conftest.i && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if eval \${$3+:} false; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_header_compiler=yes
-else
- ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- ac_header_preproc=yes
-else
- ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
- yes:no: )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
- no:yes:* )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( $as_echo "## ---------------------------------- ##
-## Report this to libdns@nlnetlabs.nl ##
-## ---------------------------------- ##"
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_mongrel
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then :
- ac_retval=0
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=$ac_status
-fi
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_run
-
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_compile
-
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest$ac_exeext
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- test -x conftest$ac_exeext
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
- # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
- # interfere with the next link command; also delete a directory that is
- # left behind by Apple's compiler. We do this before executing the actions.
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_link
-
-# ac_fn_c_check_func LINENO FUNC VAR
-# ----------------------------------
-# Tests whether FUNC exists, setting the cache variable VAR accordingly
-ac_fn_c_check_func ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $2 innocuous_$2
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $2 (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $2
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $2 ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_$2 || defined __stub___$2
-choke me
-#endif
-
-int
-main ()
-{
-return $2 ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_func
-
-# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
-# -------------------------------------------
-# Tests whether TYPE exists after having included INCLUDES, setting cache
-# variable VAR accordingly.
-ac_fn_c_check_type ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=no"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-if (sizeof ($2))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-if (sizeof (($2)))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- eval "$3=yes"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_type
-
-# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
-# ---------------------------------------------
-# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
-# accordingly.
-ac_fn_c_check_decl ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- as_decl_name=`echo $2|sed 's/ *(.*//'`
- as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
-$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-#ifndef $as_decl_name
-#ifdef __cplusplus
- (void) $as_decl_use;
-#else
- (void) $as_decl_name;
-#endif
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_decl
-
-# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
-# --------------------------------------------
-# Tries to find the compile-time value of EXPR in a program that includes
-# INCLUDES, setting VAR accordingly. Returns whether the value could be
-# computed
-ac_fn_c_compute_int ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if test "$cross_compiling" = yes; then
- # Depending upon the size, compute the lo and hi bounds.
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) >= 0)];
-test_array [0] = 0;
-return test_array [0];
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_lo=0 ac_mid=0
- while :; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_hi=$ac_mid; break
-else
- as_fn_arith $ac_mid + 1 && ac_lo=$as_val
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) < 0)];
-test_array [0] = 0;
-return test_array [0];
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_hi=-1 ac_mid=-1
- while :; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) >= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_lo=$ac_mid; break
-else
- as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- ac_lo= ac_hi=
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
- as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_hi=$ac_mid
-else
- as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in #((
-?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
-'') ac_retval=1 ;;
-esac
- else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-static long int longval () { return $2; }
-static unsigned long int ulongval () { return $2; }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
- FILE *f = fopen ("conftest.val", "w");
- if (! f)
- return 1;
- if (($2) < 0)
- {
- long int i = longval ();
- if (i != ($2))
- return 1;
- fprintf (f, "%ld", i);
- }
- else
- {
- unsigned long int i = ulongval ();
- if (i != ($2))
- return 1;
- fprintf (f, "%lu", i);
- }
- /* Do not output a trailing newline, as this causes \r\n confusion
- on some platforms. */
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- echo >>conftest.val; read $3 <conftest.val; ac_retval=0
-else
- ac_retval=1
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-rm -f conftest.val
-
- fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_compute_int
-
-# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
-# ----------------------------------------------------
-# Tries to find if the field MEMBER exists in type AGGR, after including
-# INCLUDES, setting cache variable VAR accordingly.
-ac_fn_c_check_member ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
-$as_echo_n "checking for $2.$3... " >&6; }
-if eval \${$4+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$5
-int
-main ()
-{
-static $2 ac_aggr;
-if (ac_aggr.$3)
-return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- eval "$4=yes"
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$5
-int
-main ()
-{
-static $2 ac_aggr;
-if (sizeof ac_aggr.$3)
-return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- eval "$4=yes"
-else
- eval "$4=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$4
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_member
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by ldns $as_me 1.7.1, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
-
-/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
-/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
-/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
- done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
- for ac_arg
- do
- case $ac_arg in
- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
- 2)
- as_fn_append ac_configure_args1 " '$ac_arg'"
- if test $ac_must_keep_next = true; then
- ac_must_keep_next=false # Got value, back to normal.
- else
- case $ac_arg in
- *=* | --config-cache | -C | -disable-* | --disable-* \
- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
- | -with-* | --with-* | -without-* | --without-* | --x)
- case "$ac_configure_args0 " in
- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
- esac
- ;;
- -* ) ac_must_keep_next=true ;;
- esac
- fi
- as_fn_append ac_configure_args " '$ac_arg'"
- ;;
- esac
- done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset ac_configure_args1;}
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log. We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
-elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
-else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
- fi
-done
-
-if test -r "$cache_file"; then
- # Some versions of bash will fail to source /dev/null (special files
- # actually), so we avoid doing that. DJGPP emulates it as a regular file.
- if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
- eval ac_old_set=\$ac_cv_env_${ac_var}_set
- eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val=\$ac_cv_env_${ac_var}_value
- eval ac_new_val=\$ac_env_${ac_var}_value
- case $ac_old_set,$ac_new_set in
- set,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,);;
- *)
- if test "x$ac_old_val" != "x$ac_new_val"; then
- # differences in whitespace do not lead to failure.
- ac_old_val_w=`echo x $ac_old_val`
- ac_new_val_w=`echo x $ac_new_val`
- if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- ac_cache_corrupted=:
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
- eval $ac_var=\$ac_old_val
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
- *) ac_arg=$ac_var=$ac_new_val ;;
- esac
- case " $ac_configure_args " in
- *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
- *) as_fn_append ac_configure_args " '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-# needed to build correct soname
-LDNS_VERSION_MAJOR=1
-
-LDNS_VERSION_MINOR=7
-
-LDNS_VERSION_MICRO=1
-
-
-# Library version
-# ---------------
-# current:revision:age
-# (binary-api-number):(which-binary-api-version):(how-many-nrs-backwardscompat)
-# if source code changes increment revision
-# if any interfaces have been added/removed/changed since last update then
-# increment current and set revision to 0
-# if any interfaces have been added since the last public release then increment age
-# if any interfaces have been removed or changed since the last public release then
-# set age to 0
-#
-# ldns-1.6.17 and before had a .so with version same as VERSION_INFO
-# ldns-1.7.0 has libversion 2:0:0
-# ldns-1.7.1 has libversion 3:0:1
-#
-VERSION_INFO=3:0:0
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- fi
-fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
- { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if { ac_try='./conftest$ac_cv_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-else
- CFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if ${ac_cv_prog_CPP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -z "$GREP"; then
- ac_path_GREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_GREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_GREP"; then
- as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
- if test -z "$EGREP"; then
- ac_path_EGREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'EGREP' >> "conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_EGREP="$ac_path_EGREP"
- ac_path_EGREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_EGREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_EGREP"; then
- as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_EGREP=$EGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
- ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
-if test "x$ac_cv_header_minix_config_h" = xyes; then :
- MINIX=yes
-else
- MINIX=
-fi
-
-
- if test "$MINIX" = yes; then
-
-$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
-
-
-$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
-
-
-$as_echo "#define _MINIX 1" >>confdefs.h
-
- fi
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
-$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
-if ${ac_cv_safe_to_define___extensions__+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-# define __EXTENSIONS__ 1
- $ac_includes_default
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_safe_to_define___extensions__=yes
-else
- ac_cv_safe_to_define___extensions__=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
-$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
- test $ac_cv_safe_to_define___extensions__ = yes &&
- $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
-
- $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
-
- $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
-
- $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
-
- $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
-
-
-
-if test "$ac_cv_header_minix_config_h" = "yes"; then
-
-$as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h
-
-fi
-ac_aux_dir=
-for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-
-
-case `pwd` in
- *\ * | *\ *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
-$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
-esac
-
-
-
-macro_version='2.4.7'
-macro_revision='2.4.7'
-
-
-
-
-
-
-
-
-
-
-
-
-
-ltmain=$ac_aux_dir/ltmain.sh
-
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
- as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "x$host_alias" = x; then
- ac_cv_host=$ac_cv_build
-else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-# Backslashify metacharacters that are still active within
-# double-quoted strings.
-sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\(["`\\]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
-ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
-$as_echo_n "checking how to print strings... " >&6; }
-# Test print first, because it will be a builtin if present.
-if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
- test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
- ECHO='print -r --'
-elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
- ECHO='printf %s\n'
-else
- # Use this function as a fallback that always works.
- func_fallback_echo ()
- {
- eval 'cat <<_LTECHO_EOF
-$1
-_LTECHO_EOF'
- }
- ECHO='func_fallback_echo'
-fi
-
-# func_echo_all arg...
-# Invoke $ECHO with all args, space-separated.
-func_echo_all ()
-{
- $ECHO ""
-}
-
-case $ECHO in
- printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
-$as_echo "printf" >&6; } ;;
- print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
-$as_echo "print -r" >&6; } ;;
- *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
-$as_echo "cat" >&6; } ;;
-esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
-$as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if ${ac_cv_path_SED+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
- for ac_i in 1 2 3 4 5 6 7; do
- ac_script="$ac_script$as_nl$ac_script"
- done
- echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
- { ac_script=; unset ac_script;}
- if test -z "$SED"; then
- ac_path_SED_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in sed gsed; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_SED" || continue
-# Check for GNU ac_path_SED and select it if it is found.
- # Check for GNU $ac_path_SED
-case `"$ac_path_SED" --version 2>&1` in
-*GNU*)
- ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo '' >> "conftest.nl"
- "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_SED_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_SED="$ac_path_SED"
- ac_path_SED_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_SED_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_SED"; then
- as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
- fi
-else
- ac_cv_path_SED=$SED
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
-$as_echo "$ac_cv_path_SED" >&6; }
- SED="$ac_cv_path_SED"
- rm -f conftest.sed
-
-test -z "$SED" && SED=sed
-Xsed="$SED -e 1s/^X//"
-
-
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
-$as_echo_n "checking for fgrep... " >&6; }
-if ${ac_cv_path_FGREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
- then ac_cv_path_FGREP="$GREP -F"
- else
- if test -z "$FGREP"; then
- ac_path_FGREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in fgrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_FGREP" || continue
-# Check for GNU ac_path_FGREP and select it if it is found.
- # Check for GNU $ac_path_FGREP
-case `"$ac_path_FGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'FGREP' >> "conftest.nl"
- "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_FGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_FGREP="$ac_path_FGREP"
- ac_path_FGREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_FGREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_FGREP"; then
- as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_FGREP=$FGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
-$as_echo "$ac_cv_path_FGREP" >&6; }
- FGREP="$ac_cv_path_FGREP"
-
-
-test -z "$GREP" && GREP=grep
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then :
- withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
-else
- with_gnu_ld=no
-fi
-
-ac_prog=ld
-if test yes = "$GCC"; then
- # Check if gcc -print-prog-name=ld gives a path.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
-$as_echo_n "checking for ld used by $CC... " >&6; }
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return, which upsets mingw
- ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
- *)
- ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
- esac
- case $ac_prog in
- # Accept absolute paths.
- [\\/]* | ?:[\\/]*)
- re_direlt='/[^/][^/]*/\.\./'
- # Canonicalize the pathname of ld
- ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
- while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD=$ac_prog
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test yes = "$with_gnu_ld"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
-$as_echo_n "checking for GNU ld... " >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
-$as_echo_n "checking for non-GNU ld... " >&6; }
-fi
-if ${lt_cv_path_LD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -z "$LD"; then
- lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH; do
- IFS=$lt_save_ifs
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- lt_cv_path_LD=$ac_dir/$ac_prog
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some variants of GNU ld only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
- *GNU* | *'with BFD'*)
- test no != "$with_gnu_ld" && break
- ;;
- *)
- test yes != "$with_gnu_ld" && break
- ;;
- esac
- fi
- done
- IFS=$lt_save_ifs
-else
- lt_cv_path_LD=$LD # Let the user override the test with a path.
-fi
-fi
-
-LD=$lt_cv_path_LD
-if test -n "$LD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
-$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if ${lt_cv_prog_gnu_ld+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- # I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
- lt_cv_prog_gnu_ld=yes
- ;;
-*)
- lt_cv_prog_gnu_ld=no
- ;;
-esac
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
-$as_echo "$lt_cv_prog_gnu_ld" >&6; }
-with_gnu_ld=$lt_cv_prog_gnu_ld
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
-$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
-if ${lt_cv_path_NM+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$NM"; then
- # Let the user override the test.
- lt_cv_path_NM=$NM
-else
- lt_nm_to_check=${ac_tool_prefix}nm
- if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
- lt_nm_to_check="$lt_nm_to_check nm"
- fi
- for lt_tmp_nm in $lt_nm_to_check; do
- lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
- IFS=$lt_save_ifs
- test -z "$ac_dir" && ac_dir=.
- tmp_nm=$ac_dir/$lt_tmp_nm
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
- # Check to see if the nm accepts a BSD-compat flag.
- # Adding the 'sed 1q' prevents false positives on HP-UX, which says:
- # nm: unknown option "B" ignored
- # Tru64's nm complains that /dev/null is an invalid object file
- # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
- case $build_os in
- mingw*) lt_bad_file=conftest.nm/nofile ;;
- *) lt_bad_file=/dev/null ;;
- esac
- case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in
- *$lt_bad_file* | *'Invalid file or object type'*)
- lt_cv_path_NM="$tmp_nm -B"
- break 2
- ;;
- *)
- case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in
- */dev/null*)
- lt_cv_path_NM="$tmp_nm -p"
- break 2
- ;;
- *)
- lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
- continue # so that we can try to find one that supports BSD flags
- ;;
- esac
- ;;
- esac
- fi
- done
- IFS=$lt_save_ifs
- done
- : ${lt_cv_path_NM=no}
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
-$as_echo "$lt_cv_path_NM" >&6; }
-if test no != "$lt_cv_path_NM"; then
- NM=$lt_cv_path_NM
-else
- # Didn't find any BSD compatible name lister, look for dumpbin.
- if test -n "$DUMPBIN"; then :
- # Let the user override the test.
- else
- if test -n "$ac_tool_prefix"; then
- for ac_prog in dumpbin "link -dump"
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DUMPBIN+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$DUMPBIN"; then
- ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-DUMPBIN=$ac_cv_prog_DUMPBIN
-if test -n "$DUMPBIN"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
-$as_echo "$DUMPBIN" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$DUMPBIN" && break
- done
-fi
-if test -z "$DUMPBIN"; then
- ac_ct_DUMPBIN=$DUMPBIN
- for ac_prog in dumpbin "link -dump"
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_DUMPBIN"; then
- ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
-if test -n "$ac_ct_DUMPBIN"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
-$as_echo "$ac_ct_DUMPBIN" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_DUMPBIN" && break
-done
-
- if test "x$ac_ct_DUMPBIN" = x; then
- DUMPBIN=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- DUMPBIN=$ac_ct_DUMPBIN
- fi
-fi
-
- case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in
- *COFF*)
- DUMPBIN="$DUMPBIN -symbols -headers"
- ;;
- *)
- DUMPBIN=:
- ;;
- esac
- fi
-
- if test : != "$DUMPBIN"; then
- NM=$DUMPBIN
- fi
-fi
-test -z "$NM" && NM=nm
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
-$as_echo_n "checking the name lister ($NM) interface... " >&6; }
-if ${lt_cv_nm_interface+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_nm_interface="BSD nm"
- echo "int some_variable = 0;" > conftest.$ac_ext
- (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
- (eval "$ac_compile" 2>conftest.err)
- cat conftest.err >&5
- (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
- (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
- cat conftest.err >&5
- (eval echo "\"\$as_me:$LINENO: output\"" >&5)
- cat conftest.out >&5
- if $GREP 'External.*some_variable' conftest.out > /dev/null; then
- lt_cv_nm_interface="MS dumpbin"
- fi
- rm -f conftest*
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
-$as_echo "$lt_cv_nm_interface" >&6; }
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
-$as_echo_n "checking whether ln -s works... " >&6; }
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
-fi
-
-# find the maximum length of command line arguments
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
-$as_echo_n "checking the maximum length of command line arguments... " >&6; }
-if ${lt_cv_sys_max_cmd_len+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- i=0
- teststring=ABCD
-
- case $build_os in
- msdosdjgpp*)
- # On DJGPP, this test can blow up pretty badly due to problems in libc
- # (any single argument exceeding 2000 bytes causes a buffer overrun
- # during glob expansion). Even if it were fixed, the result of this
- # check would be larger than it should be.
- lt_cv_sys_max_cmd_len=12288; # 12K is about right
- ;;
-
- gnu*)
- # Under GNU Hurd, this test is not required because there is
- # no limit to the length of command line arguments.
- # Libtool will interpret -1 as no limit whatsoever
- lt_cv_sys_max_cmd_len=-1;
- ;;
-
- cygwin* | mingw* | cegcc*)
- # On Win9x/ME, this test blows up -- it succeeds, but takes
- # about 5 minutes as the teststring grows exponentially.
- # Worse, since 9x/ME are not pre-emptively multitasking,
- # you end up with a "frozen" computer, even though with patience
- # the test eventually succeeds (with a max line length of 256k).
- # Instead, let's just punt: use the minimum linelength reported by
- # all of the supported platforms: 8192 (on NT/2K/XP).
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
- mint*)
- # On MiNT this can take a long time and run out of memory.
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
- amigaos*)
- # On AmigaOS with pdksh, this test takes hours, literally.
- # So we just punt and use a minimum line length of 8192.
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
- bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*)
- # This has been around since 386BSD, at least. Likely further.
- if test -x /sbin/sysctl; then
- lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
- elif test -x /usr/sbin/sysctl; then
- lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
- else
- lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
- fi
- # And add a safety zone
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
- ;;
-
- interix*)
- # We know the value 262144 and hardcode it with a safety zone (like BSD)
- lt_cv_sys_max_cmd_len=196608
- ;;
-
- os2*)
- # The test takes a long time on OS/2.
- lt_cv_sys_max_cmd_len=8192
- ;;
-
- osf*)
- # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
- # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
- # nice to cause kernel panics so lets avoid the loop below.
- # First set a reasonable default.
- lt_cv_sys_max_cmd_len=16384
- #
- if test -x /sbin/sysconfig; then
- case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
- *1*) lt_cv_sys_max_cmd_len=-1 ;;
- esac
- fi
- ;;
- sco3.2v5*)
- lt_cv_sys_max_cmd_len=102400
- ;;
- sysv5* | sco5v6* | sysv4.2uw2*)
- kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
- if test -n "$kargmax"; then
- lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[ ]//'`
- else
- lt_cv_sys_max_cmd_len=32768
- fi
- ;;
- *)
- lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
- if test -n "$lt_cv_sys_max_cmd_len" && \
- test undefined != "$lt_cv_sys_max_cmd_len"; then
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
- else
- # Make teststring a little bigger before we do anything with it.
- # a 1K string should be a reasonable start.
- for i in 1 2 3 4 5 6 7 8; do
- teststring=$teststring$teststring
- done
- SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
- # If test is not a shell built-in, we'll probably end up computing a
- # maximum length that is only half of the actual maximum length, but
- # we can't tell.
- while { test X`env echo "$teststring$teststring" 2>/dev/null` \
- = "X$teststring$teststring"; } >/dev/null 2>&1 &&
- test 17 != "$i" # 1/2 MB should be enough
- do
- i=`expr $i + 1`
- teststring=$teststring$teststring
- done
- # Only check the string length outside the loop.
- lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
- teststring=
- # Add a significant safety factor because C++ compilers can tack on
- # massive amounts of additional arguments before passing them to the
- # linker. It appears as though 1/2 is a usable value.
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
- fi
- ;;
- esac
-
-fi
-
-if test -n "$lt_cv_sys_max_cmd_len"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
-$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
-$as_echo "none" >&6; }
-fi
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-
-
-
-
-
-: ${CP="cp -f"}
-: ${MV="mv -f"}
-: ${RM="rm -f"}
-
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- lt_unset=unset
-else
- lt_unset=false
-fi
-
-
-
-
-
-# test EBCDIC or ASCII
-case `echo X|tr X '\101'` in
- A) # ASCII based system
- # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
- lt_SP2NL='tr \040 \012'
- lt_NL2SP='tr \015\012 \040\040'
- ;;
- *) # EBCDIC based system
- lt_SP2NL='tr \100 \n'
- lt_NL2SP='tr \r\n \100\100'
- ;;
-esac
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
-$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
-if ${lt_cv_to_host_file_cmd+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $host in
- *-*-mingw* )
- case $build in
- *-*-mingw* ) # actually msys
- lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
- ;;
- *-*-cygwin* )
- lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
- ;;
- * ) # otherwise, assume *nix
- lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
- ;;
- esac
- ;;
- *-*-cygwin* )
- case $build in
- *-*-mingw* ) # actually msys
- lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
- ;;
- *-*-cygwin* )
- lt_cv_to_host_file_cmd=func_convert_file_noop
- ;;
- * ) # otherwise, assume *nix
- lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
- ;;
- esac
- ;;
- * ) # unhandled hosts (and "normal" native builds)
- lt_cv_to_host_file_cmd=func_convert_file_noop
- ;;
-esac
-
-fi
-
-to_host_file_cmd=$lt_cv_to_host_file_cmd
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
-$as_echo "$lt_cv_to_host_file_cmd" >&6; }
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
-$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
-if ${lt_cv_to_tool_file_cmd+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- #assume ordinary cross tools, or native build.
-lt_cv_to_tool_file_cmd=func_convert_file_noop
-case $host in
- *-*-mingw* )
- case $build in
- *-*-mingw* ) # actually msys
- lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
- ;;
- esac
- ;;
-esac
-
-fi
-
-to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
-$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
-$as_echo_n "checking for $LD option to reload object files... " >&6; }
-if ${lt_cv_ld_reload_flag+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_ld_reload_flag='-r'
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
-$as_echo "$lt_cv_ld_reload_flag" >&6; }
-reload_flag=$lt_cv_ld_reload_flag
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-case $host_os in
- cygwin* | mingw* | pw32* | cegcc*)
- if test yes != "$GCC"; then
- reload_cmds=false
- fi
- ;;
- darwin*)
- if test yes = "$GCC"; then
- reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
- else
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- fi
- ;;
-esac
-
-
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}file", so it can be a program name with args.
-set dummy ${ac_tool_prefix}file; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_FILECMD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$FILECMD"; then
- ac_cv_prog_FILECMD="$FILECMD" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_FILECMD="${ac_tool_prefix}file"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-FILECMD=$ac_cv_prog_FILECMD
-if test -n "$FILECMD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FILECMD" >&5
-$as_echo "$FILECMD" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_FILECMD"; then
- ac_ct_FILECMD=$FILECMD
- # Extract the first word of "file", so it can be a program name with args.
-set dummy file; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_FILECMD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_FILECMD"; then
- ac_cv_prog_ac_ct_FILECMD="$ac_ct_FILECMD" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_FILECMD="file"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_FILECMD=$ac_cv_prog_ac_ct_FILECMD
-if test -n "$ac_ct_FILECMD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FILECMD" >&5
-$as_echo "$ac_ct_FILECMD" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_FILECMD" = x; then
- FILECMD=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- FILECMD=$ac_ct_FILECMD
- fi
-else
- FILECMD="$ac_cv_prog_FILECMD"
-fi
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
-set dummy ${ac_tool_prefix}objdump; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OBJDUMP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$OBJDUMP"; then
- ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-OBJDUMP=$ac_cv_prog_OBJDUMP
-if test -n "$OBJDUMP"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
-$as_echo "$OBJDUMP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_OBJDUMP"; then
- ac_ct_OBJDUMP=$OBJDUMP
- # Extract the first word of "objdump", so it can be a program name with args.
-set dummy objdump; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_OBJDUMP"; then
- ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_OBJDUMP="objdump"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
-if test -n "$ac_ct_OBJDUMP"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
-$as_echo "$ac_ct_OBJDUMP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_OBJDUMP" = x; then
- OBJDUMP="false"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- OBJDUMP=$ac_ct_OBJDUMP
- fi
-else
- OBJDUMP="$ac_cv_prog_OBJDUMP"
-fi
-
-test -z "$OBJDUMP" && OBJDUMP=objdump
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
-$as_echo_n "checking how to recognize dependent libraries... " >&6; }
-if ${lt_cv_deplibs_check_method+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# 'unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# that responds to the $file_magic_cmd with a given extended regex.
-# If you have 'file' or equivalent on your system and you're not sure
-# whether 'pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix[4-9]*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-beos*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-bsdi[45]*)
- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
- lt_cv_file_magic_cmd='$FILECMD -L'
- lt_cv_file_magic_test_file=/shlib/libc.so
- ;;
-
-cygwin*)
- # func_win32_libid is a shell function defined in ltmain.sh
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- ;;
-
-mingw* | pw32*)
- # Base MSYS/MinGW do not provide the 'file' command needed by
- # func_win32_libid shell function, so use a weaker test based on 'objdump',
- # unless we find 'file', for example because we are cross-compiling.
- if ( file / ) >/dev/null 2>&1; then
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- else
- # Keep this pattern in sync with the one in func_win32_libid.
- lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- fi
- ;;
-
-cegcc*)
- # use the weaker test based on 'objdump'. See mingw*.
- lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- ;;
-
-darwin* | rhapsody*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-freebsd* | dragonfly* | midnightbsd*)
- if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
- case $host_cpu in
- i*86 )
- # Not sure whether the presence of OpenBSD here was a mistake.
- # Let's accept both of them until this is cleared up.
- lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
- lt_cv_file_magic_cmd=$FILECMD
- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
- ;;
- esac
- else
- lt_cv_deplibs_check_method=pass_all
- fi
- ;;
-
-haiku*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-hpux10.20* | hpux11*)
- lt_cv_file_magic_cmd=$FILECMD
- case $host_cpu in
- ia64*)
- lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
- lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
- ;;
- hppa*64*)
- lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
- lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
- ;;
- *)
- lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
- lt_cv_file_magic_test_file=/usr/lib/libc.sl
- ;;
- esac
- ;;
-
-interix[3-9]*)
- # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $LD in
- *-32|*"-32 ") libmagic=32-bit;;
- *-n32|*"-n32 ") libmagic=N32;;
- *-64|*"-64 ") libmagic=64-bit;;
- *) libmagic=never-match;;
- esac
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-# This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-netbsd*)
- if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
- else
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
- fi
- ;;
-
-newos6*)
- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
- lt_cv_file_magic_cmd=$FILECMD
- lt_cv_file_magic_test_file=/usr/lib/libnls.so
- ;;
-
-*nto* | *qnx*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-openbsd* | bitrig*)
- if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
- else
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
- fi
- ;;
-
-osf3* | osf4* | osf5*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-rdos*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-solaris*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-sysv4 | sysv4.3*)
- case $host_vendor in
- motorola)
- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
- ;;
- ncr)
- lt_cv_deplibs_check_method=pass_all
- ;;
- sequent)
- lt_cv_file_magic_cmd='/bin/file'
- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
- ;;
- sni)
- lt_cv_file_magic_cmd='/bin/file'
- lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
- lt_cv_file_magic_test_file=/lib/libc.so
- ;;
- siemens)
- lt_cv_deplibs_check_method=pass_all
- ;;
- pc)
- lt_cv_deplibs_check_method=pass_all
- ;;
- esac
- ;;
-
-tpf*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-os2*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-esac
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
-$as_echo "$lt_cv_deplibs_check_method" >&6; }
-
-file_magic_glob=
-want_nocaseglob=no
-if test "$build" = "$host"; then
- case $host_os in
- mingw* | pw32*)
- if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
- want_nocaseglob=yes
- else
- file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
- fi
- ;;
- esac
-fi
-
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
-set dummy ${ac_tool_prefix}dlltool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DLLTOOL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$DLLTOOL"; then
- ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-DLLTOOL=$ac_cv_prog_DLLTOOL
-if test -n "$DLLTOOL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-$as_echo "$DLLTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_DLLTOOL"; then
- ac_ct_DLLTOOL=$DLLTOOL
- # Extract the first word of "dlltool", so it can be a program name with args.
-set dummy dlltool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_DLLTOOL"; then
- ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_DLLTOOL="dlltool"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
-if test -n "$ac_ct_DLLTOOL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-$as_echo "$ac_ct_DLLTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_DLLTOOL" = x; then
- DLLTOOL="false"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- DLLTOOL=$ac_ct_DLLTOOL
- fi
-else
- DLLTOOL="$ac_cv_prog_DLLTOOL"
-fi
-
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
-$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
-if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_sharedlib_from_linklib_cmd='unknown'
-
-case $host_os in
-cygwin* | mingw* | pw32* | cegcc*)
- # two different shell functions defined in ltmain.sh;
- # decide which one to use based on capabilities of $DLLTOOL
- case `$DLLTOOL --help 2>&1` in
- *--identify-strict*)
- lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
- ;;
- *)
- lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
- ;;
- esac
- ;;
-*)
- # fallback: assume linklib IS sharedlib
- lt_cv_sharedlib_from_linklib_cmd=$ECHO
- ;;
-esac
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
-$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
-sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
-test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
- for ac_prog in ar
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AR+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$AR"; then
- ac_cv_prog_AR="$AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$AR" && break
- done
-fi
-if test -z "$AR"; then
- ac_ct_AR=$AR
- for ac_prog in ar
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AR+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_AR"; then
- ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_AR="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_AR" && break
-done
-
- if test "x$ac_ct_AR" = x; then
- AR="false"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- AR=$ac_ct_AR
- fi
-fi
-
-: ${AR=ar}
-
-
-
-
-
-
-# Use ARFLAGS variable as AR's operation code to sync the variable naming with
-# Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have
-# higher priority because thats what people were doing historically (setting
-# ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS
-# variable obsoleted/removed.
-
-test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr}
-lt_ar_flags=$AR_FLAGS
-
-
-
-
-
-
-# Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override
-# by AR_FLAGS because that was never working and AR_FLAGS is about to die.
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
-$as_echo_n "checking for archiver @FILE support... " >&6; }
-if ${lt_cv_ar_at_file+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_ar_at_file=no
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- echo conftest.$ac_objext > conftest.lst
- lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
- (eval $lt_ar_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if test 0 -eq "$ac_status"; then
- # Ensure the archiver fails upon bogus file names.
- rm -f conftest.$ac_objext libconftest.a
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
- (eval $lt_ar_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if test 0 -ne "$ac_status"; then
- lt_cv_ar_at_file=@
- fi
- fi
- rm -f conftest.* libconftest.a
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
-$as_echo "$lt_cv_ar_at_file" >&6; }
-
-if test no = "$lt_cv_ar_at_file"; then
- archiver_list_spec=
-else
- archiver_list_spec=$lt_cv_ar_at_file
-fi
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_STRIP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$STRIP"; then
- ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_STRIP="${ac_tool_prefix}strip"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_STRIP"; then
- ac_ct_STRIP=$STRIP
- # Extract the first word of "strip", so it can be a program name with args.
-set dummy strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_STRIP"; then
- ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_STRIP="strip"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_STRIP" = x; then
- STRIP=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- STRIP=$ac_ct_STRIP
- fi
-else
- STRIP="$ac_cv_prog_STRIP"
-fi
-
-test -z "$STRIP" && STRIP=:
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
- ac_ct_RANLIB=$RANLIB
- # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_RANLIB"; then
- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_RANLIB="ranlib"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_RANLIB" = x; then
- RANLIB=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- RANLIB=$ac_ct_RANLIB
- fi
-else
- RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-test -z "$RANLIB" && RANLIB=:
-
-
-
-
-
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
- case $host_os in
- bitrig* | openbsd*)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
- ;;
- *)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
- ;;
- esac
- old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
-fi
-
-case $host_os in
- darwin*)
- lock_old_archive_extraction=yes ;;
- *)
- lock_old_archive_extraction=no ;;
-esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-for ac_prog in gawk mawk nawk awk
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AWK+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$AWK"; then
- ac_cv_prog_AWK="$AWK" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_AWK="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-AWK=$ac_cv_prog_AWK
-if test -n "$AWK"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
-$as_echo "$AWK" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$AWK" && break
-done
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
-$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
-if ${lt_cv_sys_global_symbol_pipe+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix. What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[BCDEGRST]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
-
-# Define system-specific variables.
-case $host_os in
-aix*)
- symcode='[BCDT]'
- ;;
-cygwin* | mingw* | pw32* | cegcc*)
- symcode='[ABCDGISTW]'
- ;;
-hpux*)
- if test ia64 = "$host_cpu"; then
- symcode='[ABCDEGRST]'
- fi
- ;;
-irix* | nonstopux*)
- symcode='[BCDEGRST]'
- ;;
-osf*)
- symcode='[BCDEGQRST]'
- ;;
-solaris*)
- symcode='[BDRT]'
- ;;
-sco3.2v5*)
- symcode='[DT]'
- ;;
-sysv4.2uw2*)
- symcode='[DT]'
- ;;
-sysv5* | sco5v6* | unixware* | OpenUNIX*)
- symcode='[ABDT]'
- ;;
-sysv4)
- symcode='[DFNSTU]'
- ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
- symcode='[ABCDGIRSTW]' ;;
-esac
-
-if test "$lt_cv_nm_interface" = "MS dumpbin"; then
- # Gets list of data symbols to import.
- lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'"
- # Adjust the below global symbol transforms to fixup imported variables.
- lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
- lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
- lt_c_name_lib_hook="\
- -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\
- -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'"
-else
- # Disable hooks by default.
- lt_cv_sys_global_symbol_to_import=
- lt_cdecl_hook=
- lt_c_name_hook=
- lt_c_name_lib_hook=
-fi
-
-# Transform an extracted symbol line into a proper C declaration.
-# Some systems (esp. on ia64) link data and code symbols differently,
-# so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="$SED -n"\
-$lt_cdecl_hook\
-" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
-" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\
-$lt_c_name_hook\
-" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
-" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
-
-# Transform an extracted symbol line into symbol name with lib prefix and
-# symbol address.
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\
-$lt_c_name_lib_hook\
-" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
-" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
-" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'"
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $build_os in
-mingw*)
- opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
- ;;
-esac
-
-# Try without a prefix underscore, then with it.
-for ac_symprfx in "" "_"; do
-
- # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
- symxfrm="\\1 $ac_symprfx\\2 \\2"
-
- # Write the raw and C identifiers.
- if test "$lt_cv_nm_interface" = "MS dumpbin"; then
- # Fake it for dumpbin and say T for any non-static function,
- # D for any global variable and I for any imported variable.
- # Also find C++ and __fastcall symbols from MSVC++ or ICC,
- # which start with @ or ?.
- lt_cv_sys_global_symbol_pipe="$AWK '"\
-" {last_section=section; section=\$ 3};"\
-" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
-" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
-" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
-" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
-" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
-" \$ 0!~/External *\|/{next};"\
-" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
-" {if(hide[section]) next};"\
-" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
-" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
-" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
-" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
-" ' prfx=^$ac_symprfx"
- else
- lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
- fi
- lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'"
-
- # Check to see that the pipe works correctly.
- pipe_works=no
-
- rm -f conftest*
- cat > conftest.$ac_ext <<_LT_EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(void);
-void nm_test_func(void){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-_LT_EOF
-
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- # Now try to grab the symbols.
- nlist=conftest.nm
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
- (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && test -s "$nlist"; then
- # Try sorting and uniquifying the output.
- if sort "$nlist" | uniq > "$nlist"T; then
- mv -f "$nlist"T "$nlist"
- else
- rm -f "$nlist"T
- fi
-
- # Make sure that we snagged all the symbols we need.
- if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
- if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<_LT_EOF > conftest.$ac_ext
-/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
-#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
-/* DATA imports from DLLs on WIN32 can't be const, because runtime
- relocations are performed -- see ld's documentation on pseudo-relocs. */
-# define LT_DLSYM_CONST
-#elif defined __osf__
-/* This system does not cope well with relocations in const data. */
-# define LT_DLSYM_CONST
-#else
-# define LT_DLSYM_CONST const
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-_LT_EOF
- # Now generate the symbol file.
- eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
-
- cat <<_LT_EOF >> conftest.$ac_ext
-
-/* The mapping between symbol names and symbols. */
-LT_DLSYM_CONST struct {
- const char *name;
- void *address;
-}
-lt__PROGRAM__LTX_preloaded_symbols[] =
-{
- { "@PROGRAM@", (void *) 0 },
-_LT_EOF
- $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
- cat <<\_LT_EOF >> conftest.$ac_ext
- {0, (void *) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
- return lt__PROGRAM__LTX_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-_LT_EOF
- # Now try linking the two files.
- mv conftest.$ac_objext conftstm.$ac_objext
- lt_globsym_save_LIBS=$LIBS
- lt_globsym_save_CFLAGS=$CFLAGS
- LIBS=conftstm.$ac_objext
- CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && test -s conftest$ac_exeext; then
- pipe_works=yes
- fi
- LIBS=$lt_globsym_save_LIBS
- CFLAGS=$lt_globsym_save_CFLAGS
- else
- echo "cannot find nm_test_func in $nlist" >&5
- fi
- else
- echo "cannot find nm_test_var in $nlist" >&5
- fi
- else
- echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
- fi
- else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- fi
- rm -rf conftest* conftst*
-
- # Do not use the global_symbol_pipe unless it works.
- if test yes = "$pipe_works"; then
- break
- else
- lt_cv_sys_global_symbol_pipe=
- fi
-done
-
-fi
-
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
- lt_cv_sys_global_symbol_to_cdecl=
-fi
-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
-$as_echo "failed" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-$as_echo "ok" >&6; }
-fi
-
-# Response file support.
-if test "$lt_cv_nm_interface" = "MS dumpbin"; then
- nm_file_list_spec='@'
-elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
- nm_file_list_spec='@'
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
-$as_echo_n "checking for sysroot... " >&6; }
-
-# Check whether --with-sysroot was given.
-if test "${with_sysroot+set}" = set; then :
- withval=$with_sysroot;
-else
- with_sysroot=no
-fi
-
-
-lt_sysroot=
-case $with_sysroot in #(
- yes)
- if test yes = "$GCC"; then
- lt_sysroot=`$CC --print-sysroot 2>/dev/null`
- fi
- ;; #(
- /*)
- lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"`
- ;; #(
- no|'')
- ;; #(
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5
-$as_echo "$with_sysroot" >&6; }
- as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
- ;;
-esac
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
-$as_echo "${lt_sysroot:-no}" >&6; }
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5
-$as_echo_n "checking for a working dd... " >&6; }
-if ${ac_cv_path_lt_DD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- printf 0123456789abcdef0123456789abcdef >conftest.i
-cat conftest.i conftest.i >conftest2.i
-: ${lt_DD:=$DD}
-if test -z "$lt_DD"; then
- ac_path_lt_DD_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in dd; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_lt_DD" || continue
-if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
- cmp -s conftest.i conftest.out \
- && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
-fi
- $ac_path_lt_DD_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_lt_DD"; then
- :
- fi
-else
- ac_cv_path_lt_DD=$lt_DD
-fi
-
-rm -f conftest.i conftest2.i conftest.out
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
-$as_echo "$ac_cv_path_lt_DD" >&6; }
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5
-$as_echo_n "checking how to truncate binary pipes... " >&6; }
-if ${lt_cv_truncate_bin+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- printf 0123456789abcdef0123456789abcdef >conftest.i
-cat conftest.i conftest.i >conftest2.i
-lt_cv_truncate_bin=
-if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
- cmp -s conftest.i conftest.out \
- && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
-fi
-rm -f conftest.i conftest2.i conftest.out
-test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
-$as_echo "$lt_cv_truncate_bin" >&6; }
-
-
-
-
-
-
-
-# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
-func_cc_basename ()
-{
- for cc_temp in $*""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
- done
- func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
-}
-
-# Check whether --enable-libtool-lock was given.
-if test "${enable_libtool_lock+set}" = set; then :
- enableval=$enable_libtool_lock;
-fi
-
-test no = "$enable_libtool_lock" || enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-ia64-*-hpux*)
- # Find out what ABI is being produced by ac_compile, and set mode
- # options accordingly.
- echo 'int i;' > conftest.$ac_ext
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- case `$FILECMD conftest.$ac_objext` in
- *ELF-32*)
- HPUX_IA64_MODE=32
- ;;
- *ELF-64*)
- HPUX_IA64_MODE=64
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-*-*-irix6*)
- # Find out what ABI is being produced by ac_compile, and set linker
- # options accordingly.
- echo '#line '$LINENO' "configure"' > conftest.$ac_ext
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- if test yes = "$lt_cv_prog_gnu_ld"; then
- case `$FILECMD conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -melf32bsmip"
- ;;
- *N32*)
- LD="${LD-ld} -melf32bmipn32"
- ;;
- *64-bit*)
- LD="${LD-ld} -melf64bmip"
- ;;
- esac
- else
- case `$FILECMD conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -32"
- ;;
- *N32*)
- LD="${LD-ld} -n32"
- ;;
- *64-bit*)
- LD="${LD-ld} -64"
- ;;
- esac
- fi
- fi
- rm -rf conftest*
- ;;
-
-mips64*-*linux*)
- # Find out what ABI is being produced by ac_compile, and set linker
- # options accordingly.
- echo '#line '$LINENO' "configure"' > conftest.$ac_ext
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- emul=elf
- case `$FILECMD conftest.$ac_objext` in
- *32-bit*)
- emul="${emul}32"
- ;;
- *64-bit*)
- emul="${emul}64"
- ;;
- esac
- case `$FILECMD conftest.$ac_objext` in
- *MSB*)
- emul="${emul}btsmip"
- ;;
- *LSB*)
- emul="${emul}ltsmip"
- ;;
- esac
- case `$FILECMD conftest.$ac_objext` in
- *N32*)
- emul="${emul}n32"
- ;;
- esac
- LD="${LD-ld} -m $emul"
- fi
- rm -rf conftest*
- ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
-s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
- # Find out what ABI is being produced by ac_compile, and set linker
- # options accordingly. Note that the listed cases only cover the
- # situations where additional linker options are needed (such as when
- # doing 32-bit compilation for a host where ld defaults to 64-bit, or
- # vice versa); the common cases where no linker options are needed do
- # not appear in the list.
- echo 'int i;' > conftest.$ac_ext
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- case `$FILECMD conftest.o` in
- *32-bit*)
- case $host in
- x86_64-*kfreebsd*-gnu)
- LD="${LD-ld} -m elf_i386_fbsd"
- ;;
- x86_64-*linux*)
- case `$FILECMD conftest.o` in
- *x86-64*)
- LD="${LD-ld} -m elf32_x86_64"
- ;;
- *)
- LD="${LD-ld} -m elf_i386"
- ;;
- esac
- ;;
- powerpc64le-*linux*)
- LD="${LD-ld} -m elf32lppclinux"
- ;;
- powerpc64-*linux*)
- LD="${LD-ld} -m elf32ppclinux"
- ;;
- s390x-*linux*)
- LD="${LD-ld} -m elf_s390"
- ;;
- sparc64-*linux*)
- LD="${LD-ld} -m elf32_sparc"
- ;;
- esac
- ;;
- *64-bit*)
- case $host in
- x86_64-*kfreebsd*-gnu)
- LD="${LD-ld} -m elf_x86_64_fbsd"
- ;;
- x86_64-*linux*)
- LD="${LD-ld} -m elf_x86_64"
- ;;
- powerpcle-*linux*)
- LD="${LD-ld} -m elf64lppc"
- ;;
- powerpc-*linux*)
- LD="${LD-ld} -m elf64ppc"
- ;;
- s390*-*linux*|s390*-*tpf*)
- LD="${LD-ld} -m elf64_s390"
- ;;
- sparc*-*linux*)
- LD="${LD-ld} -m elf64_sparc"
- ;;
- esac
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-
-*-*-sco3.2v5*)
- # On SCO OpenServer 5, we need -belf to get full-featured binaries.
- SAVE_CFLAGS=$CFLAGS
- CFLAGS="$CFLAGS -belf"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
-$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
-if ${lt_cv_cc_needs_belf+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- lt_cv_cc_needs_belf=yes
-else
- lt_cv_cc_needs_belf=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
-$as_echo "$lt_cv_cc_needs_belf" >&6; }
- if test yes != "$lt_cv_cc_needs_belf"; then
- # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
- CFLAGS=$SAVE_CFLAGS
- fi
- ;;
-*-*solaris*)
- # Find out what ABI is being produced by ac_compile, and set linker
- # options accordingly.
- echo 'int i;' > conftest.$ac_ext
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- case `$FILECMD conftest.o` in
- *64-bit*)
- case $lt_cv_prog_gnu_ld in
- yes*)
- case $host in
- i?86-*-solaris*|x86_64-*-solaris*)
- LD="${LD-ld} -m elf_x86_64"
- ;;
- sparc*-*-solaris*)
- LD="${LD-ld} -m elf64_sparc"
- ;;
- esac
- # GNU ld 2.21 introduced _sol2 emulations. Use them if available.
- if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
- LD=${LD-ld}_sol2
- fi
- ;;
- *)
- if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
- LD="${LD-ld} -64"
- fi
- ;;
- esac
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-esac
-
-need_locks=$enable_libtool_lock
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
-set dummy ${ac_tool_prefix}mt; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$MANIFEST_TOOL"; then
- ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
-if test -n "$MANIFEST_TOOL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
-$as_echo "$MANIFEST_TOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
- ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
- # Extract the first word of "mt", so it can be a program name with args.
-set dummy mt; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_MANIFEST_TOOL"; then
- ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
-if test -n "$ac_ct_MANIFEST_TOOL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
-$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_MANIFEST_TOOL" = x; then
- MANIFEST_TOOL=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
- fi
-else
- MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
-fi
-
-test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
-$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
-if ${lt_cv_path_mainfest_tool+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_path_mainfest_tool=no
- echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
- $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
- cat conftest.err >&5
- if $GREP 'Manifest Tool' conftest.out > /dev/null; then
- lt_cv_path_mainfest_tool=yes
- fi
- rm -f conftest*
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
-$as_echo "$lt_cv_path_mainfest_tool" >&6; }
-if test yes != "$lt_cv_path_mainfest_tool"; then
- MANIFEST_TOOL=:
-fi
-
-
-
-
-
-
- case $host_os in
- rhapsody* | darwin*)
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
-set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DSYMUTIL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$DSYMUTIL"; then
- ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-DSYMUTIL=$ac_cv_prog_DSYMUTIL
-if test -n "$DSYMUTIL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
-$as_echo "$DSYMUTIL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_DSYMUTIL"; then
- ac_ct_DSYMUTIL=$DSYMUTIL
- # Extract the first word of "dsymutil", so it can be a program name with args.
-set dummy dsymutil; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_DSYMUTIL"; then
- ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
-if test -n "$ac_ct_DSYMUTIL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
-$as_echo "$ac_ct_DSYMUTIL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_DSYMUTIL" = x; then
- DSYMUTIL=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- DSYMUTIL=$ac_ct_DSYMUTIL
- fi
-else
- DSYMUTIL="$ac_cv_prog_DSYMUTIL"
-fi
-
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
-set dummy ${ac_tool_prefix}nmedit; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_NMEDIT+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$NMEDIT"; then
- ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-NMEDIT=$ac_cv_prog_NMEDIT
-if test -n "$NMEDIT"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
-$as_echo "$NMEDIT" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_NMEDIT"; then
- ac_ct_NMEDIT=$NMEDIT
- # Extract the first word of "nmedit", so it can be a program name with args.
-set dummy nmedit; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_NMEDIT"; then
- ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_NMEDIT="nmedit"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
-if test -n "$ac_ct_NMEDIT"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
-$as_echo "$ac_ct_NMEDIT" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_NMEDIT" = x; then
- NMEDIT=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- NMEDIT=$ac_ct_NMEDIT
- fi
-else
- NMEDIT="$ac_cv_prog_NMEDIT"
-fi
-
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
-set dummy ${ac_tool_prefix}lipo; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_LIPO+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$LIPO"; then
- ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-LIPO=$ac_cv_prog_LIPO
-if test -n "$LIPO"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
-$as_echo "$LIPO" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_LIPO"; then
- ac_ct_LIPO=$LIPO
- # Extract the first word of "lipo", so it can be a program name with args.
-set dummy lipo; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_LIPO"; then
- ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_LIPO="lipo"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
-if test -n "$ac_ct_LIPO"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
-$as_echo "$ac_ct_LIPO" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_LIPO" = x; then
- LIPO=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- LIPO=$ac_ct_LIPO
- fi
-else
- LIPO="$ac_cv_prog_LIPO"
-fi
-
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
-set dummy ${ac_tool_prefix}otool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OTOOL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$OTOOL"; then
- ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-OTOOL=$ac_cv_prog_OTOOL
-if test -n "$OTOOL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
-$as_echo "$OTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_OTOOL"; then
- ac_ct_OTOOL=$OTOOL
- # Extract the first word of "otool", so it can be a program name with args.
-set dummy otool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_OTOOL"; then
- ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_OTOOL="otool"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
-if test -n "$ac_ct_OTOOL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
-$as_echo "$ac_ct_OTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_OTOOL" = x; then
- OTOOL=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- OTOOL=$ac_ct_OTOOL
- fi
-else
- OTOOL="$ac_cv_prog_OTOOL"
-fi
-
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
-set dummy ${ac_tool_prefix}otool64; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OTOOL64+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$OTOOL64"; then
- ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-OTOOL64=$ac_cv_prog_OTOOL64
-if test -n "$OTOOL64"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
-$as_echo "$OTOOL64" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_OTOOL64"; then
- ac_ct_OTOOL64=$OTOOL64
- # Extract the first word of "otool64", so it can be a program name with args.
-set dummy otool64; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_OTOOL64"; then
- ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_OTOOL64="otool64"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
-if test -n "$ac_ct_OTOOL64"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
-$as_echo "$ac_ct_OTOOL64" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_OTOOL64" = x; then
- OTOOL64=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- OTOOL64=$ac_ct_OTOOL64
- fi
-else
- OTOOL64="$ac_cv_prog_OTOOL64"
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
-$as_echo_n "checking for -single_module linker flag... " >&6; }
-if ${lt_cv_apple_cc_single_mod+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_apple_cc_single_mod=no
- if test -z "$LT_MULTI_MODULE"; then
- # By default we will add the -single_module flag. You can override
- # by either setting the environment variable LT_MULTI_MODULE
- # non-empty at configure time, or by adding -multi_module to the
- # link flags.
- rm -rf libconftest.dylib*
- echo "int foo(void){return 1;}" > conftest.c
- echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
--dynamiclib -Wl,-single_module conftest.c" >&5
- $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
- -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
- _lt_result=$?
- # If there is a non-empty error log, and "single_module"
- # appears in it, assume the flag caused a linker warning
- if test -s conftest.err && $GREP single_module conftest.err; then
- cat conftest.err >&5
- # Otherwise, if the output was created with a 0 exit code from
- # the compiler, it worked.
- elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
- lt_cv_apple_cc_single_mod=yes
- else
- cat conftest.err >&5
- fi
- rm -rf libconftest.dylib*
- rm -f conftest.*
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
-$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
-$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
-if ${lt_cv_ld_exported_symbols_list+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_ld_exported_symbols_list=no
- save_LDFLAGS=$LDFLAGS
- echo "_main" > conftest.sym
- LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- lt_cv_ld_exported_symbols_list=yes
-else
- lt_cv_ld_exported_symbols_list=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- LDFLAGS=$save_LDFLAGS
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
-$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
-$as_echo_n "checking for -force_load linker flag... " >&6; }
-if ${lt_cv_ld_force_load+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_ld_force_load=no
- cat > conftest.c << _LT_EOF
-int forced_loaded() { return 2;}
-_LT_EOF
- echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
- $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
- echo "$AR $AR_FLAGS libconftest.a conftest.o" >&5
- $AR $AR_FLAGS libconftest.a conftest.o 2>&5
- echo "$RANLIB libconftest.a" >&5
- $RANLIB libconftest.a 2>&5
- cat > conftest.c << _LT_EOF
-int main() { return 0;}
-_LT_EOF
- echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
- $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
- _lt_result=$?
- if test -s conftest.err && $GREP force_load conftest.err; then
- cat conftest.err >&5
- elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
- lt_cv_ld_force_load=yes
- else
- cat conftest.err >&5
- fi
- rm -f conftest.err libconftest.a conftest conftest.c
- rm -rf conftest.dSYM
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
-$as_echo "$lt_cv_ld_force_load" >&6; }
- case $host_os in
- rhapsody* | darwin1.[012])
- _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
- darwin1.*)
- _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
- darwin*)
- case $MACOSX_DEPLOYMENT_TARGET,$host in
- 10.[012],*|,*powerpc*-darwin[5-8]*)
- _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
- *)
- _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
- esac
- ;;
- esac
- if test yes = "$lt_cv_apple_cc_single_mod"; then
- _lt_dar_single_mod='$single_module'
- fi
- if test yes = "$lt_cv_ld_exported_symbols_list"; then
- _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
- else
- _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
- fi
- if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
- _lt_dsymutil='~$DSYMUTIL $lib || :'
- else
- _lt_dsymutil=
- fi
- ;;
- esac
-
-# func_munge_path_list VARIABLE PATH
-# -----------------------------------
-# VARIABLE is name of variable containing _space_ separated list of
-# directories to be munged by the contents of PATH, which is string
-# having a format:
-# "DIR[:DIR]:"
-# string "DIR[ DIR]" will be prepended to VARIABLE
-# ":DIR[:DIR]"
-# string "DIR[ DIR]" will be appended to VARIABLE
-# "DIRP[:DIRP]::[DIRA:]DIRA"
-# string "DIRP[ DIRP]" will be prepended to VARIABLE and string
-# "DIRA[ DIRA]" will be appended to VARIABLE
-# "DIR[:DIR]"
-# VARIABLE will be replaced by "DIR[ DIR]"
-func_munge_path_list ()
-{
- case x$2 in
- x)
- ;;
- *:)
- eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
- ;;
- x:*)
- eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
- ;;
- *::*)
- eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
- eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
- ;;
- *)
- eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
- ;;
- esac
-}
-
-for ac_header in dlfcn.h
-do :
- ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
-"
-if test "x$ac_cv_header_dlfcn_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_DLFCN_H 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-
-# Set options
-
-
-
- enable_dlopen=no
-
-
- enable_win32_dll=no
-
-
- # Check whether --enable-shared was given.
-if test "${enable_shared+set}" = set; then :
- enableval=$enable_shared; p=${PACKAGE-default}
- case $enableval in
- yes) enable_shared=yes ;;
- no) enable_shared=no ;;
- *)
- enable_shared=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
- for pkg in $enableval; do
- IFS=$lt_save_ifs
- if test "X$pkg" = "X$p"; then
- enable_shared=yes
- fi
- done
- IFS=$lt_save_ifs
- ;;
- esac
-else
- enable_shared=yes
-fi
-
-
-
-
-
-
-
-
-
- # Check whether --enable-static was given.
-if test "${enable_static+set}" = set; then :
- enableval=$enable_static; p=${PACKAGE-default}
- case $enableval in
- yes) enable_static=yes ;;
- no) enable_static=no ;;
- *)
- enable_static=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
- for pkg in $enableval; do
- IFS=$lt_save_ifs
- if test "X$pkg" = "X$p"; then
- enable_static=yes
- fi
- done
- IFS=$lt_save_ifs
- ;;
- esac
-else
- enable_static=yes
-fi
-
-
-
-
-
-
-
-
-
-
-# Check whether --with-pic was given.
-if test "${with_pic+set}" = set; then :
- withval=$with_pic; lt_p=${PACKAGE-default}
- case $withval in
- yes|no) pic_mode=$withval ;;
- *)
- pic_mode=default
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
- for lt_pkg in $withval; do
- IFS=$lt_save_ifs
- if test "X$lt_pkg" = "X$lt_p"; then
- pic_mode=yes
- fi
- done
- IFS=$lt_save_ifs
- ;;
- esac
-else
- pic_mode=default
-fi
-
-
-
-
-
-
-
-
- # Check whether --enable-fast-install was given.
-if test "${enable_fast_install+set}" = set; then :
- enableval=$enable_fast_install; p=${PACKAGE-default}
- case $enableval in
- yes) enable_fast_install=yes ;;
- no) enable_fast_install=no ;;
- *)
- enable_fast_install=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
- for pkg in $enableval; do
- IFS=$lt_save_ifs
- if test "X$pkg" = "X$p"; then
- enable_fast_install=yes
- fi
- done
- IFS=$lt_save_ifs
- ;;
- esac
-else
- enable_fast_install=yes
-fi
-
-
-
-
-
-
-
-
- shared_archive_member_spec=
-case $host,$enable_shared in
-power*-*-aix[5-9]*,yes)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5
-$as_echo_n "checking which variant of shared library versioning to provide... " >&6; }
-
-# Check whether --with-aix-soname was given.
-if test "${with_aix_soname+set}" = set; then :
- withval=$with_aix_soname; case $withval in
- aix|svr4|both)
- ;;
- *)
- as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5
- ;;
- esac
- lt_cv_with_aix_soname=$with_aix_soname
-else
- if ${lt_cv_with_aix_soname+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_with_aix_soname=aix
-fi
-
- with_aix_soname=$lt_cv_with_aix_soname
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5
-$as_echo "$with_aix_soname" >&6; }
- if test aix != "$with_aix_soname"; then
- # For the AIX way of multilib, we name the shared archive member
- # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
- # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
- # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
- # the AIX toolchain works better with OBJECT_MODE set (default 32).
- if test 64 = "${OBJECT_MODE-32}"; then
- shared_archive_member_spec=shr_64
- else
- shared_archive_member_spec=shr
- fi
- fi
- ;;
-*)
- with_aix_soname=aix
- ;;
-esac
-
-
-
-
-
-
-
-
-
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS=$ltmain
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-test -z "$LN_S" && LN_S="ln -s"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-if test -n "${ZSH_VERSION+set}"; then
- setopt NO_GLOB_SUBST
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
-$as_echo_n "checking for objdir... " >&6; }
-if ${lt_cv_objdir+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
- lt_cv_objdir=.libs
-else
- # MS-DOS does not allow filenames that begin with a dot.
- lt_cv_objdir=_libs
-fi
-rmdir .libs 2>/dev/null
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
-$as_echo "$lt_cv_objdir" >&6; }
-objdir=$lt_cv_objdir
-
-
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define LT_OBJDIR "$lt_cv_objdir/"
-_ACEOF
-
-
-
-
-case $host_os in
-aix3*)
- # AIX sometimes has problems with the GCC collect2 program. For some
- # reason, if we set the COLLECT_NAMES environment variable, the problems
- # vanish in a puff of smoke.
- if test set != "${COLLECT_NAMES+set}"; then
- COLLECT_NAMES=
- export COLLECT_NAMES
- fi
- ;;
-esac
-
-# Global variables:
-ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a '.a' archive for static linking (except MSVC and
-# ICC, which need '.lib').
-libext=a
-
-with_gnu_ld=$lt_cv_prog_gnu_ld
-
-old_CC=$CC
-old_CFLAGS=$CFLAGS
-
-# Set sane defaults for various variables
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-test -z "$LD" && LD=ld
-test -z "$ac_objext" && ac_objext=o
-
-func_cc_basename $compiler
-cc_basename=$func_cc_basename_result
-
-
-# Only perform the check for file, if the check method requires it
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-case $deplibs_check_method in
-file_magic*)
- if test "$file_magic_cmd" = '$MAGIC_CMD'; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
-$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
-if ${lt_cv_path_MAGIC_CMD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $MAGIC_CMD in
-[\\/*] | ?:[\\/]*)
- lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
- ;;
-*)
- lt_save_MAGIC_CMD=$MAGIC_CMD
- lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
- ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
- for ac_dir in $ac_dummy; do
- IFS=$lt_save_ifs
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/${ac_tool_prefix}file"; then
- lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file"
- if test -n "$file_magic_test_file"; then
- case $deplibs_check_method in
- "file_magic "*)
- file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
- MAGIC_CMD=$lt_cv_path_MAGIC_CMD
- if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
- $EGREP "$file_magic_regex" > /dev/null; then
- :
- else
- cat <<_LT_EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such. This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem. Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-_LT_EOF
- fi ;;
- esac
- fi
- break
- fi
- done
- IFS=$lt_save_ifs
- MAGIC_CMD=$lt_save_MAGIC_CMD
- ;;
-esac
-fi
-
-MAGIC_CMD=$lt_cv_path_MAGIC_CMD
-if test -n "$MAGIC_CMD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-
-
-
-if test -z "$lt_cv_path_MAGIC_CMD"; then
- if test -n "$ac_tool_prefix"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
-$as_echo_n "checking for file... " >&6; }
-if ${lt_cv_path_MAGIC_CMD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $MAGIC_CMD in
-[\\/*] | ?:[\\/]*)
- lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
- ;;
-*)
- lt_save_MAGIC_CMD=$MAGIC_CMD
- lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
- ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
- for ac_dir in $ac_dummy; do
- IFS=$lt_save_ifs
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/file"; then
- lt_cv_path_MAGIC_CMD=$ac_dir/"file"
- if test -n "$file_magic_test_file"; then
- case $deplibs_check_method in
- "file_magic "*)
- file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
- MAGIC_CMD=$lt_cv_path_MAGIC_CMD
- if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
- $EGREP "$file_magic_regex" > /dev/null; then
- :
- else
- cat <<_LT_EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such. This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem. Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-_LT_EOF
- fi ;;
- esac
- fi
- break
- fi
- done
- IFS=$lt_save_ifs
- MAGIC_CMD=$lt_save_MAGIC_CMD
- ;;
-esac
-fi
-
-MAGIC_CMD=$lt_cv_path_MAGIC_CMD
-if test -n "$MAGIC_CMD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- else
- MAGIC_CMD=:
- fi
-fi
-
- fi
- ;;
-esac
-
-# Use C for the default configuration in the libtool script
-
-lt_save_CC=$CC
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-objext=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}'
-
-
-
-
-
-
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-# Save the default compiler, since it gets overwritten when the other
-# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
-compiler_DEFAULT=$CC
-
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$RM conftest*
-
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$RM -r conftest*
-
-
-## CAVEAT EMPTOR:
-## There is no encapsulation within the following macros, do not change
-## the running order or otherwise move them around unless you know exactly
-## what you are doing...
-if test -n "$compiler"; then
-
-lt_prog_compiler_no_builtin_flag=
-
-if test yes = "$GCC"; then
- case $cc_basename in
- nvcc*)
- lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
- *)
- lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
- esac
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
-if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_rtti_exceptions=no
- ac_outfile=conftest.$ac_objext
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_rtti_exceptions=yes
- fi
- fi
- $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
-
-if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then
- lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
-else
- :
-fi
-
-fi
-
-
-
-
-
-
- lt_prog_compiler_wl=
-lt_prog_compiler_pic=
-lt_prog_compiler_static=
-
-
- if test yes = "$GCC"; then
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_static='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test ia64 = "$host_cpu"; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static='-Bstatic'
- fi
- lt_prog_compiler_pic='-fPIC'
- ;;
-
- amigaos*)
- case $host_cpu in
- powerpc)
- # see comment about AmigaOS4 .so support
- lt_prog_compiler_pic='-fPIC'
- ;;
- m68k)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the '-m68020' flag to GCC prevents building anything better,
- # like '-m68040'.
- lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
- ;;
- esac
- ;;
-
- beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
-
- mingw* | cygwin* | pw32* | os2* | cegcc*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- # Although the cygwin gcc ignores -fPIC, still need this for old-style
- # (--disable-auto-import) libraries
- lt_prog_compiler_pic='-DDLL_EXPORT'
- case $host_os in
- os2*)
- lt_prog_compiler_static='$wl-static'
- ;;
- esac
- ;;
-
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- lt_prog_compiler_pic='-fno-common'
- ;;
-
- haiku*)
- # PIC is the default for Haiku.
- # The "-static" flag exists, but is broken.
- lt_prog_compiler_static=
- ;;
-
- hpux*)
- # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
- # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
- # sets the default TLS model and affects inlining.
- case $host_cpu in
- hppa*64*)
- # +Z the default
- ;;
- *)
- lt_prog_compiler_pic='-fPIC'
- ;;
- esac
- ;;
-
- interix[3-9]*)
- # Interix 3.x gcc -fpic/-fPIC options generate broken code.
- # Instead, we relocate shared libraries at runtime.
- ;;
-
- msdosdjgpp*)
- # Just because we use GCC doesn't mean we suddenly get shared libraries
- # on systems that don't support them.
- lt_prog_compiler_can_build_shared=no
- enable_shared=no
- ;;
-
- *nto* | *qnx*)
- # QNX uses GNU C++, but need to define -shared option too, otherwise
- # it will coredump.
- lt_prog_compiler_pic='-fPIC -shared'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- lt_prog_compiler_pic=-Kconform_pic
- fi
- ;;
-
- *)
- lt_prog_compiler_pic='-fPIC'
- ;;
- esac
-
- case $cc_basename in
- nvcc*) # Cuda Compiler Driver 2.2
- lt_prog_compiler_wl='-Xlinker '
- if test -n "$lt_prog_compiler_pic"; then
- lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
- fi
- ;;
- esac
- else
- # PORTME Check for flag to pass linker flags through the system compiler.
- case $host_os in
- aix*)
- lt_prog_compiler_wl='-Wl,'
- if test ia64 = "$host_cpu"; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static='-Bstatic'
- else
- lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
-
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- lt_prog_compiler_pic='-fno-common'
- case $cc_basename in
- nagfor*)
- # NAG Fortran compiler
- lt_prog_compiler_wl='-Wl,-Wl,,'
- lt_prog_compiler_pic='-PIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
- esac
- ;;
-
- mingw* | cygwin* | pw32* | os2* | cegcc*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic='-DDLL_EXPORT'
- case $host_os in
- os2*)
- lt_prog_compiler_static='$wl-static'
- ;;
- esac
- ;;
-
- hpux9* | hpux10* | hpux11*)
- lt_prog_compiler_wl='-Wl,'
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- lt_prog_compiler_pic='+Z'
- ;;
- esac
- # Is there a better lt_prog_compiler_static that works with the bundled CC?
- lt_prog_compiler_static='$wl-a ${wl}archive'
- ;;
-
- irix5* | irix6* | nonstopux*)
- lt_prog_compiler_wl='-Wl,'
- # PIC (with -KPIC) is the default.
- lt_prog_compiler_static='-non_shared'
- ;;
-
- linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
- case $cc_basename in
- # old Intel for x86_64, which still supported -KPIC.
- ecc*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-static'
- ;;
- # icc used to be incompatible with GCC.
- # ICC 10 doesn't accept -KPIC any more.
- icc* | ifort*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-fPIC'
- lt_prog_compiler_static='-static'
- ;;
- # Lahey Fortran 8.1.
- lf95*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='--shared'
- lt_prog_compiler_static='--static'
- ;;
- nagfor*)
- # NAG Fortran compiler
- lt_prog_compiler_wl='-Wl,-Wl,,'
- lt_prog_compiler_pic='-PIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
- tcc*)
- # Fabrice Bellard et al's Tiny C Compiler
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-fPIC'
- lt_prog_compiler_static='-static'
- ;;
- pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-fpic'
- lt_prog_compiler_static='-Bstatic'
- ;;
- ccc*)
- lt_prog_compiler_wl='-Wl,'
- # All Alpha code is PIC.
- lt_prog_compiler_static='-non_shared'
- ;;
- xl* | bgxl* | bgf* | mpixl*)
- # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-qpic'
- lt_prog_compiler_static='-qstaticlink'
- ;;
- *)
- case `$CC -V 2>&1 | $SED 5q` in
- *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
- # Sun Fortran 8.3 passes all unrecognized flags to the linker
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- lt_prog_compiler_wl=''
- ;;
- *Sun\ F* | *Sun*Fortran*)
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- lt_prog_compiler_wl='-Qoption ld '
- ;;
- *Sun\ C*)
- # Sun C 5.9
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- lt_prog_compiler_wl='-Wl,'
- ;;
- *Intel*\ [CF]*Compiler*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-fPIC'
- lt_prog_compiler_static='-static'
- ;;
- *Portland\ Group*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-fpic'
- lt_prog_compiler_static='-Bstatic'
- ;;
- esac
- ;;
- esac
- ;;
-
- newsos6)
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- *nto* | *qnx*)
- # QNX uses GNU C++, but need to define -shared option too, otherwise
- # it will coredump.
- lt_prog_compiler_pic='-fPIC -shared'
- ;;
-
- osf3* | osf4* | osf5*)
- lt_prog_compiler_wl='-Wl,'
- # All OSF/1 code is PIC.
- lt_prog_compiler_static='-non_shared'
- ;;
-
- rdos*)
- lt_prog_compiler_static='-non_shared'
- ;;
-
- solaris*)
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- case $cc_basename in
- f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
- lt_prog_compiler_wl='-Qoption ld ';;
- *)
- lt_prog_compiler_wl='-Wl,';;
- esac
- ;;
-
- sunos4*)
- lt_prog_compiler_wl='-Qoption ld '
- lt_prog_compiler_pic='-PIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- sysv4 | sysv4.2uw2* | sysv4.3*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- lt_prog_compiler_pic='-Kconform_pic'
- lt_prog_compiler_static='-Bstatic'
- fi
- ;;
-
- sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- unicos*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_can_build_shared=no
- ;;
-
- uts4*)
- lt_prog_compiler_pic='-pic'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- *)
- lt_prog_compiler_can_build_shared=no
- ;;
- esac
- fi
-
-case $host_os in
- # For platforms that do not support PIC, -DPIC is meaningless:
- *djgpp*)
- lt_prog_compiler_pic=
- ;;
- *)
- lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
- ;;
-esac
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-if ${lt_cv_prog_compiler_pic+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
-$as_echo "$lt_cv_prog_compiler_pic" >&6; }
-lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
-$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
-if ${lt_cv_prog_compiler_pic_works+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_pic_works=no
- ac_outfile=conftest.$ac_objext
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_pic_works=yes
- fi
- fi
- $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
-$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
-
-if test yes = "$lt_cv_prog_compiler_pic_works"; then
- case $lt_prog_compiler_pic in
- "" | " "*) ;;
- *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
- esac
-else
- lt_prog_compiler_pic=
- lt_prog_compiler_can_build_shared=no
-fi
-
-fi
-
-
-
-
-
-
-
-
-
-
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if ${lt_cv_prog_compiler_static_works+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_static_works=no
- save_LDFLAGS=$LDFLAGS
- LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
- echo "$lt_simple_link_test_code" > conftest.$ac_ext
- if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
- # The linker can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- # Append any errors to the config.log.
- cat conftest.err 1>&5
- $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_static_works=yes
- fi
- else
- lt_cv_prog_compiler_static_works=yes
- fi
- fi
- $RM -r conftest*
- LDFLAGS=$save_LDFLAGS
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
-$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
-
-if test yes = "$lt_cv_prog_compiler_static_works"; then
- :
-else
- lt_prog_compiler_static=
-fi
-
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if ${lt_cv_prog_compiler_c_o+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_c_o=no
- $RM -r conftest 2>/dev/null
- mkdir conftest
- cd conftest
- mkdir out
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- lt_compiler_flag="-o out/conftest2.$ac_objext"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s out/conftest2.$ac_objext
- then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
- $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_c_o=yes
- fi
- fi
- chmod u+w . 2>&5
- $RM conftest*
- # SGI C++ compiler will create directory out/ii_files/ for
- # template instantiation
- test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
- $RM out/* && rmdir out
- cd ..
- $RM -r conftest
- $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
-$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if ${lt_cv_prog_compiler_c_o+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_c_o=no
- $RM -r conftest 2>/dev/null
- mkdir conftest
- cd conftest
- mkdir out
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- lt_compiler_flag="-o out/conftest2.$ac_objext"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s out/conftest2.$ac_objext
- then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
- $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_c_o=yes
- fi
- fi
- chmod u+w . 2>&5
- $RM conftest*
- # SGI C++ compiler will create directory out/ii_files/ for
- # template instantiation
- test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
- $RM out/* && rmdir out
- cd ..
- $RM -r conftest
- $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
-$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
-
-
-
-
-hard_links=nottested
-if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then
- # do not overwrite the value of need_locks provided by the user
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
-$as_echo_n "checking if we can lock with hard links... " >&6; }
- hard_links=yes
- $RM conftest*
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- touch conftest.a
- ln conftest.a conftest.b 2>&5 || hard_links=no
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
-$as_echo "$hard_links" >&6; }
- if test no = "$hard_links"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
-$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
- need_locks=warn
- fi
-else
- need_locks=no
-fi
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
-
- runpath_var=
- allow_undefined_flag=
- always_export_symbols=no
- archive_cmds=
- archive_expsym_cmds=
- compiler_needs_object=no
- enable_shared_with_static_runtimes=no
- export_dynamic_flag_spec=
- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- hardcode_automatic=no
- hardcode_direct=no
- hardcode_direct_absolute=no
- hardcode_libdir_flag_spec=
- hardcode_libdir_separator=
- hardcode_minus_L=no
- hardcode_shlibpath_var=unsupported
- inherit_rpath=no
- link_all_deplibs=unknown
- module_cmds=
- module_expsym_cmds=
- old_archive_from_new_cmds=
- old_archive_from_expsyms_cmds=
- thread_safe_flag_spec=
- whole_archive_flag_spec=
- # include_expsyms should be a list of space-separated symbols to be *always*
- # included in the symbol list
- include_expsyms=
- # exclude_expsyms can be an extended regexp of symbols to exclude
- # it will be wrapped by ' (' and ')$', so one must not match beginning or
- # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
- # as well as any symbol that contains 'd'.
- exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
- # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
- # platforms (ab)use it in PIC code, but their linkers get confused if
- # the symbol is explicitly referenced. Since portable code cannot
- # rely on this symbol name, it's probably fine to never include it in
- # preloaded symbol tables.
- # Exclude shared library initialization/finalization symbols.
- extract_expsyms_cmds=
-
- case $host_os in
- cygwin* | mingw* | pw32* | cegcc*)
- # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++ or Intel C++ Compiler.
- if test yes != "$GCC"; then
- with_gnu_ld=no
- fi
- ;;
- interix*)
- # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC)
- with_gnu_ld=yes
- ;;
- openbsd* | bitrig*)
- with_gnu_ld=no
- ;;
- esac
-
- ld_shlibs=yes
-
- # On some targets, GNU ld is compatible enough with the native linker
- # that we're better off using the native interface for both.
- lt_use_gnu_ld_interface=no
- if test yes = "$with_gnu_ld"; then
- case $host_os in
- aix*)
- # The AIX port of GNU ld has always aspired to compatibility
- # with the native linker. However, as the warning in the GNU ld
- # block says, versions before 2.19.5* couldn't really create working
- # shared libraries, regardless of the interface used.
- case `$LD -v 2>&1` in
- *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
- *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
- *\ \(GNU\ Binutils\)\ [3-9]*) ;;
- *)
- lt_use_gnu_ld_interface=yes
- ;;
- esac
- ;;
- *)
- lt_use_gnu_ld_interface=yes
- ;;
- esac
- fi
-
- if test yes = "$lt_use_gnu_ld_interface"; then
- # If archive_cmds runs LD, not CC, wlarc should be empty
- wlarc='$wl'
-
- # Set some defaults for GNU ld with shared library support. These
- # are reset later if shared libraries are not supported. Putting them
- # here allows them to be overridden if necessary.
- runpath_var=LD_RUN_PATH
- hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
- export_dynamic_flag_spec='$wl--export-dynamic'
- # ancient GNU ld didn't support --whole-archive et. al.
- if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
- whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
- else
- whole_archive_flag_spec=
- fi
- supports_anon_versioning=no
- case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
- *GNU\ gold*) supports_anon_versioning=yes ;;
- *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
- *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
- *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
- *\ 2.11.*) ;; # other 2.11 versions
- *) supports_anon_versioning=yes ;;
- esac
-
- # See if GNU ld supports shared libraries.
- case $host_os in
- aix[3-9]*)
- # On AIX/PPC, the GNU linker is very broken
- if test ia64 != "$host_cpu"; then
- ld_shlibs=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.19, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support. If you
-*** really care for shared libraries, you may want to install binutils
-*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
-*** You will then need to restart the configuration process.
-
-_LT_EOF
- fi
- ;;
-
- amigaos*)
- case $host_cpu in
- powerpc)
- # see comment about AmigaOS4 .so support
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- archive_expsym_cmds=''
- ;;
- m68k)
- archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- ;;
- esac
- ;;
-
- beos*)
- if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- allow_undefined_flag=unsupported
- # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- cygwin* | mingw* | pw32* | cegcc*)
- # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
- # as there is no search path for DLLs.
- hardcode_libdir_flag_spec='-L$libdir'
- export_dynamic_flag_spec='$wl--export-all-symbols'
- allow_undefined_flag=unsupported
- always_export_symbols=no
- enable_shared_with_static_runtimes=yes
- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
- exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
-
- if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- # If the export-symbols file already is a .def file, use it as
- # is; otherwise, prepend EXPORTS...
- archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then
- cp $export_symbols $output_objdir/$soname.def;
- else
- echo EXPORTS > $output_objdir/$soname.def;
- cat $export_symbols >> $output_objdir/$soname.def;
- fi~
- $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- haiku*)
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- link_all_deplibs=yes
- ;;
-
- os2*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- allow_undefined_flag=unsupported
- shrext_cmds=.dll
- archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
- $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
- $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
- $ECHO EXPORTS >> $output_objdir/$libname.def~
- emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
- $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
- emximp -o $lib $output_objdir/$libname.def'
- archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
- $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
- $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
- $ECHO EXPORTS >> $output_objdir/$libname.def~
- prefix_cmds="$SED"~
- if test EXPORTS = "`$SED 1q $export_symbols`"; then
- prefix_cmds="$prefix_cmds -e 1d";
- fi~
- prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
- cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
- $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
- emximp -o $lib $output_objdir/$libname.def'
- old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
- enable_shared_with_static_runtimes=yes
- file_list_spec='@'
- ;;
-
- interix[3-9]*)
- hardcode_direct=no
- hardcode_shlibpath_var=no
- hardcode_libdir_flag_spec='$wl-rpath,$libdir'
- export_dynamic_flag_spec='$wl-E'
- # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
- # Instead, shared libraries are loaded at an image base (0x10000000 by
- # default) and relocated if they conflict, which is a slow very memory
- # consuming and fragmenting process. To avoid this, we pick a random,
- # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
- # time. Moving up from 0x10000000 also allows more sbrk(2) space.
- archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- ;;
-
- gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
- tmp_diet=no
- if test linux-dietlibc = "$host_os"; then
- case $cc_basename in
- diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
- esac
- fi
- if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
- && test no = "$tmp_diet"
- then
- tmp_addflag=' $pic_flag'
- tmp_sharedflag='-shared'
- case $cc_basename,$host_cpu in
- pgcc*) # Portland Group C compiler
- whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
- tmp_addflag=' $pic_flag'
- ;;
- pgf77* | pgf90* | pgf95* | pgfortran*)
- # Portland Group f77 and f90 compilers
- whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
- tmp_addflag=' $pic_flag -Mnomain' ;;
- ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
- tmp_addflag=' -i_dynamic' ;;
- efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
- tmp_addflag=' -i_dynamic -nofor_main' ;;
- ifc* | ifort*) # Intel Fortran compiler
- tmp_addflag=' -nofor_main' ;;
- lf95*) # Lahey Fortran 8.1
- whole_archive_flag_spec=
- tmp_sharedflag='--shared' ;;
- nagfor*) # NAGFOR 5.3
- tmp_sharedflag='-Wl,-shared' ;;
- xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
- tmp_sharedflag='-qmkshrobj'
- tmp_addflag= ;;
- nvcc*) # Cuda Compiler Driver 2.2
- whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
- compiler_needs_object=yes
- ;;
- esac
- case `$CC -V 2>&1 | $SED 5q` in
- *Sun\ C*) # Sun C 5.9
- whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
- compiler_needs_object=yes
- tmp_sharedflag='-G' ;;
- *Sun\ F*) # Sun Fortran 8.3
- tmp_sharedflag='-G' ;;
- esac
- archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
-
- if test yes = "$supports_anon_versioning"; then
- archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- echo "local: *; };" >> $output_objdir/$libname.ver~
- $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
- fi
-
- case $cc_basename in
- tcc*)
- export_dynamic_flag_spec='-rdynamic'
- ;;
- xlf* | bgf* | bgxlf* | mpixlf*)
- # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
- whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
- hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
- archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
- if test yes = "$supports_anon_versioning"; then
- archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- echo "local: *; };" >> $output_objdir/$libname.ver~
- $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
- fi
- ;;
- esac
- else
- ld_shlibs=no
- fi
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
- archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
- archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
- solaris*)
- if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
- ld_shlibs=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
- elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
- case `$LD -v 2>&1` in
- *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
- ld_shlibs=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
-*** reliably create shared libraries on SCO systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
- ;;
- *)
- # For security reasons, it is highly recommended that you always
- # use absolute paths for naming shared libraries, and exclude the
- # DT_RUNPATH tag from executables and libraries. But doing so
- # requires that you compile everything twice, which is a pain.
- if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
- esac
- ;;
-
- sunos4*)
- archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- wlarc=
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- *)
- if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
- esac
-
- if test no = "$ld_shlibs"; then
- runpath_var=
- hardcode_libdir_flag_spec=
- export_dynamic_flag_spec=
- whole_archive_flag_spec=
- fi
- else
- # PORTME fill in a description of your system's linker (not GNU ld)
- case $host_os in
- aix3*)
- allow_undefined_flag=unsupported
- always_export_symbols=yes
- archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
- # Note: this linker hardcodes the directories in LIBPATH if there
- # are no directories specified by -L.
- hardcode_minus_L=yes
- if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
- # Neither direct hardcoding nor static linking is supported with a
- # broken collect2.
- hardcode_direct=unsupported
- fi
- ;;
-
- aix[4-9]*)
- if test ia64 = "$host_cpu"; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- exp_sym_flag='-Bexport'
- no_entry_flag=
- else
- # If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to GNU nm, but means don't demangle to AIX nm.
- # Without the "-l" option, or with the "-B" option, AIX nm treats
- # weak defined symbols like other global defined symbols, whereas
- # GNU nm marks them as "W".
- # While the 'weak' keyword is ignored in the Export File, we need
- # it in the Import File for the 'aix-soname' feature, so we have
- # to replace the "-B" option with "-P" for AIX nm.
- if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
- export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
- else
- export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
- fi
- aix_use_runtimelinking=no
-
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # have runtime linking enabled, and use it for executables.
- # For shared libraries, we enable/disable runtime linking
- # depending on the kind of the shared library created -
- # when "with_aix_soname,aix_use_runtimelinking" is:
- # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables
- # "aix,yes" lib.so shared, rtl:yes, for executables
- # lib.a static archive
- # "both,no" lib.so.V(shr.o) shared, rtl:yes
- # lib.a(lib.so.V) shared, rtl:no, for executables
- # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
- # lib.a(lib.so.V) shared, rtl:no
- # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables
- # lib.a static archive
- case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
- for ld_flag in $LDFLAGS; do
- if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
- aix_use_runtimelinking=yes
- break
- fi
- done
- if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
- # With aix-soname=svr4, we create the lib.so.V shared archives only,
- # so we don't have lib.a shared libs to link our executables.
- # We have to force runtime linking in this case.
- aix_use_runtimelinking=yes
- LDFLAGS="$LDFLAGS -Wl,-brtl"
- fi
- ;;
- esac
-
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
-
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
- archive_cmds=''
- hardcode_direct=yes
- hardcode_direct_absolute=yes
- hardcode_libdir_separator=':'
- link_all_deplibs=yes
- file_list_spec='$wl-f,'
- case $with_aix_soname,$aix_use_runtimelinking in
- aix,*) ;; # traditional, no import file
- svr4,* | *,yes) # use import file
- # The Import File defines what to hardcode.
- hardcode_direct=no
- hardcode_direct_absolute=no
- ;;
- esac
-
- if test yes = "$GCC"; then
- case $host_os in aix4.[012]|aix4.[012].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`$CC -print-prog-name=collect2`
- if test -f "$collect2name" &&
- strings "$collect2name" | $GREP resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- :
- else
- # We have old collect2
- hardcode_direct=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- hardcode_minus_L=yes
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_libdir_separator=
- fi
- ;;
- esac
- shared_flag='-shared'
- if test yes = "$aix_use_runtimelinking"; then
- shared_flag="$shared_flag "'$wl-G'
- fi
- # Need to ensure runtime linking is disabled for the traditional
- # shared library, or the linker may eventually find shared libraries
- # /with/ Import File - we do not want to mix them.
- shared_flag_aix='-shared'
- shared_flag_svr4='-shared $wl-G'
- else
- # not using gcc
- if test ia64 = "$host_cpu"; then
- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
- # chokes on -Wl,-G. The following line is correct:
- shared_flag='-G'
- else
- if test yes = "$aix_use_runtimelinking"; then
- shared_flag='$wl-G'
- else
- shared_flag='$wl-bM:SRE'
- fi
- shared_flag_aix='$wl-bM:SRE'
- shared_flag_svr4='$wl-G'
- fi
- fi
-
- export_dynamic_flag_spec='$wl-bexpall'
- # It seems that -bexpall does not export symbols beginning with
- # underscore (_), so it is better to generate a list of symbols to export.
- always_export_symbols=yes
- if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
- # Warning - without using the other runtime loading flags (-brtl),
- # -berok will link without error, but may produce a broken library.
- allow_undefined_flag='-berok'
- # Determine the default libpath from the value encoded in an
- # empty executable.
- if test set = "${lt_cv_aix_libpath+set}"; then
- aix_libpath=$lt_cv_aix_libpath
-else
- if ${lt_cv_aix_libpath_+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
- lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\([^ ]*\) *$/\1/
- p
- }
- }'
- lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
- # Check for a 64-bit object if we didn't find anything.
- if test -z "$lt_cv_aix_libpath_"; then
- lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
- fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- if test -z "$lt_cv_aix_libpath_"; then
- lt_cv_aix_libpath_=/usr/lib:/lib
- fi
-
-fi
-
- aix_libpath=$lt_cv_aix_libpath_
-fi
-
- hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
- archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
- else
- if test ia64 = "$host_cpu"; then
- hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib'
- allow_undefined_flag="-z nodefs"
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
- else
- # Determine the default libpath from the value encoded in an
- # empty executable.
- if test set = "${lt_cv_aix_libpath+set}"; then
- aix_libpath=$lt_cv_aix_libpath
-else
- if ${lt_cv_aix_libpath_+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
- lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\([^ ]*\) *$/\1/
- p
- }
- }'
- lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
- # Check for a 64-bit object if we didn't find anything.
- if test -z "$lt_cv_aix_libpath_"; then
- lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
- fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- if test -z "$lt_cv_aix_libpath_"; then
- lt_cv_aix_libpath_=/usr/lib:/lib
- fi
-
-fi
-
- aix_libpath=$lt_cv_aix_libpath_
-fi
-
- hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
- no_undefined_flag=' $wl-bernotok'
- allow_undefined_flag=' $wl-berok'
- if test yes = "$with_gnu_ld"; then
- # We only use this code for GNU lds that support --whole-archive.
- whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive'
- else
- # Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec='$convenience'
- fi
- archive_cmds_need_lc=yes
- archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
- # -brtl affects multiple linker settings, -berok does not and is overridden later
- compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`'
- if test svr4 != "$with_aix_soname"; then
- # This is similar to how AIX traditionally builds its shared libraries.
- archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
- fi
- if test aix != "$with_aix_soname"; then
- archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
- else
- # used by -dlpreopen to get the symbols
- archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir'
- fi
- archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d'
- fi
- fi
- ;;
-
- amigaos*)
- case $host_cpu in
- powerpc)
- # see comment about AmigaOS4 .so support
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- archive_expsym_cmds=''
- ;;
- m68k)
- archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- ;;
- esac
- ;;
-
- bsdi[45]*)
- export_dynamic_flag_spec=-rdynamic
- ;;
-
- cygwin* | mingw* | pw32* | cegcc*)
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++ or Intel C++ Compiler.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- case $cc_basename in
- cl* | icl*)
- # Native MSVC or ICC
- hardcode_libdir_flag_spec=' '
- allow_undefined_flag=unsupported
- always_export_symbols=yes
- file_list_spec='@'
- # Tell ltmain to make .lib files, not .a files.
- libext=lib
- # Tell ltmain to make .dll files, not .so files.
- shrext_cmds=.dll
- # FIXME: Setting linknames here is a bad hack.
- archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
- archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then
- cp "$export_symbols" "$output_objdir/$soname.def";
- echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
- else
- $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
- fi~
- $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
- linknames='
- # The linker will not automatically build a static lib if we build a DLL.
- # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
- enable_shared_with_static_runtimes=yes
- exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
- # Don't use ranlib
- old_postinstall_cmds='chmod 644 $oldlib'
- postlink_cmds='lt_outputfile="@OUTPUT@"~
- lt_tool_outputfile="@TOOL_OUTPUT@"~
- case $lt_outputfile in
- *.exe|*.EXE) ;;
- *)
- lt_outputfile=$lt_outputfile.exe
- lt_tool_outputfile=$lt_tool_outputfile.exe
- ;;
- esac~
- if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
- $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
- $RM "$lt_outputfile.manifest";
- fi'
- ;;
- *)
- # Assume MSVC and ICC wrapper
- hardcode_libdir_flag_spec=' '
- allow_undefined_flag=unsupported
- # Tell ltmain to make .lib files, not .a files.
- libext=lib
- # Tell ltmain to make .dll files, not .so files.
- shrext_cmds=.dll
- # FIXME: Setting linknames here is a bad hack.
- archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
- # The linker will automatically build a .lib file if we build a DLL.
- old_archive_from_new_cmds='true'
- # FIXME: Should let the user specify the lib program.
- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
- enable_shared_with_static_runtimes=yes
- ;;
- esac
- ;;
-
- darwin* | rhapsody*)
-
-
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
- hardcode_shlibpath_var=unsupported
- if test yes = "$lt_cv_ld_force_load"; then
- whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
-
- else
- whole_archive_flag_spec=''
- fi
- link_all_deplibs=yes
- allow_undefined_flag=$_lt_dar_allow_undefined
- case $cc_basename in
- ifort*|nagfor*) _lt_dar_can_shared=yes ;;
- *) _lt_dar_can_shared=$GCC ;;
- esac
- if test yes = "$_lt_dar_can_shared"; then
- output_verbose_link_cmd=func_echo_all
- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
- archive_expsym_cmds="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
- module_expsym_cmds="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
-
- else
- ld_shlibs=no
- fi
-
- ;;
-
- dgux*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_shlibpath_var=no
- ;;
-
- # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
- # support. Future versions do this automatically, but an explicit c++rt0.o
- # does not break anything, and helps significantly (at the cost of a little
- # extra space).
- freebsd2.2*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2.*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly* | midnightbsd*)
- archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- hpux9*)
- if test yes = "$GCC"; then
- archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
- else
- archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
- fi
- hardcode_libdir_flag_spec='$wl+b $wl$libdir'
- hardcode_libdir_separator=:
- hardcode_direct=yes
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
- export_dynamic_flag_spec='$wl-E'
- ;;
-
- hpux10*)
- if test yes,no = "$GCC,$with_gnu_ld"; then
- archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
- if test no = "$with_gnu_ld"; then
- hardcode_libdir_flag_spec='$wl+b $wl$libdir'
- hardcode_libdir_separator=:
- hardcode_direct=yes
- hardcode_direct_absolute=yes
- export_dynamic_flag_spec='$wl-E'
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
- fi
- ;;
-
- hpux11*)
- if test yes,no = "$GCC,$with_gnu_ld"; then
- case $host_cpu in
- hppa*64*)
- archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
- case $host_cpu in
- hppa*64*)
- archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
-
- # Older versions of the 11.00 compiler do not understand -b yet
- # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
-$as_echo_n "checking if $CC understands -b... " >&6; }
-if ${lt_cv_prog_compiler__b+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler__b=no
- save_LDFLAGS=$LDFLAGS
- LDFLAGS="$LDFLAGS -b"
- echo "$lt_simple_link_test_code" > conftest.$ac_ext
- if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
- # The linker can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- # Append any errors to the config.log.
- cat conftest.err 1>&5
- $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler__b=yes
- fi
- else
- lt_cv_prog_compiler__b=yes
- fi
- fi
- $RM -r conftest*
- LDFLAGS=$save_LDFLAGS
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
-$as_echo "$lt_cv_prog_compiler__b" >&6; }
-
-if test yes = "$lt_cv_prog_compiler__b"; then
- archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-else
- archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-fi
-
- ;;
- esac
- fi
- if test no = "$with_gnu_ld"; then
- hardcode_libdir_flag_spec='$wl+b $wl$libdir'
- hardcode_libdir_separator=:
-
- case $host_cpu in
- hppa*64*|ia64*)
- hardcode_direct=no
- hardcode_shlibpath_var=no
- ;;
- *)
- hardcode_direct=yes
- hardcode_direct_absolute=yes
- export_dynamic_flag_spec='$wl-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
- ;;
- esac
- fi
- ;;
-
- irix5* | irix6* | nonstopux*)
- if test yes = "$GCC"; then
- archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
- # Try to use the -exported_symbol ld option, if it does not
- # work, assume that -exports_file does not work either and
- # implicitly export all symbols.
- # This should be the same for all languages, so no per-tag cache variable.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
-$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
-if ${lt_cv_irix_exported_symbol+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- save_LDFLAGS=$LDFLAGS
- LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-int foo (void) { return 0; }
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- lt_cv_irix_exported_symbol=yes
-else
- lt_cv_irix_exported_symbol=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- LDFLAGS=$save_LDFLAGS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
-$as_echo "$lt_cv_irix_exported_symbol" >&6; }
- if test yes = "$lt_cv_irix_exported_symbol"; then
- archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
- fi
- else
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
- fi
- archive_cmds_need_lc='no'
- hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
- hardcode_libdir_separator=:
- inherit_rpath=yes
- link_all_deplibs=yes
- ;;
-
- linux*)
- case $cc_basename in
- tcc*)
- # Fabrice Bellard et al's Tiny C Compiler
- ld_shlibs=yes
- archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
- else
- archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
- fi
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- newsos6)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
- hardcode_libdir_separator=:
- hardcode_shlibpath_var=no
- ;;
-
- *nto* | *qnx*)
- ;;
-
- openbsd* | bitrig*)
- if test -f /usr/libexec/ld.so; then
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- hardcode_direct_absolute=yes
- if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
- archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
- hardcode_libdir_flag_spec='$wl-rpath,$libdir'
- export_dynamic_flag_spec='$wl-E'
- else
- archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='$wl-rpath,$libdir'
- fi
- else
- ld_shlibs=no
- fi
- ;;
-
- os2*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- allow_undefined_flag=unsupported
- shrext_cmds=.dll
- archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
- $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
- $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
- $ECHO EXPORTS >> $output_objdir/$libname.def~
- emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
- $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
- emximp -o $lib $output_objdir/$libname.def'
- archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
- $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
- $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
- $ECHO EXPORTS >> $output_objdir/$libname.def~
- prefix_cmds="$SED"~
- if test EXPORTS = "`$SED 1q $export_symbols`"; then
- prefix_cmds="$prefix_cmds -e 1d";
- fi~
- prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
- cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
- $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
- emximp -o $lib $output_objdir/$libname.def'
- old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
- enable_shared_with_static_runtimes=yes
- file_list_spec='@'
- ;;
-
- osf3*)
- if test yes = "$GCC"; then
- allow_undefined_flag=' $wl-expect_unresolved $wl\*'
- archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
- else
- allow_undefined_flag=' -expect_unresolved \*'
- archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
- fi
- archive_cmds_need_lc='no'
- hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
- hardcode_libdir_separator=:
- ;;
-
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test yes = "$GCC"; then
- allow_undefined_flag=' $wl-expect_unresolved $wl\*'
- archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
- hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
- else
- allow_undefined_flag=' -expect_unresolved \*'
- archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
- archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
- $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
-
- # Both c and cxx compiler support -rpath directly
- hardcode_libdir_flag_spec='-rpath $libdir'
- fi
- archive_cmds_need_lc='no'
- hardcode_libdir_separator=:
- ;;
-
- solaris*)
- no_undefined_flag=' -z defs'
- if test yes = "$GCC"; then
- wlarc='$wl'
- archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
- $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
- else
- case `$CC -V 2>&1` in
- *"Compilers 5.0"*)
- wlarc=''
- archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
- archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
- $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
- ;;
- *)
- wlarc='$wl'
- archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
- $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
- ;;
- esac
- fi
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_shlibpath_var=no
- case $host_os in
- solaris2.[0-5] | solaris2.[0-5].*) ;;
- *)
- # The compiler driver will combine and reorder linker options,
- # but understands '-z linker_flag'. GCC discards it without '$wl',
- # but is careful enough not to reorder.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- if test yes = "$GCC"; then
- whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
- else
- whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
- fi
- ;;
- esac
- link_all_deplibs=yes
- ;;
-
- sunos4*)
- if test sequent = "$host_vendor"; then
- # Use $CC to link under sequent, because it throws in some extra .o
- # files that make .init and .fini sections work.
- archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
- fi
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- sysv4)
- case $host_vendor in
- sni)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes # is this really true???
- ;;
- siemens)
- ## LD is ld it makes a PLAMLIB
- ## CC just makes a GrossModule.
- archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- reload_cmds='$CC -r -o $output$reload_objs'
- hardcode_direct=no
- ;;
- motorola)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=no #Motorola manual says yes, but my tests say they lie
- ;;
- esac
- runpath_var='LD_RUN_PATH'
- hardcode_shlibpath_var=no
- ;;
-
- sysv4.3*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var=no
- export_dynamic_flag_spec='-Bexport'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ld_shlibs=yes
- fi
- ;;
-
- sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
- no_undefined_flag='$wl-z,text'
- archive_cmds_need_lc=no
- hardcode_shlibpath_var=no
- runpath_var='LD_RUN_PATH'
-
- if test yes = "$GCC"; then
- archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- ;;
-
- sysv5* | sco3.2v5* | sco5v6*)
- # Note: We CANNOT use -z defs as we might desire, because we do not
- # link with -lc, and that would cause any symbols used from libc to
- # always be unresolved, which means just about no library would
- # ever link correctly. If we're not using GNU ld we use -z text
- # though, which does catch some bad symbols but isn't as heavy-handed
- # as -z defs.
- no_undefined_flag='$wl-z,text'
- allow_undefined_flag='$wl-z,nodefs'
- archive_cmds_need_lc=no
- hardcode_shlibpath_var=no
- hardcode_libdir_flag_spec='$wl-R,$libdir'
- hardcode_libdir_separator=':'
- link_all_deplibs=yes
- export_dynamic_flag_spec='$wl-Bexport'
- runpath_var='LD_RUN_PATH'
-
- if test yes = "$GCC"; then
- archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- ;;
-
- uts4*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_shlibpath_var=no
- ;;
-
- *)
- ld_shlibs=no
- ;;
- esac
-
- if test sni = "$host_vendor"; then
- case $host in
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- export_dynamic_flag_spec='$wl-Blargedynsym'
- ;;
- esac
- fi
- fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
-$as_echo "$ld_shlibs" >&6; }
-test no = "$ld_shlibs" && can_build_shared=no
-
-with_gnu_ld=$with_gnu_ld
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$archive_cmds_need_lc" in
-x|xyes)
- # Assume -lc should be added
- archive_cmds_need_lc=yes
-
- if test yes,yes = "$GCC,$enable_shared"; then
- case $archive_cmds in
- *'~'*)
- # FIXME: we may have to deal with multi-command sequences.
- ;;
- '$CC '*)
- # Test whether the compiler implicitly links with -lc since on some
- # systems, -lgcc has to come before -lc. If gcc already passes -lc
- # to ld, don't add -lc before -lgcc.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
-$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
-if ${lt_cv_archive_cmds_need_lc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- $RM conftest*
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } 2>conftest.err; then
- soname=conftest
- lib=conftest
- libobjs=conftest.$ac_objext
- deplibs=
- wl=$lt_prog_compiler_wl
- pic_flag=$lt_prog_compiler_pic
- compiler_flags=-v
- linker_flags=-v
- verstring=
- output_objdir=.
- libname=conftest
- lt_save_allow_undefined_flag=$allow_undefined_flag
- allow_undefined_flag=
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
- (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- then
- lt_cv_archive_cmds_need_lc=no
- else
- lt_cv_archive_cmds_need_lc=yes
- fi
- allow_undefined_flag=$lt_save_allow_undefined_flag
- else
- cat conftest.err 1>&5
- fi
- $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
-$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
- archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
- ;;
- esac
- fi
- ;;
-esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
-$as_echo_n "checking dynamic linker characteristics... " >&6; }
-
-if test yes = "$GCC"; then
- case $host_os in
- darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
- *) lt_awk_arg='/^libraries:/' ;;
- esac
- case $host_os in
- mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;;
- *) lt_sed_strip_eq='s|=/|/|g' ;;
- esac
- lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
- case $lt_search_path_spec in
- *\;*)
- # if the path contains ";" then we assume it to be the separator
- # otherwise default to the standard path separator (i.e. ":") - it is
- # assumed that no part of a normal pathname contains ";" but that should
- # okay in the real world where ";" in dirpaths is itself problematic.
- lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
- ;;
- *)
- lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
- ;;
- esac
- # Ok, now we have the path, separated by spaces, we can step through it
- # and add multilib dir if necessary...
- lt_tmp_lt_search_path_spec=
- lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
- # ...but if some path component already ends with the multilib dir we assume
- # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
- case "$lt_multi_os_dir; $lt_search_path_spec " in
- "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
- lt_multi_os_dir=
- ;;
- esac
- for lt_sys_path in $lt_search_path_spec; do
- if test -d "$lt_sys_path$lt_multi_os_dir"; then
- lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir"
- elif test -n "$lt_multi_os_dir"; then
- test -d "$lt_sys_path" && \
- lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
- fi
- done
- lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
-BEGIN {RS = " "; FS = "/|\n";} {
- lt_foo = "";
- lt_count = 0;
- for (lt_i = NF; lt_i > 0; lt_i--) {
- if ($lt_i != "" && $lt_i != ".") {
- if ($lt_i == "..") {
- lt_count++;
- } else {
- if (lt_count == 0) {
- lt_foo = "/" $lt_i lt_foo;
- } else {
- lt_count--;
- }
- }
- }
- }
- if (lt_foo != "") { lt_freq[lt_foo]++; }
- if (lt_freq[lt_foo] == 1) { print lt_foo; }
-}'`
- # AWK program above erroneously prepends '/' to C:/dos/paths
- # for these hosts.
- case $host_os in
- mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
- $SED 's|/\([A-Za-z]:\)|\1|g'` ;;
- esac
- sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
-else
- sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=.so
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-
-
-case $host_os in
-aix3*)
- version_type=linux # correct to gnu/linux during the next big refactor
- library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
- shlibpath_var=LIBPATH
-
- # AIX 3 has no versioning support, so we append a major version to the name.
- soname_spec='$libname$release$shared_ext$major'
- ;;
-
-aix[4-9]*)
- version_type=linux # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- hardcode_into_libs=yes
- if test ia64 = "$host_cpu"; then
- # AIX 5 supports IA64
- library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
- shlibpath_var=LD_LIBRARY_PATH
- else
- # With GCC up to 2.95.x, collect2 would create an import file
- # for dependence libraries. The import file would start with
- # the line '#! .'. This would cause the generated library to
- # depend on '.', always an invalid library. This was fixed in
- # development snapshots of GCC prior to 3.0.
- case $host_os in
- aix4 | aix4.[01] | aix4.[01].*)
- if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
- echo ' yes '
- echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
- :
- else
- can_build_shared=no
- fi
- ;;
- esac
- # Using Import Files as archive members, it is possible to support
- # filename-based versioning of shared library archives on AIX. While
- # this would work for both with and without runtime linking, it will
- # prevent static linking of such archives. So we do filename-based
- # shared library versioning with .so extension only, which is used
- # when both runtime linking and shared linking is enabled.
- # Unfortunately, runtime linking may impact performance, so we do
- # not want this to be the default eventually. Also, we use the
- # versioned .so libs for executables only if there is the -brtl
- # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
- # To allow for filename-based versioning support, we need to create
- # libNAME.so.V as an archive file, containing:
- # *) an Import File, referring to the versioned filename of the
- # archive as well as the shared archive member, telling the
- # bitwidth (32 or 64) of that shared object, and providing the
- # list of exported symbols of that shared object, eventually
- # decorated with the 'weak' keyword
- # *) the shared object with the F_LOADONLY flag set, to really avoid
- # it being seen by the linker.
- # At run time we better use the real file rather than another symlink,
- # but for link time we create the symlink libNAME.so -> libNAME.so.V
-
- case $with_aix_soname,$aix_use_runtimelinking in
- # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
- # soname into executable. Probably we can add versioning support to
- # collect2, so additional links can be useful in future.
- aix,yes) # traditional libtool
- dynamic_linker='AIX unversionable lib.so'
- # If using run time linking (on AIX 4.2 or later) use lib<name>.so
- # instead of lib<name>.a to let people know that these are not
- # typical AIX shared libraries.
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- ;;
- aix,no) # traditional AIX only
- dynamic_linker='AIX lib.a(lib.so.V)'
- # We preserve .a as extension for shared libraries through AIX4.2
- # and later when we are not doing run time linking.
- library_names_spec='$libname$release.a $libname.a'
- soname_spec='$libname$release$shared_ext$major'
- ;;
- svr4,*) # full svr4 only
- dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)"
- library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
- # We do not specify a path in Import Files, so LIBPATH fires.
- shlibpath_overrides_runpath=yes
- ;;
- *,yes) # both, prefer svr4
- dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)"
- library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
- # unpreferred sharedlib libNAME.a needs extra handling
- postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
- postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
- # We do not specify a path in Import Files, so LIBPATH fires.
- shlibpath_overrides_runpath=yes
- ;;
- *,no) # both, prefer aix
- dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)"
- library_names_spec='$libname$release.a $libname.a'
- soname_spec='$libname$release$shared_ext$major'
- # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
- postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
- postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
- ;;
- esac
- shlibpath_var=LIBPATH
- fi
- ;;
-
-amigaos*)
- case $host_cpu in
- powerpc)
- # Since July 2007 AmigaOS4 officially supports .so libraries.
- # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- ;;
- m68k)
- library_names_spec='$libname.ixlibrary $libname.a'
- # Create ${libname}_ixlibrary.a entries in /sys/libs.
- finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
- ;;
- esac
- ;;
-
-beos*)
- library_names_spec='$libname$shared_ext'
- dynamic_linker="$host_os ld.so"
- shlibpath_var=LIBRARY_PATH
- ;;
-
-bsdi[45]*)
- version_type=linux # correct to gnu/linux during the next big refactor
- need_version=no
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
- sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
- # the default ld.so.conf also contains /usr/contrib/lib and
- # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
- # libtool to hard-code these into programs
- ;;
-
-cygwin* | mingw* | pw32* | cegcc*)
- version_type=windows
- shrext_cmds=.dll
- need_version=no
- need_lib_prefix=no
-
- case $GCC,$cc_basename in
- yes,*)
- # gcc
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \$file`~
- dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
- dldir=$destdir/`dirname \$dlpath`~
- test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname~
- chmod a+x \$dldir/$dlname~
- if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
- eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
- fi'
- postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
- dlpath=$dir/\$dldll~
- $RM \$dlpath'
- shlibpath_overrides_runpath=yes
-
- case $host_os in
- cygwin*)
- # Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
-
- sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
- ;;
- mingw* | cegcc*)
- # MinGW DLLs use traditional 'lib' prefix
- soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
- ;;
- pw32*)
- # pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
- ;;
- esac
- dynamic_linker='Win32 ld.exe'
- ;;
-
- *,cl* | *,icl*)
- # Native MSVC or ICC
- libname_spec='$name'
- soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
- library_names_spec='$libname.dll.lib'
-
- case $build_os in
- mingw*)
- sys_lib_search_path_spec=
- lt_save_ifs=$IFS
- IFS=';'
- for lt_path in $LIB
- do
- IFS=$lt_save_ifs
- # Let DOS variable expansion print the short 8.3 style file name.
- lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
- sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
- done
- IFS=$lt_save_ifs
- # Convert to MSYS style.
- sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
- ;;
- cygwin*)
- # Convert to unix form, then to dos form, then back to unix form
- # but this time dos style (no spaces!) so that the unix form looks
- # like /cygdrive/c/PROGRA~1:/cygdr...
- sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
- sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
- sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- ;;
- *)
- sys_lib_search_path_spec=$LIB
- if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
- # It is most probably a Windows format PATH.
- sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
- else
- sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
- # FIXME: find the short name or the path components, as spaces are
- # common. (e.g. "Program Files" -> "PROGRA~1")
- ;;
- esac
-
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \$file`~
- dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
- dldir=$destdir/`dirname \$dlpath`~
- test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname'
- postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
- dlpath=$dir/\$dldll~
- $RM \$dlpath'
- shlibpath_overrides_runpath=yes
- dynamic_linker='Win32 link.exe'
- ;;
-
- *)
- # Assume MSVC and ICC wrapper
- library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
- dynamic_linker='Win32 ld.exe'
- ;;
- esac
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-
-darwin* | rhapsody*)
- dynamic_linker="$host_os dyld"
- version_type=darwin
- need_lib_prefix=no
- need_version=no
- library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
- soname_spec='$libname$release$major$shared_ext'
- shlibpath_overrides_runpath=yes
- shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-
- sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
- sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
- ;;
-
-dgux*)
- version_type=linux # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-freebsd* | dragonfly* | midnightbsd*)
- # DragonFly does not have aout. When/if they implement a new
- # versioning mechanism, adjust this.
- if test -x /usr/bin/objformat; then
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
- freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- need_version=no
- need_lib_prefix=no
- ;;
- freebsd-*)
- library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
- need_version=yes
- ;;
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
- freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
- freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
- *) # from 4.6 on, and DragonFly
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- esac
- ;;
-
-haiku*)
- version_type=linux # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- dynamic_linker="$host_os runtime_loader"
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- shlibpath_var=LIBRARY_PATH
- shlibpath_overrides_runpath=no
- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
- hardcode_into_libs=yes
- ;;
-
-hpux9* | hpux10* | hpux11*)
- # Give a soname corresponding to the major version so that dld.sl refuses to
- # link against other versions.
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- case $host_cpu in
- ia64*)
- shrext_cmds='.so'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.so"
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- if test 32 = "$HPUX_IA64_MODE"; then
- sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
- sys_lib_dlsearch_path_spec=/usr/lib/hpux32
- else
- sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
- sys_lib_dlsearch_path_spec=/usr/lib/hpux64
- fi
- ;;
- hppa*64*)
- shrext_cmds='.sl'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- *)
- shrext_cmds='.sl'
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=SHLIB_PATH
- shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- ;;
- esac
- # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
- postinstall_cmds='chmod 555 $lib'
- # or fails outright, so override atomically:
- install_override_mode=555
- ;;
-
-interix[3-9]*)
- version_type=linux # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $host_os in
- nonstopux*) version_type=nonstopux ;;
- *)
- if test yes = "$lt_cv_prog_gnu_ld"; then
- version_type=linux # correct to gnu/linux during the next big refactor
- else
- version_type=irix
- fi ;;
- esac
- need_lib_prefix=no
- need_version=no
- soname_spec='$libname$release$shared_ext$major'
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
- case $host_os in
- irix5* | nonstopux*)
- libsuff= shlibsuff=
- ;;
- *)
- case $LD in # libtool.m4 will add one of these switches to LD
- *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
- libsuff= shlibsuff= libmagic=32-bit;;
- *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
- libsuff=32 shlibsuff=N32 libmagic=N32;;
- *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
- libsuff=64 shlibsuff=64 libmagic=64-bit;;
- *) libsuff= shlibsuff= libmagic=never-match;;
- esac
- ;;
- esac
- shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
- sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
- hardcode_into_libs=yes
- ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
- dynamic_linker=no
- ;;
-
-linux*android*)
- version_type=none # Android doesn't support versioned libraries.
- need_lib_prefix=no
- need_version=no
- library_names_spec='$libname$release$shared_ext'
- soname_spec='$libname$release$shared_ext'
- finish_cmds=
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
-
- # This implies no fast_install, which is unacceptable.
- # Some rework will be needed to allow for fast_install
- # before this can be enabled.
- hardcode_into_libs=yes
-
- dynamic_linker='Android linker'
- # Don't embed -rpath directories since the linker doesn't support them.
- hardcode_libdir_flag_spec='-L$libdir'
- ;;
-
-# This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
- version_type=linux # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
-
- # Some binutils ld are patched to set DT_RUNPATH
- if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_shlibpath_overrides_runpath=no
- save_LDFLAGS=$LDFLAGS
- save_libdir=$libdir
- eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
- LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
- lt_cv_shlibpath_overrides_runpath=yes
-fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- LDFLAGS=$save_LDFLAGS
- libdir=$save_libdir
-
-fi
-
- shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
-
- # This implies no fast_install, which is unacceptable.
- # Some rework will be needed to allow for fast_install
- # before this can be enabled.
- hardcode_into_libs=yes
-
- # Ideally, we could use ldconfig to report *all* directores which are
- # searched for libraries, however this is still not possible. Aside from not
- # being certain /sbin/ldconfig is available, command
- # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
- # even though it is searched at run-time. Try to do the best guess by
- # appending ld.so.conf contents (and includes) to the search path.
- if test -f /etc/ld.so.conf; then
- lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
- fi
-
- # We used to test for /lib/ld.so.1 and disable shared libraries on
- # powerpc, because MkLinux only supported shared libraries with the
- # GNU dynamic linker. Since this was broken with cross compilers,
- # most powerpc-linux boxes support dynamic linking these days and
- # people can always --disable-shared, the test was removed, and we
- # assume the GNU/Linux dynamic linker is in use.
- dynamic_linker='GNU/Linux ld.so'
- ;;
-
-netbsd*)
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
- library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- dynamic_linker='NetBSD (a.out) ld.so'
- else
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- dynamic_linker='NetBSD ld.elf_so'
- fi
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
-
-newsos6)
- version_type=linux # correct to gnu/linux during the next big refactor
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-*nto* | *qnx*)
- version_type=qnx
- need_lib_prefix=no
- need_version=no
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- dynamic_linker='ldqnx.so'
- ;;
-
-openbsd* | bitrig*)
- version_type=sunos
- sys_lib_dlsearch_path_spec=/usr/lib
- need_lib_prefix=no
- if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
- need_version=no
- else
- need_version=yes
- fi
- library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-os2*)
- libname_spec='$name'
- version_type=windows
- shrext_cmds=.dll
- need_version=no
- need_lib_prefix=no
- # OS/2 can only load a DLL with a base name of 8 characters or less.
- soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
- v=$($ECHO $release$versuffix | tr -d .-);
- n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
- $ECHO $n$v`$shared_ext'
- library_names_spec='${libname}_dll.$libext'
- dynamic_linker='OS/2 ld.exe'
- shlibpath_var=BEGINLIBPATH
- sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- postinstall_cmds='base_file=`basename \$file`~
- dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
- dldir=$destdir/`dirname \$dlpath`~
- test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname~
- chmod a+x \$dldir/$dlname~
- if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
- eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
- fi'
- postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
- dlpath=$dir/\$dldll~
- $RM \$dlpath'
- ;;
-
-osf3* | osf4* | osf5*)
- version_type=osf
- need_lib_prefix=no
- need_version=no
- soname_spec='$libname$release$shared_ext$major'
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
-
-rdos*)
- dynamic_linker=no
- ;;
-
-solaris*)
- version_type=linux # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- # ldd complains unless libraries are executable
- postinstall_cmds='chmod +x $lib'
- ;;
-
-sunos4*)
- version_type=sunos
- library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
- finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- if test yes = "$with_gnu_ld"; then
- need_lib_prefix=no
- fi
- need_version=yes
- ;;
-
-sysv4 | sysv4.3*)
- version_type=linux # correct to gnu/linux during the next big refactor
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- shlibpath_var=LD_LIBRARY_PATH
- case $host_vendor in
- sni)
- shlibpath_overrides_runpath=no
- need_lib_prefix=no
- runpath_var=LD_RUN_PATH
- ;;
- siemens)
- need_lib_prefix=no
- ;;
- motorola)
- need_lib_prefix=no
- need_version=no
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
- ;;
- esac
- ;;
-
-sysv4*MP*)
- if test -d /usr/nec; then
- version_type=linux # correct to gnu/linux during the next big refactor
- library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
- soname_spec='$libname$shared_ext.$major'
- shlibpath_var=LD_LIBRARY_PATH
- fi
- ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- version_type=sco
- need_lib_prefix=no
- need_version=no
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- if test yes = "$with_gnu_ld"; then
- sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
- else
- sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
- case $host_os in
- sco3.2v5*)
- sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
- ;;
- esac
- fi
- sys_lib_dlsearch_path_spec='/usr/lib'
- ;;
-
-tpf*)
- # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
- version_type=linux # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
-
-uts4*)
- version_type=linux # correct to gnu/linux during the next big refactor
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-*)
- dynamic_linker=no
- ;;
-esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
-$as_echo "$dynamic_linker" >&6; }
-test no = "$dynamic_linker" && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test yes = "$GCC"; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
- sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
-fi
-
-if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
- sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
-fi
-
-# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
-configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
-
-# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
-func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
-
-# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
-configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
-$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
-hardcode_action=
-if test -n "$hardcode_libdir_flag_spec" ||
- test -n "$runpath_var" ||
- test yes = "$hardcode_automatic"; then
-
- # We can hardcode non-existent directories.
- if test no != "$hardcode_direct" &&
- # If the only mechanism to avoid hardcoding is shlibpath_var, we
- # have to relink, otherwise we might link with an installed library
- # when we should be linking with a yet-to-be-installed one
- ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" &&
- test no != "$hardcode_minus_L"; then
- # Linking always hardcodes the temporary library directory.
- hardcode_action=relink
- else
- # We can link without hardcoding, and we can hardcode nonexisting dirs.
- hardcode_action=immediate
- fi
-else
- # We cannot hardcode anything, or else we can only hardcode existing
- # directories.
- hardcode_action=unsupported
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
-$as_echo "$hardcode_action" >&6; }
-
-if test relink = "$hardcode_action" ||
- test yes = "$inherit_rpath"; then
- # Fast installation is not supported
- enable_fast_install=no
-elif test yes = "$shlibpath_overrides_runpath" ||
- test no = "$enable_shared"; then
- # Fast installation is not necessary
- enable_fast_install=needless
-fi
-
-
-
-
-
-
- if test yes != "$enable_dlopen"; then
- enable_dlopen=unknown
- enable_dlopen_self=unknown
- enable_dlopen_self_static=unknown
-else
- lt_cv_dlopen=no
- lt_cv_dlopen_libs=
-
- case $host_os in
- beos*)
- lt_cv_dlopen=load_add_on
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
- ;;
-
- mingw* | pw32* | cegcc*)
- lt_cv_dlopen=LoadLibrary
- lt_cv_dlopen_libs=
- ;;
-
- cygwin*)
- lt_cv_dlopen=dlopen
- lt_cv_dlopen_libs=
- ;;
-
- darwin*)
- # if libdl is installed we need to link against it
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if ${ac_cv_lib_dl_dlopen+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-int
-main ()
-{
-return dlopen ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_dl_dlopen=yes
-else
- ac_cv_lib_dl_dlopen=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
- lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
-else
-
- lt_cv_dlopen=dyld
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
-
-fi
-
- ;;
-
- tpf*)
- # Don't try to run any link tests for TPF. We know it's impossible
- # because TPF is a cross-compiler, and we know how we open DSOs.
- lt_cv_dlopen=dlopen
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=no
- ;;
-
- *)
- ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
-if test "x$ac_cv_func_shl_load" = xyes; then :
- lt_cv_dlopen=shl_load
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
-$as_echo_n "checking for shl_load in -ldld... " >&6; }
-if ${ac_cv_lib_dld_shl_load+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load ();
-int
-main ()
-{
-return shl_load ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_dld_shl_load=yes
-else
- ac_cv_lib_dld_shl_load=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
-$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
-if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
- lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld
-else
- ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
-if test "x$ac_cv_func_dlopen" = xyes; then :
- lt_cv_dlopen=dlopen
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if ${ac_cv_lib_dl_dlopen+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-int
-main ()
-{
-return dlopen ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_dl_dlopen=yes
-else
- ac_cv_lib_dl_dlopen=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
- lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
-$as_echo_n "checking for dlopen in -lsvld... " >&6; }
-if ${ac_cv_lib_svld_dlopen+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsvld $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-int
-main ()
-{
-return dlopen ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_svld_dlopen=yes
-else
- ac_cv_lib_svld_dlopen=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
-$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
-if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
- lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
-$as_echo_n "checking for dld_link in -ldld... " >&6; }
-if ${ac_cv_lib_dld_dld_link+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dld_link ();
-int
-main ()
-{
-return dld_link ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_dld_dld_link=yes
-else
- ac_cv_lib_dld_dld_link=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
-$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
-if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
- lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
- ;;
- esac
-
- if test no = "$lt_cv_dlopen"; then
- enable_dlopen=no
- else
- enable_dlopen=yes
- fi
-
- case $lt_cv_dlopen in
- dlopen)
- save_CPPFLAGS=$CPPFLAGS
- test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
- save_LDFLAGS=$LDFLAGS
- wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
- save_LIBS=$LIBS
- LIBS="$lt_cv_dlopen_libs $LIBS"
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
-$as_echo_n "checking whether a program can dlopen itself... " >&6; }
-if ${lt_cv_dlopen_self+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test yes = "$cross_compiling"; then :
- lt_cv_dlopen_self=cross
-else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LT_DLGLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LT_DLGLOBAL DL_GLOBAL
-# else
-# define LT_DLGLOBAL 0
-# endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LT_DLLAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LT_DLLAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LT_DLLAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LT_DLLAZY_OR_NOW DL_NOW
-# else
-# define LT_DLLAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-/* When -fvisibility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
-#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
-int fnord () __attribute__((visibility("default")));
-#endif
-
-int fnord () { return 42; }
-int main ()
-{
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
- int status = $lt_dlunknown;
-
- if (self)
- {
- if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
- else
- {
- if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
- else puts (dlerror ());
- }
- /* dlclose (self); */
- }
- else
- puts (dlerror ());
-
- return status;
-}
-_LT_EOF
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
- (./conftest; exit; ) >&5 2>/dev/null
- lt_status=$?
- case x$lt_status in
- x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
- x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
- x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
- esac
- else :
- # compilation failed
- lt_cv_dlopen_self=no
- fi
-fi
-rm -fr conftest*
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
-$as_echo "$lt_cv_dlopen_self" >&6; }
-
- if test yes = "$lt_cv_dlopen_self"; then
- wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
-$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
-if ${lt_cv_dlopen_self_static+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test yes = "$cross_compiling"; then :
- lt_cv_dlopen_self_static=cross
-else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LT_DLGLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LT_DLGLOBAL DL_GLOBAL
-# else
-# define LT_DLGLOBAL 0
-# endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LT_DLLAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LT_DLLAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LT_DLLAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LT_DLLAZY_OR_NOW DL_NOW
-# else
-# define LT_DLLAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-/* When -fvisibility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
-#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
-int fnord () __attribute__((visibility("default")));
-#endif
-
-int fnord () { return 42; }
-int main ()
-{
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
- int status = $lt_dlunknown;
-
- if (self)
- {
- if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
- else
- {
- if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
- else puts (dlerror ());
- }
- /* dlclose (self); */
- }
- else
- puts (dlerror ());
-
- return status;
-}
-_LT_EOF
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
- (./conftest; exit; ) >&5 2>/dev/null
- lt_status=$?
- case x$lt_status in
- x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
- x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
- x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
- esac
- else :
- # compilation failed
- lt_cv_dlopen_self_static=no
- fi
-fi
-rm -fr conftest*
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
-$as_echo "$lt_cv_dlopen_self_static" >&6; }
- fi
-
- CPPFLAGS=$save_CPPFLAGS
- LDFLAGS=$save_LDFLAGS
- LIBS=$save_LIBS
- ;;
- esac
-
- case $lt_cv_dlopen_self in
- yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
- *) enable_dlopen_self=unknown ;;
- esac
-
- case $lt_cv_dlopen_self_static in
- yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
- *) enable_dlopen_self_static=unknown ;;
- esac
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-striplib=
-old_striplib=
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
-$as_echo_n "checking whether stripping libraries is possible... " >&6; }
-if test -z "$STRIP"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-else
- if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
- old_striplib="$STRIP --strip-debug"
- striplib="$STRIP --strip-unneeded"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
- case $host_os in
- darwin*)
- # FIXME - insert some real tests, host_os isn't really good enough
- striplib="$STRIP -x"
- old_striplib="$STRIP -S"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- ;;
- freebsd*)
- if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then
- old_striplib="$STRIP --strip-debug"
- striplib="$STRIP --strip-unneeded"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
- ;;
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- ;;
- esac
- fi
-fi
-
-
-
-
-
-
-
-
-
-
-
-
- # Report what library types will actually be built
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
-$as_echo_n "checking if libtool supports shared libraries... " >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
-$as_echo "$can_build_shared" >&6; }
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
-$as_echo_n "checking whether to build shared libraries... " >&6; }
- test no = "$can_build_shared" && enable_shared=no
-
- # On AIX, shared libraries and static libraries use the same namespace, and
- # are all built from PIC.
- case $host_os in
- aix3*)
- test yes = "$enable_shared" && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
-
- aix[4-9]*)
- if test ia64 != "$host_cpu"; then
- case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
- yes,aix,yes) ;; # shared object as lib.so file only
- yes,svr4,*) ;; # shared object as lib.so archive member only
- yes,*) enable_static=no ;; # shared object in lib.a archive as well
- esac
- fi
- ;;
- esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
-$as_echo "$enable_shared" >&6; }
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
-$as_echo_n "checking whether to build static libraries... " >&6; }
- # Make sure either enable_shared or enable_static is yes.
- test yes = "$enable_shared" || enable_static=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
-$as_echo "$enable_static" >&6; }
-
-
-
-
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-CC=$lt_save_CC
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ac_config_commands="$ac_config_commands libtool"
-
-
-
-
-# Only expand once:
-
-
-
-
-OURCPPFLAGS=''
-CPPFLAGS=${CPPFLAGS:-${OURCPPFLAGS}}
-CFLAGS="$CFLAGS"
-
-# Checks for programs.
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- fi
-fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-else
- CFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $CC dependency flag" >&5
-$as_echo_n "checking $CC dependency flag... " >&6; }
-echo 'void f(){}' >conftest.c
-if test "`$CC -MM conftest.c 2>&1`" = "conftest.o: conftest.c"; then
- DEPFLAG="-MM"
-else
- if test "`$CC -xM1 conftest.c 2>&1`" = "conftest.o: conftest.c"; then
- DEPFLAG="-xM1"
- else
- DEPFLAG="-MM" # dunno do something
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEPFLAG" >&5
-$as_echo "$DEPFLAG" >&6; }
-rm -f conftest.c
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
-set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.make <<\_ACEOF
-SHELL = /bin/sh
-all:
- @echo '@@@%%%=$(MAKE)=@@@%%%'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
-case `${MAKE-make} -f conftest.make 2>/dev/null` in
- *@@@%%%=?*=@@@%%%*)
- eval ac_cv_prog_make_${ac_make}_set=yes;;
- *)
- eval ac_cv_prog_make_${ac_make}_set=no;;
-esac
-rm -f conftest.make
-fi
-if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- SET_MAKE=
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-
-# Extra (sp)lint flags for NetBSD
-
-case "$host_os" in
- netbsd*) LINTFLAGS="'-D__RENAME(x)=' -D_NETINET_IN_H_ $LINTFLAGS"
- ;;
- *) LINTFLAGS="$LINTFLAGS"
- ;;
-esac
-
-
-
-$as_echo "#define WINVER 0x0502" >>confdefs.h
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -std=c99" >&5
-$as_echo_n "checking whether $CC supports -std=c99... " >&6; }
-cache=`echo std=c99 | sed 'y%.=/+-%___p_%'`
-if eval \${cv_prog_cc_flag_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo 'void f(void){}' >conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS -std=c99 -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_$cache=yes"
-else
-eval "cv_prog_cc_flag_$cache=no"
-fi
-rm -f conftest conftest.o conftest.c
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-C99FLAG="-std=c99"
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-:
-
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -xc99" >&5
-$as_echo_n "checking whether $CC supports -xc99... " >&6; }
-cache=`echo xc99 | sed 'y%.=/+-%___p_%'`
-if eval \${cv_prog_cc_flag_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo 'void f(void){}' >conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS -xc99 -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_$cache=yes"
-else
-eval "cv_prog_cc_flag_$cache=no"
-fi
-rm -f conftest conftest.o conftest.c
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-C99FLAG="-xc99"
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-:
-
-fi
-
-
-# routine to copy files
-# argument 1 is a list of files (relative to the source dir)
-# argument 2 is a destination directory (relative to the current
-# working directory
-
-
-# copy all .h files in the dir at argument 1
-# (relative to source) to the dir at argument 2
-# (relative to current dir)
-
-
-# Checks for typedefs, structures, and compiler characteristics.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
-$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if ${ac_cv_c_const+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
-#ifndef __cplusplus
- /* Ultrix mips cc rejects this sort of thing. */
- typedef int charset[2];
- const charset cs = { 0, 0 };
- /* SunOS 4.1.1 cc rejects this. */
- char const *const *pcpcc;
- char **ppc;
- /* NEC SVR4.0.2 mips cc rejects this. */
- struct point {int x, y;};
- static struct point const zero = {0,0};
- /* AIX XL C 1.02.0.0 rejects this.
- It does not let you subtract one const X* pointer from another in
- an arm of an if-expression whose if-part is not a constant
- expression */
- const char *g = "string";
- pcpcc = &g + (g ? g-g : 0);
- /* HPUX 7.0 cc rejects these. */
- ++pcpcc;
- ppc = (char**) pcpcc;
- pcpcc = (char const *const *) ppc;
- { /* SCO 3.2v4 cc rejects this sort of thing. */
- char tx;
- char *t = &tx;
- char const *s = 0 ? (char *) 0 : (char const *) 0;
-
- *t++ = 0;
- if (s) return 0;
- }
- { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
- int x[] = {25, 17};
- const int *foo = &x[0];
- ++foo;
- }
- { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
- typedef const int *iptr;
- iptr p = 0;
- ++p;
- }
- { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
- "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
- struct s { int j; const int *ap[3]; } bx;
- struct s *b = &bx; b->j = 5;
- }
- { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
- const int foo = 10;
- if (!foo) return 0;
- }
- return !cs[0] && !zero.x;
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_const=yes
-else
- ac_cv_c_const=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
-$as_echo "$ac_cv_c_const" >&6; }
-if test $ac_cv_c_const = no; then
-
-$as_echo "#define const /**/" >>confdefs.h
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-if test "x$CFLAGS" = "x" ; then
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -g" >&5
-$as_echo_n "checking whether $CC supports -g... " >&6; }
-cache=`echo g | sed 'y%.=/+-%___p_%'`
-if eval \${cv_prog_cc_flag_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo 'void f(void){}' >conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS -g -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_$cache=yes"
-else
-eval "cv_prog_cc_flag_$cache=no"
-fi
-rm -f conftest conftest.o conftest.c
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-CFLAGS="-g"
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-:
-
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -O2" >&5
-$as_echo_n "checking whether $CC supports -O2... " >&6; }
-cache=`echo O2 | sed 'y%.=/+-%___p_%'`
-if eval \${cv_prog_cc_flag_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo 'void f(void){}' >conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS -O2 -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_$cache=yes"
-else
-eval "cv_prog_cc_flag_$cache=no"
-fi
-rm -f conftest conftest.o conftest.c
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-CFLAGS="-O2 $CFLAGS"
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-:
-
-fi
-
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wall" >&5
-$as_echo_n "checking whether $CC supports -Wall... " >&6; }
-cache=`echo Wall | sed 'y%.=/+-%___p_%'`
-if eval \${cv_prog_cc_flag_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo 'void f(void){}' >conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS -Wall -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_$cache=yes"
-else
-eval "cv_prog_cc_flag_$cache=no"
-fi
-rm -f conftest conftest.o conftest.c
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-CFLAGS="-Wall $CFLAGS"
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-:
-
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -W" >&5
-$as_echo_n "checking whether $CC supports -W... " >&6; }
-cache=`echo W | sed 'y%.=/+-%___p_%'`
-if eval \${cv_prog_cc_flag_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo 'void f(void){}' >conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS -W -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_$cache=yes"
-else
-eval "cv_prog_cc_flag_$cache=no"
-fi
-rm -f conftest conftest.o conftest.c
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-CFLAGS="-W $CFLAGS"
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-:
-
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wwrite-strings" >&5
-$as_echo_n "checking whether $CC supports -Wwrite-strings... " >&6; }
-cache=`echo Wwrite-strings | sed 'y%.=/+-%___p_%'`
-if eval \${cv_prog_cc_flag_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo 'void f(void){}' >conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS -Wwrite-strings -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_$cache=yes"
-else
-eval "cv_prog_cc_flag_$cache=no"
-fi
-rm -f conftest conftest.o conftest.c
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-CFLAGS="-Wwrite-strings $CFLAGS"
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-:
-
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wstrict-prototypes" >&5
-$as_echo_n "checking whether $CC supports -Wstrict-prototypes... " >&6; }
-cache=`echo Wstrict-prototypes | sed 'y%.=/+-%___p_%'`
-if eval \${cv_prog_cc_flag_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo 'void f(void){}' >conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS -Wstrict-prototypes -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_$cache=yes"
-else
-eval "cv_prog_cc_flag_$cache=no"
-fi
-rm -f conftest conftest.o conftest.c
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-CFLAGS="-Wstrict-prototypes $CFLAGS"
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-:
-
-fi
-
-#ACX_CHECK_COMPILER_FLAG(Wshadow, [CFLAGS="-Wshadow $CFLAGS"])
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wunused-function" >&5
-$as_echo_n "checking whether $CC supports -Wunused-function... " >&6; }
-cache=`echo Wunused-function | sed 'y%.=/+-%___p_%'`
-if eval \${cv_prog_cc_flag_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo 'void f(void){}' >conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS -Wunused-function -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_$cache=yes"
-else
-eval "cv_prog_cc_flag_$cache=no"
-fi
-rm -f conftest conftest.o conftest.c
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-CFLAGS="-Wunused-function $CFLAGS"
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-:
-
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wmissing-prototypes" >&5
-$as_echo_n "checking whether $CC supports -Wmissing-prototypes... " >&6; }
-cache=`echo Wmissing-prototypes | sed 'y%.=/+-%___p_%'`
-if eval \${cv_prog_cc_flag_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo 'void f(void){}' >conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS -Wmissing-prototypes -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_$cache=yes"
-else
-eval "cv_prog_cc_flag_$cache=no"
-fi
-rm -f conftest conftest.o conftest.c
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-CFLAGS="-Wmissing-prototypes $CFLAGS"
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-:
-
-fi
-
-
-for ac_header in getopt.h time.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-# MinGW32 tests
-for ac_header in winsock2.h ws2tcpip.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-# end mingw32 tests
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Werror" >&5
-$as_echo_n "checking whether $CC supports -Werror... " >&6; }
-cache=`echo Werror | sed 'y%.=/+-%___p_%'`
-if eval \${cv_prog_cc_flag_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo 'void f(void){}' >conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS -Werror -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_$cache=yes"
-else
-eval "cv_prog_cc_flag_$cache=no"
-fi
-rm -f conftest conftest.o conftest.c
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-ERRFLAG="-Werror"
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-:
-ERRFLAG="-errwarn"
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wall" >&5
-$as_echo_n "checking whether $CC supports -Wall... " >&6; }
-cache=`echo Wall | sed 'y%.=/+-%___p_%'`
-if eval \${cv_prog_cc_flag_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo 'void f(void){}' >conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS -Wall -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_$cache=yes"
-else
-eval "cv_prog_cc_flag_$cache=no"
-fi
-rm -f conftest conftest.o conftest.c
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-ERRFLAG="$ERRFLAG -Wall"
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-:
-ERRFLAG="$ERRFLAG -errfmt"
-fi
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -std=c99" >&5
-$as_echo_n "checking whether $CC supports -std=c99... " >&6; }
-cache=`echo std=c99 | sed 'y%.=/+-%___p_%'`
-if eval \${cv_prog_cc_flag_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo 'void f(void){}' >conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS -std=c99 -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_$cache=yes"
-else
-eval "cv_prog_cc_flag_$cache=no"
-fi
-rm -f conftest conftest.o conftest.c
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-C99FLAG="-std=c99"
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-:
-
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -xc99" >&5
-$as_echo_n "checking whether $CC supports -xc99... " >&6; }
-cache=`echo xc99 | sed 'y%.=/+-%___p_%'`
-if eval \${cv_prog_cc_flag_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo 'void f(void){}' >conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS -xc99 -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_$cache=yes"
-else
-eval "cv_prog_cc_flag_$cache=no"
-fi
-rm -f conftest conftest.o conftest.c
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-C99FLAG="-xc99"
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-:
-
-fi
-
-
-for ac_header in getopt.h time.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE as a flag for $CC" >&5
-$as_echo_n "checking whether we need $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE as a flag for $CC... " >&6; }
-cache=`$as_echo "$C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE" | $as_tr_sh`
-if eval \${cv_prog_cc_flag_needed_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo '
-#include "confdefs.h"
-#include <stdlib.h>
-#include <ctype.h>
-#include <sys/time.h>
-#ifdef HAVE_TIME_H
-#include <time.h>
-#endif
-#include <unistd.h>
-#include <netdb.h>
-#ifdef HAVE_GETOPT_H
-#include <getopt.h>
-#endif
-
-int test() {
- int a;
- char **opts = NULL;
- struct timeval tv;
- char *t;
- time_t time = 0;
- char *buf = NULL;
- const char* str = NULL;
- struct msghdr msg;
- msg.msg_control = 0;
- t = ctime_r(&time, buf);
- tv.tv_usec = 10;
- srandom(32);
- a = getopt(2, opts, "a");
- a = isascii(32);
- str = gai_strerror(0);
- if(str && t && tv.tv_usec && msg.msg_control)
- a = 0;
- return a;
-}
-' > conftest.c
-echo 'void f(){}' >>conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_needed_$cache=no"
-else
-
-if test -z "`$CC $CPPFLAGS $CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE $ERRFLAG -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_needed_$cache=yes"
-else
-eval "cv_prog_cc_flag_needed_$cache=fail"
-#echo 'Test with flag fails too!'
-#cat conftest.c
-#echo "$CC $CPPFLAGS $CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE $ERRFLAG -c conftest.c 2>&1"
-#echo `$CC $CPPFLAGS $CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE $ERRFLAG -c conftest.c 2>&1`
-#exit 1
-fi
-
-fi
-rm -f conftest conftest.c conftest.o
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-CFLAGS="$CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE"
-else
-if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = no"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-#echo 'Test with flag is no!'
-#cat conftest.c
-#echo "$CC $CPPFLAGS $CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE $ERRFLAG -c conftest.c 2>&1"
-#echo `$CC $CPPFLAGS $CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE $ERRFLAG -c conftest.c 2>&1`
-#exit 1
-:
-
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
-$as_echo "failed" >&6; }
-:
-
-fi
-fi
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE as a flag for $CC" >&5
-$as_echo_n "checking whether we need $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE as a flag for $CC... " >&6; }
-cache=`$as_echo "$C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE" | $as_tr_sh`
-if eval \${cv_prog_cc_flag_needed_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo '
-#include "confdefs.h"
-#include <stdlib.h>
-#include <ctype.h>
-#include <sys/time.h>
-#ifdef HAVE_TIME_H
-#include <time.h>
-#endif
-#include <unistd.h>
-#include <netdb.h>
-#ifdef HAVE_GETOPT_H
-#include <getopt.h>
-#endif
-
-int test() {
- int a;
- char **opts = NULL;
- struct timeval tv;
- char *t;
- time_t time = 0;
- char *buf = NULL;
- const char* str = NULL;
- struct msghdr msg;
- msg.msg_control = 0;
- t = ctime_r(&time, buf);
- tv.tv_usec = 10;
- srandom(32);
- a = getopt(2, opts, "a");
- a = isascii(32);
- str = gai_strerror(0);
- if(str && t && tv.tv_usec && msg.msg_control)
- a = 0;
- return a;
-}
-' > conftest.c
-echo 'void f(){}' >>conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_needed_$cache=no"
-else
-
-if test -z "`$CC $CPPFLAGS $CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE $ERRFLAG -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_needed_$cache=yes"
-else
-eval "cv_prog_cc_flag_needed_$cache=fail"
-#echo 'Test with flag fails too!'
-#cat conftest.c
-#echo "$CC $CPPFLAGS $CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE $ERRFLAG -c conftest.c 2>&1"
-#echo `$CC $CPPFLAGS $CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE $ERRFLAG -c conftest.c 2>&1`
-#exit 1
-fi
-
-fi
-rm -f conftest conftest.c conftest.o
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-CFLAGS="$CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE"
-else
-if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = no"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-#echo 'Test with flag is no!'
-#cat conftest.c
-#echo "$CC $CPPFLAGS $CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE $ERRFLAG -c conftest.c 2>&1"
-#echo `$CC $CPPFLAGS $CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE $ERRFLAG -c conftest.c 2>&1`
-#exit 1
-:
-
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
-$as_echo "failed" >&6; }
-:
-
-fi
-fi
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need $C99FLAG as a flag for $CC" >&5
-$as_echo_n "checking whether we need $C99FLAG as a flag for $CC... " >&6; }
-cache=`$as_echo "$C99FLAG" | $as_tr_sh`
-if eval \${cv_prog_cc_flag_needed_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo '
-#include <stdbool.h>
-#include <ctype.h>
-int test() {
- int a = 0;
- return a;
-}
-' > conftest.c
-echo 'void f(){}' >>conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_needed_$cache=no"
-else
-
-if test -z "`$CC $CPPFLAGS $CFLAGS $C99FLAG $ERRFLAG -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_needed_$cache=yes"
-else
-eval "cv_prog_cc_flag_needed_$cache=fail"
-#echo 'Test with flag fails too!'
-#cat conftest.c
-#echo "$CC $CPPFLAGS $CFLAGS $C99FLAG $ERRFLAG -c conftest.c 2>&1"
-#echo `$CC $CPPFLAGS $CFLAGS $C99FLAG $ERRFLAG -c conftest.c 2>&1`
-#exit 1
-fi
-
-fi
-rm -f conftest conftest.c conftest.o
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-CFLAGS="$CFLAGS $C99FLAG"
-else
-if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = no"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-#echo 'Test with flag is no!'
-#cat conftest.c
-#echo "$CC $CPPFLAGS $CFLAGS $C99FLAG $ERRFLAG -c conftest.c 2>&1"
-#echo `$CC $CPPFLAGS $CFLAGS $C99FLAG $ERRFLAG -c conftest.c 2>&1`
-#exit 1
-:
-
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
-$as_echo "failed" >&6; }
-:
-
-fi
-fi
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D_BSD_SOURCE -D_DEFAULT_SOURCE as a flag for $CC" >&5
-$as_echo_n "checking whether we need -D_BSD_SOURCE -D_DEFAULT_SOURCE as a flag for $CC... " >&6; }
-cache=_D_BSD_SOURCE__D_DEFAULT_SOURCE
-if eval \${cv_prog_cc_flag_needed_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo '
-#include <ctype.h>
-
-int test() {
- int a;
- a = isascii(32);
- return a;
-}
-' > conftest.c
-echo 'void f(){}' >>conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_needed_$cache=no"
-else
-
-if test -z "`$CC $CPPFLAGS $CFLAGS -D_BSD_SOURCE -D_DEFAULT_SOURCE $ERRFLAG -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_needed_$cache=yes"
-else
-eval "cv_prog_cc_flag_needed_$cache=fail"
-#echo 'Test with flag fails too!'
-#cat conftest.c
-#echo "$CC $CPPFLAGS $CFLAGS -D_BSD_SOURCE -D_DEFAULT_SOURCE $ERRFLAG -c conftest.c 2>&1"
-#echo `$CC $CPPFLAGS $CFLAGS -D_BSD_SOURCE -D_DEFAULT_SOURCE $ERRFLAG -c conftest.c 2>&1`
-#exit 1
-fi
-
-fi
-rm -f conftest conftest.c conftest.o
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-CFLAGS="$CFLAGS -D_BSD_SOURCE -D_DEFAULT_SOURCE"
-else
-if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = no"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-#echo 'Test with flag is no!'
-#cat conftest.c
-#echo "$CC $CPPFLAGS $CFLAGS -D_BSD_SOURCE -D_DEFAULT_SOURCE $ERRFLAG -c conftest.c 2>&1"
-#echo `$CC $CPPFLAGS $CFLAGS -D_BSD_SOURCE -D_DEFAULT_SOURCE $ERRFLAG -c conftest.c 2>&1`
-#exit 1
-:
-
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
-$as_echo "failed" >&6; }
-:
-
-fi
-fi
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D_GNU_SOURCE as a flag for $CC" >&5
-$as_echo_n "checking whether we need -D_GNU_SOURCE as a flag for $CC... " >&6; }
-cache=_D_GNU_SOURCE
-if eval \${cv_prog_cc_flag_needed_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo '
-#include <netinet/in.h>
-
-int test() {
- struct in6_pktinfo inf;
- int a = (int)sizeof(inf);
- return a;
-}
-' > conftest.c
-echo 'void f(){}' >>conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_needed_$cache=no"
-else
-
-if test -z "`$CC $CPPFLAGS $CFLAGS -D_GNU_SOURCE $ERRFLAG -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_needed_$cache=yes"
-else
-eval "cv_prog_cc_flag_needed_$cache=fail"
-#echo 'Test with flag fails too!'
-#cat conftest.c
-#echo "$CC $CPPFLAGS $CFLAGS -D_GNU_SOURCE $ERRFLAG -c conftest.c 2>&1"
-#echo `$CC $CPPFLAGS $CFLAGS -D_GNU_SOURCE $ERRFLAG -c conftest.c 2>&1`
-#exit 1
-fi
-
-fi
-rm -f conftest conftest.c conftest.o
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-CFLAGS="$CFLAGS -D_GNU_SOURCE"
-else
-if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = no"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-#echo 'Test with flag is no!'
-#cat conftest.c
-#echo "$CC $CPPFLAGS $CFLAGS -D_GNU_SOURCE $ERRFLAG -c conftest.c 2>&1"
-#echo `$CC $CPPFLAGS $CFLAGS -D_GNU_SOURCE $ERRFLAG -c conftest.c 2>&1`
-#exit 1
-:
-
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
-$as_echo "failed" >&6; }
-:
-
-fi
-fi
-
-
-# check again for GNU_SOURCE for setresgid. May fail if setresgid
-# is not available at all. -D_FRSRESGID is to make this check unique.
-# otherwise we would get the previous cached result.
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D_GNU_SOURCE -D_FRSRESGID as a flag for $CC" >&5
-$as_echo_n "checking whether we need -D_GNU_SOURCE -D_FRSRESGID as a flag for $CC... " >&6; }
-cache=_D_GNU_SOURCE__D_FRSRESGID
-if eval \${cv_prog_cc_flag_needed_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo '
-#include <unistd.h>
-
-int test() {
- int a = setresgid(0,0,0);
- a = setresuid(0,0,0);
- return a;
-}
-' > conftest.c
-echo 'void f(){}' >>conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_needed_$cache=no"
-else
-
-if test -z "`$CC $CPPFLAGS $CFLAGS -D_GNU_SOURCE -D_FRSRESGID $ERRFLAG -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_needed_$cache=yes"
-else
-eval "cv_prog_cc_flag_needed_$cache=fail"
-#echo 'Test with flag fails too!'
-#cat conftest.c
-#echo "$CC $CPPFLAGS $CFLAGS -D_GNU_SOURCE -D_FRSRESGID $ERRFLAG -c conftest.c 2>&1"
-#echo `$CC $CPPFLAGS $CFLAGS -D_GNU_SOURCE -D_FRSRESGID $ERRFLAG -c conftest.c 2>&1`
-#exit 1
-fi
-
-fi
-rm -f conftest conftest.c conftest.o
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-CFLAGS="$CFLAGS -D_GNU_SOURCE"
-else
-if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = no"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-#echo 'Test with flag is no!'
-#cat conftest.c
-#echo "$CC $CPPFLAGS $CFLAGS -D_GNU_SOURCE -D_FRSRESGID $ERRFLAG -c conftest.c 2>&1"
-#echo `$CC $CPPFLAGS $CFLAGS -D_GNU_SOURCE -D_FRSRESGID $ERRFLAG -c conftest.c 2>&1`
-#exit 1
-:
-
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
-$as_echo "failed" >&6; }
-:
-
-fi
-fi
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D_POSIX_C_SOURCE=200112 as a flag for $CC" >&5
-$as_echo_n "checking whether we need -D_POSIX_C_SOURCE=200112 as a flag for $CC... " >&6; }
-cache=_D_POSIX_C_SOURCE_200112
-if eval \${cv_prog_cc_flag_needed_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo '
-#include "confdefs.h"
-#ifdef HAVE_TIME_H
-#include <time.h>
-#endif
-#include <netdb.h>
-
-int test() {
- int a = 0;
- char *t;
- time_t time = 0;
- char *buf = NULL;
- const char* str = NULL;
- t = ctime_r(&time, buf);
- str = gai_strerror(0);
- if(t && str)
- a = 0;
- return a;
-}
-' > conftest.c
-echo 'void f(){}' >>conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_needed_$cache=no"
-else
-
-if test -z "`$CC $CPPFLAGS $CFLAGS -D_POSIX_C_SOURCE=200112 $ERRFLAG -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_needed_$cache=yes"
-else
-eval "cv_prog_cc_flag_needed_$cache=fail"
-#echo 'Test with flag fails too!'
-#cat conftest.c
-#echo "$CC $CPPFLAGS $CFLAGS -D_POSIX_C_SOURCE=200112 $ERRFLAG -c conftest.c 2>&1"
-#echo `$CC $CPPFLAGS $CFLAGS -D_POSIX_C_SOURCE=200112 $ERRFLAG -c conftest.c 2>&1`
-#exit 1
-fi
-
-fi
-rm -f conftest conftest.c conftest.o
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-CFLAGS="$CFLAGS -D_POSIX_C_SOURCE=200112"
-else
-if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = no"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-#echo 'Test with flag is no!'
-#cat conftest.c
-#echo "$CC $CPPFLAGS $CFLAGS -D_POSIX_C_SOURCE=200112 $ERRFLAG -c conftest.c 2>&1"
-#echo `$CC $CPPFLAGS $CFLAGS -D_POSIX_C_SOURCE=200112 $ERRFLAG -c conftest.c 2>&1`
-#exit 1
-:
-
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
-$as_echo "failed" >&6; }
-:
-
-fi
-fi
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D__EXTENSIONS__ as a flag for $CC" >&5
-$as_echo_n "checking whether we need -D__EXTENSIONS__ as a flag for $CC... " >&6; }
-cache=_D__EXTENSIONS__
-if eval \${cv_prog_cc_flag_needed_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo '
-#include "confdefs.h"
-#include <stdlib.h>
-#include <ctype.h>
-#include <sys/time.h>
-#ifdef HAVE_TIME_H
-#include <time.h>
-#endif
-#include <unistd.h>
-#ifdef HAVE_GETOPT_H
-#include <getopt.h>
-#endif
-
-int test() {
- int a;
- char **opts = NULL;
- struct timeval tv;
- tv.tv_usec = 10;
- srandom(32);
- a = getopt(2, opts, "a");
- a = isascii(32);
- if(tv.tv_usec)
- a = 0;
- return a;
-}
-' > conftest.c
-echo 'void f(){}' >>conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_needed_$cache=no"
-else
-
-if test -z "`$CC $CPPFLAGS $CFLAGS -D__EXTENSIONS__ $ERRFLAG -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_needed_$cache=yes"
-else
-eval "cv_prog_cc_flag_needed_$cache=fail"
-#echo 'Test with flag fails too!'
-#cat conftest.c
-#echo "$CC $CPPFLAGS $CFLAGS -D__EXTENSIONS__ $ERRFLAG -c conftest.c 2>&1"
-#echo `$CC $CPPFLAGS $CFLAGS -D__EXTENSIONS__ $ERRFLAG -c conftest.c 2>&1`
-#exit 1
-fi
-
-fi
-rm -f conftest conftest.c conftest.o
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-CFLAGS="$CFLAGS -D__EXTENSIONS__"
-else
-if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = no"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-#echo 'Test with flag is no!'
-#cat conftest.c
-#echo "$CC $CPPFLAGS $CFLAGS -D__EXTENSIONS__ $ERRFLAG -c conftest.c 2>&1"
-#echo `$CC $CPPFLAGS $CFLAGS -D__EXTENSIONS__ $ERRFLAG -c conftest.c 2>&1`
-#exit 1
-:
-
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
-$as_echo "failed" >&6; }
-:
-
-fi
-fi
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
-$as_echo_n "checking for inline... " >&6; }
-if ${ac_cv_c_inline+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_c_inline=no
-for ac_kw in inline __inline__ __inline; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifndef __cplusplus
-typedef int foo_t;
-static $ac_kw foo_t static_foo () {return 0; }
-$ac_kw foo_t foo () {return 0; }
-#endif
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_inline=$ac_kw
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- test "$ac_cv_c_inline" != no && break
-done
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
-$as_echo "$ac_cv_c_inline" >&6; }
-
-case $ac_cv_c_inline in
- inline | yes) ;;
- *)
- case $ac_cv_c_inline in
- no) ac_val=;;
- *) ac_val=$ac_cv_c_inline;;
- esac
- cat >>confdefs.h <<_ACEOF
-#ifndef __cplusplus
-#define inline $ac_val
-#endif
-_ACEOF
- ;;
-esac
-
-ac_fn_c_check_type "$LINENO" "int8_t" "ac_cv_type_int8_t" "$ac_includes_default"
-if test "x$ac_cv_type_int8_t" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define int8_t char
-_ACEOF
-
-fi
-
-ac_fn_c_check_type "$LINENO" "int16_t" "ac_cv_type_int16_t" "$ac_includes_default"
-if test "x$ac_cv_type_int16_t" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define int16_t short
-_ACEOF
-
-fi
-
-ac_fn_c_check_type "$LINENO" "int32_t" "ac_cv_type_int32_t" "$ac_includes_default"
-if test "x$ac_cv_type_int32_t" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define int32_t int
-_ACEOF
-
-fi
-
-ac_fn_c_check_type "$LINENO" "int64_t" "ac_cv_type_int64_t" "$ac_includes_default"
-if test "x$ac_cv_type_int64_t" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define int64_t long long
-_ACEOF
-
-fi
-
-ac_fn_c_check_type "$LINENO" "uint8_t" "ac_cv_type_uint8_t" "$ac_includes_default"
-if test "x$ac_cv_type_uint8_t" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define uint8_t unsigned char
-_ACEOF
-
-fi
-
-ac_fn_c_check_type "$LINENO" "uint16_t" "ac_cv_type_uint16_t" "$ac_includes_default"
-if test "x$ac_cv_type_uint16_t" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define uint16_t unsigned short
-_ACEOF
-
-fi
-
-ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "$ac_includes_default"
-if test "x$ac_cv_type_uint32_t" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define uint32_t unsigned int
-_ACEOF
-
-fi
-
-ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "$ac_includes_default"
-if test "x$ac_cv_type_uint64_t" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define uint64_t unsigned long long
-_ACEOF
-
-fi
-
-
-# my own checks
-# Extract the first word of "doxygen", so it can be a program name with args.
-set dummy doxygen; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_doxygen+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$doxygen"; then
- ac_cv_prog_doxygen="$doxygen" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_doxygen="doxygen"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-doxygen=$ac_cv_prog_doxygen
-if test -n "$doxygen"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $doxygen" >&5
-$as_echo "$doxygen" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-
-# check to see if libraries are needed for these functions.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5
-$as_echo_n "checking for library containing socket... " >&6; }
-if ${ac_cv_search_socket+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char socket ();
-int
-main ()
-{
-return socket ();
- ;
- return 0;
-}
-_ACEOF
-for ac_lib in '' socket; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_socket=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if ${ac_cv_search_socket+:} false; then :
- break
-fi
-done
-if ${ac_cv_search_socket+:} false; then :
-
-else
- ac_cv_search_socket=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5
-$as_echo "$ac_cv_search_socket" >&6; }
-ac_res=$ac_cv_search_socket
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing inet_pton" >&5
-$as_echo_n "checking for library containing inet_pton... " >&6; }
-if ${ac_cv_search_inet_pton+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char inet_pton ();
-int
-main ()
-{
-return inet_pton ();
- ;
- return 0;
-}
-_ACEOF
-for ac_lib in '' nsl; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_inet_pton=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if ${ac_cv_search_inet_pton+:} false; then :
- break
-fi
-done
-if ${ac_cv_search_inet_pton+:} false; then :
-
-else
- ac_cv_search_inet_pton=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inet_pton" >&5
-$as_echo "$ac_cv_search_inet_pton" >&6; }
-ac_res=$ac_cv_search_inet_pton
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-
-
-
-# Check whether --with-drill was given.
-if test "${with_drill+set}" = set; then :
- withval=$with_drill;
-else
- with_drill="no"
-fi
-
-if test x_$with_drill != x_no ; then
- DRILL=drill
-
- INSTALL_DRILL=install-drill
-
- UNINSTALL_DRILL=uninstall-drill
-
- CLEAN_DRILL=clean-drill
-
- LINT_DRILL=lint-drill
-
- if test -e $srcdir/drill/config.h -o -e drill/config.h ; then
- as_fn_error $? "
-A config.h was detected in the drill subdirectory.
-This does not work with the --with-drill option.
-Please remove the config.h from the drill subdirectory
-or do not use the --with-drill option." "$LINENO" 5
- fi
-else
- DRILL=""
-
- INSTALL_DRILL=""
-
- UNINSTALL_DRILL=""
-
- CLEAN_DRILL=""
-
- LINT_DRILL=""
-
-fi
-
-
-
-# Check whether --with-examples was given.
-if test "${with_examples+set}" = set; then :
- withval=$with_examples;
-else
- with_examples="no"
-fi
-
-if test x_$with_examples != x_no ; then
- EXAMPLES=examples
-
- INSTALL_EXAMPLES=install-examples
-
- UNINSTALL_EXAMPLES=uninstall-examples
-
- CLEAN_EXAMPLES=clean-examples
-
- LINT_EXAMPLES=lint-examples
-
- if test -e $srcdir/examples/config.h -o -e examples/config.h ; then
- as_fn_error $? "
-A config.h was detected in the examples subdirectory.
-This does not work with the --with-examples option.
-Please remove the config.h from the examples subdirectory
-or do not use the --with-examples option." "$LINENO" 5
- fi
-else
- EXAMPLES=""
-
- INSTALL_EXAMPLES=""
-
- UNINSTALL_EXAMPLES=""
-
- CLEAN_EXAMPLES=""
-
- LINT_EXAMPLES=""
-
-fi
-
-# add option to disable installation of ldns-config script
-# Check whether --enable-ldns-config was given.
-if test "${enable_ldns_config+set}" = set; then :
- enableval=$enable_ldns_config; enable_ldns_config=$enableval
-else
- enable_ldns_config=yes
-fi
-
-if test "x$enable_ldns_config" = xyes; then
- INSTALL_CONFIG=install-config
-
- INSTALL_CONFIG_MANPAGE=install-config-manpage
-
- UNINSTALL_CONFIG=uninstall-config
-
- UNINSTALL_CONFIG_MANPAGE=uninstall-config-manpage
-
-else
- INSTALL_CONFIG=""
-
- INSTALL_CONFIG_MANPAGE=""
-
- UNINSTALL_CONFIG=""
-
- UNINSTALL_CONFIG_MANPAGE=""
-
-fi
-
-# add option to disable library printing to stderr
-# Check whether --enable-stderr-msgs was given.
-if test "${enable_stderr_msgs+set}" = set; then :
- enableval=$enable_stderr_msgs; enable_stderr_msgs=$enableval
-else
- enable_stderr_msgs=no
-fi
-
-case "$enable_stderr_msgs" in
- no) ;;
- *)
-
-cat >>confdefs.h <<_ACEOF
-#define STDERR_MSGS 1
-_ACEOF
-
- ;;
-esac
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for poll(2)" >&5
-$as_echo_n "checking for poll(2)... " >&6; }
- if ${ax_cv_have_poll+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
- #include <poll.h>
-int
-main ()
-{
-int rc; rc = poll((struct pollfd *)(0), 0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ax_cv_have_poll=yes
-else
- ax_cv_have_poll=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-
- if test "${ax_cv_have_poll}" = "yes"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- ax_config_feature_poll=yes
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- ax_config_feature_poll=no
-
-fi
-
-
-# Check whether --enable-poll was given.
-if test "${enable_poll+set}" = set; then :
- enableval=$enable_poll;
-case "${enableval}" in
- yes)
- ax_config_feature_poll="yes"
- ;;
- no)
- ax_config_feature_poll="no"
- ;;
- *)
- as_fn_error $? "bad value ${enableval} for feature --poll" "$LINENO" 5
- ;;
-esac
-
-fi
-
-
-if test "$ax_config_feature_poll" = yes; then :
- $as_echo "#define HAVE_POLL 1" >>confdefs.h
-
-
- if test "$ax_config_feature_verbose" = yes; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: Feature poll is enabled" >&5
-$as_echo "$as_me: Feature poll is enabled" >&6;}
-
-fi
-
-else
-
- if test "$ax_config_feature_verbose" = yes; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: Feature poll is disabled" >&5
-$as_echo "$as_me: Feature poll is disabled" >&6;}
-
-fi
-
-fi
-
-
-
-
-
-# check for python
-PYTHON_X_CFLAGS=""
-ldns_with_pyldns=no
-ldns_with_pyldnsx=no
-
-# Check whether --with-pyldns was given.
-if test "${with_pyldns+set}" = set; then :
- withval=$with_pyldns;
-else
- withval="no"
-fi
-
-ldns_have_python=no
-if test x_$withval != x_no; then
- # ===========================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_python_devel.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-# AX_PYTHON_DEVEL([version])
-#
-# DESCRIPTION
-#
-# Note: Defines as a precious variable "PYTHON_VERSION". Don't override it
-# in your configure.ac.
-#
-# This macro checks for Python and tries to get the include path to
-# 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LDFLAGS)
-# output variables. It also exports $(PYTHON_EXTRA_LIBS) and
-# $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code.
-#
-# You can search for some particular version of Python by passing a
-# parameter to this macro, for example ">= '2.3.1'", or "== '2.4'". Please
-# note that you *have* to pass also an operator along with the version to
-# match, and pay special attention to the single quotes surrounding the
-# version number. Don't use "PYTHON_VERSION" for this: that environment
-# variable is declared as precious and thus reserved for the end-user.
-#
-# This macro should work for all versions of Python >= 2.1.0. As an end
-# user, you can disable the check for the python version by setting the
-# PYTHON_NOVERSIONCHECK environment variable to something else than the
-# empty string.
-#
-# If you need to use this macro for an older Python version, please
-# contact the authors. We're always open for feedback.
-#
-# LICENSE
-#
-# Copyright (c) 2009 Sebastian Huber <sebastian-huber@web.de>
-# Copyright (c) 2009 Alan W. Irwin
-# Copyright (c) 2009 Rafael Laboissiere <rafael@laboissiere.net>
-# Copyright (c) 2009 Andrew Collier
-# Copyright (c) 2009 Matteo Settenvini <matteo@member.fsf.org>
-# Copyright (c) 2009 Horst Knorr <hk_classes@knoda.org>
-# Copyright (c) 2013 Daniel Mullner <muellner@math.stanford.edu>
-#
-# 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 <http://www.gnu.org/licenses/>.
-#
-# As a special exception, the respective Autoconf Macro's copyright owner
-# gives unlimited permission to copy, distribute and modify the configure
-# scripts that are the output of Autoconf when processing the Macro. You
-# need not follow the terms of the GNU General Public License when using
-# or distributing such scripts, even though portions of the text of the
-# Macro appear in them. The GNU General Public License (GPL) does govern
-# all other use of the material that constitutes the Autoconf Macro.
-#
-# This special exception to the GPL applies to versions of the Autoconf
-# Macro released by the Autoconf Archive. When you make and distribute a
-# modified version of the Autoconf Macro, you may extend this special
-# exception to the GPL to apply to your modified version as well.
-
-#serial 16
-
-# This is what autoupdate's m4 run will expand. It fires
-# the warning (with _au_warn_XXX), outputs it into the
-# updated configure.ac (with AC_DIAGNOSE), and then outputs
-# the replacement expansion.
-
-
-# This is an auxiliary macro that is also run when
-# autoupdate runs m4. It simply calls m4_warning, but
-# we need a wrapper so that each warning is emitted only
-# once. We break the quoting in m4_warning's argument in
-# order to expand this macro's arguments, not AU_DEFUN's.
-
-
-# Finally, this is the expansion that is picked up by
-# autoconf. It tells the user to run autoupdate, and
-# then outputs the replacement expansion. We do not care
-# about autoupdate's warning because that contains
-# information on what to do *after* running autoupdate.
-
-
-
- ac_save_LIBS="$LIBS"
-
- #
- # Allow the use of a (user set) custom python version
- #
-
-
- # Extract the first word of "python[$PYTHON_VERSION]", so it can be a program name with args.
-set dummy python$PYTHON_VERSION; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_PYTHON+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $PYTHON in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-PYTHON=$ac_cv_path_PYTHON
-if test -n "$PYTHON"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5
-$as_echo "$PYTHON" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- if test -z "$PYTHON"; then
- as_fn_error $? "Cannot find python$PYTHON_VERSION in your system path" "$LINENO" 5
- PYTHON_VERSION=""
- fi
-
- #
- # Check for a version of Python >= 2.1.0
- #
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a version of Python >= '2.1.0'" >&5
-$as_echo_n "checking for a version of Python >= '2.1.0'... " >&6; }
- ac_supports_python_ver=`$PYTHON -c "import sys; \
- ver = sys.version.split ()[0]; \
- print (ver >= '2.1.0')"`
- if test "$ac_supports_python_ver" != "True"; then
- if test -z "$PYTHON_NOVERSIONCHECK"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "
-This version of the AC_PYTHON_DEVEL macro
-doesn't work properly with versions of Python before
-2.1.0. You may need to re-run configure, setting the
-variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG,
-PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
-Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
-to something else than an empty string.
-
-See \`config.log' for more details" "$LINENO" 5; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: skip at user request" >&5
-$as_echo "skip at user request" >&6; }
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- fi
-
- #
- # if the macro parameter ``version'' is set, honour it
- #
- if test -n ">= '2.4.0'"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a version of Python >= '2.4.0'" >&5
-$as_echo_n "checking for a version of Python >= '2.4.0'... " >&6; }
- ac_supports_python_ver=`$PYTHON -c "import sys; \
- ver = sys.version.split ()[0]; \
- print (ver >= '2.4.0')"`
- if test "$ac_supports_python_ver" = "True"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- as_fn_error $? "this package requires Python >= '2.4.0'.
-If you have it installed, but it isn't the default Python
-interpreter in your system path, please pass the PYTHON_VERSION
-variable to configure. See \`\`configure --help'' for reference.
-" "$LINENO" 5
- PYTHON_VERSION=""
- fi
- fi
-
- #
- # Check if you have distutils, else fail
- #
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5
-$as_echo_n "checking for the distutils Python package... " >&6; }
- ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
- if test -z "$ac_distutils_result"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- as_fn_error $? "cannot import Python module \"distutils\".
-Please check your Python installation. The error was:
-$ac_distutils_result" "$LINENO" 5
- PYTHON_VERSION=""
- fi
-
- #
- # Check for Python include path
- #
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python include path" >&5
-$as_echo_n "checking for Python include path... " >&6; }
- if test -z "$PYTHON_CPPFLAGS"; then
- python_path=`$PYTHON -c "import distutils.sysconfig; \
- print (distutils.sysconfig.get_python_inc ());"`
- plat_python_path=`$PYTHON -c "import distutils.sysconfig; \
- print (distutils.sysconfig.get_python_inc (plat_specific=1));"`
- if test -n "${python_path}"; then
- if test "${plat_python_path}" != "${python_path}"; then
- python_path="-I$python_path -I$plat_python_path"
- else
- python_path="-I$python_path"
- fi
- fi
- PYTHON_CPPFLAGS=$python_path
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_CPPFLAGS" >&5
-$as_echo "$PYTHON_CPPFLAGS" >&6; }
-
-
- #
- # Check for Python library path
- #
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python library path" >&5
-$as_echo_n "checking for Python library path... " >&6; }
- if test -z "$PYTHON_LDFLAGS"; then
- # (makes two attempts to ensure we've got a version number
- # from the interpreter)
- ac_python_version=`cat<<EOD | $PYTHON -
-
-# join all versioning strings, on some systems
-# major/minor numbers could be in different list elements
-from distutils.sysconfig import *
-e = get_config_var('VERSION')
-if e is not None:
- print(e)
-EOD`
-
- if test -z "$ac_python_version"; then
- if test -n "$PYTHON_VERSION"; then
- ac_python_version=$PYTHON_VERSION
- else
- ac_python_version=`$PYTHON -c "import sys; \
- print (sys.version[:3])"`
- fi
- fi
-
- # Make the versioning information available to the compiler
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_PYTHON "$ac_python_version"
-_ACEOF
-
-
- # First, the library directory:
- ac_python_libdir=`cat<<EOD | $PYTHON -
-
-# There should be only one
-import distutils.sysconfig
-e = distutils.sysconfig.get_config_var('LIBDIR')
-if e is not None:
- print (e)
-EOD`
-
- # Now, for the library:
- ac_python_library=`cat<<EOD | $PYTHON -
-
-import distutils.sysconfig
-c = distutils.sysconfig.get_config_vars()
-if 'LDVERSION' in c:
- print ('python'+c['LDVERSION'])
-else:
- print ('python'+c['VERSION'])
-EOD`
-
- # This small piece shamelessly adapted from PostgreSQL python macro;
- # credits goes to momjian, I think. I'd like to put the right name
- # in the credits, if someone can point me in the right direction... ?
- #
- if test -n "$ac_python_libdir" -a -n "$ac_python_library"
- then
- # use the official shared library
- ac_python_library=`echo "$ac_python_library" | sed "s/^lib//"`
- PYTHON_LDFLAGS="-L$ac_python_libdir -l$ac_python_library"
- else
- # old way: use libpython from python_configdir
- ac_python_libdir=`$PYTHON -c \
- "from distutils.sysconfig import get_python_lib as f; \
- import os; \
- print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"`
- PYTHON_LDFLAGS="-L$ac_python_libdir -lpython$ac_python_version"
- fi
-
- if test -z "PYTHON_LDFLAGS"; then
- as_fn_error $? "
- Cannot determine location of your Python DSO. Please check it was installed with
- dynamic libraries enabled, or try setting PYTHON_LDFLAGS by hand.
- " "$LINENO" 5
- fi
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_LDFLAGS" >&5
-$as_echo "$PYTHON_LDFLAGS" >&6; }
-
-
- #
- # Check for site packages
- #
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python site-packages path" >&5
-$as_echo_n "checking for Python site-packages path... " >&6; }
- if test -z "$PYTHON_SITE_PKG"; then
- PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \
- print (distutils.sysconfig.get_python_lib(1,0));"`
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_SITE_PKG" >&5
-$as_echo "$PYTHON_SITE_PKG" >&6; }
-
-
- #
- # libraries which must be linked in when embedding
- #
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking python extra libraries" >&5
-$as_echo_n "checking python extra libraries... " >&6; }
- if test -z "$PYTHON_EXTRA_LIBS"; then
- PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \
- conf = distutils.sysconfig.get_config_var; \
- print (conf('LIBS'))"`
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_EXTRA_LIBS" >&5
-$as_echo "$PYTHON_EXTRA_LIBS" >&6; }
-
-
- #
- # linking flags needed when embedding
- #
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking python extra linking flags" >&5
-$as_echo_n "checking python extra linking flags... " >&6; }
- if test -z "$PYTHON_EXTRA_LDFLAGS"; then
- PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \
- conf = distutils.sysconfig.get_config_var; \
- print (conf('LINKFORSHARED'))"`
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_EXTRA_LDFLAGS" >&5
-$as_echo "$PYTHON_EXTRA_LDFLAGS" >&6; }
-
-
- #
- # final check to see if everything compiles alright
- #
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking consistency of all components of python development environment" >&5
-$as_echo_n "checking consistency of all components of python development environment... " >&6; }
- # save current global flags
- ac_save_LIBS="$LIBS"
- ac_save_CPPFLAGS="$CPPFLAGS"
- LIBS="$ac_save_LIBS $PYTHON_LDFLAGS $PYTHON_EXTRA_LDFLAGS $PYTHON_EXTRA_LIBS"
- CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
- #include <Python.h>
-int
-main ()
-{
-Py_Initialize();
- ;
- return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- pythonexists=yes
-else
- pythonexists=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
- # turn back to default flags
- CPPFLAGS="$ac_save_CPPFLAGS"
- LIBS="$ac_save_LIBS"
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pythonexists" >&5
-$as_echo "$pythonexists" >&6; }
-
- if test ! "x$pythonexists" = "xyes"; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "
- Could not link test program to Python. Maybe the main Python library has been
- installed in some non-standard library path. If so, pass it to configure,
- via the LDFLAGS environment variable.
- Example: ./configure LDFLAGS=\"-L/usr/non-standard-path/python/lib\"
- ============================================================================
- ERROR!
- You probably have to install the development version of the Python package
- for your distribution. The exact name of this package varies among them.
- ============================================================================
-
-See \`config.log' for more details" "$LINENO" 5; }
- PYTHON_VERSION=""
- fi
-
- #
- # all done!
- #
-
- if test ! -z "$ac_python_version"; then
- ldns_have_python=yes
- fi
-
- # pass additional Python 3 option to SWIG
- if test `$PYTHON -c "import sys; \
- ver = sys.version.split()[0]; \
- print(ver >= '3')"` = "True"; then
- SWIGPY3="-py3 -DPY3"
-
- fi
-
- # check for SWIG
- if test x_$ldns_have_python != x_no; then
- # ===========================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_pkg_swig.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-# AX_PKG_SWIG([major.minor.micro], [action-if-found], [action-if-not-found])
-#
-# DESCRIPTION
-#
-# This macro searches for a SWIG installation on your system. If found,
-# then SWIG is AC_SUBST'd; if not found, then $SWIG is empty. If SWIG is
-# found, then SWIG_LIB is set to the SWIG library path, and AC_SUBST'd.
-#
-# You can use the optional first argument to check if the version of the
-# available SWIG is greater than or equal to the value of the argument. It
-# should have the format: N[.N[.N]] (N is a number between 0 and 999. Only
-# the first N is mandatory.) If the version argument is given (e.g.
-# 1.3.17), AX_PKG_SWIG checks that the swig package is this version number
-# or higher.
-#
-# As usual, action-if-found is executed if SWIG is found, otherwise
-# action-if-not-found is executed.
-#
-# In configure.in, use as:
-#
-# AX_PKG_SWIG(1.3.17, [], [ AC_MSG_ERROR([SWIG is required to build..]) ])
-# AX_SWIG_ENABLE_CXX
-# AX_SWIG_MULTI_MODULE_SUPPORT
-# AX_SWIG_PYTHON
-#
-# LICENSE
-#
-# Copyright (c) 2008 Sebastian Huber <sebastian-huber@web.de>
-# Copyright (c) 2008 Alan W. Irwin <irwin@beluga.phys.uvic.ca>
-# Copyright (c) 2008 Rafael Laboissiere <rafael@laboissiere.net>
-# Copyright (c) 2008 Andrew Collier <colliera@ukzn.ac.za>
-# Copyright (c) 2011 Murray Cumming <murrayc@openismus.com>
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2 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 <http://www.gnu.org/licenses/>.
-#
-# As a special exception, the respective Autoconf Macro's copyright owner
-# gives unlimited permission to copy, distribute and modify the configure
-# scripts that are the output of Autoconf when processing the Macro. You
-# need not follow the terms of the GNU General Public License when using
-# or distributing such scripts, even though portions of the text of the
-# Macro appear in them. The GNU General Public License (GPL) does govern
-# all other use of the material that constitutes the Autoconf Macro.
-#
-# This special exception to the GPL applies to versions of the Autoconf
-# Macro released by the Autoconf Archive. When you make and distribute a
-# modified version of the Autoconf Macro, you may extend this special
-# exception to the GPL to apply to your modified version as well.
-
-#serial 8
-
-
-
-
- # check for >=SWIG-2.0.4 if Python 3.2 used
- if test `$PYTHON -c "import sys; \
- ver = sys.version.split()[0]; \
- print(ver >= '3.2')"` = "True"; then
-
- # Ubuntu has swig 2.0 as /usr/bin/swig2.0
- for ac_prog in swig2.0 swig
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_SWIG+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $SWIG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_SWIG="$SWIG" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_SWIG="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-SWIG=$ac_cv_path_SWIG
-if test -n "$SWIG"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SWIG" >&5
-$as_echo "$SWIG" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$SWIG" && break
-done
-
- if test -z "$SWIG" ; then
- as_fn_error $? "SWIG-2.0.4 is required to build pyldns for Python 3.2 and greater." "$LINENO" 5
- elif test -n "2.0.4" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking SWIG version" >&5
-$as_echo_n "checking SWIG version... " >&6; }
- swig_version=`$SWIG -version 2>&1 | grep 'SWIG Version' | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $swig_version" >&5
-$as_echo "$swig_version" >&6; }
- if test -n "$swig_version" ; then
- # Calculate the required version number components
- required=2.0.4
- required_major=`echo $required | sed 's/[^0-9].*//'`
- if test -z "$required_major" ; then
- required_major=0
- fi
- required=`echo $required | sed 's/[0-9]*[^0-9]//'`
- required_minor=`echo $required | sed 's/[^0-9].*//'`
- if test -z "$required_minor" ; then
- required_minor=0
- fi
- required=`echo $required | sed 's/[0-9]*[^0-9]//'`
- required_patch=`echo $required | sed 's/[^0-9].*//'`
- if test -z "$required_patch" ; then
- required_patch=0
- fi
- # Calculate the available version number components
- available=$swig_version
- available_major=`echo $available | sed 's/[^0-9].*//'`
- if test -z "$available_major" ; then
- available_major=0
- fi
- available=`echo $available | sed 's/[0-9]*[^0-9]//'`
- available_minor=`echo $available | sed 's/[^0-9].*//'`
- if test -z "$available_minor" ; then
- available_minor=0
- fi
- available=`echo $available | sed 's/[0-9]*[^0-9]//'`
- available_patch=`echo $available | sed 's/[^0-9].*//'`
- if test -z "$available_patch" ; then
- available_patch=0
- fi
- # Convert the version tuple into a single number for easier comparison.
- # Using base 100 should be safe since SWIG internally uses BCD values
- # to encode its version number.
- required_swig_vernum=`expr $required_major \* 10000 \
- \+ $required_minor \* 100 \+ $required_patch`
- available_swig_vernum=`expr $available_major \* 10000 \
- \+ $available_minor \* 100 \+ $available_patch`
-
- if test $available_swig_vernum -lt $required_swig_vernum; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SWIG version >= 2.0.4 is required. You have $swig_version." >&5
-$as_echo "$as_me: WARNING: SWIG version >= 2.0.4 is required. You have $swig_version." >&2;}
- SWIG=''
- as_fn_error $? "SWIG-2.0.4 is required to build pyldns for Python 3.2 and greater." "$LINENO" 5
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SWIG library" >&5
-$as_echo_n "checking for SWIG library... " >&6; }
- SWIG_LIB=`$SWIG -swiglib`
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SWIG_LIB" >&5
-$as_echo "$SWIG_LIB" >&6; }
-
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine SWIG version" >&5
-$as_echo "$as_me: WARNING: cannot determine SWIG version" >&2;}
- SWIG=''
- as_fn_error $? "SWIG-2.0.4 is required to build pyldns for Python 3.2 and greater." "$LINENO" 5
- fi
- fi
-
-
- else
-
- # Ubuntu has swig 2.0 as /usr/bin/swig2.0
- for ac_prog in swig2.0 swig
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_SWIG+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $SWIG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_SWIG="$SWIG" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_SWIG="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-SWIG=$ac_cv_path_SWIG
-if test -n "$SWIG"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SWIG" >&5
-$as_echo "$SWIG" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$SWIG" && break
-done
-
- if test -z "$SWIG" ; then
- :
- elif test -n "" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking SWIG version" >&5
-$as_echo_n "checking SWIG version... " >&6; }
- swig_version=`$SWIG -version 2>&1 | grep 'SWIG Version' | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $swig_version" >&5
-$as_echo "$swig_version" >&6; }
- if test -n "$swig_version" ; then
- # Calculate the required version number components
- required=
- required_major=`echo $required | sed 's/[^0-9].*//'`
- if test -z "$required_major" ; then
- required_major=0
- fi
- required=`echo $required | sed 's/[0-9]*[^0-9]//'`
- required_minor=`echo $required | sed 's/[^0-9].*//'`
- if test -z "$required_minor" ; then
- required_minor=0
- fi
- required=`echo $required | sed 's/[0-9]*[^0-9]//'`
- required_patch=`echo $required | sed 's/[^0-9].*//'`
- if test -z "$required_patch" ; then
- required_patch=0
- fi
- # Calculate the available version number components
- available=$swig_version
- available_major=`echo $available | sed 's/[^0-9].*//'`
- if test -z "$available_major" ; then
- available_major=0
- fi
- available=`echo $available | sed 's/[0-9]*[^0-9]//'`
- available_minor=`echo $available | sed 's/[^0-9].*//'`
- if test -z "$available_minor" ; then
- available_minor=0
- fi
- available=`echo $available | sed 's/[0-9]*[^0-9]//'`
- available_patch=`echo $available | sed 's/[^0-9].*//'`
- if test -z "$available_patch" ; then
- available_patch=0
- fi
- # Convert the version tuple into a single number for easier comparison.
- # Using base 100 should be safe since SWIG internally uses BCD values
- # to encode its version number.
- required_swig_vernum=`expr $required_major \* 10000 \
- \+ $required_minor \* 100 \+ $required_patch`
- available_swig_vernum=`expr $available_major \* 10000 \
- \+ $available_minor \* 100 \+ $available_patch`
-
- if test $available_swig_vernum -lt $required_swig_vernum; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SWIG version >= is required. You have $swig_version." >&5
-$as_echo "$as_me: WARNING: SWIG version >= is required. You have $swig_version." >&2;}
- SWIG=''
-
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SWIG library" >&5
-$as_echo_n "checking for SWIG library... " >&6; }
- SWIG_LIB=`$SWIG -swiglib`
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SWIG_LIB" >&5
-$as_echo "$SWIG_LIB" >&6; }
-
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine SWIG version" >&5
-$as_echo "$as_me: WARNING: cannot determine SWIG version" >&2;}
- SWIG=''
-
- fi
- fi
-
-
- fi
-
- if test ! -x "$SWIG"; then
- as_fn_error $? "failed to find SWIG tool, install it, or do not build pyldns" "$LINENO" 5
- else
-
-$as_echo "#define HAVE_SWIG 1" >>confdefs.h
-
- PYLDNS="pyldns"
-
- swig="$SWIG"
-
- ldns_with_pyldns=yes
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: *** don't have Python, skipping SWIG, no pyldns ***" >&5
-$as_echo "*** don't have Python, skipping SWIG, no pyldns ***" >&6; } # '
- fi
-
- # xtra cflags for pyldns
- if test x_$ldns_have_python != x_no; then
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -fno-strict-aliasing" >&5
-$as_echo_n "checking whether $CC supports -fno-strict-aliasing... " >&6; }
-cache=`echo fno-strict-aliasing | sed 'y%.=/+-%___p_%'`
-if eval \${cv_prog_cc_flag_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo 'void f(void){}' >conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS -fno-strict-aliasing -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_$cache=yes"
-else
-eval "cv_prog_cc_flag_$cache=no"
-fi
-rm -f conftest conftest.o conftest.c
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-PYTHON_X_CFLAGS="-fno-strict-aliasing"
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-:
-
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wno-missing-field-initializers" >&5
-$as_echo_n "checking whether $CC supports -Wno-missing-field-initializers... " >&6; }
-cache=`echo Wno-missing-field-initializers | sed 'y%.=/+-%___p_%'`
-if eval \${cv_prog_cc_flag_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo 'void f(void){}' >conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS -Wno-missing-field-initializers -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_$cache=yes"
-else
-eval "cv_prog_cc_flag_$cache=no"
-fi
-rm -f conftest conftest.o conftest.c
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-PYTHON_X_CFLAGS="-Wno-missing-field-initializers $PYTHON_X_CFLAGS"
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-:
-
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wno-unused-parameter" >&5
-$as_echo_n "checking whether $CC supports -Wno-unused-parameter... " >&6; }
-cache=`echo Wno-unused-parameter | sed 'y%.=/+-%___p_%'`
-if eval \${cv_prog_cc_flag_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo 'void f(void){}' >conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS -Wno-unused-parameter -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_$cache=yes"
-else
-eval "cv_prog_cc_flag_$cache=no"
-fi
-rm -f conftest conftest.o conftest.c
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-PYTHON_X_CFLAGS="-Wno-unused-parameter $PYTHON_X_CFLAGS"
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-:
-
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wno-unused-variable" >&5
-$as_echo_n "checking whether $CC supports -Wno-unused-variable... " >&6; }
-cache=`echo Wno-unused-variable | sed 'y%.=/+-%___p_%'`
-if eval \${cv_prog_cc_flag_$cache+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-echo 'void f(void){}' >conftest.c
-if test -z "`$CC $CPPFLAGS $CFLAGS -Wno-unused-variable -c conftest.c 2>&1`"; then
-eval "cv_prog_cc_flag_$cache=yes"
-else
-eval "cv_prog_cc_flag_$cache=no"
-fi
-rm -f conftest conftest.o conftest.c
-
-fi
-
-if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-:
-PYTHON_X_CFLAGS="-Wno-unused-variable $PYTHON_X_CFLAGS"
-else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-:
-
-fi
-
- fi
-fi
-
-
-# Check for pyldnsx
-
-# Check whether --with-pyldnsx was given.
-if test "${with_pyldnsx+set}" = set; then :
- withval=$with_pyldnsx;
-else
- withval="with_pyldns"
-fi
-
-if test x_$withval != x_no; then
- if test x_$ldns_with_pyldns != x_no; then
- PYLDNSX="pyldnsx"
-
- ldns_with_pyldnsx=yes
- else
- if test x_$withval != x_with_pyldns; then
- as_fn_error $? "--with-pyldns is needed for the ldnsx python module" "$LINENO" 5
- fi
- fi
-fi
-
-if test x_$ldns_with_pyldns != x_no; then
- PYLDNSINST="install-pyldns"
- PYLDNSUNINST="uninstall-pyldns"
-
-else
- PYLDNSINST=""
- PYLDNSUNINST=""
-
-fi
-if test x_$ldns_with_pyldnsx != x_no; then
- PYLDNSXINST="install-pyldnsx"
- PYLDNSXUNINST="uninstall-pyldnsx"
-
-else
- PYLDNSXINST=""
- PYLDNSXUNINST=""
-
-fi
-
-# check for perl
-ldns_with_p5_dns_ldns=no
-
-# Check whether --with-p5-dns-ldns was given.
-if test "${with_p5_dns_ldns+set}" = set; then :
- withval=$with_p5_dns_ldns;
-else
- withval="no"
-fi
-
-ldns_have_perl=no
-if test x_$withval != x_no; then
- # Extract the first word of "perl", so it can be a program name with args.
-set dummy perl; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_PERL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $PERL in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-PERL=$ac_cv_path_PERL
-if test -n "$PERL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
-$as_echo "$PERL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- if test -z "$PERL"; then
- as_fn_error $? "Cannot find perl in your system path" "$LINENO" 5
- fi
- P5_DNS_LDNS="p5-dns-ldns"
- TEST_P5_DNS_LDNS="test-p5-dns-ldns"
- INSTALL_P5_DNS_LDNS="install-p5-dns-ldns"
- UNINSTALL_P5_DNS_LDNS="uninstall-p5-dns-ldns"
- CLEAN_P5_DNS_LDNS="clean-p5-dns-ldns"
-
-else
- P5_DNS_LDNS=""
- TEST_P5_DNS_LDNS=""
- INSTALL_P5_DNS_LDNS=""
- UNINSTALL_P5_DNS_LDNS=""
- CLEAN_P5_DNS_LDNS=""
-
-fi
-
-# Use libtool
-
-# skip these tests, we do not need them.
-
-
-
-
-
-
-
-
-# always use ./libtool unless override from commandline (libtool=mylibtool)
-if test -z "$libtool"; then
- libtool="./libtool"
-fi
-
-# avoid libtool max commandline length test on systems that fork slowly.
-
-if echo "$host_os" | grep "sunos4" >/dev/null; then
- lt_cv_sys_max_cmd_len=32750;
-fi
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_AR+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $AR in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_AR="$AR" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_AR="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-AR=$ac_cv_path_AR
-if test -n "$AR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_path_AR"; then
- ac_pt_AR=$AR
- # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_pt_AR+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $ac_pt_AR in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_ac_pt_AR="$ac_pt_AR" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_ac_pt_AR="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-ac_pt_AR=$ac_cv_path_ac_pt_AR
-if test -n "$ac_pt_AR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_AR" >&5
-$as_echo "$ac_pt_AR" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_pt_AR" = x; then
- AR="false"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- AR=$ac_pt_AR
- fi
-else
- AR="$ac_cv_path_AR"
-fi
-
-if test $AR = false; then
- as_fn_error $? "Cannot find 'ar', please extend PATH to include it" "$LINENO" 5
-fi
-
-
-
-
-
-
-tmp_CPPFLAGS=$CPPFLAGS
-tmp_LDFLAGS=$LDFLAGS
-tmp_LIBS=$LIBS
-
-
-
-# Check whether --with-ssl was given.
-if test "${with_ssl+set}" = set; then :
- withval=$with_ssl;
-
-else
-
- withval="yes"
-
-fi
-
-
- withval=$withval
- if test x_$withval != x_no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSL" >&5
-$as_echo_n "checking for SSL... " >&6; }
- if test x_$withval = x_ -o x_$withval = x_yes; then
- withval="/usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/local/opt/openssl /usr/sfw /usr"
- fi
- for dir in $withval; do
- ssldir="$dir"
- if test -f "$dir/include/openssl/ssl.h"; then
- found_ssl="yes"
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_SSL /**/
-_ACEOF
-
- if test "$ssldir" != "/usr"; then
- CPPFLAGS="$CPPFLAGS -I$ssldir/include"
- LIBSSL_CPPFLAGS="$LIBSSL_CPPFLAGS -I$ssldir/include"
- fi
- break;
- fi
- done
- if test x_$found_ssl != x_yes; then
- as_fn_error $? "Cannot find the SSL libraries in $withval" "$LINENO" 5
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $ssldir" >&5
-$as_echo "found in $ssldir" >&6; }
- HAVE_SSL=yes
- if test "$ssldir" != "/usr" -a "$ssldir" != ""; then
- LDFLAGS="$LDFLAGS -L$ssldir/lib"
- LIBSSL_LDFLAGS="$LIBSSL_LDFLAGS -L$ssldir/lib"
-
- if test "x$enable_rpath" = xyes; then
- if echo "$ssldir/lib" | grep "^/" >/dev/null; then
- RUNTIME_PATH="$RUNTIME_PATH -R$ssldir/lib"
- fi
- fi
-
- fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HMAC_Update in -lcrypto" >&5
-$as_echo_n "checking for HMAC_Update in -lcrypto... " >&6; }
- LIBS="$LIBS -lcrypto"
- LIBSSL_LIBS="$LIBSSL_LIBS -lcrypto"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- int HMAC_Update(void);
- (void)HMAC_Update();
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define HAVE_HMAC_UPDATE 1" >>confdefs.h
-
-
-else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- # check if -lwsock32 or -lgdi32 are needed.
- BAKLIBS="$LIBS"
- BAKSSLLIBS="$LIBSSL_LIBS"
- LIBS="$LIBS -lgdi32 -lws2_32"
- LIBSSL_LIBS="$LIBSSL_LIBS -lgdi32 -lws2_32"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -lcrypto needs -lgdi32" >&5
-$as_echo_n "checking if -lcrypto needs -lgdi32... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- int HMAC_Update(void);
- (void)HMAC_Update();
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
-
-$as_echo "#define HAVE_HMAC_UPDATE 1" >>confdefs.h
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- LIBS="$BAKLIBS"
- LIBSSL_LIBS="$BAKSSLLIBS"
- LIBS="$LIBS -ldl"
- LIBSSL_LIBS="$LIBSSL_LIBS -ldl"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -lcrypto needs -ldl" >&5
-$as_echo_n "checking if -lcrypto needs -ldl... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- int HMAC_Update(void);
- (void)HMAC_Update();
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
-
-$as_echo "#define HAVE_HMAC_UPDATE 1" >>confdefs.h
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- LIBS="$BAKLIBS"
- LIBSSL_LIBS="$BAKSSLLIBS"
- LIBS="$LIBS -ldl -pthread"
- LIBSSL_LIBS="$LIBSSL_LIBS -ldl -pthread"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -lcrypto needs -ldl -pthread" >&5
-$as_echo_n "checking if -lcrypto needs -ldl -pthread... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- int HMAC_Update(void);
- (void)HMAC_Update();
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
-
-$as_echo "#define HAVE_HMAC_UPDATE 1" >>confdefs.h
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- as_fn_error $? "OpenSSL found in $ssldir, but version 0.9.7 or higher is required" "$LINENO" 5
-
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- fi
-
-
- fi
-for ac_header in openssl/ssl.h
-do :
- ac_fn_c_check_header_compile "$LINENO" "openssl/ssl.h" "ac_cv_header_openssl_ssl_h" "$ac_includes_default
-"
-if test "x$ac_cv_header_openssl_ssl_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_OPENSSL_SSL_H 1
-_ACEOF
-
-fi
-
-done
-
-for ac_header in openssl/err.h
-do :
- ac_fn_c_check_header_compile "$LINENO" "openssl/err.h" "ac_cv_header_openssl_err_h" "$ac_includes_default
-"
-if test "x$ac_cv_header_openssl_err_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_OPENSSL_ERR_H 1
-_ACEOF
-
-fi
-
-done
-
-for ac_header in openssl/rand.h
-do :
- ac_fn_c_check_header_compile "$LINENO" "openssl/rand.h" "ac_cv_header_openssl_rand_h" "$ac_includes_default
-"
-if test "x$ac_cv_header_openssl_rand_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_OPENSSL_RAND_H 1
-_ACEOF
-
-fi
-
-done
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LibreSSL" >&5
-$as_echo_n "checking for LibreSSL... " >&6; }
-if grep VERSION_TEXT $ssldir/include/openssl/opensslv.h | grep "LibreSSL" >/dev/null; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define HAVE_LIBRESSL 1" >>confdefs.h
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-for ac_func in EVP_sha256 EVP_sha384 EVP_sha512 ENGINE_load_cryptodev EVP_PKEY_keygen ECDSA_SIG_get0 EVP_MD_CTX_new EVP_PKEY_base_id DSA_SIG_set0 DSA_SIG_get0 EVP_dss1 DSA_get0_pqg DSA_get0_key OPENSSL_init_ssl OPENSSL_init_crypto ERR_load_crypto_strings
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-# for macosx, see if glibtool exists and use that
-# BSD's need to know the version...
-#AC_CHECK_PROG(glibtool, glibtool, [glibtool], )
-#AC_CHECK_PROGS(libtool, [libtool15 libtool], [./libtool])
-
-# Check whether --enable-sha2 was given.
-if test "${enable_sha2+set}" = set; then :
- enableval=$enable_sha2;
-fi
-
-case "$enable_sha2" in
- no)
- ;;
- yes|*)
- if test "x$HAVE_SSL" != "xyes"; then
- as_fn_error $? "SHA2 enabled, but no SSL support" "$LINENO" 5
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SHA256 and SHA512" >&5
-$as_echo_n "checking for SHA256 and SHA512... " >&6; }
- ac_fn_c_check_func "$LINENO" "SHA256_Init" "ac_cv_func_SHA256_Init"
-if test "x$ac_cv_func_SHA256_Init" = xyes; then :
-
-else
-
- as_fn_error $? "No SHA2 functions found in OpenSSL: please upgrade OpenSSL or rerun with --disable-sha2" "$LINENO" 5
-
-fi
-
-
-cat >>confdefs.h <<_ACEOF
-#define USE_SHA2 1
-_ACEOF
-
- ;;
-esac
-
-# check wether gost also works
-
-# Check whether --enable-gost was given.
-if test "${enable_gost+set}" = set; then :
- enableval=$enable_gost;
-fi
-
-case "$enable_gost" in
- no)
- ;;
- *) if test "x$HAVE_SSL" != "xyes"; then
- as_fn_error $? "GOST enabled, but no SSL support" "$LINENO" 5
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GOST" >&5
-$as_echo_n "checking for GOST... " >&6; }
- ac_fn_c_check_func "$LINENO" "EVP_PKEY_set_type_str" "ac_cv_func_EVP_PKEY_set_type_str"
-if test "x$ac_cv_func_EVP_PKEY_set_type_str" = xyes; then :
-
-else
- as_fn_error $? "OpenSSL >= 1.0.0 is needed for GOST support or rerun with --disable-gost" "$LINENO" 5
-fi
-
- ac_fn_c_check_func "$LINENO" "EC_KEY_new" "ac_cv_func_EC_KEY_new"
-if test "x$ac_cv_func_EC_KEY_new" = xyes; then :
-
-else
- as_fn_error $? "No ECC functions found in OpenSSL: please upgrade OpenSSL or rerun with --disable-gost" "$LINENO" 5
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if GOST works" >&5
-$as_echo_n "checking if GOST works... " >&6; }
-if test c${cross_compiling} = cno; then
-BAKCFLAGS="$CFLAGS"
-if test -n "$ssldir"; then
- CFLAGS="$CFLAGS -Wl,-rpath,$ssldir/lib"
-fi
-if test "$cross_compiling" = yes; then :
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run test program while cross compiling
-See \`config.log' for more details" "$LINENO" 5; }
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#include <string.h>
-#include <openssl/ssl.h>
-#include <openssl/evp.h>
-#include <openssl/engine.h>
-#include <openssl/conf.h>
-/* routine to load gost (from sldns) */
-int load_gost_id(void)
-{
- static int gost_id = 0;
- const EVP_PKEY_ASN1_METHOD* meth;
- ENGINE* e;
-
- if(gost_id) return gost_id;
-
- /* see if configuration loaded gost implementation from other engine*/
- meth = EVP_PKEY_asn1_find_str(NULL, "gost2001", -1);
- if(meth) {
- EVP_PKEY_asn1_get0_info(&gost_id, NULL, NULL, NULL, NULL, meth);
- return gost_id;
- }
-
- /* see if engine can be loaded already */
- e = ENGINE_by_id("gost");
- if(!e) {
- /* load it ourself, in case statically linked */
- ENGINE_load_builtin_engines();
- ENGINE_load_dynamic();
- e = ENGINE_by_id("gost");
- }
- if(!e) {
- /* no gost engine in openssl */
- return 0;
- }
- if(!ENGINE_set_default(e, ENGINE_METHOD_ALL)) {
- ENGINE_finish(e);
- ENGINE_free(e);
- return 0;
- }
-
- meth = EVP_PKEY_asn1_find_str(&e, "gost2001", -1);
- if(!meth) {
- /* algo not found */
- ENGINE_finish(e);
- ENGINE_free(e);
- return 0;
- }
- EVP_PKEY_asn1_get0_info(&gost_id, NULL, NULL, NULL, NULL, meth);
- return gost_id;
-}
-int main(void) {
- EVP_MD_CTX* ctx;
- const EVP_MD* md;
- unsigned char digest[64]; /* its a 256-bit digest, so uses 32 bytes */
- const char* str = "Hello world";
- const unsigned char check[] = {
- 0x40 , 0xed , 0xf8 , 0x56 , 0x5a , 0xc5 , 0x36 , 0xe1 ,
- 0x33 , 0x7c , 0x7e , 0x87 , 0x62 , 0x1c , 0x42 , 0xe0 ,
- 0x17 , 0x1b , 0x5e , 0xce , 0xa8 , 0x46 , 0x65 , 0x4d ,
- 0x8d , 0x3e , 0x22 , 0x9b , 0xe1 , 0x30 , 0x19 , 0x9d
- };
- OPENSSL_config(NULL);
- (void)load_gost_id();
- md = EVP_get_digestbyname("md_gost94");
- if(!md) return 1;
- memset(digest, 0, sizeof(digest));
- ctx = EVP_MD_CTX_create();
- if(!ctx) return 2;
- if(!EVP_DigestInit_ex(ctx, md, NULL)) return 3;
- if(!EVP_DigestUpdate(ctx, str, 10)) return 4;
- if(!EVP_DigestFinal_ex(ctx, digest, NULL)) return 5;
- /* uncomment to see the hash calculated.
- {int i;
- for(i=0; i<32; i++)
- printf(" %2.2x", (int)digest[i]);
- printf("\n");}
- */
- if(memcmp(digest, check, sizeof(check)) != 0)
- return 6;
- return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- eval "ac_cv_c_gost_works=yes"
-else
- eval "ac_cv_c_gost_works=no"
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-CFLAGS="$BAKCFLAGS"
-else
-eval "ac_cv_c_gost_works=maybe"
-fi
-
- # Check whether --enable-gost-anyway was given.
-if test "${enable_gost_anyway+set}" = set; then :
- enableval=$enable_gost_anyway;
-fi
-
- if test "$ac_cv_c_gost_works" != "no" -o "$enable_gost_anyway" = "yes"; then
- if test "$ac_cv_c_gost_works" = "no"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, but compiling with GOST support anyway" >&5
-$as_echo "no, but compiling with GOST support anyway" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- fi
- use_gost="yes"
-
-$as_echo "#define USE_GOST 1" >>confdefs.h
-
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Gost support does not work because the engine is missing." >&5
-$as_echo "$as_me: WARNING: Gost support does not work because the engine is missing." >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Install gost-engine first or use the --enable-gost-anyway to compile with GOST support anyway" >&5
-$as_echo "$as_me: WARNING: Install gost-engine first or use the --enable-gost-anyway to compile with GOST support anyway" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: See also https://github.com/gost-engine/engine/wiki for information about gost-engine" >&5
-$as_echo "$as_me: WARNING: See also https://github.com/gost-engine/engine/wiki for information about gost-engine" >&2;}
- fi
- ;;
-esac
-
-# Check whether --enable-ecdsa was given.
-if test "${enable_ecdsa+set}" = set; then :
- enableval=$enable_ecdsa;
-fi
-
-case "$enable_ecdsa" in
- no)
- ;;
- *) if test "x$HAVE_SSL" != "xyes"; then
- as_fn_error $? "ECDSA enabled, but no SSL support" "$LINENO" 5
- fi
- ac_fn_c_check_func "$LINENO" "ECDSA_sign" "ac_cv_func_ECDSA_sign"
-if test "x$ac_cv_func_ECDSA_sign" = xyes; then :
-
-else
- as_fn_error $? "OpenSSL does not support ECDSA: please upgrade OpenSSL or rerun with --disable-ecdsa" "$LINENO" 5
-fi
-
- ac_fn_c_check_func "$LINENO" "SHA384_Init" "ac_cv_func_SHA384_Init"
-if test "x$ac_cv_func_SHA384_Init" = xyes; then :
-
-else
- as_fn_error $? "OpenSSL does not support SHA384: please upgrade OpenSSL or rerun with --disable-ecdsa" "$LINENO" 5
-fi
-
- ac_fn_c_check_decl "$LINENO" "NID_X9_62_prime256v1" "ac_cv_have_decl_NID_X9_62_prime256v1" "$ac_includes_default
-#include <openssl/evp.h>
-
-"
-if test "x$ac_cv_have_decl_NID_X9_62_prime256v1" = xyes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_NID_X9_62_PRIME256V1 $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
-
-else
- as_fn_error $? "OpenSSL does not support the ECDSA curves: please upgrade OpenSSL or rerun with --disable-ecdsa" "$LINENO" 5
-fi
-ac_fn_c_check_decl "$LINENO" "NID_secp384r1" "ac_cv_have_decl_NID_secp384r1" "$ac_includes_default
-#include <openssl/evp.h>
-
-"
-if test "x$ac_cv_have_decl_NID_secp384r1" = xyes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_NID_SECP384R1 $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
-
-else
- as_fn_error $? "OpenSSL does not support the ECDSA curves: please upgrade OpenSSL or rerun with --disable-ecdsa" "$LINENO" 5
-fi
-
- # we now know we have ECDSA and the required curves.
-
-cat >>confdefs.h <<_ACEOF
-#define USE_ECDSA 1
-_ACEOF
-
- ;;
-esac
-
-# Check whether --enable-dsa was given.
-if test "${enable_dsa+set}" = set; then :
- enableval=$enable_dsa;
-fi
-
-case "$enable_dsa" in
- no)
- ;;
- *) # detect if DSA is supported, and turn it off if not.
- ac_fn_c_check_func "$LINENO" "DSA_SIG_new" "ac_cv_func_DSA_SIG_new"
-if test "x$ac_cv_func_DSA_SIG_new" = xyes; then :
-
-
-cat >>confdefs.h <<_ACEOF
-#define USE_DSA 1
-_ACEOF
-
-
-else
- if test "x$enable_dsa" = "xyes"; then as_fn_error $? "OpenSSL does not support DSA and you used --enable-dsa." "$LINENO" 5
- fi
-fi
-
- ;;
-esac
-
-# Check whether --enable-ed25519 was given.
-if test "${enable_ed25519+set}" = set; then :
- enableval=$enable_ed25519;
-fi
-
-case "$enable_ed25519" in
- no) ;;
- *) ac_fn_c_check_decl "$LINENO" "NID_ED25519" "ac_cv_have_decl_NID_ED25519" "$ac_includes_default
-#include <openssl/evp.h>
-
-"
-if test "x$ac_cv_have_decl_NID_ED25519" = xyes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_NID_ED25519 $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
-
-
-cat >>confdefs.h <<_ACEOF
-#define USE_ED25519 1
-_ACEOF
-
-
-else
- if test "x$enable_ed25519" = "xyes"; then as_fn_error $? "OpenSSL does not support ED25519 and you used --enable-ed25519." "$LINENO" 5
- fi
-fi
-
- ;;
-esac
-
-# Check whether --enable-ed448 was given.
-if test "${enable_ed448+set}" = set; then :
- enableval=$enable_ed448;
-fi
-
-case "$enable_ed448" in
- no) ;;
- *) ac_fn_c_check_decl "$LINENO" "NID_ED448" "ac_cv_have_decl_NID_ED448" "$ac_includes_default
-#include <openssl/evp.h>
-
-"
-if test "x$ac_cv_have_decl_NID_ED448" = xyes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_NID_ED448 $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
-
-
-cat >>confdefs.h <<_ACEOF
-#define USE_ED448 1
-_ACEOF
-
-
-else
- if test "x$enable_ed448" = "xyes"; then as_fn_error $? "OpenSSL does not support ED448 and you used --enable-ed448." "$LINENO" 5
- fi
-fi
-
- ;;
-esac
-
-# Check whether --enable-dane was given.
-if test "${enable_dane+set}" = set; then :
- enableval=$enable_dane;
-fi
-
-# Check whether --enable-dane-verify was given.
-if test "${enable_dane_verify+set}" = set; then :
- enableval=$enable_dane_verify;
-fi
-
-# Check whether --enable-dane-ta-usage was given.
-if test "${enable_dane_ta_usage+set}" = set; then :
- enableval=$enable_dane_ta_usage;
-fi
-
-
-# Check whether --enable-full-dane was given.
-if test "${enable_full_dane+set}" = set; then :
- enableval=$enable_full_dane;
- enable_dane_ta_usage=yes
- enable_dane_verify=yes
- enable_dane=yes
-
-fi
-
-# Check whether --enable-no-dane-ta-usage was given.
-if test "${enable_no_dane_ta_usage+set}" = set; then :
- enableval=$enable_no_dane_ta_usage;
- enable_dane_ta_usage=no
- enable_dane_verify=yes
- enable_dane=yes
-
-fi
-
-# Check whether --enable-no-dane-verify was given.
-if test "${enable_no_dane_verify+set}" = set; then :
- enableval=$enable_no_dane_verify;
- enable_dane_ta_usage=no
- enable_dane_verify=no
- enable_dane=yes
-
-fi
-
-case "$enable_dane" in
- no)
- ldns_build_config_use_dane=0
-
- ldns_build_config_use_dane_verify=0
-
- ldns_build_config_use_dane_ta_usage=0
-
- ;;
- *) if test "x$HAVE_SSL" != "xyes"; then
- as_fn_error $? "DANE enabled, but no SSL support" "$LINENO" 5
- fi
- ac_fn_c_check_func "$LINENO" "X509_check_ca" "ac_cv_func_X509_check_ca"
-if test "x$ac_cv_func_X509_check_ca" = xyes; then :
-
-else
- as_fn_error $? "OpenSSL does not support DANE: please upgrade OpenSSL or rerun with --disable-dane" "$LINENO" 5
-fi
-
- ldns_build_config_use_dane=1
-
-
-cat >>confdefs.h <<_ACEOF
-#define USE_DANE 1
-_ACEOF
-
- case "$enable_dane_verify" in
- no)
- ldns_build_config_use_dane_verify=0
-
- ldns_build_config_use_dane_ta_usage=0
-
- ;;
- *)
- ldns_build_config_use_dane_verify=1
-
-
-cat >>confdefs.h <<_ACEOF
-#define USE_DANE_VERIFY 1
-_ACEOF
-
- case "$enable_dane_ta_usage" in
- no)
- ldns_build_config_use_dane_ta_usage=0
-
- ;;
- *) LIBS="-lssl $LIBS"
- ac_fn_c_check_func "$LINENO" "SSL_get0_dane" "ac_cv_func_SSL_get0_dane"
-if test "x$ac_cv_func_SSL_get0_dane" = xyes; then :
-
-else
- as_fn_error $? "OpenSSL does not support offline DANE verification (Needed for the DANE-TA usage type). Please upgrade OpenSSL to version >= 1.1.0 or rerun with --disable-dane-verify or --disable-dane-ta-usage" "$LINENO" 5
-fi
-
- LIBSSL_LIBS="-lssl $LIBSSL_LIBS"
- ldns_build_config_use_dane_ta_usage=1
-
-
-cat >>confdefs.h <<_ACEOF
-#define USE_DANE_TA_USAGE 1
-_ACEOF
-
- ;;
- esac
- esac
- ;;
-esac
-
-# Check whether --enable-rrtype-ninfo was given.
-if test "${enable_rrtype_ninfo+set}" = set; then :
- enableval=$enable_rrtype_ninfo;
-fi
-
-case "$enable_rrtype_ninfo" in
- yes)
-
-cat >>confdefs.h <<_ACEOF
-#define RRTYPE_NINFO /**/
-_ACEOF
-
- ;;
- no|*)
- ;;
-esac
-# Check whether --enable-rrtype-rkey was given.
-if test "${enable_rrtype_rkey+set}" = set; then :
- enableval=$enable_rrtype_rkey;
-fi
-
-case "$enable_rrtype_rkey" in
- yes)
-
-cat >>confdefs.h <<_ACEOF
-#define RRTYPE_RKEY /**/
-_ACEOF
-
- ;;
- no|*)
- ;;
-esac
-# Check whether --enable-rrtype-openpgpkey was given.
-if test "${enable_rrtype_openpgpkey+set}" = set; then :
- enableval=$enable_rrtype_openpgpkey;
-fi
-
-case "$enable_rrtype_openpgpkey" in
- no)
- ;;
- yes|*)
-
-cat >>confdefs.h <<_ACEOF
-#define RRTYPE_OPENPGPKEY /**/
-_ACEOF
-
- ;;
-esac
-# Check whether --enable-rrtype-ta was given.
-if test "${enable_rrtype_ta+set}" = set; then :
- enableval=$enable_rrtype_ta;
-fi
-
-case "$enable_rrtype_ta" in
- yes)
-
-cat >>confdefs.h <<_ACEOF
-#define RRTYPE_TA /**/
-_ACEOF
-
- ;;
- no|*)
- ;;
-esac
-# Check whether --enable-rrtype-avc was given.
-if test "${enable_rrtype_avc+set}" = set; then :
- enableval=$enable_rrtype_avc;
-fi
-
-case "$enable_rrtype_avc" in
- yes)
-
-cat >>confdefs.h <<_ACEOF
-#define RRTYPE_AVC /**/
-_ACEOF
-
- ;;
- no|*)
- ;;
-esac
-# Check whether --enable-rrtype-doa was given.
-if test "${enable_rrtype_doa+set}" = set; then :
- enableval=$enable_rrtype_doa;
-fi
-
-case "$enable_rrtype_doa" in
- yes)
-
-cat >>confdefs.h <<_ACEOF
-#define RRTYPE_DOA /**/
-_ACEOF
-
- ;;
- no|*)
- ;;
-esac
-# Check whether --enable-rrtype-amtrelay was given.
-if test "${enable_rrtype_amtrelay+set}" = set; then :
- enableval=$enable_rrtype_amtrelay;
-fi
-
-case "$enable_rrtype_amtrelay" in
- yes)
-
-cat >>confdefs.h <<_ACEOF
-#define RRTYPE_AMTRELAY /**/
-_ACEOF
-
- ;;
- no|*)
- ;;
-esac
-
-
-
-
-
-
-if test "x$HAVE_SSL" = "xyes"; then
-LIBSSL_SSL_LIBS="-lssl $LIBSSL_LIBS"
-
-fi
-CPPFLAGS=$tmp_CPPFLAGS
-LDFLAGS=$tmp_LDFLAGS
-LIBS=$tmp_LIBS
-
-
-# add option to disable the evil rpath
-
-# Check whether --enable-rpath was given.
-if test "${enable_rpath+set}" = set; then :
- enableval=$enable_rpath; enable_rpath=$enableval
-else
- enable_rpath=yes
-fi
-
-if test "x$enable_rpath" = xno; then
- ac_config_commands="$ac_config_commands disable-rpath"
-
-fi
-
-
-#AC_RUN_IFELSE([AC_LANG_SOURCE(
-#[
-#int main()
-#{
-#short one = 1;
-#char *cp = (char*)&one;
-#if ( *cp == 0 )
-#return(0);
-#else
-#return(1);
-#}
-#])], [],[
-#AC_DEFINE(CONFCHECK_LITTLE_ENDIAN, 1, [system appears to be little-endian])
-#],[])
-
-# should define WORDS_BIGENDIAN if the system is big-endian
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
-$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
-if ${ac_cv_c_bigendian+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_c_bigendian=unknown
- # See if we're dealing with a universal compiler.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifndef __APPLE_CC__
- not a universal capable compiler
- #endif
- typedef int dummy;
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
- # Check for potential -arch flags. It is not universal unless
- # there are at least two -arch flags with different values.
- ac_arch=
- ac_prev=
- for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
- if test -n "$ac_prev"; then
- case $ac_word in
- i?86 | x86_64 | ppc | ppc64)
- if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
- ac_arch=$ac_word
- else
- ac_cv_c_bigendian=universal
- break
- fi
- ;;
- esac
- ac_prev=
- elif test "x$ac_word" = "x-arch"; then
- ac_prev=arch
- fi
- done
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- if test $ac_cv_c_bigendian = unknown; then
- # See if sys/param.h defines the BYTE_ORDER macro.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- #include <sys/param.h>
-
-int
-main ()
-{
-#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
- && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
- && LITTLE_ENDIAN)
- bogus endian macros
- #endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- # It does; now see whether it defined to BIG_ENDIAN or not.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- #include <sys/param.h>
-
-int
-main ()
-{
-#if BYTE_ORDER != BIG_ENDIAN
- not big endian
- #endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_bigendian=yes
-else
- ac_cv_c_bigendian=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- fi
- if test $ac_cv_c_bigendian = unknown; then
- # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <limits.h>
-
-int
-main ()
-{
-#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
- bogus endian macros
- #endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- # It does; now see whether it defined to _BIG_ENDIAN or not.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <limits.h>
-
-int
-main ()
-{
-#ifndef _BIG_ENDIAN
- not big endian
- #endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_bigendian=yes
-else
- ac_cv_c_bigendian=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- fi
- if test $ac_cv_c_bigendian = unknown; then
- # Compile a test program.
- if test "$cross_compiling" = yes; then :
- # Try to guess by grepping values from an object file.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-short int ascii_mm[] =
- { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
- short int ascii_ii[] =
- { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
- int use_ascii (int i) {
- return ascii_mm[i] + ascii_ii[i];
- }
- short int ebcdic_ii[] =
- { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
- short int ebcdic_mm[] =
- { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
- int use_ebcdic (int i) {
- return ebcdic_mm[i] + ebcdic_ii[i];
- }
- extern int foo;
-
-int
-main ()
-{
-return use_ascii (foo) == use_ebcdic (foo);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
- ac_cv_c_bigendian=yes
- fi
- if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
- if test "$ac_cv_c_bigendian" = unknown; then
- ac_cv_c_bigendian=no
- else
- # finding both strings is unlikely to happen, but who knows?
- ac_cv_c_bigendian=unknown
- fi
- fi
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-
- /* Are we little or big endian? From Harbison&Steele. */
- union
- {
- long int l;
- char c[sizeof (long int)];
- } u;
- u.l = 1;
- return u.c[sizeof (long int) - 1] == 1;
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_c_bigendian=no
-else
- ac_cv_c_bigendian=yes
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
-$as_echo "$ac_cv_c_bigendian" >&6; }
- case $ac_cv_c_bigendian in #(
- yes)
- $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
-;; #(
- no)
- ;; #(
- universal)
-
-$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
-
- ;; #(
- *)
- as_fn_error $? "unknown endianness
- presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
- esac
-
-
-# Checks for header files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5
-$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
-if ${ac_cv_header_stdbool_h+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
- #include <stdbool.h>
- #ifndef bool
- "error: bool is not defined"
- #endif
- #ifndef false
- "error: false is not defined"
- #endif
- #if false
- "error: false is not 0"
- #endif
- #ifndef true
- "error: true is not defined"
- #endif
- #if true != 1
- "error: true is not 1"
- #endif
- #ifndef __bool_true_false_are_defined
- "error: __bool_true_false_are_defined is not defined"
- #endif
-
- struct s { _Bool s: 1; _Bool t; } s;
-
- char a[true == 1 ? 1 : -1];
- char b[false == 0 ? 1 : -1];
- char c[__bool_true_false_are_defined == 1 ? 1 : -1];
- char d[(bool) 0.5 == true ? 1 : -1];
- /* See body of main program for 'e'. */
- char f[(_Bool) 0.0 == false ? 1 : -1];
- char g[true];
- char h[sizeof (_Bool)];
- char i[sizeof s.t];
- enum { j = false, k = true, l = false * true, m = true * 256 };
- /* The following fails for
- HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
- _Bool n[m];
- char o[sizeof n == m * sizeof n[0] ? 1 : -1];
- char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
- /* Catch a bug in an HP-UX C compiler. See
- http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
- http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
- */
- _Bool q = true;
- _Bool *pq = &q;
-
-int
-main ()
-{
-
- bool e = &s;
- *pq |= q;
- *pq |= ! q;
- /* Refer to every declared value, to avoid compiler optimizations. */
- return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
- + !m + !n + !o + !p + !q + !pq);
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdbool_h=yes
-else
- ac_cv_header_stdbool_h=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5
-$as_echo "$ac_cv_header_stdbool_h" >&6; }
- ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
-if test "x$ac_cv_type__Bool" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE__BOOL 1
-_ACEOF
-
-
-fi
-
-
-if test $ac_cv_header_stdbool_h = yes; then
-
-$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h
-
-fi
-
-#AC_HEADER_SYS_WAIT
-#AC_CHECK_HEADERS([getopt.h fcntl.h stdlib.h string.h strings.h unistd.h])
-# do the very minimum - we can always extend this
-for ac_header in getopt.h stdarg.h openssl/ssl.h netinet/in.h time.h arpa/inet.h netdb.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-for ac_header in sys/param.h sys/mount.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-
- #if HAVE_SYS_PARAM_H
- # include <sys/param.h>
- #endif
-
-
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default
-
- #if HAVE_SYS_PARAM_H
- # include <sys/param.h>
- #endif
-
-
-"
-if test "x$ac_cv_header_sys_socket_h" = xyes; then :
-
-include_sys_socket_h='#include <sys/socket.h>'
-
-$as_echo "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h
-
-
-else
-
-include_sys_socket_h=''
-
-fi
-
-
-
-ac_fn_c_check_header_compile "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default
-
-"
-if test "x$ac_cv_header_inttypes_h" = xyes; then :
-
-include_inttypes_h='#include <inttypes.h>'
-
-$as_echo "#define HAVE_INTTYPES_H 1" >>confdefs.h
-
-ldns_build_config_have_inttypes_h=1
-
-
-else
-
-include_inttypes_h=''
-ldns_build_config_have_inttypes_h=0
-
-
-fi
-
-
-
-ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default
-
-"
-if test "x$ac_cv_header_sys_types_h" = xyes; then :
-
-include_systypes_h='#include <sys/types.h>'
-
-$as_echo "#define HAVE_SYS_TYPES_H 1" >>confdefs.h
-
-
-else
-
-include_systypes_h=''
-
-fi
-
-
-
-ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default
-
-"
-if test "x$ac_cv_header_unistd_h" = xyes; then :
-
-include_unistd_h='#include <unistd.h>'
-
-$as_echo "#define HAVE_UNISTD_H 1" >>confdefs.h
-
-
-else
-
-include_unistd_h=''
-
-fi
-
-
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5
-$as_echo_n "checking size of time_t... " >&6; }
-if ${ac_cv_sizeof_time_t+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t" "
-$ac_includes_default
-#ifdef TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# ifdef HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-
-"; then :
-
-else
- if test "$ac_cv_type_time_t" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (time_t)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_time_t=0
- fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_time_t" >&5
-$as_echo "$ac_cv_sizeof_time_t" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_TIME_T $ac_cv_sizeof_time_t
-_ACEOF
-
-
-
-if test x_$with_examples != x_no; then
-for ac_header in pcap.h
-do :
- ac_fn_c_check_header_compile "$LINENO" "pcap.h" "ac_cv_header_pcap_h" "$ac_includes_default
-"
-if test "x$ac_cv_header_pcap_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_PCAP_H 1
-_ACEOF
-
-fi
-
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pcap_open_offline in -lpcap" >&5
-$as_echo_n "checking for pcap_open_offline in -lpcap... " >&6; }
-if ${ac_cv_lib_pcap_pcap_open_offline+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpcap $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pcap_open_offline ();
-int
-main ()
-{
-return pcap_open_offline ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_pcap_pcap_open_offline=yes
-else
- ac_cv_lib_pcap_pcap_open_offline=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pcap_pcap_open_offline" >&5
-$as_echo "$ac_cv_lib_pcap_pcap_open_offline" >&6; }
-if test "x$ac_cv_lib_pcap_pcap_open_offline" = xyes; then :
-
-
-$as_echo "#define HAVE_LIBPCAP 1" >>confdefs.h
- LIBPCAP_LIBS=-lpcap
-
-
-else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Can't find pcap library (needed for ldns-dpa, will not build dpa now.)" >&5
-$as_echo "$as_me: WARNING: Can't find pcap library (needed for ldns-dpa, will not build dpa now.)" >&2;}
-
-
-fi
-
-for ac_header in netinet/in_systm.h net/if.h netinet/ip.h netinet/udp.h netinet/igmp.h netinet/if_ether.h netinet/ip6.h net/ethernet.h netinet/ip_compat.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "
-$ac_includes_default
-#ifdef HAVE_NETINET_IN_SYSTM_H
-#include <netinet/in_systm.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef HAVE_NET_IF_H
-#include <net/if.h>
-#endif
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-fi
-
-
-ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" "
-$ac_includes_default
-#ifdef HAVE_SYS_SOCKET_H
-# include <sys/socket.h>
-#endif
-#ifdef HAVE_WS2TCPIP_H
-# include <ws2tcpip.h>
-#endif
-
-"
-if test "x$ac_cv_type_socklen_t" = xyes; then :
-
-else
-
-$as_echo "#define socklen_t int" >>confdefs.h
-
-fi
-
-if test "x$ac_cv_type_socklen_t" = xyes; then
- ldns_build_config_have_socklen_t=1
-
-else
- ldns_build_config_have_socklen_t=0
-
-fi
-ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define size_t unsigned int
-_ACEOF
-
-fi
-
-ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default"
-if test "x$ac_cv_type_ssize_t" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define ssize_t int
-_ACEOF
-
-fi
-
-ac_fn_c_check_type "$LINENO" "intptr_t" "ac_cv_type_intptr_t" "$ac_includes_default"
-if test "x$ac_cv_type_intptr_t" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define intptr_t size_t
-_ACEOF
-
-fi
-
-ac_fn_c_check_type "$LINENO" "in_addr_t" "ac_cv_type_in_addr_t" "
-#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#if HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif
-"
-if test "x$ac_cv_type_in_addr_t" = xyes; then :
-
-else
-
-$as_echo "#define in_addr_t uint32_t" >>confdefs.h
-
-fi
-
-ac_fn_c_check_type "$LINENO" "in_port_t" "ac_cv_type_in_port_t" "
-#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#if HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif
-"
-if test "x$ac_cv_type_in_port_t" = xyes; then :
-
-else
-
-$as_echo "#define in_port_t uint16_t" >>confdefs.h
-
-fi
-
-ac_fn_c_check_member "$LINENO" "struct sockaddr_storage" "ss_family" "ac_cv_member_struct_sockaddr_storage_ss_family" "$ac_includes_default
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-"
-if test "x$ac_cv_member_struct_sockaddr_storage_ss_family" = xyes; then :
-
-else
-
- ac_fn_c_check_member "$LINENO" "struct sockaddr_storage" "__ss_family" "ac_cv_member_struct_sockaddr_storage___ss_family" "$ac_includes_default
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-"
-if test "x$ac_cv_member_struct_sockaddr_storage___ss_family" = xyes; then :
-
-
-$as_echo "#define ss_family __ss_family" >>confdefs.h
-
-
-fi
-
-
-fi
-
-
-for ac_header in stdlib.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdlib_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_STDLIB_H 1
-_ACEOF
-
-fi
-
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5
-$as_echo_n "checking for GNU libc compatible malloc... " >&6; }
-if ${ac_cv_func_malloc_0_nonnull+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- ac_cv_func_malloc_0_nonnull=no
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#if defined STDC_HEADERS || defined HAVE_STDLIB_H
-# include <stdlib.h>
-#else
-char *malloc ();
-#endif
-
-int
-main ()
-{
-return ! malloc (0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_func_malloc_0_nonnull=yes
-else
- ac_cv_func_malloc_0_nonnull=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5
-$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; }
-if test $ac_cv_func_malloc_0_nonnull = yes; then :
-
-$as_echo "#define HAVE_MALLOC 1" >>confdefs.h
-
-else
- $as_echo "#define HAVE_MALLOC 0" >>confdefs.h
-
- case " $LIBOBJS " in
- *" malloc.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS malloc.$ac_objext"
- ;;
-esac
-
-
-$as_echo "#define malloc rpl_malloc" >>confdefs.h
-
-fi
-
-
-for ac_header in stdlib.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdlib_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_STDLIB_H 1
-_ACEOF
-
-fi
-
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible realloc" >&5
-$as_echo_n "checking for GNU libc compatible realloc... " >&6; }
-if ${ac_cv_func_realloc_0_nonnull+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- ac_cv_func_realloc_0_nonnull=no
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#if defined STDC_HEADERS || defined HAVE_STDLIB_H
-# include <stdlib.h>
-#else
-char *realloc ();
-#endif
-
-int
-main ()
-{
-return ! realloc (0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_func_realloc_0_nonnull=yes
-else
- ac_cv_func_realloc_0_nonnull=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5
-$as_echo "$ac_cv_func_realloc_0_nonnull" >&6; }
-if test $ac_cv_func_realloc_0_nonnull = yes; then :
-
-$as_echo "#define HAVE_REALLOC 1" >>confdefs.h
-
-else
- $as_echo "#define HAVE_REALLOC 0" >>confdefs.h
-
- case " $LIBOBJS " in
- *" realloc.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS realloc.$ac_objext"
- ;;
-esac
-
-
-$as_echo "#define realloc rpl_realloc" >>confdefs.h
-
-fi
-
-
-
-ac_fn_c_check_func "$LINENO" "b64_pton" "ac_cv_func_b64_pton"
-if test "x$ac_cv_func_b64_pton" = xyes; then :
- $as_echo "#define HAVE_B64_PTON 1" >>confdefs.h
-
-else
- case " $LIBOBJS " in
- *" b64_pton.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS b64_pton.$ac_objext"
- ;;
-esac
-
-fi
-
-
-ac_fn_c_check_func "$LINENO" "b64_ntop" "ac_cv_func_b64_ntop"
-if test "x$ac_cv_func_b64_ntop" = xyes; then :
- $as_echo "#define HAVE_B64_NTOP 1" >>confdefs.h
-
-else
- case " $LIBOBJS " in
- *" b64_ntop.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS b64_ntop.$ac_objext"
- ;;
-esac
-
-fi
-
-
-ac_fn_c_check_func "$LINENO" "calloc" "ac_cv_func_calloc"
-if test "x$ac_cv_func_calloc" = xyes; then :
- $as_echo "#define HAVE_CALLOC 1" >>confdefs.h
-
-else
- case " $LIBOBJS " in
- *" calloc.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS calloc.$ac_objext"
- ;;
-esac
-
-fi
-
-
-ac_fn_c_check_func "$LINENO" "timegm" "ac_cv_func_timegm"
-if test "x$ac_cv_func_timegm" = xyes; then :
- $as_echo "#define HAVE_TIMEGM 1" >>confdefs.h
-
-else
- case " $LIBOBJS " in
- *" timegm.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS timegm.$ac_objext"
- ;;
-esac
-
-fi
-
-
-ac_fn_c_check_func "$LINENO" "gmtime_r" "ac_cv_func_gmtime_r"
-if test "x$ac_cv_func_gmtime_r" = xyes; then :
- $as_echo "#define HAVE_GMTIME_R 1" >>confdefs.h
-
-else
- case " $LIBOBJS " in
- *" gmtime_r.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS gmtime_r.$ac_objext"
- ;;
-esac
-
-fi
-
-
-ac_fn_c_check_func "$LINENO" "ctime_r" "ac_cv_func_ctime_r"
-if test "x$ac_cv_func_ctime_r" = xyes; then :
- $as_echo "#define HAVE_CTIME_R 1" >>confdefs.h
-
-else
- case " $LIBOBJS " in
- *" ctime_r.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS ctime_r.$ac_objext"
- ;;
-esac
-
-fi
-
-
-ac_fn_c_check_func "$LINENO" "localtime_r" "ac_cv_func_localtime_r"
-if test "x$ac_cv_func_localtime_r" = xyes; then :
- $as_echo "#define HAVE_LOCALTIME_R 1" >>confdefs.h
-
-else
- case " $LIBOBJS " in
- *" localtime_r.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS localtime_r.$ac_objext"
- ;;
-esac
-
-fi
-
-
-ac_fn_c_check_func "$LINENO" "isblank" "ac_cv_func_isblank"
-if test "x$ac_cv_func_isblank" = xyes; then :
- $as_echo "#define HAVE_ISBLANK 1" >>confdefs.h
-
-else
- case " $LIBOBJS " in
- *" isblank.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS isblank.$ac_objext"
- ;;
-esac
-
-fi
-
-
-ac_fn_c_check_func "$LINENO" "isascii" "ac_cv_func_isascii"
-if test "x$ac_cv_func_isascii" = xyes; then :
- $as_echo "#define HAVE_ISASCII 1" >>confdefs.h
-
-else
- case " $LIBOBJS " in
- *" isascii.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS isascii.$ac_objext"
- ;;
-esac
-
-fi
-
-
-ac_fn_c_check_func "$LINENO" "inet_aton" "ac_cv_func_inet_aton"
-if test "x$ac_cv_func_inet_aton" = xyes; then :
- $as_echo "#define HAVE_INET_ATON 1" >>confdefs.h
-
-else
- case " $LIBOBJS " in
- *" inet_aton.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS inet_aton.$ac_objext"
- ;;
-esac
-
-fi
-
-
-ac_fn_c_check_func "$LINENO" "inet_pton" "ac_cv_func_inet_pton"
-if test "x$ac_cv_func_inet_pton" = xyes; then :
- $as_echo "#define HAVE_INET_PTON 1" >>confdefs.h
-
-else
- case " $LIBOBJS " in
- *" inet_pton.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS inet_pton.$ac_objext"
- ;;
-esac
-
-fi
-
-
-ac_fn_c_check_func "$LINENO" "inet_ntop" "ac_cv_func_inet_ntop"
-if test "x$ac_cv_func_inet_ntop" = xyes; then :
- $as_echo "#define HAVE_INET_NTOP 1" >>confdefs.h
-
-else
- case " $LIBOBJS " in
- *" inet_ntop.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS inet_ntop.$ac_objext"
- ;;
-esac
-
-fi
-
-
-ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
-if test "x$ac_cv_func_snprintf" = xyes; then :
- $as_echo "#define HAVE_SNPRINTF 1" >>confdefs.h
-
-else
- case " $LIBOBJS " in
- *" snprintf.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS snprintf.$ac_objext"
- ;;
-esac
-
-fi
-
-
-ac_fn_c_check_func "$LINENO" "strlcpy" "ac_cv_func_strlcpy"
-if test "x$ac_cv_func_strlcpy" = xyes; then :
- $as_echo "#define HAVE_STRLCPY 1" >>confdefs.h
-
-else
- case " $LIBOBJS " in
- *" strlcpy.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS strlcpy.$ac_objext"
- ;;
-esac
-
-fi
-
-
-ac_fn_c_check_func "$LINENO" "memmove" "ac_cv_func_memmove"
-if test "x$ac_cv_func_memmove" = xyes; then :
- $as_echo "#define HAVE_MEMMOVE 1" >>confdefs.h
-
-else
- case " $LIBOBJS " in
- *" memmove.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS memmove.$ac_objext"
- ;;
-esac
-
-fi
-
-
-ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
-if test "x$ac_cv_type_pid_t" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define pid_t int
-_ACEOF
-
-fi
-
-for ac_header in vfork.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default"
-if test "x$ac_cv_header_vfork_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_VFORK_H 1
-_ACEOF
-
-fi
-
-done
-
-for ac_func in fork vfork
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-if test "x$ac_cv_func_fork" = xyes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5
-$as_echo_n "checking for working fork... " >&6; }
-if ${ac_cv_func_fork_works+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- ac_cv_func_fork_works=cross
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-
- /* By Ruediger Kuhlmann. */
- return fork () < 0;
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_func_fork_works=yes
-else
- ac_cv_func_fork_works=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5
-$as_echo "$ac_cv_func_fork_works" >&6; }
-
-else
- ac_cv_func_fork_works=$ac_cv_func_fork
-fi
-if test "x$ac_cv_func_fork_works" = xcross; then
- case $host in
- *-*-amigaos* | *-*-msdosdjgpp*)
- # Override, as these systems have only a dummy fork() stub
- ac_cv_func_fork_works=no
- ;;
- *)
- ac_cv_func_fork_works=yes
- ;;
- esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;}
-fi
-ac_cv_func_vfork_works=$ac_cv_func_vfork
-if test "x$ac_cv_func_vfork" = xyes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5
-$as_echo_n "checking for working vfork... " >&6; }
-if ${ac_cv_func_vfork_works+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- ac_cv_func_vfork_works=cross
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Thanks to Paul Eggert for this test. */
-$ac_includes_default
-#include <sys/wait.h>
-#ifdef HAVE_VFORK_H
-# include <vfork.h>
-#endif
-/* On some sparc systems, changes by the child to local and incoming
- argument registers are propagated back to the parent. The compiler
- is told about this with #include <vfork.h>, but some compilers
- (e.g. gcc -O) don't grok <vfork.h>. Test for this by using a
- static variable whose address is put into a register that is
- clobbered by the vfork. */
-static void
-#ifdef __cplusplus
-sparc_address_test (int arg)
-# else
-sparc_address_test (arg) int arg;
-#endif
-{
- static pid_t child;
- if (!child) {
- child = vfork ();
- if (child < 0) {
- perror ("vfork");
- _exit(2);
- }
- if (!child) {
- arg = getpid();
- write(-1, "", 0);
- _exit (arg);
- }
- }
-}
-
-int
-main ()
-{
- pid_t parent = getpid ();
- pid_t child;
-
- sparc_address_test (0);
-
- child = vfork ();
-
- if (child == 0) {
- /* Here is another test for sparc vfork register problems. This
- test uses lots of local variables, at least as many local
- variables as main has allocated so far including compiler
- temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris
- 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should
- reuse the register of parent for one of the local variables,
- since it will think that parent can't possibly be used any more
- in this routine. Assigning to the local variable will thus
- munge parent in the parent process. */
- pid_t
- p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
- p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
- /* Convince the compiler that p..p7 are live; otherwise, it might
- use the same hardware register for all 8 local variables. */
- if (p != p1 || p != p2 || p != p3 || p != p4
- || p != p5 || p != p6 || p != p7)
- _exit(1);
-
- /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent
- from child file descriptors. If the child closes a descriptor
- before it execs or exits, this munges the parent's descriptor
- as well. Test for this by closing stdout in the child. */
- _exit(close(fileno(stdout)) != 0);
- } else {
- int status;
- struct stat st;
-
- while (wait(&status) != child)
- ;
- return (
- /* Was there some problem with vforking? */
- child < 0
-
- /* Did the child fail? (This shouldn't happen.) */
- || status
-
- /* Did the vfork/compiler bug occur? */
- || parent != getpid()
-
- /* Did the file descriptor bug occur? */
- || fstat(fileno(stdout), &st) != 0
- );
- }
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_func_vfork_works=yes
-else
- ac_cv_func_vfork_works=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5
-$as_echo "$ac_cv_func_vfork_works" >&6; }
-
-fi;
-if test "x$ac_cv_func_fork_works" = xcross; then
- ac_cv_func_vfork_works=$ac_cv_func_vfork
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;}
-fi
-
-if test "x$ac_cv_func_vfork_works" = xyes; then
-
-$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h
-
-else
-
-$as_echo "#define vfork fork" >>confdefs.h
-
-fi
-if test "x$ac_cv_func_fork_works" = xyes; then
-
-$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h
-
-fi
-
-for ac_func in endprotoent endservent sleep random fcntl strtoul bzero memset b32_ntop b32_pton
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-if test "x$HAVE_B32_NTOP" = "xyes"; then
- ldns_build_config_have_b32_ntop=1
-
-else
- ldns_build_config_have_b32_ntop=0
-
-fi
-if test "x$HAVE_B32_PTON" = "xyes"; then
- ldns_build_config_have_b32_pton=1
-
-else
- ldns_build_config_have_b32_pton=0
-
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for getaddrinfo" >&5
-$as_echo_n "checking for getaddrinfo... " >&6; }
-ac_cv_func_getaddrinfo=no
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-char* getaddrinfo();
-char* (*f) () = getaddrinfo;
-#ifdef __cplusplus
-}
-#endif
-int main() {
- ;
- return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_func_getaddrinfo="yes"
-if test "$ac_cv_header_windows_h" = "yes"; then
-
-$as_echo "#define USE_WINSOCK 1" >>confdefs.h
-
- USE_WINSOCK="1"
- if echo $LIBS | grep 'lws2_32' >/dev/null; then
- :
- else
- LIBS="$LIBS -lws2_32"
- fi
-fi
-
-else
- ORIGLIBS="$LIBS"
-LIBS="$LIBS -lws2_32"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#ifdef HAVE_WS2TCPIP_H
-#include <ws2tcpip.h>
-#endif
-
-int
-main ()
-{
-
- (void)getaddrinfo(NULL, NULL, NULL, NULL);
-
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
-ac_cv_func_getaddrinfo="yes"
-
-$as_echo "#define USE_WINSOCK 1" >>confdefs.h
-
-USE_WINSOCK="1"
-
-else
-
-ac_cv_func_getaddrinfo="no"
-LIBS="$ORIGLIBS"
-
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_getaddrinfo" >&5
-$as_echo "$ac_cv_func_getaddrinfo" >&6; }
-if test $ac_cv_func_getaddrinfo = yes; then
-
-$as_echo "#define HAVE_GETADDRINFO 1" >>confdefs.h
-
-fi
-
-if test $ac_cv_func_getaddrinfo = no; then
- case " $LIBOBJS " in
- *" fake-rfc2553.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS fake-rfc2553.$ac_objext"
- ;;
-esac
-
-fi
-if test "$USE_WINSOCK" = 1; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args.
-set dummy ${ac_tool_prefix}windres; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_WINDRES+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$WINDRES"; then
- ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_WINDRES="${ac_tool_prefix}windres"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-WINDRES=$ac_cv_prog_WINDRES
-if test -n "$WINDRES"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5
-$as_echo "$WINDRES" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_WINDRES"; then
- ac_ct_WINDRES=$WINDRES
- # Extract the first word of "windres", so it can be a program name with args.
-set dummy windres; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_WINDRES+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_WINDRES"; then
- ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_WINDRES="windres"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES
-if test -n "$ac_ct_WINDRES"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5
-$as_echo "$ac_ct_WINDRES" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_WINDRES" = x; then
- WINDRES=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- WINDRES=$ac_ct_WINDRES
- fi
-else
- WINDRES="$ac_cv_prog_WINDRES"
-fi
-
-fi
-
-# check ioctlsocket
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ioctlsocket" >&5
-$as_echo_n "checking for ioctlsocket... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#ifdef HAVE_WINSOCK2_H
-#include <winsock2.h>
-#endif
-
-int
-main ()
-{
-
- (void)ioctlsocket(0, 0, NULL);
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define HAVE_IOCTLSOCKET 1" >>confdefs.h
-
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-
-#AC_SEARCH_LIBS(RSA_new, [crypto])
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler (${CC-cc}) accepts the \"format\" attribute" >&5
-$as_echo_n "checking whether the C compiler (${CC-cc}) accepts the \"format\" attribute... " >&6; }
-if ${ac_cv_c_format_attribute+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_c_format_attribute=no
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-void f (char *format, ...) __attribute__ ((format (printf, 1, 2)));
-void (*pf) (char *format, ...) __attribute__ ((format (printf, 1, 2)));
-
-int
-main ()
-{
-
- f ("%s", "str");
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_format_attribute="yes"
-else
- ac_cv_c_format_attribute="no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_format_attribute" >&5
-$as_echo "$ac_cv_c_format_attribute" >&6; }
-if test $ac_cv_c_format_attribute = yes; then
-
-$as_echo "#define HAVE_ATTR_FORMAT 1" >>confdefs.h
-
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler (${CC-cc}) accepts the \"unused\" attribute" >&5
-$as_echo_n "checking whether the C compiler (${CC-cc}) accepts the \"unused\" attribute... " >&6; }
-if ${ac_cv_c_unused_attribute+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_c_unused_attribute=no
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-void f (char *u __attribute__((unused)));
-
-int
-main ()
-{
-
- f ("x");
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_unused_attribute="yes"
-else
- ac_cv_c_unused_attribute="no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_unused_attribute" >&5
-$as_echo "$ac_cv_c_unused_attribute" >&6; }
-if test $ac_cv_c_unused_attribute = yes; then
-
-$as_echo "#define HAVE_ATTR_UNUSED 1" >>confdefs.h
-
-fi
-
-
-
-# Check whether --with-xcode-sdk was given.
-if test "${with_xcode_sdk+set}" = set; then :
- withval=$with_xcode_sdk;
-else
- with_xcode_sdk="yes"
-fi
-
-if test "x_$with_xcode_sdk" != "x_no" ; then
- # check OSX deployment target, if needed
- if echo $build_os | grep darwin > /dev/null; then
- sdk_p=`xcode-select -print-path`;
- if test "x_$with_xcode_sdk" = "x_yes" ; then
- sdk_v="$( /usr/bin/xcrun --show-sdk-version 2>/dev/null )"
- else
- sdk_v="$with_xcode_sdk"
- fi
- # xcrun only got that option in 10.7
- if test -z "$sdk_v" ; then
- sdk_c="10.6"
- sdk_v="10.6"
- fi
- SYSROOT="$( find ${sdk_p} -name MacOSX${sdk_v}.sdk )"
- case $sdk_v in
- 10.9|10.8) sdk_c="10.7";;
- 10.11|10.10|*) sdk_c="10.10";;
- esac
- export MACOSX_DEPLOYMENT_TARGET="${sdk_c}";
- export CFLAGS="$CFLAGS -mmacosx-version-min=${sdk_c} -isysroot ${SYSROOT}"
- fi
-fi
-
-
-$as_echo "#define SYSCONFDIR sysconfdir" >>confdefs.h
-
-
-
-# Check whether --with-trust-anchor was given.
-if test "${with_trust_anchor+set}" = set; then :
- withval=$with_trust_anchor;
- LDNS_TRUST_ANCHOR_FILE="$withval"
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: Default trust anchor: $withval" >&5
-$as_echo "$as_me: Default trust anchor: $withval" >&6;}
-
-else
-
- LDNS_TRUST_ANCHOR_FILE="\$(sysconfdir)/unbound/root.key"
-
-
-fi
-
-
-
-# Check whether --with-ca-file was given.
-if test "${with_ca_file+set}" = set; then :
- withval=$with_ca_file;
-
-$as_echo "#define HAVE_DANE_CA_FILE 1" >>confdefs.h
-
-
-cat >>confdefs.h <<_ACEOF
-#define LDNS_DANE_CA_FILE "$withval"
-_ACEOF
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: Using CAfile: $withval" >&5
-$as_echo "$as_me: Using CAfile: $withval" >&6;}
- DEFAULT_CAFILE="Default is $withval"
-
-
-else
-
-
-$as_echo "#define HAVE_DANE_CA_FILE 0" >>confdefs.h
-
-
-
-fi
-
-
-
-# Check whether --with-ca-path was given.
-if test "${with_ca_path+set}" = set; then :
- withval=$with_ca_path;
-
-$as_echo "#define HAVE_DANE_CA_PATH 1" >>confdefs.h
-
-
-cat >>confdefs.h <<_ACEOF
-#define LDNS_DANE_CA_PATH "$withval"
-_ACEOF
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: Using CApath: $withval" >&5
-$as_echo "$as_me: Using CApath: $withval" >&6;}
- DEFAULT_CAPATH="Default is $withval"
-
-
-else
-
-
-$as_echo "#define HAVE_DANE_CA_PATH 0" >>confdefs.h
-
-
-
-fi
-
-
-
-
-
-
-if test "x$HAVE_SSL" = "xyes"; then
- ldns_build_config_have_ssl=1
-
-else
- ldns_build_config_have_ssl=0
-
-fi
-if test "x$ac_cv_c_format_attribute" = "xyes"; then
- ldns_build_config_have_attr_format=1
-
-else
- ldns_build_config_have_attr_format=0
-
-fi
-if test "x$ac_cv_c_unused_attribute" = "xyes"; then
- ldns_build_config_have_attr_unused=1
-
-else
- ldns_build_config_have_attr_unused=0
-
-fi
-
-CONFIG_FILES="Makefile ldns/common.h ldns/net.h ldns/util.h packaging/libldns.pc packaging/ldns-config"
-
-ac_config_files="$ac_config_files $CONFIG_FILES"
-
-
-ac_config_headers="$ac_config_headers ldns/config.h"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems. If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- # `set' does not quote correctly, so add quotes: double-quote
- # substitution turns \\\\ into \\, and sed turns \\ into \.
- sed -n \
- "s/'/'\\\\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;; #(
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- if test ! -f "$cache_file" || test -h "$cache_file"; then
- cat confcache >"$cache_file"
- else
- case $cache_file in #(
- */* | ?:*)
- mv -f confcache "$cache_file"$$ &&
- mv -f "$cache_file"$$ "$cache_file" ;; #(
- *)
- mv -f confcache "$cache_file" ;;
- esac
- fi
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-
-SHELL=\${CONFIG_SHELL-$SHELL}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by ldns $as_me 1.7.1, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-config_commands="$ac_config_commands"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration. Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- --config print configuration, then exit
- -q, --quiet, --silent
- do not print progress messages
- -d, --debug don't remove temporary files
- --recheck update $as_me by reconfiguring in the same conditions
- --file=FILE[:TEMPLATE]
- instantiate the configuration file FILE
- --header=FILE[:TEMPLATE]
- instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Configuration commands:
-$config_commands
-
-Report bugs to <libdns@nlnetlabs.nl>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-ldns config.status 1.7.1
-configured by $0, generated by GNU Autoconf 2.69,
- with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-AWK='$AWK'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
- case $1 in
- --*=?*)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
- ac_shift=:
- ;;
- --*=)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
- --config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- '') as_fn_error $? "missing file argument" ;;
- esac
- as_fn_append CONFIG_FILES " '$ac_optarg'"
- ac_need_defaults=false;;
- --header | --heade | --head | --hea )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- as_fn_append CONFIG_HEADERS " '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h)
- # Conflict between --help and --header
- as_fn_error $? "ambiguous option: \`$1'
-Try \`$0 --help' for more information.";;
- --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
- *) as_fn_append ac_config_targets " $1"
- ac_need_defaults=false ;;
-
- esac
- shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
- set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
- CONFIG_SHELL='$SHELL'
- export CONFIG_SHELL
- exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-#
-# INIT-COMMANDS
-#
-
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-sed_quote_subst='$sed_quote_subst'
-double_quote_subst='$double_quote_subst'
-delay_variable_subst='$delay_variable_subst'
-macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
-macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
-enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
-enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
-pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
-enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
-shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`'
-SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
-ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
-PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
-host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
-host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
-host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
-build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
-build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
-build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
-SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
-Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
-GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
-EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
-FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
-LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
-NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
-LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
-max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
-ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
-exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
-lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
-lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
-lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
-lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
-lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
-reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
-reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
-FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`'
-OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
-deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
-file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
-file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
-want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
-DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
-sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
-AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
-lt_ar_flags='`$ECHO "$lt_ar_flags" | $SED "$delay_single_quote_subst"`'
-AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
-archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
-STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
-RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
-old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
-old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
-old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
-lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
-CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
-CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
-compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
-GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
-lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`'
-nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
-lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
-lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`'
-objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
-MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
-lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
-lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
-lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
-need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
-MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
-DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
-NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
-LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
-OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
-OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
-libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
-shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
-extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
-archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
-export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
-whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
-compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
-old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
-archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
-archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
-module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
-module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
-with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
-allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
-no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
-hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
-hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
-hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
-hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
-hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
-hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
-inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
-link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
-always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
-export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
-exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
-include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
-prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
-postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
-file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
-variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
-need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
-need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
-version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
-runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
-shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
-shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
-libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
-library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
-soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
-install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
-postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
-postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
-finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
-finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
-hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
-sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
-configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`'
-configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`'
-hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
-enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
-enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
-enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
-old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
-striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
-
-LTCC='$LTCC'
-LTCFLAGS='$LTCFLAGS'
-compiler='$compiler_DEFAULT'
-
-# A function that is used when there is no print builtin or printf.
-func_fallback_echo ()
-{
- eval 'cat <<_LTECHO_EOF
-\$1
-_LTECHO_EOF'
-}
-
-# Quote evaled strings.
-for var in SHELL \
-ECHO \
-PATH_SEPARATOR \
-SED \
-GREP \
-EGREP \
-FGREP \
-LD \
-NM \
-LN_S \
-lt_SP2NL \
-lt_NL2SP \
-reload_flag \
-FILECMD \
-OBJDUMP \
-deplibs_check_method \
-file_magic_cmd \
-file_magic_glob \
-want_nocaseglob \
-DLLTOOL \
-sharedlib_from_linklib_cmd \
-AR \
-archiver_list_spec \
-STRIP \
-RANLIB \
-CC \
-CFLAGS \
-compiler \
-lt_cv_sys_global_symbol_pipe \
-lt_cv_sys_global_symbol_to_cdecl \
-lt_cv_sys_global_symbol_to_import \
-lt_cv_sys_global_symbol_to_c_name_address \
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
-lt_cv_nm_interface \
-nm_file_list_spec \
-lt_cv_truncate_bin \
-lt_prog_compiler_no_builtin_flag \
-lt_prog_compiler_pic \
-lt_prog_compiler_wl \
-lt_prog_compiler_static \
-lt_cv_prog_compiler_c_o \
-need_locks \
-MANIFEST_TOOL \
-DSYMUTIL \
-NMEDIT \
-LIPO \
-OTOOL \
-OTOOL64 \
-shrext_cmds \
-export_dynamic_flag_spec \
-whole_archive_flag_spec \
-compiler_needs_object \
-with_gnu_ld \
-allow_undefined_flag \
-no_undefined_flag \
-hardcode_libdir_flag_spec \
-hardcode_libdir_separator \
-exclude_expsyms \
-include_expsyms \
-file_list_spec \
-variables_saved_for_relink \
-libname_spec \
-library_names_spec \
-soname_spec \
-install_override_mode \
-finish_eval \
-old_striplib \
-striplib; do
- case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
- *[\\\\\\\`\\"\\\$]*)
- eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
- ;;
- *)
- eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
- ;;
- esac
-done
-
-# Double-quote double-evaled strings.
-for var in reload_cmds \
-old_postinstall_cmds \
-old_postuninstall_cmds \
-old_archive_cmds \
-extract_expsyms_cmds \
-old_archive_from_new_cmds \
-old_archive_from_expsyms_cmds \
-archive_cmds \
-archive_expsym_cmds \
-module_cmds \
-module_expsym_cmds \
-export_symbols_cmds \
-prelink_cmds \
-postlink_cmds \
-postinstall_cmds \
-postuninstall_cmds \
-finish_cmds \
-sys_lib_search_path_spec \
-configure_time_dlsearch_path \
-configure_time_lt_sys_library_path; do
- case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
- *[\\\\\\\`\\"\\\$]*)
- eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
- ;;
- *)
- eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
- ;;
- esac
-done
-
-ac_aux_dir='$ac_aux_dir'
-
-# See if we are running on zsh, and set the options that allow our
-# commands through without removal of \ escapes INIT.
-if test -n "\${ZSH_VERSION+set}"; then
- setopt NO_GLOB_SUBST
-fi
-
-
- PACKAGE='$PACKAGE'
- VERSION='$VERSION'
- RM='$RM'
- ofile='$ofile'
-
-
-
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
- "disable-rpath") CONFIG_COMMANDS="$CONFIG_COMMANDS disable-rpath" ;;
- "$CONFIG_FILES") CONFIG_FILES="$CONFIG_FILES $CONFIG_FILES" ;;
- "ldns/config.h") CONFIG_HEADERS="$CONFIG_HEADERS ldns/config.h" ;;
-
- *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
- esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used. Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
- test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
- test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp= ac_tmp=
- trap 'exit_status=$?
- : "${ac_tmp:=$tmp}"
- { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
- trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
- eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\\r'
-else
- ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- . ./conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
- if test $ac_delim_n = $ac_delim_num; then
- break
- elif $ac_last_try; then
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
- for (key in S) S_is_set[key] = 1
- FS = ""
-
-}
-{
- line = $ 0
- nfields = split(line, field, "@")
- substed = 0
- len = length(field[1])
- for (i = 2; i < nfields; i++) {
- key = field[i]
- keylen = length(key)
- if (S_is_set[key]) {
- value = S[key]
- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
- len += length(value) + length(field[++i])
- substed = 1
- } else
- len += 1 + keylen
- }
-
- print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
- sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
- cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
- || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
-h
-s///
-s/^/:/
-s/[ ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[ ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
- ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
- if test -z "$ac_tt"; then
- break
- elif $ac_last_try; then
- as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any. Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[ ]*#[ ]*define[ ][ ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- for (key in D) D_is_set[key] = 1
- FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
- line = \$ 0
- split(line, arg, " ")
- if (arg[1] == "#") {
- defundef = arg[2]
- mac1 = arg[3]
- } else {
- defundef = substr(arg[1], 2)
- mac1 = arg[2]
- }
- split(mac1, mac2, "(") #)
- macro = mac2[1]
- prefix = substr(line, 1, index(line, defundef) - 1)
- if (D_is_set[macro]) {
- # Preserve the white space surrounding the "#".
- print prefix "define", macro P[macro] D[macro]
- next
- } else {
- # Replace #undef with comments. This is necessary, for example,
- # in the case of _POSIX_SOURCE, which is predefined and required
- # on some systems where configure will not decide to define it.
- if (defundef == "undef") {
- print "/*", prefix defundef, macro, "*/"
- next
- }
- }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
- as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
-shift
-for ac_tag
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$ac_tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- as_fn_append ac_file_inputs " '$ac_f'"
- done
-
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
- `' by configure.'
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
- fi
- # Neutralize special characters interpreted by sed in replacement strings.
- case $configure_input in #(
- *\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
- sed 's/[\\\\&|]/\\\\&/g'`;; #(
- *) ac_sed_conf_input=$configure_input;;
- esac
-
- case $ac_tag in
- *:-:* | *:-) cat >"$ac_tmp/stdin" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- as_dir="$ac_dir"; as_fn_mkdir_p
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
- >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
- "$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&2;}
-
- rm -f "$ac_tmp/stdin"
- case $ac_file in
- -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
- *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
- esac \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
- :H)
- #
- # CONFIG_HEADER
- #
- if test x"$ac_file" != x-; then
- {
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
- } >"$ac_tmp/config.h" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
- else
- rm -f "$ac_file"
- mv "$ac_tmp/config.h" "$ac_file" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- fi
- else
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
- || as_fn_error $? "could not create -" "$LINENO" 5
- fi
- ;;
-
- :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
-$as_echo "$as_me: executing $ac_file commands" >&6;}
- ;;
- esac
-
-
- case $ac_file$ac_mode in
- "libtool":C)
-
- # See if we are running on zsh, and set the options that allow our
- # commands through without removal of \ escapes.
- if test -n "${ZSH_VERSION+set}"; then
- setopt NO_GLOB_SUBST
- fi
-
- cfgfile=${ofile}T
- trap "$RM \"$cfgfile\"; exit 1" 1 2 15
- $RM "$cfgfile"
-
- cat <<_LT_EOF >> "$cfgfile"
-#! $SHELL
-# Generated automatically by $as_me ($PACKAGE) $VERSION
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-
-# Provide generalized library-building support services.
-# Written by Gordon Matzigkeit, 1996
-
-# Copyright (C) 2014 Free Software Foundation, Inc.
-# This is free software; see the source for copying conditions. There is NO
-# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-# GNU Libtool is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of of the License, or
-# (at your option) any later version.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program or library that is built
-# using GNU Libtool, you may include this file under the same
-# distribution terms that you use for the rest of that program.
-#
-# GNU Libtool is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-
-# The names of the tagged configurations supported by this script.
-available_tags=''
-
-# Configured defaults for sys_lib_dlsearch_path munging.
-: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
-
-# ### BEGIN LIBTOOL CONFIG
-
-# Which release of libtool.m4 was used?
-macro_version=$macro_version
-macro_revision=$macro_revision
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# What type of objects to build.
-pic_mode=$pic_mode
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# Shared archive member basename,for filename based shared library versioning on AIX.
-shared_archive_member_spec=$shared_archive_member_spec
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# An echo program that protects backslashes.
-ECHO=$lt_ECHO
-
-# The PATH separator for the build system.
-PATH_SEPARATOR=$lt_PATH_SEPARATOR
-
-# The host system.
-host_alias=$host_alias
-host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
-
-# A sed program that does not truncate output.
-SED=$lt_SED
-
-# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="\$SED -e 1s/^X//"
-
-# A grep program that handles long lines.
-GREP=$lt_GREP
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# A literal string matcher.
-FGREP=$lt_FGREP
-
-# A BSD- or MS-compatible name lister.
-NM=$lt_NM
-
-# Whether we need soft or hard links.
-LN_S=$lt_LN_S
-
-# What is the maximum length of a command?
-max_cmd_len=$max_cmd_len
-
-# Object file suffix (normally "o").
-objext=$ac_objext
-
-# Executable file suffix (normally "").
-exeext=$exeext
-
-# whether the shell understands "unset".
-lt_unset=$lt_unset
-
-# turn spaces into newlines.
-SP2NL=$lt_lt_SP2NL
-
-# turn newlines into spaces.
-NL2SP=$lt_lt_NL2SP
-
-# convert \$build file names to \$host format.
-to_host_file_cmd=$lt_cv_to_host_file_cmd
-
-# convert \$build files to toolchain format.
-to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-
-# A file(cmd) program that detects file types.
-FILECMD=$lt_FILECMD
-
-# An object symbol dumper.
-OBJDUMP=$lt_OBJDUMP
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$lt_deplibs_check_method
-
-# Command to use when deplibs_check_method = "file_magic".
-file_magic_cmd=$lt_file_magic_cmd
-
-# How to find potential files when deplibs_check_method = "file_magic".
-file_magic_glob=$lt_file_magic_glob
-
-# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
-want_nocaseglob=$lt_want_nocaseglob
-
-# DLL creation program.
-DLLTOOL=$lt_DLLTOOL
-
-# Command to associate shared and link libraries.
-sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
-
-# The archiver.
-AR=$lt_AR
-
-# Flags to create an archive (by configure).
-lt_ar_flags=$lt_ar_flags
-
-# Flags to create an archive.
-AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"}
-
-# How to feed a file listing to the archiver.
-archiver_list_spec=$lt_archiver_list_spec
-
-# A symbol stripping program.
-STRIP=$lt_STRIP
-
-# Commands used to install an old-style archive.
-RANLIB=$lt_RANLIB
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Whether to use a lock for old archive extraction.
-lock_old_archive_extraction=$lock_old_archive_extraction
-
-# A C compiler.
-LTCC=$lt_CC
-
-# LTCC compiler flags.
-LTCFLAGS=$lt_CFLAGS
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration.
-global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-
-# Transform the output of nm into a list of symbols to manually relocate.
-global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import
-
-# Transform the output of nm in a C name address pair.
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# Transform the output of nm in a C name address pair when lib prefix is needed.
-global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
-
-# The name lister interface.
-nm_interface=$lt_lt_cv_nm_interface
-
-# Specify filename containing input files for \$NM.
-nm_file_list_spec=$lt_nm_file_list_spec
-
-# The root where to search for dependent libraries,and where our libraries should be installed.
-lt_sysroot=$lt_sysroot
-
-# Command to truncate a binary pipe.
-lt_truncate_bin=$lt_lt_cv_truncate_bin
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# Used to examine libraries when file_magic_cmd begins with "file".
-MAGIC_CMD=$MAGIC_CMD
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# Manifest tool.
-MANIFEST_TOOL=$lt_MANIFEST_TOOL
-
-# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
-DSYMUTIL=$lt_DSYMUTIL
-
-# Tool to change global to local symbols on Mac OS X.
-NMEDIT=$lt_NMEDIT
-
-# Tool to manipulate fat objects and archives on Mac OS X.
-LIPO=$lt_LIPO
-
-# ldd/readelf like tool for Mach-O binaries on Mac OS X.
-OTOOL=$lt_OTOOL
-
-# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
-OTOOL64=$lt_OTOOL64
-
-# Old archive suffix (normally "a").
-libext=$libext
-
-# Shared library suffix (normally ".so").
-shrext_cmds=$lt_shrext_cmds
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at link time.
-variables_saved_for_relink=$lt_variables_saved_for_relink
-
-# Do we need the "lib" prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Library versioning type.
-version_type=$version_type
-
-# Shared library runtime path variable.
-runpath_var=$runpath_var
-
-# Shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# Format of library name prefix.
-libname_spec=$lt_libname_spec
-
-# List of archive names. First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME
-library_names_spec=$lt_library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$lt_soname_spec
-
-# Permission mode override for installation of shared libraries.
-install_override_mode=$lt_install_override_mode
-
-# Command to use after installation of a shared archive.
-postinstall_cmds=$lt_postinstall_cmds
-
-# Command to use after uninstallation of a shared archive.
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# As "finish_cmds", except a single script fragment to be evaled but
-# not shown.
-finish_eval=$lt_finish_eval
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Compile-time system search path for libraries.
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Detected run-time system search path for libraries.
-sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path
-
-# Explicit LT_SYS_LIBRARY_PATH set during ./configure time.
-configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-
-# The linker used to build libraries.
-LD=$lt_LD
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# Commands used to build an old-style archive.
-old_archive_cmds=$lt_old_archive_cmds
-
-# A language specific compiler.
-CC=$lt_compiler
-
-# Is the compiler the GNU compiler?
-with_gcc=$GCC
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc
-
-# Whether or not to disallow shared libs when runtime libs are static.
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec
-
-# Whether the compiler copes with passing no objects directly.
-compiler_needs_object=$lt_compiler_needs_object
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
-
-# Commands used to build a shared archive.
-archive_cmds=$lt_archive_cmds
-archive_expsym_cmds=$lt_archive_expsym_cmds
-
-# Commands used to build a loadable module if different from building
-# a shared archive.
-module_cmds=$lt_module_cmds
-module_expsym_cmds=$lt_module_expsym_cmds
-
-# Whether we are building with GNU ld or not.
-with_gnu_ld=$lt_with_gnu_ld
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag
-
-# Flag that enforces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist
-hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
-
-# Whether we need a single "-rpath" flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator
-
-# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
-# DIR into the resulting binary.
-hardcode_direct=$hardcode_direct
-
-# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
-# DIR into the resulting binary and the resulting library dependency is
-# "absolute",i.e impossible to change by setting \$shlibpath_var if the
-# library is relocated.
-hardcode_direct_absolute=$hardcode_direct_absolute
-
-# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
-# into the resulting binary.
-hardcode_minus_L=$hardcode_minus_L
-
-# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
-# into the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var
-
-# Set to "yes" if building a shared library automatically hardcodes DIR
-# into the library and all subsequent libraries and executables linked
-# against it.
-hardcode_automatic=$hardcode_automatic
-
-# Set to yes if linker adds runtime paths of dependent libraries
-# to runtime path list.
-inherit_rpath=$inherit_rpath
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs
-
-# Set to "yes" if exported symbols are required.
-always_export_symbols=$always_export_symbols
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms
-
-# Commands necessary for linking programs (against libraries) with templates.
-prelink_cmds=$lt_prelink_cmds
-
-# Commands necessary for finishing linking programs.
-postlink_cmds=$lt_postlink_cmds
-
-# Specify filename containing input files.
-file_list_spec=$lt_file_list_spec
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action
-
-# ### END LIBTOOL CONFIG
-
-_LT_EOF
-
- cat <<'_LT_EOF' >> "$cfgfile"
-
-# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
-
-# func_munge_path_list VARIABLE PATH
-# -----------------------------------
-# VARIABLE is name of variable containing _space_ separated list of
-# directories to be munged by the contents of PATH, which is string
-# having a format:
-# "DIR[:DIR]:"
-# string "DIR[ DIR]" will be prepended to VARIABLE
-# ":DIR[:DIR]"
-# string "DIR[ DIR]" will be appended to VARIABLE
-# "DIRP[:DIRP]::[DIRA:]DIRA"
-# string "DIRP[ DIRP]" will be prepended to VARIABLE and string
-# "DIRA[ DIRA]" will be appended to VARIABLE
-# "DIR[:DIR]"
-# VARIABLE will be replaced by "DIR[ DIR]"
-func_munge_path_list ()
-{
- case x$2 in
- x)
- ;;
- *:)
- eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
- ;;
- x:*)
- eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
- ;;
- *::*)
- eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
- eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
- ;;
- *)
- eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
- ;;
- esac
-}
-
-
-# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
-func_cc_basename ()
-{
- for cc_temp in $*""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
- done
- func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
-}
-
-
-# ### END FUNCTIONS SHARED WITH CONFIGURE
-
-_LT_EOF
-
- case $host_os in
- aix3*)
- cat <<\_LT_EOF >> "$cfgfile"
-# AIX sometimes has problems with the GCC collect2 program. For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test set != "${COLLECT_NAMES+set}"; then
- COLLECT_NAMES=
- export COLLECT_NAMES
-fi
-_LT_EOF
- ;;
- esac
-
-
-ltmain=$ac_aux_dir/ltmain.sh
-
-
- # We use sed instead of cat because bash on DJGPP gets confused if
- # if finds mixed CR/LF and LF-only lines. Since sed operates in
- # text mode, it properly converts lines to CR/LF. This bash problem
- # is reportedly fixed, but why not run on old versions too?
- $SED '$q' "$ltmain" >> "$cfgfile" \
- || (rm -f "$cfgfile"; exit 1)
-
- mv -f "$cfgfile" "$ofile" ||
- (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
- chmod +x "$ofile"
-
- ;;
- "disable-rpath":C)
- sed < libtool > libtool-2 \
- 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_RPATH_SED__ "/'
- mv libtool-2 libtool
- chmod 755 libtool
- libtool="./libtool"
- ;;
-
- esac
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded. So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status. When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
- ac_cs_success=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
- exec 5>>config.log
- # Use ||, not &&, to avoid exiting from the if with $? = 1, which
- # would make configure fail if this is the last instruction.
- $ac_cs_success || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
-
-echo "copying header files"
-
-for file in $srcdir/ldns//*.h; do
- sh $srcdir/install-sh -m 644 $file ldns/
-done
-
-
-
-
-
diff --git a/ldns/dane.c b/ldns/dane.c
deleted file mode 100644
index 30dc1f7..0000000
--- a/ldns/dane.c
+++ /dev/null
@@ -1,941 +0,0 @@
-/*
- * Verify or create TLS authentication with DANE (RFC6698)
- *
- * (c) NLnetLabs 2012
- *
- * See the file LICENSE for the license.
- *
- */
-
-#include <ldns/config.h>
-#ifdef USE_DANE
-
-#include <ldns/ldns.h>
-#include <ldns/dane.h>
-
-#include <unistd.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-
-#ifdef HAVE_SSL
-#include <openssl/ssl.h>
-#include <openssl/err.h>
-#include <openssl/x509v3.h>
-#endif
-
-ldns_status
-ldns_dane_create_tlsa_owner(ldns_rdf** tlsa_owner, const ldns_rdf* name,
- uint16_t port, ldns_dane_transport transport)
-{
- char buf[LDNS_MAX_DOMAINLEN];
- size_t s;
-
- assert(tlsa_owner != NULL);
- assert(name != NULL);
- assert(ldns_rdf_get_type(name) == LDNS_RDF_TYPE_DNAME);
-
- s = (size_t)snprintf(buf, LDNS_MAX_DOMAINLEN, "X_%d", (int)port);
- buf[0] = (char)(s - 1);
-
- switch(transport) {
- case LDNS_DANE_TRANSPORT_TCP:
- s += snprintf(buf + s, LDNS_MAX_DOMAINLEN - s, "\004_tcp");
- break;
-
- case LDNS_DANE_TRANSPORT_UDP:
- s += snprintf(buf + s, LDNS_MAX_DOMAINLEN - s, "\004_udp");
- break;
-
- case LDNS_DANE_TRANSPORT_SCTP:
- s += snprintf(buf + s, LDNS_MAX_DOMAINLEN - s, "\005_sctp");
- break;
-
- default:
- return LDNS_STATUS_DANE_UNKNOWN_TRANSPORT;
- }
- if (s + ldns_rdf_size(name) > LDNS_MAX_DOMAINLEN) {
- return LDNS_STATUS_DOMAINNAME_OVERFLOW;
- }
- memcpy(buf + s, ldns_rdf_data(name), ldns_rdf_size(name));
- *tlsa_owner = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_DNAME,
- s + ldns_rdf_size(name), buf);
- if (*tlsa_owner == NULL) {
- return LDNS_STATUS_MEM_ERR;
- }
- return LDNS_STATUS_OK;
-}
-
-
-#ifdef HAVE_SSL
-ldns_status
-ldns_dane_cert2rdf(ldns_rdf** rdf, X509* cert,
- ldns_tlsa_selector selector,
- ldns_tlsa_matching_type matching_type)
-{
- unsigned char* buf = NULL;
- size_t len;
-
- X509_PUBKEY* xpubkey;
- EVP_PKEY* epubkey;
-
- unsigned char* digest;
-
- assert(rdf != NULL);
- assert(cert != NULL);
-
- switch(selector) {
- case LDNS_TLSA_SELECTOR_FULL_CERTIFICATE:
-
- len = (size_t)i2d_X509(cert, &buf);
- break;
-
- case LDNS_TLSA_SELECTOR_SUBJECTPUBLICKEYINFO:
-
-#ifndef S_SPLINT_S
- xpubkey = X509_get_X509_PUBKEY(cert);
-#endif
- if (! xpubkey) {
- return LDNS_STATUS_SSL_ERR;
- }
- epubkey = X509_PUBKEY_get(xpubkey);
- if (! epubkey) {
- return LDNS_STATUS_SSL_ERR;
- }
- len = (size_t)i2d_PUBKEY(epubkey, &buf);
- break;
-
- default:
- return LDNS_STATUS_DANE_UNKNOWN_SELECTOR;
- }
-
- switch(matching_type) {
- case LDNS_TLSA_MATCHING_TYPE_NO_HASH_USED:
-
- *rdf = ldns_rdf_new(LDNS_RDF_TYPE_HEX, len, buf);
-
- return *rdf ? LDNS_STATUS_OK : LDNS_STATUS_MEM_ERR;
- break;
-
- case LDNS_TLSA_MATCHING_TYPE_SHA256:
-
- digest = LDNS_XMALLOC(unsigned char, LDNS_SHA256_DIGEST_LENGTH);
- if (digest == NULL) {
- LDNS_FREE(buf);
- return LDNS_STATUS_MEM_ERR;
- }
- (void) ldns_sha256(buf, (unsigned int)len, digest);
- *rdf = ldns_rdf_new(LDNS_RDF_TYPE_HEX, LDNS_SHA256_DIGEST_LENGTH,
- digest);
- LDNS_FREE(buf);
-
- return *rdf ? LDNS_STATUS_OK : LDNS_STATUS_MEM_ERR;
- break;
-
- case LDNS_TLSA_MATCHING_TYPE_SHA512:
-
- digest = LDNS_XMALLOC(unsigned char, LDNS_SHA512_DIGEST_LENGTH);
- if (digest == NULL) {
- LDNS_FREE(buf);
- return LDNS_STATUS_MEM_ERR;
- }
- (void) ldns_sha512(buf, (unsigned int)len, digest);
- *rdf = ldns_rdf_new(LDNS_RDF_TYPE_HEX, LDNS_SHA512_DIGEST_LENGTH,
- digest);
- LDNS_FREE(buf);
-
- return *rdf ? LDNS_STATUS_OK : LDNS_STATUS_MEM_ERR;
- break;
-
- default:
- LDNS_FREE(buf);
- return LDNS_STATUS_DANE_UNKNOWN_MATCHING_TYPE;
- }
-}
-
-
-/* Ordinary PKIX validation of cert (with extra_certs to help)
- * against the CA's in store
- */
-static ldns_status
-ldns_dane_pkix_validate(X509* cert, STACK_OF(X509)* extra_certs,
- X509_STORE* store)
-{
- X509_STORE_CTX* vrfy_ctx;
- ldns_status s;
-
- if (! store) {
- return LDNS_STATUS_DANE_PKIX_DID_NOT_VALIDATE;
- }
- vrfy_ctx = X509_STORE_CTX_new();
- if (! vrfy_ctx) {
-
- return LDNS_STATUS_SSL_ERR;
-
- } else if (X509_STORE_CTX_init(vrfy_ctx, store,
- cert, extra_certs) != 1) {
- s = LDNS_STATUS_SSL_ERR;
-
- } else if (X509_verify_cert(vrfy_ctx) == 1) {
-
- s = LDNS_STATUS_OK;
-
- } else {
- s = LDNS_STATUS_DANE_PKIX_DID_NOT_VALIDATE;
- }
- X509_STORE_CTX_free(vrfy_ctx);
- return s;
-}
-
-
-/* Orinary PKIX validation of cert (with extra_certs to help)
- * against the CA's in store, but also return the validation chain.
- */
-static ldns_status
-ldns_dane_pkix_validate_and_get_chain(STACK_OF(X509)** chain, X509* cert,
- STACK_OF(X509)* extra_certs, X509_STORE* store)
-{
- ldns_status s;
- X509_STORE* empty_store = NULL;
- X509_STORE_CTX* vrfy_ctx;
-
- assert(chain != NULL);
-
- if (! store) {
- store = empty_store = X509_STORE_new();
- }
- s = LDNS_STATUS_SSL_ERR;
- vrfy_ctx = X509_STORE_CTX_new();
- if (! vrfy_ctx) {
-
- goto exit_free_empty_store;
-
- } else if (X509_STORE_CTX_init(vrfy_ctx, store,
- cert, extra_certs) != 1) {
- goto exit_free_vrfy_ctx;
-
- } else if (X509_verify_cert(vrfy_ctx) == 1) {
-
- s = LDNS_STATUS_OK;
-
- } else {
- s = LDNS_STATUS_DANE_PKIX_DID_NOT_VALIDATE;
- }
- *chain = X509_STORE_CTX_get1_chain(vrfy_ctx);
- if (! *chain) {
- s = LDNS_STATUS_SSL_ERR;
- }
-
-exit_free_vrfy_ctx:
- X509_STORE_CTX_free(vrfy_ctx);
-
-exit_free_empty_store:
- if (empty_store) {
- X509_STORE_free(empty_store);
- }
- return s;
-}
-
-
-/* Return the validation chain that can be build out of cert, with extra_certs.
- */
-static ldns_status
-ldns_dane_pkix_get_chain(STACK_OF(X509)** chain,
- X509* cert, STACK_OF(X509)* extra_certs)
-{
- ldns_status s;
- X509_STORE* empty_store = NULL;
- X509_STORE_CTX* vrfy_ctx;
-
- assert(chain != NULL);
-
- empty_store = X509_STORE_new();
- s = LDNS_STATUS_SSL_ERR;
- vrfy_ctx = X509_STORE_CTX_new();
- if (! vrfy_ctx) {
-
- goto exit_free_empty_store;
-
- } else if (X509_STORE_CTX_init(vrfy_ctx, empty_store,
- cert, extra_certs) != 1) {
- goto exit_free_vrfy_ctx;
- }
- (void) X509_verify_cert(vrfy_ctx);
- *chain = X509_STORE_CTX_get1_chain(vrfy_ctx);
- if (! *chain) {
- s = LDNS_STATUS_SSL_ERR;
- } else {
- s = LDNS_STATUS_OK;
- }
-exit_free_vrfy_ctx:
- X509_STORE_CTX_free(vrfy_ctx);
-
-exit_free_empty_store:
- X509_STORE_free(empty_store);
- return s;
-}
-
-
-/* Pop n+1 certs and return the last popped.
- */
-static ldns_status
-ldns_dane_get_nth_cert_from_validation_chain(
- X509** cert, STACK_OF(X509)* chain, int n, bool ca)
-{
- if (n >= sk_X509_num(chain) || n < 0) {
- return LDNS_STATUS_DANE_OFFSET_OUT_OF_RANGE;
- }
- *cert = sk_X509_pop(chain);
- while (n-- > 0) {
- X509_free(*cert);
- *cert = sk_X509_pop(chain);
- }
- if (ca && ! X509_check_ca(*cert)) {
- return LDNS_STATUS_DANE_NON_CA_CERTIFICATE;
- }
- return LDNS_STATUS_OK;
-}
-
-
-/* Create validation chain with cert and extra_certs and returns the last
- * self-signed (if present).
- */
-static ldns_status
-ldns_dane_pkix_get_last_self_signed(X509** out_cert,
- X509* cert, STACK_OF(X509)* extra_certs)
-{
- ldns_status s;
- X509_STORE* empty_store = NULL;
- X509_STORE_CTX* vrfy_ctx;
-
- assert(out_cert != NULL);
-
- empty_store = X509_STORE_new();
- s = LDNS_STATUS_SSL_ERR;
- vrfy_ctx = X509_STORE_CTX_new();
- if (! vrfy_ctx) {
- goto exit_free_empty_store;
-
- } else if (X509_STORE_CTX_init(vrfy_ctx, empty_store,
- cert, extra_certs) != 1) {
- goto exit_free_vrfy_ctx;
-
- }
- (void) X509_verify_cert(vrfy_ctx);
- if (X509_STORE_CTX_get_error(vrfy_ctx) == X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN ||
- X509_STORE_CTX_get_error(vrfy_ctx) == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT){
-
- *out_cert = X509_STORE_CTX_get_current_cert( vrfy_ctx);
- s = LDNS_STATUS_OK;
- } else {
- s = LDNS_STATUS_DANE_PKIX_NO_SELF_SIGNED_TRUST_ANCHOR;
- }
-exit_free_vrfy_ctx:
- X509_STORE_CTX_free(vrfy_ctx);
-
-exit_free_empty_store:
- X509_STORE_free(empty_store);
- return s;
-}
-
-
-ldns_status
-ldns_dane_select_certificate(X509** selected_cert,
- X509* cert, STACK_OF(X509)* extra_certs,
- X509_STORE* pkix_validation_store,
- ldns_tlsa_certificate_usage cert_usage, int offset)
-{
- ldns_status s;
- STACK_OF(X509)* pkix_validation_chain = NULL;
-
- assert(selected_cert != NULL);
- assert(cert != NULL);
-
- /* With PKIX validation explicitly turned off (pkix_validation_store
- * == NULL), treat the "CA constraint" and "Service certificate
- * constraint" the same as "Trust anchor assertion" and "Domain issued
- * certificate" respectively.
- */
- if (pkix_validation_store == NULL) {
- switch (cert_usage) {
-
- case LDNS_TLSA_USAGE_CA_CONSTRAINT:
-
- cert_usage = LDNS_TLSA_USAGE_TRUST_ANCHOR_ASSERTION;
- break;
-
- case LDNS_TLSA_USAGE_SERVICE_CERTIFICATE_CONSTRAINT:
-
- cert_usage = LDNS_TLSA_USAGE_DOMAIN_ISSUED_CERTIFICATE;
- break;
-
- default:
- break;
- }
- }
-
- /* Now what to do with each Certificate usage...
- */
- switch (cert_usage) {
-
- case LDNS_TLSA_USAGE_CA_CONSTRAINT:
-
- s = ldns_dane_pkix_validate_and_get_chain(
- &pkix_validation_chain,
- cert, extra_certs,
- pkix_validation_store);
- if (! pkix_validation_chain) {
- return s;
- }
- if (s == LDNS_STATUS_OK) {
- if (offset == -1) {
- offset = 0;
- }
- s = ldns_dane_get_nth_cert_from_validation_chain(
- selected_cert, pkix_validation_chain,
- offset, true);
- }
- sk_X509_pop_free(pkix_validation_chain, X509_free);
- return s;
- break;
-
-
- case LDNS_TLSA_USAGE_SERVICE_CERTIFICATE_CONSTRAINT:
-
- *selected_cert = cert;
- return ldns_dane_pkix_validate(cert, extra_certs,
- pkix_validation_store);
- break;
-
-
- case LDNS_TLSA_USAGE_TRUST_ANCHOR_ASSERTION:
-
- if (offset == -1) {
- s = ldns_dane_pkix_get_last_self_signed(
- selected_cert, cert, extra_certs);
- return s;
- } else {
- s = ldns_dane_pkix_get_chain(
- &pkix_validation_chain,
- cert, extra_certs);
- if (s == LDNS_STATUS_OK) {
- s =
- ldns_dane_get_nth_cert_from_validation_chain(
- selected_cert, pkix_validation_chain,
- offset, false);
- } else if (! pkix_validation_chain) {
- return s;
- }
- sk_X509_pop_free(pkix_validation_chain, X509_free);
- return s;
- }
- break;
-
-
- case LDNS_TLSA_USAGE_DOMAIN_ISSUED_CERTIFICATE:
-
- *selected_cert = cert;
- return LDNS_STATUS_OK;
- break;
-
- default:
- return LDNS_STATUS_DANE_UNKNOWN_CERTIFICATE_USAGE;
- break;
- }
-}
-
-
-ldns_status
-ldns_dane_create_tlsa_rr(ldns_rr** tlsa,
- ldns_tlsa_certificate_usage certificate_usage,
- ldns_tlsa_selector selector,
- ldns_tlsa_matching_type matching_type,
- X509* cert)
-{
- ldns_rdf* rdf;
- ldns_status s;
-
- assert(tlsa != NULL);
- assert(cert != NULL);
-
- /* create rr */
- *tlsa = ldns_rr_new_frm_type(LDNS_RR_TYPE_TLSA);
- if (*tlsa == NULL) {
- return LDNS_STATUS_MEM_ERR;
- }
-
- rdf = ldns_native2rdf_int8(LDNS_RDF_TYPE_INT8,
- (uint8_t)certificate_usage);
- if (rdf == NULL) {
- goto memerror;
- }
- (void) ldns_rr_set_rdf(*tlsa, rdf, 0);
-
- rdf = ldns_native2rdf_int8(LDNS_RDF_TYPE_INT8, (uint8_t)selector);
- if (rdf == NULL) {
- goto memerror;
- }
- (void) ldns_rr_set_rdf(*tlsa, rdf, 1);
-
- rdf = ldns_native2rdf_int8(LDNS_RDF_TYPE_INT8, (uint8_t)matching_type);
- if (rdf == NULL) {
- goto memerror;
- }
- (void) ldns_rr_set_rdf(*tlsa, rdf, 2);
-
- s = ldns_dane_cert2rdf(&rdf, cert, selector, matching_type);
- if (s == LDNS_STATUS_OK) {
- (void) ldns_rr_set_rdf(*tlsa, rdf, 3);
- return LDNS_STATUS_OK;
- }
- ldns_rr_free(*tlsa);
- *tlsa = NULL;
- return s;
-
-memerror:
- ldns_rr_free(*tlsa);
- *tlsa = NULL;
- return LDNS_STATUS_MEM_ERR;
-}
-
-
-#ifdef USE_DANE_VERIFY
-/* Return tlsas that actually are TLSA resource records with known values
- * for the Certificate usage, Selector and Matching type rdata fields.
- */
-static ldns_rr_list*
-ldns_dane_filter_unusable_records(const ldns_rr_list* tlsas)
-{
- size_t i;
- ldns_rr_list* r = ldns_rr_list_new();
- ldns_rr* tlsa_rr;
-
- if (! r) {
- return NULL;
- }
- for (i = 0; i < ldns_rr_list_rr_count(tlsas); i++) {
- tlsa_rr = ldns_rr_list_rr(tlsas, i);
- if (ldns_rr_get_type(tlsa_rr) == LDNS_RR_TYPE_TLSA &&
- ldns_rr_rd_count(tlsa_rr) == 4 &&
- ldns_rdf2native_int8(ldns_rr_rdf(tlsa_rr, 0)) <= 3 &&
- ldns_rdf2native_int8(ldns_rr_rdf(tlsa_rr, 1)) <= 1 &&
- ldns_rdf2native_int8(ldns_rr_rdf(tlsa_rr, 2)) <= 2) {
-
- if (! ldns_rr_list_push_rr(r, tlsa_rr)) {
- ldns_rr_list_free(r);
- return NULL;
- }
- }
- }
- return r;
-}
-
-
-#if !defined(USE_DANE_TA_USAGE)
-/* Return whether cert/selector/matching_type matches data.
- */
-static ldns_status
-ldns_dane_match_cert_with_data(X509* cert, ldns_tlsa_selector selector,
- ldns_tlsa_matching_type matching_type, ldns_rdf* data)
-{
- ldns_status s;
- ldns_rdf* match_data;
-
- s = ldns_dane_cert2rdf(&match_data, cert, selector, matching_type);
- if (s == LDNS_STATUS_OK) {
- if (ldns_rdf_compare(data, match_data) != 0) {
- s = LDNS_STATUS_DANE_TLSA_DID_NOT_MATCH;
- }
- ldns_rdf_free(match_data);
- }
- return s;
-}
-
-
-/* Return whether any certificate from the chain with selector/matching_type
- * matches data.
- * ca should be true if the certificate has to be a CA certificate too.
- */
-static ldns_status
-ldns_dane_match_any_cert_with_data(STACK_OF(X509)* chain,
- ldns_tlsa_selector selector,
- ldns_tlsa_matching_type matching_type,
- ldns_rdf* data, bool ca)
-{
- ldns_status s = LDNS_STATUS_DANE_TLSA_DID_NOT_MATCH;
- size_t n, i;
- X509* cert;
-
- n = (size_t)sk_X509_num(chain);
- for (i = 0; i < n; i++) {
- cert = sk_X509_pop(chain);
- if (! cert) {
- s = LDNS_STATUS_SSL_ERR;
- break;
- }
- s = ldns_dane_match_cert_with_data(cert,
- selector, matching_type, data);
- if (ca && s == LDNS_STATUS_OK && ! X509_check_ca(cert)) {
- s = LDNS_STATUS_DANE_NON_CA_CERTIFICATE;
- }
- X509_free(cert);
- if (s != LDNS_STATUS_DANE_TLSA_DID_NOT_MATCH) {
- break;
- }
- /* when s == LDNS_STATUS_DANE_TLSA_DID_NOT_MATCH,
- * try to match the next certificate
- */
- }
- return s;
-}
-#endif /* !defined(USE_DANE_TA_USAGE) */
-#endif /* USE_DANE_VERIFY */
-
-#ifdef USE_DANE_VERIFY
-ldns_status
-ldns_dane_verify_rr(const ldns_rr* tlsa_rr,
- X509* cert, STACK_OF(X509)* extra_certs,
- X509_STORE* pkix_validation_store)
-{
-#if defined(USE_DANE_TA_USAGE)
- SSL_CTX *ssl_ctx = NULL;
- SSL *ssl = NULL;
- X509_STORE_CTX *store_ctx = NULL;
-#else
- STACK_OF(X509)* pkix_validation_chain = NULL;
-#endif
- ldns_status s = LDNS_STATUS_OK;
-
- ldns_tlsa_certificate_usage usage;
- ldns_tlsa_selector selector;
- ldns_tlsa_matching_type mtype;
- ldns_rdf* data;
-
- if (! tlsa_rr || ldns_rr_get_type(tlsa_rr) != LDNS_RR_TYPE_TLSA ||
- ldns_rr_rd_count(tlsa_rr) != 4 ||
- ldns_rdf2native_int8(ldns_rr_rdf(tlsa_rr, 0)) > 3 ||
- ldns_rdf2native_int8(ldns_rr_rdf(tlsa_rr, 1)) > 1 ||
- ldns_rdf2native_int8(ldns_rr_rdf(tlsa_rr, 2)) > 2 ) {
- /* No (usable) TLSA, so regular PKIX validation
- */
- return ldns_dane_pkix_validate(cert, extra_certs,
- pkix_validation_store);
- }
- usage = ldns_rdf2native_int8(ldns_rr_rdf(tlsa_rr, 0));
- selector = ldns_rdf2native_int8(ldns_rr_rdf(tlsa_rr, 1));
- mtype = ldns_rdf2native_int8(ldns_rr_rdf(tlsa_rr, 2));
- data = ldns_rr_rdf(tlsa_rr, 3) ;
-
-#if defined(USE_DANE_TA_USAGE)
- /* Rely on OpenSSL dane functions.
- *
- * OpenSSL does not provide offline dane verification. The dane unit
- * tests within openssl use the undocumented SSL_get0_dane() and
- * X509_STORE_CTX_set0_dane() to convey dane parameters set on SSL and
- * SSL_CTX to a X509_STORE_CTX that can be used to do offline
- * verification. We use these undocumented means with the ldns
- * dane function prototypes which did only offline dane verification.
- */
- if (!(ssl_ctx = SSL_CTX_new(TLS_client_method())))
- s = LDNS_STATUS_MEM_ERR;
-
- else if (SSL_CTX_dane_enable(ssl_ctx) <= 0)
- s = LDNS_STATUS_SSL_ERR;
-
- else if (SSL_CTX_dane_set_flags(
- ssl_ctx, DANE_FLAG_NO_DANE_EE_NAMECHECKS),
- !(ssl = SSL_new(ssl_ctx)))
- s = LDNS_STATUS_MEM_ERR;
-
- else if (SSL_set_connect_state(ssl),
- (SSL_dane_enable(ssl, NULL) <= 0))
- s = LDNS_STATUS_SSL_ERR;
-
- else if (SSL_dane_tlsa_add(ssl, usage, selector, mtype,
- ldns_rdf_data(data), ldns_rdf_size(data)) <= 0)
- s = LDNS_STATUS_SSL_ERR;
-
- else if (!(store_ctx = X509_STORE_CTX_new()))
- s = LDNS_STATUS_MEM_ERR;
-
- else if (!X509_STORE_CTX_init(store_ctx, pkix_validation_store, cert, extra_certs))
- s = LDNS_STATUS_SSL_ERR;
-
- else {
- int ret;
-
- X509_STORE_CTX_set_default(store_ctx,
- SSL_is_server(ssl) ? "ssl_client" : "ssl_server");
- X509_VERIFY_PARAM_set1(X509_STORE_CTX_get0_param(store_ctx),
- SSL_get0_param(ssl));
- X509_STORE_CTX_set0_dane(store_ctx, SSL_get0_dane(ssl));
- if (SSL_get_verify_callback(ssl))
- X509_STORE_CTX_set_verify_cb(store_ctx, SSL_get_verify_callback(ssl));
-
- ret = X509_verify_cert(store_ctx);
- if (!ret) {
- if (X509_STORE_CTX_get_error(store_ctx) == X509_V_ERR_DANE_NO_MATCH)
- s = LDNS_STATUS_DANE_TLSA_DID_NOT_MATCH;
- else
- s = LDNS_STATUS_DANE_PKIX_DID_NOT_VALIDATE;
- }
- X509_STORE_CTX_cleanup(store_ctx);
- }
- if (store_ctx)
- X509_STORE_CTX_free(store_ctx);
- if (ssl)
- SSL_free(ssl);
- if (ssl_ctx)
- SSL_CTX_free(ssl_ctx);
- return s;
-#else
- switch (usage) {
- case LDNS_TLSA_USAGE_CA_CONSTRAINT:
- s = ldns_dane_pkix_validate_and_get_chain(
- &pkix_validation_chain,
- cert, extra_certs,
- pkix_validation_store);
- if (! pkix_validation_chain) {
- return s;
- }
- if (s == LDNS_STATUS_DANE_PKIX_DID_NOT_VALIDATE) {
- /*
- * NO PKIX validation. We still try to match *any*
- * certificate from the chain, so we return
- * TLSA errors over PKIX errors.
- *
- * i.e. When the TLSA matches no certificate, we return
- * TLSA_DID_NOT_MATCH and not PKIX_DID_NOT_VALIDATE
- */
- s = ldns_dane_match_any_cert_with_data(
- pkix_validation_chain,
- selector, mtype, data, true);
-
- if (s == LDNS_STATUS_OK) {
- /* A TLSA record did match a cert from the
- * chain, thus the error is failed PKIX
- * validation.
- */
- s = LDNS_STATUS_DANE_PKIX_DID_NOT_VALIDATE;
- }
-
- } else if (s == LDNS_STATUS_OK) {
- /* PKIX validated, does the TLSA match too? */
-
- s = ldns_dane_match_any_cert_with_data(
- pkix_validation_chain,
- selector, mtype, data, true);
- }
- sk_X509_pop_free(pkix_validation_chain, X509_free);
- return s;
- break;
-
- case LDNS_TLSA_USAGE_SERVICE_CERTIFICATE_CONSTRAINT:
-
- s = ldns_dane_match_cert_with_data(cert,
- selector, mtype, data);
-
- if (s == LDNS_STATUS_OK) {
- return ldns_dane_pkix_validate(cert, extra_certs,
- pkix_validation_store);
- }
- return s;
- break;
-
- case LDNS_TLSA_USAGE_TRUST_ANCHOR_ASSERTION:
-#if 0
- s = ldns_dane_pkix_get_chain(&pkix_validation_chain,
- cert, extra_certs);
-
- if (s == LDNS_STATUS_OK) {
- s = ldns_dane_match_any_cert_with_data(
- pkix_validation_chain,
- selector, mtype, data, false);
-
- } else if (! pkix_validation_chain) {
- return s;
- }
- sk_X509_pop_free(pkix_validation_chain, X509_free);
- return s;
-#else
- return LDNS_STATUS_DANE_NEED_OPENSSL_GE_1_1_FOR_DANE_TA;
-#endif
- break;
-
- case LDNS_TLSA_USAGE_DOMAIN_ISSUED_CERTIFICATE:
- return ldns_dane_match_cert_with_data(cert,
- selector, mtype, data);
- break;
-
- default:
- break;
- }
-#endif
- return LDNS_STATUS_DANE_UNKNOWN_CERTIFICATE_USAGE;
-}
-
-
-ldns_status
-ldns_dane_verify(const ldns_rr_list* tlsas,
- X509* cert, STACK_OF(X509)* extra_certs,
- X509_STORE* pkix_validation_store)
-{
-#if defined(USE_DANE_TA_USAGE)
- SSL_CTX *ssl_ctx = NULL;
- ldns_rdf *basename_rdf = NULL;
- char *basename = NULL;
- SSL *ssl = NULL;
- X509_STORE_CTX *store_ctx = NULL;
-#else
- ldns_status ps;
-#endif
- size_t i;
- ldns_rr* tlsa_rr;
- ldns_rr_list *usable_tlsas;
- ldns_status s = LDNS_STATUS_OK;
-
- assert(cert != NULL);
-
- if (! tlsas || ldns_rr_list_rr_count(tlsas) == 0)
- /* No TLSA's, so regular PKIX validation
- */
- return ldns_dane_pkix_validate(cert, extra_certs,
- pkix_validation_store);
-
-/* To enable name checks (which we don't) */
-#if defined(USE_DANE_TA_USAGE) && 0
- else if (!(basename_rdf = ldns_dname_clone_from(
- ldns_rr_list_owner(tlsas), 2)))
- /* Could nog get DANE base name */
- s = LDNS_STATUS_ERR;
-
- else if (!(basename = ldns_rdf2str(basename_rdf)))
- s = LDNS_STATUS_MEM_ERR;
-
- else if (strlen(basename) && (basename[strlen(basename)-1] = 0))
- s = LDNS_STATUS_ERR; /* Intended to be unreachable */
-#endif
-
- else if (!(usable_tlsas = ldns_dane_filter_unusable_records(tlsas)))
- return LDNS_STATUS_MEM_ERR;
-
- else if (ldns_rr_list_rr_count(usable_tlsas) == 0) {
- /* No TLSA's, so regular PKIX validation
- */
- ldns_rr_list_free(usable_tlsas);
- return ldns_dane_pkix_validate(cert, extra_certs,
- pkix_validation_store);
- }
-#if defined(USE_DANE_TA_USAGE)
- /* Rely on OpenSSL dane functions.
- *
- * OpenSSL does not provide offline dane verification. The dane unit
- * tests within openssl use the undocumented SSL_get0_dane() and
- * X509_STORE_CTX_set0_dane() to convey dane parameters set on SSL and
- * SSL_CTX to a X509_STORE_CTX that can be used to do offline
- * verification. We use these undocumented means with the ldns
- * dane function prototypes which did only offline dane verification.
- */
- if (!(ssl_ctx = SSL_CTX_new(TLS_client_method())))
- s = LDNS_STATUS_MEM_ERR;
-
- else if (SSL_CTX_dane_enable(ssl_ctx) <= 0)
- s = LDNS_STATUS_SSL_ERR;
-
- else if (SSL_CTX_dane_set_flags(
- ssl_ctx, DANE_FLAG_NO_DANE_EE_NAMECHECKS),
- !(ssl = SSL_new(ssl_ctx)))
- s = LDNS_STATUS_MEM_ERR;
-
- else if (SSL_set_connect_state(ssl),
- (SSL_dane_enable(ssl, basename) <= 0))
- s = LDNS_STATUS_SSL_ERR;
-
- else for (i = 0; i < ldns_rr_list_rr_count(usable_tlsas); i++) {
- ldns_tlsa_certificate_usage usage;
- ldns_tlsa_selector selector;
- ldns_tlsa_matching_type mtype;
- ldns_rdf* data;
-
- tlsa_rr = ldns_rr_list_rr(usable_tlsas, i);
- usage = ldns_rdf2native_int8(ldns_rr_rdf(tlsa_rr,0));
- selector= ldns_rdf2native_int8(ldns_rr_rdf(tlsa_rr,1));
- mtype = ldns_rdf2native_int8(ldns_rr_rdf(tlsa_rr,2));
- data = ldns_rr_rdf(tlsa_rr,3) ;
-
- if (SSL_dane_tlsa_add(ssl, usage, selector, mtype,
- ldns_rdf_data(data),
- ldns_rdf_size(data)) <= 0) {
- s = LDNS_STATUS_SSL_ERR;
- break;
- }
- }
- if (!s && !(store_ctx = X509_STORE_CTX_new()))
- s = LDNS_STATUS_MEM_ERR;
-
- else if (!X509_STORE_CTX_init(store_ctx, pkix_validation_store, cert, extra_certs))
- s = LDNS_STATUS_SSL_ERR;
-
- else {
- int ret;
-
- X509_STORE_CTX_set_default(store_ctx,
- SSL_is_server(ssl) ? "ssl_client" : "ssl_server");
- X509_VERIFY_PARAM_set1(X509_STORE_CTX_get0_param(store_ctx),
- SSL_get0_param(ssl));
- X509_STORE_CTX_set0_dane(store_ctx, SSL_get0_dane(ssl));
- if (SSL_get_verify_callback(ssl))
- X509_STORE_CTX_set_verify_cb(store_ctx, SSL_get_verify_callback(ssl));
-
- ret = X509_verify_cert(store_ctx);
- if (!ret) {
- if (X509_STORE_CTX_get_error(store_ctx) == X509_V_ERR_DANE_NO_MATCH)
- s = LDNS_STATUS_DANE_TLSA_DID_NOT_MATCH;
- else
- s = LDNS_STATUS_DANE_PKIX_DID_NOT_VALIDATE;
- }
- X509_STORE_CTX_cleanup(store_ctx);
- }
- if (store_ctx)
- X509_STORE_CTX_free(store_ctx);
- if (ssl)
- SSL_free(ssl);
- if (ssl_ctx)
- SSL_CTX_free(ssl_ctx);
- if (basename)
- free(basename);
- ldns_rdf_deep_free(basename_rdf);
-#else
- for (i = 0; i < ldns_rr_list_rr_count(usable_tlsas); i++) {
- tlsa_rr = ldns_rr_list_rr(usable_tlsas, i);
- ps = s;
- s = ldns_dane_verify_rr(tlsa_rr, cert, extra_certs,
- pkix_validation_store);
-
- if (s != LDNS_STATUS_DANE_TLSA_DID_NOT_MATCH &&
- s != LDNS_STATUS_DANE_PKIX_DID_NOT_VALIDATE &&
- s != LDNS_STATUS_DANE_NEED_OPENSSL_GE_1_1_FOR_DANE_TA) {
-
- /* which would be LDNS_STATUS_OK (match)
- * or some fatal error preventing use from
- * trying the next TLSA record.
- */
- break;
- }
- s = (s > ps ? s : ps); /* pref NEED_OPENSSL_GE_1_1_FOR_DANE_TA
- * over PKIX_DID_NOT_VALIDATE
- * over TLSA_DID_NOT_MATCH
- */
- }
-#endif
- ldns_rr_list_free(usable_tlsas);
- return s;
-}
-#endif /* USE_DANE_VERIFY */
-#endif /* HAVE_SSL */
-#endif /* USE_DANE */
diff --git a/ldns/dname.c b/ldns/dname.c
deleted file mode 100644
index 17afe1d..0000000
--- a/ldns/dname.c
+++ /dev/null
@@ -1,602 +0,0 @@
-/*
- * dname.c
- *
- * dname specific rdata implementations
- * A dname is a rdf structure with type LDNS_RDF_TYPE_DNAME
- * It is not a /real/ type! All function must therefor check
- * for LDNS_RDF_TYPE_DNAME.
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2004-2006
- *
- * See the file LICENSE for the license
- */
-
-#include <ldns/config.h>
-
-#include <ldns/ldns.h>
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-/* Returns whether the last label in the name is a root label (a empty label).
- * Note that it is not enough to just test the last character to be 0,
- * because it may be part of the last label itself.
- */
-static bool
-ldns_dname_last_label_is_root_label(const ldns_rdf* dname)
-{
- size_t src_pos;
- size_t len = 0;
-
- for (src_pos = 0; src_pos < ldns_rdf_size(dname); src_pos += len + 1) {
- len = ldns_rdf_data(dname)[src_pos];
- }
- assert(src_pos == ldns_rdf_size(dname));
-
- return src_pos > 0 && len == 0;
-}
-
-ldns_rdf *
-ldns_dname_cat_clone(const ldns_rdf *rd1, const ldns_rdf *rd2)
-{
- ldns_rdf *new;
- uint16_t new_size;
- uint8_t *buf;
- uint16_t left_size;
-
- if (ldns_rdf_get_type(rd1) != LDNS_RDF_TYPE_DNAME ||
- ldns_rdf_get_type(rd2) != LDNS_RDF_TYPE_DNAME) {
- return NULL;
- }
-
- /* remove root label if it is present at the end of the left
- * rd, by reducing the size with 1
- */
- left_size = ldns_rdf_size(rd1);
- if (ldns_dname_last_label_is_root_label(rd1)) {
- left_size--;
- }
-
- /* we overwrite the nullbyte of rd1 */
- new_size = left_size + ldns_rdf_size(rd2);
- buf = LDNS_XMALLOC(uint8_t, new_size);
- if (!buf) {
- return NULL;
- }
-
- /* put the two dname's after each other */
- memcpy(buf, ldns_rdf_data(rd1), left_size);
- memcpy(buf + left_size, ldns_rdf_data(rd2), ldns_rdf_size(rd2));
-
- new = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_DNAME, new_size, buf);
-
- LDNS_FREE(buf);
- return new;
-}
-
-ldns_status
-ldns_dname_cat(ldns_rdf *rd1, const ldns_rdf *rd2)
-{
- uint16_t left_size;
- uint16_t size;
- uint8_t* newd;
-
- if (ldns_rdf_get_type(rd1) != LDNS_RDF_TYPE_DNAME ||
- ldns_rdf_get_type(rd2) != LDNS_RDF_TYPE_DNAME) {
- return LDNS_STATUS_ERR;
- }
-
- /* remove root label if it is present at the end of the left
- * rd, by reducing the size with 1
- */
- left_size = ldns_rdf_size(rd1);
- if (ldns_dname_last_label_is_root_label(rd1)) {
- left_size--;
- }
-
- size = left_size + ldns_rdf_size(rd2);
- newd = LDNS_XREALLOC(ldns_rdf_data(rd1), uint8_t, size);
- if(!newd) {
- return LDNS_STATUS_MEM_ERR;
- }
-
- ldns_rdf_set_data(rd1, newd);
- memcpy(ldns_rdf_data(rd1) + left_size, ldns_rdf_data(rd2),
- ldns_rdf_size(rd2));
- ldns_rdf_set_size(rd1, size);
-
- return LDNS_STATUS_OK;
-}
-
-ldns_rdf*
-ldns_dname_reverse(const ldns_rdf *dname)
-{
- size_t rd_size;
- uint8_t* buf;
- ldns_rdf* new;
- size_t src_pos;
- size_t len ;
-
- assert(ldns_rdf_get_type(dname) == LDNS_RDF_TYPE_DNAME);
-
- rd_size = ldns_rdf_size(dname);
- buf = LDNS_XMALLOC(uint8_t, rd_size);
- if (! buf) {
- return NULL;
- }
- new = ldns_rdf_new(LDNS_RDF_TYPE_DNAME, rd_size, buf);
- if (! new) {
- LDNS_FREE(buf);
- return NULL;
- }
-
- /* If dname ends in a root label, the reverse should too.
- */
- if (ldns_dname_last_label_is_root_label(dname)) {
- buf[rd_size - 1] = 0;
- rd_size -= 1;
- }
- for (src_pos = 0; src_pos < rd_size; src_pos += len + 1) {
- len = ldns_rdf_data(dname)[src_pos];
- memcpy(&buf[rd_size - src_pos - len - 1],
- &ldns_rdf_data(dname)[src_pos], len + 1);
- }
- return new;
-}
-
-ldns_rdf *
-ldns_dname_clone_from(const ldns_rdf *d, uint16_t n)
-{
- uint8_t *data;
- uint8_t label_size;
- size_t data_size;
-
- if (!d ||
- ldns_rdf_get_type(d) != LDNS_RDF_TYPE_DNAME ||
- ldns_dname_label_count(d) < n) {
- return NULL;
- }
-
- data = ldns_rdf_data(d);
- data_size = ldns_rdf_size(d);
- while (n > 0) {
- label_size = data[0] + 1;
- data += label_size;
- if (data_size < label_size) {
- /* this label is very broken */
- return NULL;
- }
- data_size -= label_size;
- n--;
- }
-
- return ldns_dname_new_frm_data(data_size, data);
-}
-
-ldns_rdf *
-ldns_dname_left_chop(const ldns_rdf *d)
-{
- uint8_t label_pos;
- ldns_rdf *chop;
-
- if (!d) {
- return NULL;
- }
-
- if (ldns_rdf_get_type(d) != LDNS_RDF_TYPE_DNAME) {
- return NULL;
- }
- if (ldns_dname_label_count(d) == 0) {
- /* root label */
- return NULL;
- }
- /* 05blaat02nl00 */
- label_pos = ldns_rdf_data(d)[0];
-
- chop = ldns_dname_new_frm_data(ldns_rdf_size(d) - label_pos - 1,
- ldns_rdf_data(d) + label_pos + 1);
- return chop;
-}
-
-uint8_t
-ldns_dname_label_count(const ldns_rdf *r)
-{
- uint16_t src_pos;
- uint16_t len;
- uint8_t i;
- size_t r_size;
-
- if (!r) {
- return 0;
- }
-
- i = 0;
- src_pos = 0;
- r_size = ldns_rdf_size(r);
-
- if (ldns_rdf_get_type(r) != LDNS_RDF_TYPE_DNAME) {
- return 0;
- } else {
- len = ldns_rdf_data(r)[src_pos]; /* start of the label */
-
- /* single root label */
- if (1 == r_size) {
- return 0;
- } else {
- while ((len > 0) && src_pos < r_size) {
- src_pos++;
- src_pos += len;
- len = ldns_rdf_data(r)[src_pos];
- i++;
- }
- }
- }
- return i;
-}
-
-ldns_rdf *
-ldns_dname_new(uint16_t s, void *d)
-{
- ldns_rdf *rd;
-
- if (!s || !d) {
- return NULL;
- }
- rd = LDNS_MALLOC(ldns_rdf);
- if (!rd) {
- return NULL;
- }
- ldns_rdf_set_size(rd, s);
- ldns_rdf_set_type(rd, LDNS_RDF_TYPE_DNAME);
- ldns_rdf_set_data(rd, d);
- return rd;
-}
-
-ldns_rdf *
-ldns_dname_new_frm_str(const char *str)
-{
- return ldns_rdf_new_frm_str(LDNS_RDF_TYPE_DNAME, str);
-}
-
-ldns_rdf *
-ldns_dname_new_frm_data(uint16_t size, const void *data)
-{
- return ldns_rdf_new_frm_data(LDNS_RDF_TYPE_DNAME, size, data);
-}
-
-void
-ldns_dname2canonical(const ldns_rdf *rd)
-{
- uint8_t *rdd;
- uint16_t i;
-
- if (ldns_rdf_get_type(rd) != LDNS_RDF_TYPE_DNAME) {
- return;
- }
-
- rdd = (uint8_t*)ldns_rdf_data(rd);
- for (i = 0; i < ldns_rdf_size(rd); i++, rdd++) {
- *rdd = (uint8_t)LDNS_DNAME_NORMALIZE((int)*rdd);
- }
-}
-
-bool
-ldns_dname_is_subdomain(const ldns_rdf *sub, const ldns_rdf *parent)
-{
- uint8_t sub_lab;
- uint8_t par_lab;
- int8_t i, j;
- ldns_rdf *tmp_sub = NULL;
- ldns_rdf *tmp_par = NULL;
- ldns_rdf *sub_clone;
- ldns_rdf *parent_clone;
- bool result = true;
-
- if (ldns_rdf_get_type(sub) != LDNS_RDF_TYPE_DNAME ||
- ldns_rdf_get_type(parent) != LDNS_RDF_TYPE_DNAME ||
- ldns_rdf_compare(sub, parent) == 0) {
- return false;
- }
-
- /* would be nicer if we do not have to clone... */
- sub_clone = ldns_dname_clone_from(sub, 0);
- parent_clone = ldns_dname_clone_from(parent, 0);
- ldns_dname2canonical(sub_clone);
- ldns_dname2canonical(parent_clone);
-
- sub_lab = ldns_dname_label_count(sub_clone);
- par_lab = ldns_dname_label_count(parent_clone);
-
- /* if sub sits above parent, it cannot be a child/sub domain */
- if (sub_lab < par_lab) {
- result = false;
- } else {
- /* check all labels the from the parent labels, from right to left.
- * When they /all/ match we have found a subdomain
- */
- j = sub_lab - 1; /* we count from zero, thank you */
- for (i = par_lab -1; i >= 0; i--) {
- tmp_sub = ldns_dname_label(sub_clone, j);
- tmp_par = ldns_dname_label(parent_clone, i);
- if (!tmp_sub || !tmp_par) {
- /* deep free does null check */
- ldns_rdf_deep_free(tmp_sub);
- ldns_rdf_deep_free(tmp_par);
- result = false;
- break;
- }
-
- if (ldns_rdf_compare(tmp_sub, tmp_par) != 0) {
- /* they are not equal */
- ldns_rdf_deep_free(tmp_sub);
- ldns_rdf_deep_free(tmp_par);
- result = false;
- break;
- }
- ldns_rdf_deep_free(tmp_sub);
- ldns_rdf_deep_free(tmp_par);
- j--;
- }
- }
- ldns_rdf_deep_free(sub_clone);
- ldns_rdf_deep_free(parent_clone);
- return result;
-}
-
-int
-ldns_dname_compare(const ldns_rdf *dname1, const ldns_rdf *dname2)
-{
- size_t lc1, lc2, lc1f, lc2f;
- size_t i;
- int result = 0;
- uint8_t *lp1, *lp2;
-
- /* see RFC4034 for this algorithm */
- /* this algorithm assumes the names are normalized to case */
-
- /* only when both are not NULL we can say anything about them */
- if (!dname1 && !dname2) {
- return 0;
- }
- if (!dname1 || !dname2) {
- return -1;
- }
- /* asserts must happen later as we are looking in the
- * dname, which could be NULL. But this case is handled
- * above
- */
- assert(ldns_rdf_get_type(dname1) == LDNS_RDF_TYPE_DNAME);
- assert(ldns_rdf_get_type(dname2) == LDNS_RDF_TYPE_DNAME);
-
- lc1 = ldns_dname_label_count(dname1);
- lc2 = ldns_dname_label_count(dname2);
-
- if (lc1 == 0 && lc2 == 0) {
- return 0;
- }
- if (lc1 == 0) {
- return -1;
- }
- if (lc2 == 0) {
- return 1;
- }
- lc1--;
- lc2--;
- /* we start at the last label */
- while (true) {
- /* find the label first */
- lc1f = lc1;
- lp1 = ldns_rdf_data(dname1);
- while (lc1f > 0) {
- lp1 += *lp1 + 1;
- lc1f--;
- }
-
- /* and find the other one */
- lc2f = lc2;
- lp2 = ldns_rdf_data(dname2);
- while (lc2f > 0) {
- lp2 += *lp2 + 1;
- lc2f--;
- }
-
- /* now check the label character for character. */
- for (i = 1; i < (size_t)(*lp1 + 1); i++) {
- if (i > *lp2) {
- /* apparently label 1 is larger */
- result = 1;
- goto done;
- }
- if (LDNS_DNAME_NORMALIZE((int) *(lp1 + i)) <
- LDNS_DNAME_NORMALIZE((int) *(lp2 + i))) {
- result = -1;
- goto done;
- } else if (LDNS_DNAME_NORMALIZE((int) *(lp1 + i)) >
- LDNS_DNAME_NORMALIZE((int) *(lp2 + i))) {
- result = 1;
- goto done;
- }
- }
- if (*lp1 < *lp2) {
- /* apparently label 2 is larger */
- result = -1;
- goto done;
- }
- if (lc1 == 0 && lc2 > 0) {
- result = -1;
- goto done;
- } else if (lc1 > 0 && lc2 == 0) {
- result = 1;
- goto done;
- } else if (lc1 == 0 && lc2 == 0) {
- result = 0;
- goto done;
- }
- lc1--;
- lc2--;
- }
-
- done:
- return result;
-}
-
-int
-ldns_dname_is_wildcard(const ldns_rdf* dname)
-{
- return ( ldns_dname_label_count(dname) > 0 &&
- ldns_rdf_data(dname)[0] == 1 &&
- ldns_rdf_data(dname)[1] == '*');
-}
-
-int
-ldns_dname_match_wildcard(const ldns_rdf *dname, const ldns_rdf *wildcard)
-{
- ldns_rdf *wc_chopped;
- int result;
- /* check whether it really is a wildcard */
- if (ldns_dname_is_wildcard(wildcard)) {
- /* ok, so the dname needs to be a subdomain of the wildcard
- * without the *
- */
- wc_chopped = ldns_dname_left_chop(wildcard);
- result = (int) ldns_dname_is_subdomain(dname, wc_chopped);
- ldns_rdf_deep_free(wc_chopped);
- } else {
- result = (ldns_dname_compare(dname, wildcard) == 0);
- }
- return result;
-}
-
-/* nsec test: does prev <= middle < next
- * -1 = yes
- * 0 = error/can't tell
- * 1 = no
- */
-int
-ldns_dname_interval(const ldns_rdf *prev, const ldns_rdf *middle,
- const ldns_rdf *next)
-{
- int prev_check, next_check;
-
- assert(ldns_rdf_get_type(prev) == LDNS_RDF_TYPE_DNAME);
- assert(ldns_rdf_get_type(middle) == LDNS_RDF_TYPE_DNAME);
- assert(ldns_rdf_get_type(next) == LDNS_RDF_TYPE_DNAME);
-
- prev_check = ldns_dname_compare(prev, middle);
- next_check = ldns_dname_compare(middle, next);
- /* <= next. This cannot be the case for nsec, because then we would
- * have gotten the nsec of next...
- */
- if (next_check == 0) {
- return 0;
- }
-
- /* <= */
- if ((prev_check == -1 || prev_check == 0) &&
- /* < */
- next_check == -1) {
- return -1;
- } else {
- return 1;
- }
-}
-
-
-bool
-ldns_dname_str_absolute(const char *dname_str)
-{
- const char* s;
- if(dname_str && strcmp(dname_str, ".") == 0)
- return 1;
- if(!dname_str || strlen(dname_str) < 2)
- return 0;
- if(dname_str[strlen(dname_str) - 1] != '.')
- return 0;
- if(dname_str[strlen(dname_str) - 2] != '\\')
- return 1; /* ends in . and no \ before it */
- /* so we have the case of ends in . and there is \ before it */
- for(s=dname_str; *s; s++) {
- if(*s == '\\') {
- if(s[1] && s[2] && s[3] /* check length */
- && isdigit((unsigned char)s[1])
- && isdigit((unsigned char)s[2])
- && isdigit((unsigned char)s[3]))
- s += 3;
- else if(!s[1] || isdigit((unsigned char)s[1])) /* escape of nul,0-9 */
- return 0; /* parse error */
- else s++; /* another character escaped */
- }
- else if(!*(s+1) && *s == '.')
- return 1; /* trailing dot, unescaped */
- }
- return 0;
-}
-
-bool
-ldns_dname_absolute(const ldns_rdf *rdf)
-{
- char *str = ldns_rdf2str(rdf);
- if (str) {
- bool r = ldns_dname_str_absolute(str);
- LDNS_FREE(str);
- return r;
- }
- return false;
-}
-
-ldns_rdf *
-ldns_dname_label(const ldns_rdf *rdf, uint8_t labelpos)
-{
- uint8_t labelcnt;
- uint16_t src_pos;
- uint16_t len;
- ldns_rdf *tmpnew;
- size_t s;
- uint8_t *data;
-
- if (ldns_rdf_get_type(rdf) != LDNS_RDF_TYPE_DNAME) {
- return NULL;
- }
-
- labelcnt = 0;
- src_pos = 0;
- s = ldns_rdf_size(rdf);
-
- len = ldns_rdf_data(rdf)[src_pos]; /* label start */
- while ((len > 0) && src_pos < s) {
- if (labelcnt == labelpos) {
- /* found our label */
- data = LDNS_XMALLOC(uint8_t, len + 2);
- if (!data) {
- return NULL;
- }
- memcpy(data, ldns_rdf_data(rdf) + src_pos, len + 1);
- data[len + 2 - 1] = 0;
-
- tmpnew = ldns_rdf_new( LDNS_RDF_TYPE_DNAME
- , len + 2, data);
- if (!tmpnew) {
- LDNS_FREE(data);
- return NULL;
- }
- return tmpnew;
- }
- src_pos++;
- src_pos += len;
- len = ldns_rdf_data(rdf)[src_pos];
- labelcnt++;
- }
- return NULL;
-}
diff --git a/ldns/dnssec.c b/ldns/dnssec.c
deleted file mode 100644
index 52c35ee..0000000
--- a/ldns/dnssec.c
+++ /dev/null
@@ -1,1953 +0,0 @@
-/*
- * dnssec.c
- *
- * contains the cryptographic function needed for DNSSEC in ldns
- * The crypto library used is openssl
- *
- * (c) NLnet Labs, 2004-2008
- *
- * See the file LICENSE for the license
- */
-
-#include <ldns/config.h>
-
-#include <ldns/ldns.h>
-#include <ldns/dnssec.h>
-
-#include <strings.h>
-#include <time.h>
-
-#ifdef HAVE_SSL
-#include <openssl/ssl.h>
-#include <openssl/evp.h>
-#include <openssl/rand.h>
-#include <openssl/err.h>
-#include <openssl/md5.h>
-#include <openssl/bn.h>
-#include <openssl/rsa.h>
-#ifdef USE_DSA
-#include <openssl/dsa.h>
-#endif
-#endif
-
-ldns_rr *
-ldns_dnssec_get_rrsig_for_name_and_type(const ldns_rdf *name,
- const ldns_rr_type type,
- const ldns_rr_list *rrs)
-{
- size_t i;
- ldns_rr *candidate;
-
- if (!name || !rrs) {
- return NULL;
- }
-
- for (i = 0; i < ldns_rr_list_rr_count(rrs); i++) {
- candidate = ldns_rr_list_rr(rrs, i);
- if (ldns_rr_get_type(candidate) == LDNS_RR_TYPE_RRSIG) {
- if (ldns_dname_compare(ldns_rr_owner(candidate),
- name) == 0 &&
- ldns_rdf2rr_type(ldns_rr_rrsig_typecovered(candidate))
- == type
- ) {
- return candidate;
- }
- }
- }
-
- return NULL;
-}
-
-ldns_rr *
-ldns_dnssec_get_dnskey_for_rrsig(const ldns_rr *rrsig,
- const ldns_rr_list *rrs)
-{
- size_t i;
- ldns_rr *candidate;
-
- if (!rrsig || !rrs) {
- return NULL;
- }
-
- for (i = 0; i < ldns_rr_list_rr_count(rrs); i++) {
- candidate = ldns_rr_list_rr(rrs, i);
- if (ldns_rr_get_type(candidate) == LDNS_RR_TYPE_DNSKEY) {
- if (ldns_dname_compare(ldns_rr_owner(candidate),
- ldns_rr_rrsig_signame(rrsig)) == 0 &&
- ldns_rdf2native_int16(ldns_rr_rrsig_keytag(rrsig)) ==
- ldns_calc_keytag(candidate)
- ) {
- return candidate;
- }
- }
- }
-
- return NULL;
-}
-
-ldns_rdf *
-ldns_nsec_get_bitmap(const ldns_rr *nsec) {
- if (ldns_rr_get_type(nsec) == LDNS_RR_TYPE_NSEC) {
- return ldns_rr_rdf(nsec, 1);
- } else if (ldns_rr_get_type(nsec) == LDNS_RR_TYPE_NSEC3) {
- return ldns_rr_rdf(nsec, 5);
- } else {
- return NULL;
- }
-}
-
-/*return the owner name of the closest encloser for name from the list of rrs */
-/* this is NOT the hash, but the original name! */
-ldns_rdf *
-ldns_dnssec_nsec3_closest_encloser(const ldns_rdf *qname,
- ATTR_UNUSED(ldns_rr_type qtype),
- const ldns_rr_list *nsec3s)
-{
- /* remember parameters, they must match */
- uint8_t algorithm;
- uint32_t iterations;
- uint8_t salt_length;
- uint8_t *salt;
-
- ldns_rdf *sname, *hashed_sname, *tmp;
- bool flag;
-
- bool exact_match_found;
- bool in_range_found;
-
- ldns_status status;
- ldns_rdf *zone_name;
-
- size_t nsec_i;
- ldns_rr *nsec;
- ldns_rdf *result = NULL;
-
- if (!qname || !nsec3s || ldns_rr_list_rr_count(nsec3s) < 1) {
- return NULL;
- }
-
- nsec = ldns_rr_list_rr(nsec3s, 0);
- algorithm = ldns_nsec3_algorithm(nsec);
- salt_length = ldns_nsec3_salt_length(nsec);
- salt = ldns_nsec3_salt_data(nsec);
- iterations = ldns_nsec3_iterations(nsec);
-
- sname = ldns_rdf_clone(qname);
-
- flag = false;
-
- zone_name = ldns_dname_left_chop(ldns_rr_owner(nsec));
-
- /* algorithm from nsec3-07 8.3 */
- while (ldns_dname_label_count(sname) > 0) {
- exact_match_found = false;
- in_range_found = false;
-
- hashed_sname = ldns_nsec3_hash_name(sname,
- algorithm,
- iterations,
- salt_length,
- salt);
-
- status = ldns_dname_cat(hashed_sname, zone_name);
- if(status != LDNS_STATUS_OK) {
- LDNS_FREE(salt);
- ldns_rdf_deep_free(zone_name);
- ldns_rdf_deep_free(sname);
- ldns_rdf_deep_free(hashed_sname);
- return NULL;
- }
-
- for (nsec_i = 0; nsec_i < ldns_rr_list_rr_count(nsec3s); nsec_i++) {
- nsec = ldns_rr_list_rr(nsec3s, nsec_i);
-
- /* check values of iterations etc! */
-
- /* exact match? */
- if (ldns_dname_compare(ldns_rr_owner(nsec), hashed_sname) == 0) {
- exact_match_found = true;
- } else if (ldns_nsec_covers_name(nsec, hashed_sname)) {
- in_range_found = true;
- }
-
- }
- if (!exact_match_found && in_range_found) {
- flag = true;
- } else if (exact_match_found && flag) {
- result = ldns_rdf_clone(sname);
- /* RFC 5155: 8.3. 2.** "The proof is complete" */
- ldns_rdf_deep_free(hashed_sname);
- goto done;
- } else if (exact_match_found && !flag) {
- /* error! */
- ldns_rdf_deep_free(hashed_sname);
- goto done;
- } else {
- flag = false;
- }
-
- ldns_rdf_deep_free(hashed_sname);
- tmp = sname;
- sname = ldns_dname_left_chop(sname);
- ldns_rdf_deep_free(tmp);
- }
-
- done:
- LDNS_FREE(salt);
- ldns_rdf_deep_free(zone_name);
- ldns_rdf_deep_free(sname);
-
- return result;
-}
-
-bool
-ldns_dnssec_pkt_has_rrsigs(const ldns_pkt *pkt)
-{
- size_t i;
- for (i = 0; i < ldns_pkt_ancount(pkt); i++) {
- if (ldns_rr_get_type(ldns_rr_list_rr(ldns_pkt_answer(pkt), i)) ==
- LDNS_RR_TYPE_RRSIG) {
- return true;
- }
- }
- for (i = 0; i < ldns_pkt_nscount(pkt); i++) {
- if (ldns_rr_get_type(ldns_rr_list_rr(ldns_pkt_authority(pkt), i)) ==
- LDNS_RR_TYPE_RRSIG) {
- return true;
- }
- }
- return false;
-}
-
-ldns_rr_list *
-ldns_dnssec_pkt_get_rrsigs_for_name_and_type(const ldns_pkt *pkt,
- const ldns_rdf *name,
- ldns_rr_type type)
-{
- uint16_t t_netorder;
- ldns_rr_list *sigs;
- ldns_rr_list *sigs_covered;
- ldns_rdf *rdf_t;
-
- sigs = ldns_pkt_rr_list_by_name_and_type(pkt,
- name,
- LDNS_RR_TYPE_RRSIG,
- LDNS_SECTION_ANY_NOQUESTION
- );
-
- t_netorder = htons(type); /* rdf are in network order! */
- rdf_t = ldns_rdf_new(LDNS_RDF_TYPE_TYPE, LDNS_RDF_SIZE_WORD, &t_netorder);
- sigs_covered = ldns_rr_list_subtype_by_rdf(sigs, rdf_t, 0);
-
- ldns_rdf_free(rdf_t);
- ldns_rr_list_deep_free(sigs);
-
- return sigs_covered;
-
-}
-
-ldns_rr_list *
-ldns_dnssec_pkt_get_rrsigs_for_type(const ldns_pkt *pkt, ldns_rr_type type)
-{
- uint16_t t_netorder;
- ldns_rr_list *sigs;
- ldns_rr_list *sigs_covered;
- ldns_rdf *rdf_t;
-
- sigs = ldns_pkt_rr_list_by_type(pkt,
- LDNS_RR_TYPE_RRSIG,
- LDNS_SECTION_ANY_NOQUESTION
- );
-
- t_netorder = htons(type); /* rdf are in network order! */
- rdf_t = ldns_rdf_new(LDNS_RDF_TYPE_TYPE,
- 2,
- &t_netorder);
- sigs_covered = ldns_rr_list_subtype_by_rdf(sigs, rdf_t, 0);
-
- ldns_rdf_free(rdf_t);
- ldns_rr_list_deep_free(sigs);
-
- return sigs_covered;
-
-}
-
-/* used only on the public key RR */
-uint16_t
-ldns_calc_keytag(const ldns_rr *key)
-{
- uint16_t ac16;
- ldns_buffer *keybuf;
- size_t keysize;
-
- if (!key) {
- return 0;
- }
-
- if (ldns_rr_get_type(key) != LDNS_RR_TYPE_DNSKEY &&
- ldns_rr_get_type(key) != LDNS_RR_TYPE_KEY
- ) {
- return 0;
- }
-
- /* rdata to buf - only put the rdata in a buffer */
- keybuf = ldns_buffer_new(LDNS_MIN_BUFLEN); /* grows */
- if (!keybuf) {
- return 0;
- }
- (void)ldns_rr_rdata2buffer_wire(keybuf, key);
- /* the current pos in the buffer is the keysize */
- keysize= ldns_buffer_position(keybuf);
-
- ac16 = ldns_calc_keytag_raw(ldns_buffer_begin(keybuf), keysize);
- ldns_buffer_free(keybuf);
- return ac16;
-}
-
-uint16_t ldns_calc_keytag_raw(const uint8_t* key, size_t keysize)
-{
- unsigned int i;
- uint32_t ac32;
- uint16_t ac16;
-
- if(keysize < 4) {
- return 0;
- }
- /* look at the algorithm field, copied from 2535bis */
- if (key[3] == LDNS_RSAMD5) {
- ac16 = 0;
- if (keysize > 4) {
- memmove(&ac16, key + keysize - 3, 2);
- }
- ac16 = ntohs(ac16);
- return (uint16_t) ac16;
- } else {
- ac32 = 0;
- for (i = 0; (size_t)i < keysize; ++i) {
- ac32 += (i & 1) ? key[i] : key[i] << 8;
- }
- ac32 += (ac32 >> 16) & 0xFFFF;
- return (uint16_t) (ac32 & 0xFFFF);
- }
-}
-
-#ifdef HAVE_SSL
-DSA *
-ldns_key_buf2dsa(const ldns_buffer *key)
-{
- return ldns_key_buf2dsa_raw((const unsigned char*)ldns_buffer_begin(key),
- ldns_buffer_position(key));
-}
-
-DSA *
-ldns_key_buf2dsa_raw(const unsigned char* key, size_t len)
-{
- uint8_t T;
- uint16_t length;
- uint16_t offset;
- DSA *dsa;
- BIGNUM *Q; BIGNUM *P;
- BIGNUM *G; BIGNUM *Y;
-
- if(len == 0)
- return NULL;
- T = (uint8_t)key[0];
- length = (64 + T * 8);
- offset = 1;
-
- if (T > 8) {
- return NULL;
- }
- if(len < (size_t)1 + SHA_DIGEST_LENGTH + 3*length)
- return NULL;
-
- Q = BN_bin2bn(key+offset, SHA_DIGEST_LENGTH, NULL);
- offset += SHA_DIGEST_LENGTH;
-
- P = BN_bin2bn(key+offset, (int)length, NULL);
- offset += length;
-
- G = BN_bin2bn(key+offset, (int)length, NULL);
- offset += length;
-
- Y = BN_bin2bn(key+offset, (int)length, NULL);
-
- /* create the key and set its properties */
- if(!Q || !P || !G || !Y || !(dsa = DSA_new())) {
- BN_free(Q);
- BN_free(P);
- BN_free(G);
- BN_free(Y);
- return NULL;
- }
-#if OPENSSL_VERSION_NUMBER < 0x10100000 || defined(HAVE_LIBRESSL)
-#ifndef S_SPLINT_S
- dsa->p = P;
- dsa->q = Q;
- dsa->g = G;
- dsa->pub_key = Y;
-#endif /* splint */
-#else /* OPENSSL_VERSION_NUMBER */
- if (!DSA_set0_pqg(dsa, P, Q, G)) {
- /* QPG not yet attached, need to free */
- BN_free(Q);
- BN_free(P);
- BN_free(G);
-
- DSA_free(dsa);
- BN_free(Y);
- return NULL;
- }
- if (!DSA_set0_key(dsa, Y, NULL)) {
- /* QPG attached, cleaned up by DSA_fre() */
- DSA_free(dsa);
- BN_free(Y);
- return NULL;
- }
-#endif /* OPENSSL_VERSION_NUMBER */
- return dsa;
-}
-
-RSA *
-ldns_key_buf2rsa(const ldns_buffer *key)
-{
- return ldns_key_buf2rsa_raw((const unsigned char*)ldns_buffer_begin(key),
- ldns_buffer_position(key));
-}
-
-RSA *
-ldns_key_buf2rsa_raw(const unsigned char* key, size_t len)
-{
- uint16_t offset;
- uint16_t exp;
- uint16_t int16;
- RSA *rsa;
- BIGNUM *modulus;
- BIGNUM *exponent;
-
- if (len == 0)
- return NULL;
- if (key[0] == 0) {
- if(len < 3)
- return NULL;
- /* need some smart comment here XXX*/
- /* the exponent is too large so it's places
- * futher...???? */
- memmove(&int16, key+1, 2);
- exp = ntohs(int16);
- offset = 3;
- } else {
- exp = key[0];
- offset = 1;
- }
-
- /* key length at least one */
- if(len < (size_t)offset + exp + 1)
- return NULL;
-
- /* Exponent */
- exponent = BN_new();
- if(!exponent) return NULL;
- (void) BN_bin2bn(key+offset, (int)exp, exponent);
- offset += exp;
-
- /* Modulus */
- modulus = BN_new();
- if(!modulus) {
- BN_free(exponent);
- return NULL;
- }
- /* length of the buffer must match the key length! */
- (void) BN_bin2bn(key+offset, (int)(len - offset), modulus);
-
- rsa = RSA_new();
- if(!rsa) {
- BN_free(exponent);
- BN_free(modulus);
- return NULL;
- }
-#if OPENSSL_VERSION_NUMBER < 0x10100000 || defined(HAVE_LIBRESSL)
-#ifndef S_SPLINT_S
- rsa->n = modulus;
- rsa->e = exponent;
-#endif /* splint */
-#else /* OPENSSL_VERSION_NUMBER */
- if (!RSA_set0_key(rsa, modulus, exponent, NULL)) {
- BN_free(exponent);
- BN_free(modulus);
- RSA_free(rsa);
- return NULL;
- }
-#endif /* OPENSSL_VERSION_NUMBER */
-
- return rsa;
-}
-
-int
-ldns_digest_evp(const unsigned char* data, unsigned int len, unsigned char* dest,
- const EVP_MD* md)
-{
- EVP_MD_CTX* ctx;
- ctx = EVP_MD_CTX_create();
- if(!ctx)
- return false;
- if(!EVP_DigestInit_ex(ctx, md, NULL) ||
- !EVP_DigestUpdate(ctx, data, len) ||
- !EVP_DigestFinal_ex(ctx, dest, NULL)) {
- EVP_MD_CTX_destroy(ctx);
- return false;
- }
- EVP_MD_CTX_destroy(ctx);
- return true;
-}
-#endif /* HAVE_SSL */
-
-ldns_rr *
-ldns_key_rr2ds(const ldns_rr *key, ldns_hash h)
-{
- ldns_rdf *tmp;
- ldns_rr *ds;
- uint16_t keytag;
- uint8_t sha1hash;
- uint8_t *digest;
- ldns_buffer *data_buf;
-#ifdef USE_GOST
- const EVP_MD* md = NULL;
-#endif
-
- if (ldns_rr_get_type(key) != LDNS_RR_TYPE_DNSKEY) {
- return NULL;
- }
-
- ds = ldns_rr_new();
- if (!ds) {
- return NULL;
- }
- ldns_rr_set_type(ds, LDNS_RR_TYPE_DS);
- ldns_rr_set_owner(ds, ldns_rdf_clone(
- ldns_rr_owner(key)));
- ldns_rr_set_ttl(ds, ldns_rr_ttl(key));
- ldns_rr_set_class(ds, ldns_rr_get_class(key));
-
- switch(h) {
- default:
- case LDNS_SHA1:
- digest = LDNS_XMALLOC(uint8_t, LDNS_SHA1_DIGEST_LENGTH);
- if (!digest) {
- ldns_rr_free(ds);
- return NULL;
- }
- break;
- case LDNS_SHA256:
- digest = LDNS_XMALLOC(uint8_t, LDNS_SHA256_DIGEST_LENGTH);
- if (!digest) {
- ldns_rr_free(ds);
- return NULL;
- }
- break;
- case LDNS_HASH_GOST:
-#ifdef USE_GOST
- (void)ldns_key_EVP_load_gost_id();
- md = EVP_get_digestbyname("md_gost94");
- if(!md) {
- ldns_rr_free(ds);
- return NULL;
- }
- digest = LDNS_XMALLOC(uint8_t, EVP_MD_size(md));
- if (!digest) {
- ldns_rr_free(ds);
- return NULL;
- }
- break;
-#else
- /* not implemented */
- ldns_rr_free(ds);
- return NULL;
-#endif
- case LDNS_SHA384:
-#ifdef USE_ECDSA
- digest = LDNS_XMALLOC(uint8_t, SHA384_DIGEST_LENGTH);
- if (!digest) {
- ldns_rr_free(ds);
- return NULL;
- }
- break;
-#else
- /* not implemented */
- ldns_rr_free(ds);
- return NULL;
-#endif
- }
-
- data_buf = ldns_buffer_new(LDNS_MAX_PACKETLEN);
- if (!data_buf) {
- LDNS_FREE(digest);
- ldns_rr_free(ds);
- return NULL;
- }
-
- /* keytag */
- keytag = htons(ldns_calc_keytag((ldns_rr*)key));
- tmp = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_INT16,
- sizeof(uint16_t),
- &keytag);
- ldns_rr_push_rdf(ds, tmp);
-
- /* copy the algorithm field */
- if ((tmp = ldns_rr_rdf(key, 2)) == NULL) {
- LDNS_FREE(digest);
- ldns_buffer_free(data_buf);
- ldns_rr_free(ds);
- return NULL;
- } else {
- ldns_rr_push_rdf(ds, ldns_rdf_clone( tmp ));
- }
-
- /* digest hash type */
- sha1hash = (uint8_t)h;
- tmp = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_INT8,
- sizeof(uint8_t),
- &sha1hash);
- ldns_rr_push_rdf(ds, tmp);
-
- /* digest */
- /* owner name */
- tmp = ldns_rdf_clone(ldns_rr_owner(key));
- ldns_dname2canonical(tmp);
- if (ldns_rdf2buffer_wire(data_buf, tmp) != LDNS_STATUS_OK) {
- LDNS_FREE(digest);
- ldns_buffer_free(data_buf);
- ldns_rr_free(ds);
- ldns_rdf_deep_free(tmp);
- return NULL;
- }
- ldns_rdf_deep_free(tmp);
-
- /* all the rdata's */
- if (ldns_rr_rdata2buffer_wire(data_buf,
- (ldns_rr*)key) != LDNS_STATUS_OK) {
- LDNS_FREE(digest);
- ldns_buffer_free(data_buf);
- ldns_rr_free(ds);
- return NULL;
- }
- switch(h) {
- case LDNS_SHA1:
- (void) ldns_sha1((unsigned char *) ldns_buffer_begin(data_buf),
- (unsigned int) ldns_buffer_position(data_buf),
- (unsigned char *) digest);
-
- tmp = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_HEX,
- LDNS_SHA1_DIGEST_LENGTH,
- digest);
- ldns_rr_push_rdf(ds, tmp);
-
- break;
- case LDNS_SHA256:
- (void) ldns_sha256((unsigned char *) ldns_buffer_begin(data_buf),
- (unsigned int) ldns_buffer_position(data_buf),
- (unsigned char *) digest);
- tmp = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_HEX,
- LDNS_SHA256_DIGEST_LENGTH,
- digest);
- ldns_rr_push_rdf(ds, tmp);
- break;
- case LDNS_HASH_GOST:
-#ifdef USE_GOST
- if(!ldns_digest_evp((unsigned char *) ldns_buffer_begin(data_buf),
- (unsigned int) ldns_buffer_position(data_buf),
- (unsigned char *) digest, md)) {
- LDNS_FREE(digest);
- ldns_buffer_free(data_buf);
- ldns_rr_free(ds);
- return NULL;
- }
- tmp = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_HEX,
- (size_t)EVP_MD_size(md),
- digest);
- ldns_rr_push_rdf(ds, tmp);
-#endif
- break;
- case LDNS_SHA384:
-#ifdef USE_ECDSA
- (void) SHA384((unsigned char *) ldns_buffer_begin(data_buf),
- (unsigned int) ldns_buffer_position(data_buf),
- (unsigned char *) digest);
- tmp = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_HEX,
- SHA384_DIGEST_LENGTH,
- digest);
- ldns_rr_push_rdf(ds, tmp);
-#endif
- break;
- }
-
- LDNS_FREE(digest);
- ldns_buffer_free(data_buf);
- return ds;
-}
-
-/* From RFC3845:
- *
- * 2.1.2. The List of Type Bit Map(s) Field
- *
- * The RR type space is split into 256 window blocks, each representing
- * the low-order 8 bits of the 16-bit RR type space. Each block that
- * has at least one active RR type is encoded using a single octet
- * window number (from 0 to 255), a single octet bitmap length (from 1
- * to 32) indicating the number of octets used for the window block's
- * bitmap, and up to 32 octets (256 bits) of bitmap.
- *
- * Window blocks are present in the NSEC RR RDATA in increasing
- * numerical order.
- *
- * "|" denotes concatenation
- *
- * Type Bit Map(s) Field = ( Window Block # | Bitmap Length | Bitmap ) +
- *
- * <cut>
- *
- * Blocks with no types present MUST NOT be included. Trailing zero
- * octets in the bitmap MUST be omitted. The length of each block's
- * bitmap is determined by the type code with the largest numerical
- * value within that block, among the set of RR types present at the
- * NSEC RR's owner name. Trailing zero octets not specified MUST be
- * interpreted as zero octets.
- */
-ldns_rdf *
-ldns_dnssec_create_nsec_bitmap(ldns_rr_type rr_type_list[],
- size_t size,
- ldns_rr_type nsec_type)
-{
- uint8_t window; /* most significant octet of type */
- uint8_t subtype; /* least significant octet of type */
- int windows[256]; /* Max subtype per window */
- uint8_t windowpresent[256]; /* bool if window appears in bitmap */
- ldns_rr_type* d; /* used to traverse rr_type_list*/
- size_t i; /* used to traverse windows array */
-
- size_t sz; /* size needed for type bitmap rdf */
- uint8_t* data = NULL; /* rdf data */
- uint8_t* dptr; /* used to itraverse rdf data */
- ldns_rdf* rdf; /* bitmap rdf to return */
-
- if (nsec_type != LDNS_RR_TYPE_NSEC &&
- nsec_type != LDNS_RR_TYPE_NSEC3) {
- return NULL;
- }
- memset(windows, 0, sizeof(int)*256);
- memset(windowpresent, 0, 256);
-
- /* Which other windows need to be in the bitmap rdf?
- */
- for (d = rr_type_list; d < rr_type_list + size; d++) {
- window = *d >> 8;
- subtype = *d & 0xff;
- windowpresent[window] = 1;
- if (windows[window] < (int)subtype) {
- windows[window] = (int)subtype;
- }
- }
-
- /* How much space do we need in the rdf for those windows?
- */
- sz = 0;
- for (i = 0; i < 256; i++) {
- if (windowpresent[i]) {
- sz += windows[i] / 8 + 3;
- }
- }
- if (sz > 0) {
- /* Format rdf data according RFC3845 Section 2.1.2 (see above)
- */
- dptr = data = LDNS_CALLOC(uint8_t, sz);
- if (!data) {
- return NULL;
- }
- for (i = 0; i < 256; i++) {
- if (windowpresent[i]) {
- *dptr++ = (uint8_t)i;
- *dptr++ = (uint8_t)(windows[i] / 8 + 1);
-
- /* Now let windows[i] index the bitmap
- * within data
- */
- windows[i] = (int)(dptr - data);
-
- dptr += dptr[-1];
- }
- }
- }
-
- /* Set the bits?
- */
- for (d = rr_type_list; d < rr_type_list + size; d++) {
- subtype = *d & 0xff;
- data[windows[*d >> 8] + subtype/8] |= (0x80 >> (subtype % 8));
- }
-
- /* Allocate and return rdf structure for the data
- */
- rdf = ldns_rdf_new(LDNS_RDF_TYPE_BITMAP, sz, data);
- if (!rdf) {
- LDNS_FREE(data);
- return NULL;
- }
- return rdf;
-}
-
-int
-ldns_dnssec_rrsets_contains_type(const ldns_dnssec_rrsets *rrsets,
- ldns_rr_type type)
-{
- const ldns_dnssec_rrsets *cur_rrset = rrsets;
- while (cur_rrset) {
- if (cur_rrset->type == type) {
- return 1;
- }
- cur_rrset = cur_rrset->next;
- }
- return 0;
-}
-
-ldns_rr *
-ldns_dnssec_create_nsec(const ldns_dnssec_name *from,
- const ldns_dnssec_name *to,
- ldns_rr_type nsec_type)
-{
- ldns_rr *nsec_rr;
- ldns_rr_type types[65536];
- size_t type_count = 0;
- ldns_dnssec_rrsets *cur_rrsets;
- int on_delegation_point;
-
- if (!from || !to || (nsec_type != LDNS_RR_TYPE_NSEC)) {
- return NULL;
- }
-
- nsec_rr = ldns_rr_new();
- ldns_rr_set_type(nsec_rr, nsec_type);
- ldns_rr_set_owner(nsec_rr, ldns_rdf_clone(ldns_dnssec_name_name(from)));
- ldns_rr_push_rdf(nsec_rr, ldns_rdf_clone(ldns_dnssec_name_name(to)));
-
- on_delegation_point = ldns_dnssec_rrsets_contains_type(
- from->rrsets, LDNS_RR_TYPE_NS)
- && !ldns_dnssec_rrsets_contains_type(
- from->rrsets, LDNS_RR_TYPE_SOA);
-
- cur_rrsets = from->rrsets;
- while (cur_rrsets) {
- /* Do not include non-authoritative rrsets on the delegation point
- * in the type bitmap */
- if ((on_delegation_point && (
- cur_rrsets->type == LDNS_RR_TYPE_NS
- || cur_rrsets->type == LDNS_RR_TYPE_DS))
- || (!on_delegation_point &&
- cur_rrsets->type != LDNS_RR_TYPE_RRSIG
- && cur_rrsets->type != LDNS_RR_TYPE_NSEC)) {
-
- types[type_count] = cur_rrsets->type;
- type_count++;
- }
- cur_rrsets = cur_rrsets->next;
-
- }
- types[type_count] = LDNS_RR_TYPE_RRSIG;
- type_count++;
- types[type_count] = LDNS_RR_TYPE_NSEC;
- type_count++;
-
- ldns_rr_push_rdf(nsec_rr, ldns_dnssec_create_nsec_bitmap(types,
- type_count,
- nsec_type));
-
- return nsec_rr;
-}
-
-ldns_rr *
-ldns_dnssec_create_nsec3(const ldns_dnssec_name *from,
- const ldns_dnssec_name *to,
- const ldns_rdf *zone_name,
- uint8_t algorithm,
- uint8_t flags,
- uint16_t iterations,
- uint8_t salt_length,
- const uint8_t *salt)
-{
- ldns_rr *nsec_rr;
- ldns_rr_type types[65536];
- size_t type_count = 0;
- ldns_dnssec_rrsets *cur_rrsets;
- ldns_status status;
- int on_delegation_point;
-
- if (!from) {
- return NULL;
- }
-
- nsec_rr = ldns_rr_new_frm_type(LDNS_RR_TYPE_NSEC3);
- ldns_rr_set_owner(nsec_rr,
- ldns_nsec3_hash_name(ldns_dnssec_name_name(from),
- algorithm,
- iterations,
- salt_length,
- salt));
- status = ldns_dname_cat(ldns_rr_owner(nsec_rr), zone_name);
- if(status != LDNS_STATUS_OK) {
- ldns_rr_free(nsec_rr);
- return NULL;
- }
- ldns_nsec3_add_param_rdfs(nsec_rr,
- algorithm,
- flags,
- iterations,
- salt_length,
- salt);
-
- on_delegation_point = ldns_dnssec_rrsets_contains_type(
- from->rrsets, LDNS_RR_TYPE_NS)
- && !ldns_dnssec_rrsets_contains_type(
- from->rrsets, LDNS_RR_TYPE_SOA);
- cur_rrsets = from->rrsets;
- while (cur_rrsets) {
- /* Do not include non-authoritative rrsets on the delegation point
- * in the type bitmap. Potentionally not skipping insecure
- * delegation should have been done earlier, in function
- * ldns_dnssec_zone_create_nsec3s, or even earlier in:
- * ldns_dnssec_zone_sign_nsec3_flg .
- */
- if ((on_delegation_point && (
- cur_rrsets->type == LDNS_RR_TYPE_NS
- || cur_rrsets->type == LDNS_RR_TYPE_DS))
- || (!on_delegation_point &&
- cur_rrsets->type != LDNS_RR_TYPE_RRSIG)) {
-
- types[type_count] = cur_rrsets->type;
- type_count++;
- }
- cur_rrsets = cur_rrsets->next;
- }
- /* always add rrsig type if this is not an unsigned
- * delegation
- */
- if (type_count > 0 &&
- !(type_count == 1 && types[0] == LDNS_RR_TYPE_NS)) {
- types[type_count] = LDNS_RR_TYPE_RRSIG;
- type_count++;
- }
-
- /* leave next rdata empty if they weren't precomputed yet */
- if (to && to->hashed_name) {
- (void) ldns_rr_set_rdf(nsec_rr,
- ldns_rdf_clone(to->hashed_name),
- 4);
- } else {
- (void) ldns_rr_set_rdf(nsec_rr, NULL, 4);
- }
-
- ldns_rr_push_rdf(nsec_rr,
- ldns_dnssec_create_nsec_bitmap(types,
- type_count,
- LDNS_RR_TYPE_NSEC3));
-
- return nsec_rr;
-}
-
-ldns_rr *
-ldns_create_nsec(ldns_rdf *cur_owner, ldns_rdf *next_owner, ldns_rr_list *rrs)
-{
- /* we do not do any check here - garbage in, garbage out */
-
- /* the the start and end names - get the type from the
- * before rrlist */
-
- /* inefficient, just give it a name, a next name, and a list of rrs */
- /* we make 1 big uberbitmap first, then windows */
- /* todo: make something more efficient :) */
- uint16_t i;
- ldns_rr *i_rr;
- uint16_t i_type;
-
- ldns_rr *nsec = NULL;
- ldns_rr_type i_type_list[65536];
- size_t type_count = 0;
-
- nsec = ldns_rr_new();
- ldns_rr_set_type(nsec, LDNS_RR_TYPE_NSEC);
- ldns_rr_set_owner(nsec, ldns_rdf_clone(cur_owner));
- ldns_rr_push_rdf(nsec, ldns_rdf_clone(next_owner));
-
- for (i = 0; i < ldns_rr_list_rr_count(rrs); i++) {
- i_rr = ldns_rr_list_rr(rrs, i);
- if (ldns_rdf_compare(cur_owner,
- ldns_rr_owner(i_rr)) == 0) {
- i_type = ldns_rr_get_type(i_rr);
- if (i_type != LDNS_RR_TYPE_RRSIG && i_type != LDNS_RR_TYPE_NSEC) {
- if (type_count == 0 || i_type_list[type_count-1] != i_type) {
- i_type_list[type_count] = i_type;
- type_count++;
- }
- }
- }
- }
-
- i_type_list[type_count] = LDNS_RR_TYPE_RRSIG;
- type_count++;
- i_type_list[type_count] = LDNS_RR_TYPE_NSEC;
- type_count++;
-
- ldns_rr_push_rdf(nsec,
- ldns_dnssec_create_nsec_bitmap(i_type_list,
- type_count, LDNS_RR_TYPE_NSEC));
-
- return nsec;
-}
-
-ldns_rdf *
-ldns_nsec3_hash_name(const ldns_rdf *name,
- uint8_t algorithm,
- uint16_t iterations,
- uint8_t salt_length,
- const uint8_t *salt)
-{
- size_t hashed_owner_str_len;
- ldns_rdf *cann;
- ldns_rdf *hashed_owner;
- unsigned char *hashed_owner_str;
- char *hashed_owner_b32;
- size_t hashed_owner_b32_len;
- uint32_t cur_it;
- /* define to contain the largest possible hash, which is
- * sha1 at the moment */
- unsigned char hash[LDNS_SHA1_DIGEST_LENGTH];
- ldns_status status;
-
- /* TODO: mnemonic list for hash algs SHA-1, default to 1 now (sha1) */
- if (algorithm != LDNS_SHA1) {
- return NULL;
- }
-
- /* prepare the owner name according to the draft section bla */
- cann = ldns_rdf_clone(name);
- if(!cann) {
-#ifdef STDERR_MSGS
- fprintf(stderr, "Memory error\n");
-#endif
- return NULL;
- }
- ldns_dname2canonical(cann);
-
- hashed_owner_str_len = salt_length + ldns_rdf_size(cann);
- hashed_owner_str = LDNS_XMALLOC(unsigned char, hashed_owner_str_len);
- if(!hashed_owner_str) {
- ldns_rdf_deep_free(cann);
- return NULL;
- }
- memcpy(hashed_owner_str, ldns_rdf_data(cann), ldns_rdf_size(cann));
- memcpy(hashed_owner_str + ldns_rdf_size(cann), salt, salt_length);
- ldns_rdf_deep_free(cann);
-
- for (cur_it = iterations + 1; cur_it > 0; cur_it--) {
- (void) ldns_sha1((unsigned char *) hashed_owner_str,
- (unsigned int) hashed_owner_str_len, hash);
-
- LDNS_FREE(hashed_owner_str);
- hashed_owner_str_len = salt_length + LDNS_SHA1_DIGEST_LENGTH;
- hashed_owner_str = LDNS_XMALLOC(unsigned char, hashed_owner_str_len);
- if (!hashed_owner_str) {
- return NULL;
- }
- memcpy(hashed_owner_str, hash, LDNS_SHA1_DIGEST_LENGTH);
- memcpy(hashed_owner_str + LDNS_SHA1_DIGEST_LENGTH, salt, salt_length);
- hashed_owner_str_len = LDNS_SHA1_DIGEST_LENGTH + salt_length;
- }
-
- LDNS_FREE(hashed_owner_str);
- hashed_owner_str = hash;
- hashed_owner_str_len = LDNS_SHA1_DIGEST_LENGTH;
-
- hashed_owner_b32 = LDNS_XMALLOC(char,
- ldns_b32_ntop_calculate_size(hashed_owner_str_len) + 1);
- if(!hashed_owner_b32) {
- return NULL;
- }
- hashed_owner_b32_len = (size_t) ldns_b32_ntop_extended_hex(
- (uint8_t *) hashed_owner_str,
- hashed_owner_str_len,
- hashed_owner_b32,
- ldns_b32_ntop_calculate_size(hashed_owner_str_len)+1);
- if (hashed_owner_b32_len < 1) {
-#ifdef STDERR_MSGS
- fprintf(stderr, "Error in base32 extended hex encoding ");
- fprintf(stderr, "of hashed owner name (name: ");
- ldns_rdf_print(stderr, name);
- fprintf(stderr, ", return code: %u)\n",
- (unsigned int) hashed_owner_b32_len);
-#endif
- LDNS_FREE(hashed_owner_b32);
- return NULL;
- }
- hashed_owner_b32[hashed_owner_b32_len] = '\0';
-
- status = ldns_str2rdf_dname(&hashed_owner, hashed_owner_b32);
- if (status != LDNS_STATUS_OK) {
-#ifdef STDERR_MSGS
- fprintf(stderr, "Error creating rdf from %s\n", hashed_owner_b32);
-#endif
- LDNS_FREE(hashed_owner_b32);
- return NULL;
- }
-
- LDNS_FREE(hashed_owner_b32);
- return hashed_owner;
-}
-
-void
-ldns_nsec3_add_param_rdfs(ldns_rr *rr,
- uint8_t algorithm,
- uint8_t flags,
- uint16_t iterations,
- uint8_t salt_length,
- const uint8_t *salt)
-{
- ldns_rdf *salt_rdf = NULL;
- uint8_t *salt_data = NULL;
- ldns_rdf *old;
-
- old = ldns_rr_set_rdf(rr,
- ldns_rdf_new_frm_data(LDNS_RDF_TYPE_INT8,
- 1, (void*)&algorithm),
- 0);
- if (old) ldns_rdf_deep_free(old);
-
- old = ldns_rr_set_rdf(rr,
- ldns_rdf_new_frm_data(LDNS_RDF_TYPE_INT8,
- 1, (void*)&flags),
- 1);
- if (old) ldns_rdf_deep_free(old);
-
- old = ldns_rr_set_rdf(rr,
- ldns_native2rdf_int16(LDNS_RDF_TYPE_INT16,
- iterations),
- 2);
- if (old) ldns_rdf_deep_free(old);
-
- salt_data = LDNS_XMALLOC(uint8_t, salt_length + 1);
- if(!salt_data) {
- /* no way to return error */
- return;
- }
- salt_data[0] = salt_length;
- memcpy(salt_data + 1, salt, salt_length);
- salt_rdf = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_NSEC3_SALT,
- salt_length + 1,
- salt_data);
- if(!salt_rdf) {
- LDNS_FREE(salt_data);
- /* no way to return error */
- return;
- }
-
- old = ldns_rr_set_rdf(rr, salt_rdf, 3);
- if (old) ldns_rdf_deep_free(old);
- LDNS_FREE(salt_data);
-}
-
-static int
-rr_list_delegation_only(const ldns_rdf *origin, const ldns_rr_list *rr_list)
-{
- size_t i;
- ldns_rr *cur_rr;
- if (!origin || !rr_list) return 0;
- for (i = 0; i < ldns_rr_list_rr_count(rr_list); i++) {
- cur_rr = ldns_rr_list_rr(rr_list, i);
- if (ldns_dname_compare(ldns_rr_owner(cur_rr), origin) == 0) {
- return 0;
- }
- if (ldns_rr_get_type(cur_rr) != LDNS_RR_TYPE_NS) {
- return 0;
- }
- }
- return 1;
-}
-
-/* this will NOT return the NSEC3 completed, you will have to run the
- finalize function on the rrlist later! */
-ldns_rr *
-ldns_create_nsec3(const ldns_rdf *cur_owner,
- const ldns_rdf *cur_zone,
- const ldns_rr_list *rrs,
- uint8_t algorithm,
- uint8_t flags,
- uint16_t iterations,
- uint8_t salt_length,
- const uint8_t *salt,
- bool emptynonterminal)
-{
- size_t i;
- ldns_rr *i_rr;
- uint16_t i_type;
-
- ldns_rr *nsec = NULL;
- ldns_rdf *hashed_owner = NULL;
-
- ldns_status status;
-
- ldns_rr_type i_type_list[1024];
- size_t type_count = 0;
-
- hashed_owner = ldns_nsec3_hash_name(cur_owner,
- algorithm,
- iterations,
- salt_length,
- salt);
- status = ldns_dname_cat(hashed_owner, cur_zone);
- if(status != LDNS_STATUS_OK) {
- ldns_rdf_deep_free(hashed_owner);
- return NULL;
- }
- nsec = ldns_rr_new_frm_type(LDNS_RR_TYPE_NSEC3);
- if(!nsec) {
- ldns_rdf_deep_free(hashed_owner);
- return NULL;
- }
- ldns_rr_set_type(nsec, LDNS_RR_TYPE_NSEC3);
- ldns_rr_set_owner(nsec, hashed_owner);
-
- ldns_nsec3_add_param_rdfs(nsec,
- algorithm,
- flags,
- iterations,
- salt_length,
- salt);
- (void) ldns_rr_set_rdf(nsec, NULL, 4);
-
-
- for (i = 0; i < ldns_rr_list_rr_count(rrs); i++) {
- i_rr = ldns_rr_list_rr(rrs, i);
- if (ldns_rdf_compare(cur_owner,
- ldns_rr_owner(i_rr)) == 0) {
- i_type = ldns_rr_get_type(i_rr);
- if (type_count == 0 || i_type_list[type_count-1] != i_type) {
- i_type_list[type_count] = i_type;
- type_count++;
- }
- }
- }
-
- /* add RRSIG anyway, but only if this is not an ENT or
- * an unsigned delegation */
- if (!emptynonterminal && !rr_list_delegation_only(cur_zone, rrs)) {
- i_type_list[type_count] = LDNS_RR_TYPE_RRSIG;
- type_count++;
- }
-
- /* and SOA if owner == zone */
- if (ldns_dname_compare(cur_zone, cur_owner) == 0) {
- i_type_list[type_count] = LDNS_RR_TYPE_SOA;
- type_count++;
- }
-
- ldns_rr_push_rdf(nsec,
- ldns_dnssec_create_nsec_bitmap(i_type_list,
- type_count, LDNS_RR_TYPE_NSEC3));
-
- return nsec;
-}
-
-uint8_t
-ldns_nsec3_algorithm(const ldns_rr *nsec3_rr)
-{
- if (nsec3_rr &&
- (ldns_rr_get_type(nsec3_rr) == LDNS_RR_TYPE_NSEC3 ||
- ldns_rr_get_type(nsec3_rr) == LDNS_RR_TYPE_NSEC3PARAM)
- && (ldns_rr_rdf(nsec3_rr, 0) != NULL)
- && ldns_rdf_size(ldns_rr_rdf(nsec3_rr, 0)) > 0) {
- return ldns_rdf2native_int8(ldns_rr_rdf(nsec3_rr, 0));
- }
- return 0;
-}
-
-uint8_t
-ldns_nsec3_flags(const ldns_rr *nsec3_rr)
-{
- if (nsec3_rr &&
- (ldns_rr_get_type(nsec3_rr) == LDNS_RR_TYPE_NSEC3 ||
- ldns_rr_get_type(nsec3_rr) == LDNS_RR_TYPE_NSEC3PARAM)
- && (ldns_rr_rdf(nsec3_rr, 1) != NULL)
- && ldns_rdf_size(ldns_rr_rdf(nsec3_rr, 1)) > 0) {
- return ldns_rdf2native_int8(ldns_rr_rdf(nsec3_rr, 1));
- }
- return 0;
-}
-
-bool
-ldns_nsec3_optout(const ldns_rr *nsec3_rr)
-{
- return (ldns_nsec3_flags(nsec3_rr) & LDNS_NSEC3_VARS_OPTOUT_MASK);
-}
-
-uint16_t
-ldns_nsec3_iterations(const ldns_rr *nsec3_rr)
-{
- if (nsec3_rr &&
- (ldns_rr_get_type(nsec3_rr) == LDNS_RR_TYPE_NSEC3 ||
- ldns_rr_get_type(nsec3_rr) == LDNS_RR_TYPE_NSEC3PARAM)
- && (ldns_rr_rdf(nsec3_rr, 2) != NULL)
- && ldns_rdf_size(ldns_rr_rdf(nsec3_rr, 2)) > 0) {
- return ldns_rdf2native_int16(ldns_rr_rdf(nsec3_rr, 2));
- }
- return 0;
-
-}
-
-ldns_rdf *
-ldns_nsec3_salt(const ldns_rr *nsec3_rr)
-{
- if (nsec3_rr &&
- (ldns_rr_get_type(nsec3_rr) == LDNS_RR_TYPE_NSEC3 ||
- ldns_rr_get_type(nsec3_rr) == LDNS_RR_TYPE_NSEC3PARAM)
- ) {
- return ldns_rr_rdf(nsec3_rr, 3);
- }
- return NULL;
-}
-
-uint8_t
-ldns_nsec3_salt_length(const ldns_rr *nsec3_rr)
-{
- ldns_rdf *salt_rdf = ldns_nsec3_salt(nsec3_rr);
- if (salt_rdf && ldns_rdf_size(salt_rdf) > 0) {
- return (uint8_t) ldns_rdf_data(salt_rdf)[0];
- }
- return 0;
-}
-
-/* allocs data, free with LDNS_FREE() */
-uint8_t *
-ldns_nsec3_salt_data(const ldns_rr *nsec3_rr)
-{
- uint8_t salt_length;
- uint8_t *salt;
-
- ldns_rdf *salt_rdf = ldns_nsec3_salt(nsec3_rr);
- if (salt_rdf && ldns_rdf_size(salt_rdf) > 0) {
- salt_length = ldns_rdf_data(salt_rdf)[0];
- salt = LDNS_XMALLOC(uint8_t, salt_length);
- if(!salt) return NULL;
- memcpy(salt, &ldns_rdf_data(salt_rdf)[1], salt_length);
- return salt;
- }
- return NULL;
-}
-
-ldns_rdf *
-ldns_nsec3_next_owner(const ldns_rr *nsec3_rr)
-{
- if (!nsec3_rr || ldns_rr_get_type(nsec3_rr) != LDNS_RR_TYPE_NSEC3) {
- return NULL;
- } else {
- return ldns_rr_rdf(nsec3_rr, 4);
- }
-}
-
-ldns_rdf *
-ldns_nsec3_bitmap(const ldns_rr *nsec3_rr)
-{
- if (!nsec3_rr || ldns_rr_get_type(nsec3_rr) != LDNS_RR_TYPE_NSEC3) {
- return NULL;
- } else {
- return ldns_rr_rdf(nsec3_rr, 5);
- }
-}
-
-ldns_rdf *
-ldns_nsec3_hash_name_frm_nsec3(const ldns_rr *nsec, const ldns_rdf *name)
-{
- uint8_t algorithm;
- uint16_t iterations;
- uint8_t salt_length;
- uint8_t *salt = 0;
-
- ldns_rdf *hashed_owner;
-
- algorithm = ldns_nsec3_algorithm(nsec);
- salt_length = ldns_nsec3_salt_length(nsec);
- salt = ldns_nsec3_salt_data(nsec);
- iterations = ldns_nsec3_iterations(nsec);
-
- hashed_owner = ldns_nsec3_hash_name(name,
- algorithm,
- iterations,
- salt_length,
- salt);
-
- LDNS_FREE(salt);
- return hashed_owner;
-}
-
-bool
-ldns_nsec_bitmap_covers_type(const ldns_rdf* bitmap, ldns_rr_type type)
-{
- uint8_t* dptr;
- uint8_t* dend;
-
- /* From RFC3845 Section 2.1.2:
- *
- * "The RR type space is split into 256 window blocks, each re-
- * presenting the low-order 8 bits of the 16-bit RR type space."
- */
- uint8_t window = type >> 8;
- uint8_t subtype = type & 0xff;
-
- if (! bitmap) {
- return false;
- }
- assert(ldns_rdf_get_type(bitmap) == LDNS_RDF_TYPE_BITMAP);
-
- dptr = ldns_rdf_data(bitmap);
- dend = ldns_rdf_data(bitmap) + ldns_rdf_size(bitmap);
-
- /* Type Bitmap = ( Window Block # | Bitmap Length | Bitmap ) +
- * dptr[0] dptr[1] dptr[2:]
- */
- while (dptr < dend && dptr[0] <= window) {
-
- if (dptr[0] == window && subtype / 8 < dptr[1] &&
- dptr + dptr[1] + 2 <= dend) {
-
- return dptr[2 + subtype / 8] & (0x80 >> (subtype % 8));
- }
- dptr += dptr[1] + 2; /* next window */
- }
- return false;
-}
-
-ldns_status
-ldns_nsec_bitmap_set_type(ldns_rdf* bitmap, ldns_rr_type type)
-{
- uint8_t* dptr;
- uint8_t* dend;
-
- /* From RFC3845 Section 2.1.2:
- *
- * "The RR type space is split into 256 window blocks, each re-
- * presenting the low-order 8 bits of the 16-bit RR type space."
- */
- uint8_t window = type >> 8;
- uint8_t subtype = type & 0xff;
-
- if (! bitmap) {
- return false;
- }
- assert(ldns_rdf_get_type(bitmap) == LDNS_RDF_TYPE_BITMAP);
-
- dptr = ldns_rdf_data(bitmap);
- dend = ldns_rdf_data(bitmap) + ldns_rdf_size(bitmap);
-
- /* Type Bitmap = ( Window Block # | Bitmap Length | Bitmap ) +
- * dptr[0] dptr[1] dptr[2:]
- */
- while (dptr < dend && dptr[0] <= window) {
-
- if (dptr[0] == window && subtype / 8 < dptr[1] &&
- dptr + dptr[1] + 2 <= dend) {
-
- dptr[2 + subtype / 8] |= (0x80 >> (subtype % 8));
- return LDNS_STATUS_OK;
- }
- dptr += dptr[1] + 2; /* next window */
- }
- return LDNS_STATUS_TYPE_NOT_IN_BITMAP;
-}
-
-ldns_status
-ldns_nsec_bitmap_clear_type(ldns_rdf* bitmap, ldns_rr_type type)
-{
- uint8_t* dptr;
- uint8_t* dend;
-
- /* From RFC3845 Section 2.1.2:
- *
- * "The RR type space is split into 256 window blocks, each re-
- * presenting the low-order 8 bits of the 16-bit RR type space."
- */
- uint8_t window = type >> 8;
- uint8_t subtype = type & 0xff;
-
- if (! bitmap) {
- return false;
- }
-
- assert(ldns_rdf_get_type(bitmap) == LDNS_RDF_TYPE_BITMAP);
-
- dptr = ldns_rdf_data(bitmap);
- dend = ldns_rdf_data(bitmap) + ldns_rdf_size(bitmap);
-
- /* Type Bitmap = ( Window Block # | Bitmap Length | Bitmap ) +
- * dptr[0] dptr[1] dptr[2:]
- */
- while (dptr < dend && dptr[0] <= window) {
-
- if (dptr[0] == window && subtype / 8 < dptr[1] &&
- dptr + dptr[1] + 2 <= dend) {
-
- dptr[2 + subtype / 8] &= ~(0x80 >> (subtype % 8));
- return LDNS_STATUS_OK;
- }
- dptr += dptr[1] + 2; /* next window */
- }
- return LDNS_STATUS_TYPE_NOT_IN_BITMAP;
-}
-
-
-bool
-ldns_nsec_covers_name(const ldns_rr *nsec, const ldns_rdf *name)
-{
- ldns_rdf *nsec_owner = ldns_rr_owner(nsec);
- ldns_rdf *hash_next;
- char *next_hash_str;
- ldns_rdf *nsec_next = NULL;
- ldns_status status;
- ldns_rdf *chopped_dname;
- bool result;
-
- if (ldns_rr_get_type(nsec) == LDNS_RR_TYPE_NSEC) {
- if (ldns_rr_rdf(nsec, 0) != NULL) {
- nsec_next = ldns_rdf_clone(ldns_rr_rdf(nsec, 0));
- } else {
- return false;
- }
- } else if (ldns_rr_get_type(nsec) == LDNS_RR_TYPE_NSEC3) {
- hash_next = ldns_nsec3_next_owner(nsec);
- next_hash_str = ldns_rdf2str(hash_next);
- nsec_next = ldns_dname_new_frm_str(next_hash_str);
- LDNS_FREE(next_hash_str);
- chopped_dname = ldns_dname_left_chop(nsec_owner);
- status = ldns_dname_cat(nsec_next, chopped_dname);
- ldns_rdf_deep_free(chopped_dname);
- if (status != LDNS_STATUS_OK) {
- printf("error catting: %s\n", ldns_get_errorstr_by_id(status));
- }
- } else {
- ldns_rdf_deep_free(nsec_next);
- return false;
- }
-
- /* in the case of the last nsec */
- if(ldns_dname_compare(nsec_owner, nsec_next) > 0) {
- result = (ldns_dname_compare(nsec_owner, name) <= 0 ||
- ldns_dname_compare(name, nsec_next) < 0);
- } else if(ldns_dname_compare(nsec_owner, nsec_next) < 0) {
- result = (ldns_dname_compare(nsec_owner, name) <= 0 &&
- ldns_dname_compare(name, nsec_next) < 0);
- } else {
- result = true;
- }
-
- ldns_rdf_deep_free(nsec_next);
- return result;
-}
-
-#ifdef HAVE_SSL
-/* sig may be null - if so look in the packet */
-
-ldns_status
-ldns_pkt_verify_time(const ldns_pkt *p, ldns_rr_type t, const ldns_rdf *o,
- const ldns_rr_list *k, const ldns_rr_list *s,
- time_t check_time, ldns_rr_list *good_keys)
-{
- ldns_rr_list *rrset;
- ldns_rr_list *sigs;
- ldns_rr_list *sigs_covered;
- ldns_rdf *rdf_t;
- ldns_rr_type t_netorder;
- ldns_status status;
-
- if (!k) {
- return LDNS_STATUS_ERR;
- /* return LDNS_STATUS_CRYPTO_NO_DNSKEY; */
- }
-
- if (t == LDNS_RR_TYPE_RRSIG) {
- /* we don't have RRSIG(RRSIG) (yet? ;-) ) */
- return LDNS_STATUS_ERR;
- }
-
- if (s) {
- /* if s is not NULL, the sigs are given to use */
- sigs = (ldns_rr_list *)s;
- } else {
- /* otherwise get them from the packet */
- sigs = ldns_pkt_rr_list_by_name_and_type(p, o,
- LDNS_RR_TYPE_RRSIG,
- LDNS_SECTION_ANY_NOQUESTION);
- if (!sigs) {
- /* no sigs */
- return LDNS_STATUS_ERR;
- /* return LDNS_STATUS_CRYPTO_NO_RRSIG; */
- }
- }
-
- /* rrsig are subtyped, so now we need to find the correct
- * sigs for the type t
- */
- t_netorder = htons(t); /* rdf are in network order! */
- /* a type identifier is a 16-bit number, so the size is 2 bytes */
- rdf_t = ldns_rdf_new(LDNS_RDF_TYPE_TYPE, 2, &t_netorder);
-
- sigs_covered = ldns_rr_list_subtype_by_rdf(sigs, rdf_t, 0);
- ldns_rdf_free(rdf_t);
- if (! sigs_covered) {
- if (! s) {
- ldns_rr_list_deep_free(sigs);
- }
- return LDNS_STATUS_ERR;
- }
- ldns_rr_list_deep_free(sigs_covered);
-
- rrset = ldns_pkt_rr_list_by_name_and_type(p, o, t,
- LDNS_SECTION_ANY_NOQUESTION);
- if (!rrset) {
- if (! s) {
- ldns_rr_list_deep_free(sigs);
- }
- return LDNS_STATUS_ERR;
- }
- status = ldns_verify_time(rrset, sigs, k, check_time, good_keys);
- ldns_rr_list_deep_free(rrset);
- return status;
-}
-
-ldns_status
-ldns_pkt_verify(const ldns_pkt *p, ldns_rr_type t, const ldns_rdf *o,
- const ldns_rr_list *k, const ldns_rr_list *s, ldns_rr_list *good_keys)
-{
- return ldns_pkt_verify_time(p, t, o, k, s, ldns_time(NULL), good_keys);
-}
-#endif /* HAVE_SSL */
-
-ldns_status
-ldns_dnssec_chain_nsec3_list(ldns_rr_list *nsec3_rrs)
-{
- size_t i;
- char *next_nsec_owner_str;
- ldns_rdf *next_nsec_owner_label;
- ldns_rdf *next_nsec_rdf;
- ldns_status status = LDNS_STATUS_OK;
-
- for (i = 0; i < ldns_rr_list_rr_count(nsec3_rrs); i++) {
- if (i == ldns_rr_list_rr_count(nsec3_rrs) - 1) {
- next_nsec_owner_label =
- ldns_dname_label(ldns_rr_owner(ldns_rr_list_rr(nsec3_rrs,
- 0)), 0);
- next_nsec_owner_str = ldns_rdf2str(next_nsec_owner_label);
- if (next_nsec_owner_str[strlen(next_nsec_owner_str) - 1]
- == '.') {
- next_nsec_owner_str[strlen(next_nsec_owner_str) - 1]
- = '\0';
- }
- status = ldns_str2rdf_b32_ext(&next_nsec_rdf,
- next_nsec_owner_str);
- if (!ldns_rr_set_rdf(ldns_rr_list_rr(nsec3_rrs, i),
- next_nsec_rdf, 4)) {
- /* todo: error */
- }
-
- ldns_rdf_deep_free(next_nsec_owner_label);
- LDNS_FREE(next_nsec_owner_str);
- } else {
- next_nsec_owner_label =
- ldns_dname_label(ldns_rr_owner(ldns_rr_list_rr(nsec3_rrs,
- i + 1)),
- 0);
- next_nsec_owner_str = ldns_rdf2str(next_nsec_owner_label);
- if (next_nsec_owner_str[strlen(next_nsec_owner_str) - 1]
- == '.') {
- next_nsec_owner_str[strlen(next_nsec_owner_str) - 1]
- = '\0';
- }
- status = ldns_str2rdf_b32_ext(&next_nsec_rdf,
- next_nsec_owner_str);
- ldns_rdf_deep_free(next_nsec_owner_label);
- LDNS_FREE(next_nsec_owner_str);
- if (!ldns_rr_set_rdf(ldns_rr_list_rr(nsec3_rrs, i),
- next_nsec_rdf, 4)) {
- /* todo: error */
- }
- }
- }
- return status;
-}
-
-int
-qsort_rr_compare_nsec3(const void *a, const void *b)
-{
- const ldns_rr *rr1 = * (const ldns_rr **) a;
- const ldns_rr *rr2 = * (const ldns_rr **) b;
- if (rr1 == NULL && rr2 == NULL) {
- return 0;
- }
- if (rr1 == NULL) {
- return -1;
- }
- if (rr2 == NULL) {
- return 1;
- }
- return ldns_rdf_compare(ldns_rr_owner(rr1), ldns_rr_owner(rr2));
-}
-
-void
-ldns_rr_list_sort_nsec3(ldns_rr_list *unsorted)
-{
- qsort(unsorted->_rrs,
- ldns_rr_list_rr_count(unsorted),
- sizeof(ldns_rr *),
- qsort_rr_compare_nsec3);
-}
-
-int
-ldns_dnssec_default_add_to_signatures( ATTR_UNUSED(ldns_rr *sig)
- , ATTR_UNUSED(void *n)
- )
-{
- return LDNS_SIGNATURE_LEAVE_ADD_NEW;
-}
-
-int
-ldns_dnssec_default_leave_signatures( ATTR_UNUSED(ldns_rr *sig)
- , ATTR_UNUSED(void *n)
- )
-{
- return LDNS_SIGNATURE_LEAVE_NO_ADD;
-}
-
-int
-ldns_dnssec_default_delete_signatures( ATTR_UNUSED(ldns_rr *sig)
- , ATTR_UNUSED(void *n)
- )
-{
- return LDNS_SIGNATURE_REMOVE_NO_ADD;
-}
-
-int
-ldns_dnssec_default_replace_signatures( ATTR_UNUSED(ldns_rr *sig)
- , ATTR_UNUSED(void *n)
- )
-{
- return LDNS_SIGNATURE_REMOVE_ADD_NEW;
-}
-
-#ifdef HAVE_SSL
-ldns_rdf *
-ldns_convert_dsa_rrsig_asn12rdf(const ldns_buffer *sig,
- const long sig_len)
-{
-#ifdef USE_DSA
- ldns_rdf *sigdata_rdf;
- DSA_SIG *dsasig;
- const BIGNUM *R, *S;
- unsigned char *dsasig_data = (unsigned char*)ldns_buffer_begin(sig);
- size_t byte_offset;
-
- dsasig = d2i_DSA_SIG(NULL,
- (const unsigned char **)&dsasig_data,
- sig_len);
- if (!dsasig) {
- DSA_SIG_free(dsasig);
- return NULL;
- }
-
- dsasig_data = LDNS_XMALLOC(unsigned char, 41);
- if(!dsasig_data) {
- DSA_SIG_free(dsasig);
- return NULL;
- }
- dsasig_data[0] = 0;
-# ifdef HAVE_DSA_SIG_GET0
- DSA_SIG_get0(dsasig, &R, &S);
-# else
- R = dsasig->r;
- S = dsasig->s;
-# endif
- byte_offset = (size_t) (20 - BN_num_bytes(R));
- if (byte_offset > 20) {
- DSA_SIG_free(dsasig);
- LDNS_FREE(dsasig_data);
- return NULL;
- }
- memset(&dsasig_data[1], 0, byte_offset);
- BN_bn2bin(R, &dsasig_data[1 + byte_offset]);
- byte_offset = (size_t) (20 - BN_num_bytes(S));
- if (byte_offset > 20) {
- DSA_SIG_free(dsasig);
- LDNS_FREE(dsasig_data);
- return NULL;
- }
- memset(&dsasig_data[21], 0, byte_offset);
- BN_bn2bin(S, &dsasig_data[21 + byte_offset]);
-
- sigdata_rdf = ldns_rdf_new(LDNS_RDF_TYPE_B64, 41, dsasig_data);
- if(!sigdata_rdf) {
- LDNS_FREE(dsasig_data);
- }
- DSA_SIG_free(dsasig);
-
- return sigdata_rdf;
-#else
- (void)sig; (void)sig_len;
- return NULL;
-#endif
-}
-
-ldns_status
-ldns_convert_dsa_rrsig_rdf2asn1(ldns_buffer *target_buffer,
- const ldns_rdf *sig_rdf)
-{
-#ifdef USE_DSA
- /* the EVP api wants the DER encoding of the signature... */
- BIGNUM *R, *S;
- DSA_SIG *dsasig;
- unsigned char *raw_sig = NULL;
- int raw_sig_len;
-
- if(ldns_rdf_size(sig_rdf) < 1 + 2*SHA_DIGEST_LENGTH)
- return LDNS_STATUS_SYNTAX_RDATA_ERR;
- /* extract the R and S field from the sig buffer */
- R = BN_new();
- if(!R) return LDNS_STATUS_MEM_ERR;
- (void) BN_bin2bn((unsigned char *) ldns_rdf_data(sig_rdf) + 1,
- SHA_DIGEST_LENGTH, R);
- S = BN_new();
- if(!S) {
- BN_free(R);
- return LDNS_STATUS_MEM_ERR;
- }
- (void) BN_bin2bn((unsigned char *) ldns_rdf_data(sig_rdf) + 21,
- SHA_DIGEST_LENGTH, S);
-
- dsasig = DSA_SIG_new();
- if (!dsasig) {
- BN_free(R);
- BN_free(S);
- return LDNS_STATUS_MEM_ERR;
- }
-# ifdef HAVE_DSA_SIG_SET0
- if (! DSA_SIG_set0(dsasig, R, S))
- return LDNS_STATUS_SSL_ERR;
-# else
- dsasig->r = R;
- dsasig->s = S;
-# endif
-
- raw_sig_len = i2d_DSA_SIG(dsasig, &raw_sig);
- if (raw_sig_len < 0) {
- DSA_SIG_free(dsasig);
- free(raw_sig);
- return LDNS_STATUS_SSL_ERR;
- }
- if (ldns_buffer_reserve(target_buffer, (size_t) raw_sig_len)) {
- ldns_buffer_write(target_buffer, raw_sig, (size_t)raw_sig_len);
- }
-
- DSA_SIG_free(dsasig);
- free(raw_sig);
-
- return ldns_buffer_status(target_buffer);
-#else
- (void)target_buffer; (void)sig_rdf;
- return LDNS_STATUS_CRYPTO_ALGO_NOT_IMPL;
-#endif
-}
-
-#ifdef USE_ECDSA
-#ifndef S_SPLINT_S
-ldns_rdf *
-ldns_convert_ecdsa_rrsig_asn1len2rdf(const ldns_buffer *sig,
- const long sig_len, int num_bytes)
-{
- ECDSA_SIG* ecdsa_sig;
- const BIGNUM *r, *s;
- unsigned char *data = (unsigned char*)ldns_buffer_begin(sig);
- ldns_rdf* rdf;
- ecdsa_sig = d2i_ECDSA_SIG(NULL, (const unsigned char **)&data, sig_len);
- if(!ecdsa_sig) return NULL;
-
-#ifdef HAVE_ECDSA_SIG_GET0
- ECDSA_SIG_get0(ecdsa_sig, &r, &s);
-#else
- r = ecdsa_sig->r;
- s = ecdsa_sig->s;
-#endif
- /* "r | s". */
- if(BN_num_bytes(r) > num_bytes ||
- BN_num_bytes(s) > num_bytes) {
- ECDSA_SIG_free(ecdsa_sig);
- return NULL; /* numbers too big for passed curve size */
- }
- data = LDNS_XMALLOC(unsigned char, num_bytes*2);
- if(!data) {
- ECDSA_SIG_free(ecdsa_sig);
- return NULL;
- }
- /* write the bignums (in big-endian) a little offset if the BN code
- * wants to write a shorter number of bytes, with zeroes prefixed */
- memset(data, 0, num_bytes*2);
- BN_bn2bin(r, data+num_bytes-BN_num_bytes(r));
- BN_bn2bin(s, data+num_bytes*2-BN_num_bytes(s));
- rdf = ldns_rdf_new(LDNS_RDF_TYPE_B64, (size_t)(num_bytes*2), data);
- ECDSA_SIG_free(ecdsa_sig);
- return rdf;
-}
-
-ldns_status
-ldns_convert_ecdsa_rrsig_rdf2asn1(ldns_buffer *target_buffer,
- const ldns_rdf *sig_rdf)
-{
- /* convert from two BIGNUMs in the rdata buffer, to ASN notation.
- * ASN preable: 30440220 <R 32bytefor256> 0220 <S 32bytefor256>
- * the '20' is the length of that field (=bnsize).
- * the '44' is the total remaining length.
- * if negative, start with leading zero.
- * if starts with 00s, remove them from the number.
- */
- uint8_t pre[] = {0x30, 0x44, 0x02, 0x20};
- int pre_len = 4;
- uint8_t mid[] = {0x02, 0x20};
- int mid_len = 2;
- int raw_sig_len, r_high, s_high, r_rem=0, s_rem=0;
- long bnsize = (long)ldns_rdf_size(sig_rdf) / 2;
- uint8_t* d = ldns_rdf_data(sig_rdf);
- /* if too short, or not even length, do not bother */
- if(bnsize < 16 || (size_t)bnsize*2 != ldns_rdf_size(sig_rdf))
- return LDNS_STATUS_ERR;
- /* strip leading zeroes from r (but not last one) */
- while(r_rem < bnsize-1 && d[r_rem] == 0)
- r_rem++;
- /* strip leading zeroes from s (but not last one) */
- while(s_rem < bnsize-1 && d[bnsize+s_rem] == 0)
- s_rem++;
-
- r_high = ((d[0+r_rem]&0x80)?1:0);
- s_high = ((d[bnsize+s_rem]&0x80)?1:0);
- raw_sig_len = pre_len + r_high + bnsize - r_rem + mid_len +
- s_high + bnsize - s_rem;
- if(ldns_buffer_reserve(target_buffer, (size_t) raw_sig_len)) {
- ldns_buffer_write_u8(target_buffer, pre[0]);
- ldns_buffer_write_u8(target_buffer, raw_sig_len-2);
- ldns_buffer_write_u8(target_buffer, pre[2]);
- ldns_buffer_write_u8(target_buffer, bnsize + r_high - r_rem);
- if(r_high)
- ldns_buffer_write_u8(target_buffer, 0);
- ldns_buffer_write(target_buffer, d+r_rem, bnsize-r_rem);
- ldns_buffer_write(target_buffer, mid, mid_len-1);
- ldns_buffer_write_u8(target_buffer, bnsize + s_high - s_rem);
- if(s_high)
- ldns_buffer_write_u8(target_buffer, 0);
- ldns_buffer_write(target_buffer, d+bnsize+s_rem, bnsize-s_rem);
- }
- return ldns_buffer_status(target_buffer);
-}
-
-#endif /* S_SPLINT_S */
-#endif /* USE_ECDSA */
-#endif /* HAVE_SSL */
diff --git a/ldns/dnssec_sign.c b/ldns/dnssec_sign.c
deleted file mode 100644
index c6d1dd2..0000000
--- a/ldns/dnssec_sign.c
+++ /dev/null
@@ -1,1614 +0,0 @@
-#include <ldns/config.h>
-
-#include <ldns/ldns.h>
-
-#include <ldns/dnssec.h>
-#include <ldns/dnssec_sign.h>
-
-#include <strings.h>
-#include <time.h>
-
-#ifdef HAVE_SSL
-/* this entire file is rather useless when you don't have
- * crypto...
- */
-#include <openssl/ssl.h>
-#include <openssl/evp.h>
-#include <openssl/rand.h>
-#include <openssl/err.h>
-#include <openssl/md5.h>
-#include <openssl/bn.h>
-#include <openssl/rsa.h>
-#ifdef USE_DSA
-#include <openssl/dsa.h>
-#endif
-#endif /* HAVE_SSL */
-
-ldns_rr *
-ldns_create_empty_rrsig(const ldns_rr_list *rrset,
- const ldns_key *current_key)
-{
- uint32_t orig_ttl;
- ldns_rr_class orig_class;
- time_t now;
- ldns_rr *current_sig;
- uint8_t label_count;
- ldns_rdf *signame;
-
- label_count = ldns_dname_label_count(ldns_rr_owner(ldns_rr_list_rr(rrset,
- 0)));
- /* RFC4035 2.2: not counting the leftmost label if it is a wildcard */
- if(ldns_dname_is_wildcard(ldns_rr_owner(ldns_rr_list_rr(rrset, 0))))
- label_count --;
-
- current_sig = ldns_rr_new_frm_type(LDNS_RR_TYPE_RRSIG);
-
- /* set the type on the new signature */
- orig_ttl = ldns_rr_ttl(ldns_rr_list_rr(rrset, 0));
- orig_class = ldns_rr_get_class(ldns_rr_list_rr(rrset, 0));
-
- ldns_rr_set_ttl(current_sig, orig_ttl);
- ldns_rr_set_class(current_sig, orig_class);
- ldns_rr_set_owner(current_sig,
- ldns_rdf_clone(
- ldns_rr_owner(
- ldns_rr_list_rr(rrset,
- 0))));
-
- /* fill in what we know of the signature */
-
- /* set the orig_ttl */
- (void)ldns_rr_rrsig_set_origttl(
- current_sig,
- ldns_native2rdf_int32(LDNS_RDF_TYPE_INT32,
- orig_ttl));
- /* the signers name */
- signame = ldns_rdf_clone(ldns_key_pubkey_owner(current_key));
- ldns_dname2canonical(signame);
- (void)ldns_rr_rrsig_set_signame(
- current_sig,
- signame);
- /* label count - get it from the first rr in the rr_list */
- (void)ldns_rr_rrsig_set_labels(
- current_sig,
- ldns_native2rdf_int8(LDNS_RDF_TYPE_INT8,
- label_count));
- /* inception, expiration */
- now = time(NULL);
- if (ldns_key_inception(current_key) != 0) {
- (void)ldns_rr_rrsig_set_inception(
- current_sig,
- ldns_native2rdf_int32(
- LDNS_RDF_TYPE_TIME,
- ldns_key_inception(current_key)));
- } else {
- (void)ldns_rr_rrsig_set_inception(
- current_sig,
- ldns_native2rdf_int32(LDNS_RDF_TYPE_TIME, now));
- }
- if (ldns_key_expiration(current_key) != 0) {
- (void)ldns_rr_rrsig_set_expiration(
- current_sig,
- ldns_native2rdf_int32(
- LDNS_RDF_TYPE_TIME,
- ldns_key_expiration(current_key)));
- } else {
- (void)ldns_rr_rrsig_set_expiration(
- current_sig,
- ldns_native2rdf_int32(
- LDNS_RDF_TYPE_TIME,
- now + LDNS_DEFAULT_EXP_TIME));
- }
-
- (void)ldns_rr_rrsig_set_keytag(
- current_sig,
- ldns_native2rdf_int16(LDNS_RDF_TYPE_INT16,
- ldns_key_keytag(current_key)));
-
- (void)ldns_rr_rrsig_set_algorithm(
- current_sig,
- ldns_native2rdf_int8(
- LDNS_RDF_TYPE_ALG,
- ldns_key_algorithm(current_key)));
-
- (void)ldns_rr_rrsig_set_typecovered(
- current_sig,
- ldns_native2rdf_int16(
- LDNS_RDF_TYPE_TYPE,
- ldns_rr_get_type(ldns_rr_list_rr(rrset,
- 0))));
- return current_sig;
-}
-
-#ifdef HAVE_SSL
-ldns_rdf *
-ldns_sign_public_buffer(ldns_buffer *sign_buf, ldns_key *current_key)
-{
- ldns_rdf *b64rdf = NULL;
-
- switch(ldns_key_algorithm(current_key)) {
-#ifdef USE_DSA
- case LDNS_SIGN_DSA:
- case LDNS_SIGN_DSA_NSEC3:
- b64rdf = ldns_sign_public_evp(
- sign_buf,
- ldns_key_evp_key(current_key),
-# ifdef HAVE_EVP_DSS1
- EVP_dss1()
-# else
- EVP_sha1()
-# endif
- );
- break;
-#endif /* USE_DSA */
- case LDNS_SIGN_RSASHA1:
- case LDNS_SIGN_RSASHA1_NSEC3:
- b64rdf = ldns_sign_public_evp(
- sign_buf,
- ldns_key_evp_key(current_key),
- EVP_sha1());
- break;
-#ifdef USE_SHA2
- case LDNS_SIGN_RSASHA256:
- b64rdf = ldns_sign_public_evp(
- sign_buf,
- ldns_key_evp_key(current_key),
- EVP_sha256());
- break;
- case LDNS_SIGN_RSASHA512:
- b64rdf = ldns_sign_public_evp(
- sign_buf,
- ldns_key_evp_key(current_key),
- EVP_sha512());
- break;
-#endif /* USE_SHA2 */
-#ifdef USE_GOST
- case LDNS_SIGN_ECC_GOST:
- b64rdf = ldns_sign_public_evp(
- sign_buf,
- ldns_key_evp_key(current_key),
- EVP_get_digestbyname("md_gost94"));
- break;
-#endif /* USE_GOST */
-#ifdef USE_ECDSA
- case LDNS_SIGN_ECDSAP256SHA256:
- b64rdf = ldns_sign_public_evp(
- sign_buf,
- ldns_key_evp_key(current_key),
- EVP_sha256());
- break;
- case LDNS_SIGN_ECDSAP384SHA384:
- b64rdf = ldns_sign_public_evp(
- sign_buf,
- ldns_key_evp_key(current_key),
- EVP_sha384());
- break;
-#endif
-#ifdef USE_ED25519
- case LDNS_SIGN_ED25519:
- b64rdf = ldns_sign_public_evp(
- sign_buf,
- ldns_key_evp_key(current_key),
- NULL);
- break;
-#endif
-#ifdef USE_ED448
- case LDNS_SIGN_ED448:
- b64rdf = ldns_sign_public_evp(
- sign_buf,
- ldns_key_evp_key(current_key),
- NULL);
- break;
-#endif
- case LDNS_SIGN_RSAMD5:
- b64rdf = ldns_sign_public_evp(
- sign_buf,
- ldns_key_evp_key(current_key),
- EVP_md5());
- break;
- default:
- /* do _you_ know this alg? */
- printf("unknown algorithm, ");
- printf("is the one used available on this system?\n");
- break;
- }
-
- return b64rdf;
-}
-
-/**
- * use this function to sign with a public/private key alg
- * return the created signatures
- */
-ldns_rr_list *
-ldns_sign_public(ldns_rr_list *rrset, ldns_key_list *keys)
-{
- ldns_rr_list *signatures;
- ldns_rr_list *rrset_clone;
- ldns_rr *current_sig;
- ldns_rdf *b64rdf;
- ldns_key *current_key;
- size_t key_count;
- uint16_t i;
- ldns_buffer *sign_buf;
- ldns_rdf *new_owner;
-
- if (!rrset || ldns_rr_list_rr_count(rrset) < 1 || !keys) {
- return NULL;
- }
-
- new_owner = NULL;
-
- /* prepare a signature and add all the know data
- * prepare the rrset. Sign this together. */
- rrset_clone = ldns_rr_list_clone(rrset);
- if (!rrset_clone) {
- return NULL;
- }
-
- /* make it canonical */
- for(i = 0; i < ldns_rr_list_rr_count(rrset_clone); i++) {
- ldns_rr_set_ttl(ldns_rr_list_rr(rrset_clone, i),
- ldns_rr_ttl(ldns_rr_list_rr(rrset, 0)));
- ldns_rr2canonical(ldns_rr_list_rr(rrset_clone, i));
- }
- /* sort */
- ldns_rr_list_sort(rrset_clone);
-
- signatures = ldns_rr_list_new();
-
- for (key_count = 0;
- key_count < ldns_key_list_key_count(keys);
- key_count++) {
- if (!ldns_key_use(ldns_key_list_key(keys, key_count))) {
- continue;
- }
- sign_buf = ldns_buffer_new(LDNS_MAX_PACKETLEN);
- if (!sign_buf) {
- ldns_rr_list_free(rrset_clone);
- ldns_rr_list_free(signatures);
- ldns_rdf_free(new_owner);
- return NULL;
- }
- b64rdf = NULL;
-
- current_key = ldns_key_list_key(keys, key_count);
- /* sign all RRs with keys that have ZSKbit, !SEPbit.
- sign DNSKEY RRs with keys that have ZSKbit&SEPbit */
- if (ldns_key_flags(current_key) & LDNS_KEY_ZONE_KEY) {
- current_sig = ldns_create_empty_rrsig(rrset_clone,
- current_key);
-
- /* right now, we have: a key, a semi-sig and an rrset. For
- * which we can create the sig and base64 encode that and
- * add that to the signature */
-
- if (ldns_rrsig2buffer_wire(sign_buf, current_sig)
- != LDNS_STATUS_OK) {
- ldns_buffer_free(sign_buf);
- /* ERROR */
- ldns_rr_list_deep_free(rrset_clone);
- ldns_rr_free(current_sig);
- ldns_rr_list_deep_free(signatures);
- return NULL;
- }
-
- /* add the rrset in sign_buf */
- if (ldns_rr_list2buffer_wire(sign_buf, rrset_clone)
- != LDNS_STATUS_OK) {
- ldns_buffer_free(sign_buf);
- ldns_rr_list_deep_free(rrset_clone);
- ldns_rr_free(current_sig);
- ldns_rr_list_deep_free(signatures);
- return NULL;
- }
-
- b64rdf = ldns_sign_public_buffer(sign_buf, current_key);
-
- if (!b64rdf) {
- /* signing went wrong */
- ldns_rr_list_deep_free(rrset_clone);
- ldns_rr_free(current_sig);
- ldns_rr_list_deep_free(signatures);
- return NULL;
- }
-
- ldns_rr_rrsig_set_sig(current_sig, b64rdf);
-
- /* push the signature to the signatures list */
- ldns_rr_list_push_rr(signatures, current_sig);
- }
- ldns_buffer_free(sign_buf); /* restart for the next key */
- }
- ldns_rr_list_deep_free(rrset_clone);
-
- return signatures;
-}
-
-/**
- * Sign data with DSA
- *
- * \param[in] to_sign The ldns_buffer containing raw data that is
- * to be signed
- * \param[in] key The DSA key structure to sign with
- * \return ldns_rdf for the RRSIG ldns_rr
- */
-ldns_rdf *
-ldns_sign_public_dsa(ldns_buffer *to_sign, DSA *key)
-{
-#ifdef USE_DSA
- unsigned char *sha1_hash;
- ldns_rdf *sigdata_rdf;
- ldns_buffer *b64sig;
-
- DSA_SIG *sig;
- const BIGNUM *R, *S;
- uint8_t *data;
- size_t pad;
-
- b64sig = ldns_buffer_new(LDNS_MAX_PACKETLEN);
- if (!b64sig) {
- return NULL;
- }
-
- sha1_hash = SHA1((unsigned char*)ldns_buffer_begin(to_sign),
- ldns_buffer_position(to_sign), NULL);
- if (!sha1_hash) {
- ldns_buffer_free(b64sig);
- return NULL;
- }
-
- sig = DSA_do_sign(sha1_hash, SHA_DIGEST_LENGTH, key);
- if(!sig) {
- ldns_buffer_free(b64sig);
- return NULL;
- }
-
- data = LDNS_XMALLOC(uint8_t, 1 + 2 * SHA_DIGEST_LENGTH);
- if(!data) {
- ldns_buffer_free(b64sig);
- DSA_SIG_free(sig);
- return NULL;
- }
-
- data[0] = 1;
-# ifdef HAVE_DSA_SIG_GET0
- DSA_SIG_get0(sig, &R, &S);
-# else
- R = sig->r;
- S = sig->s;
-# endif
- pad = 20 - (size_t) BN_num_bytes(R);
- if (pad > 0) {
- memset(data + 1, 0, pad);
- }
- BN_bn2bin(R, (unsigned char *) (data + 1) + pad);
-
- pad = 20 - (size_t) BN_num_bytes(S);
- if (pad > 0) {
- memset(data + 1 + SHA_DIGEST_LENGTH, 0, pad);
- }
- BN_bn2bin(S, (unsigned char *) (data + 1 + SHA_DIGEST_LENGTH + pad));
-
- sigdata_rdf = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64,
- 1 + 2 * SHA_DIGEST_LENGTH,
- data);
-
- ldns_buffer_free(b64sig);
- LDNS_FREE(data);
- DSA_SIG_free(sig);
-
- return sigdata_rdf;
-#else
- (void)to_sign; (void)key;
- return NULL;
-#endif
-}
-
-#ifdef USE_ECDSA
-#ifndef S_SPLINT_S
-/** returns the number of bytes per signature-component (i.e. bits/8), or 0. */
-static int
-ldns_pkey_is_ecdsa(EVP_PKEY* pkey)
-{
- EC_KEY* ec;
- const EC_GROUP* g;
-#ifdef HAVE_EVP_PKEY_BASE_ID
- if(EVP_PKEY_base_id(pkey) != EVP_PKEY_EC)
- return 0;
-#else
- if(EVP_PKEY_type(key->type) != EVP_PKEY_EC)
- return 0;
-#endif
- ec = EVP_PKEY_get1_EC_KEY(pkey);
- g = EC_KEY_get0_group(ec);
- if(!g) {
- EC_KEY_free(ec);
- return 0;
- }
- if(EC_GROUP_get_curve_name(g) == NID_X9_62_prime256v1) {
- EC_KEY_free(ec);
- return 32; /* 256/8 */
- }
- if(EC_GROUP_get_curve_name(g) == NID_secp384r1) {
- EC_KEY_free(ec);
- return 48; /* 384/8 */
- }
- /* downref the eckey, the original is still inside the pkey */
- EC_KEY_free(ec);
- return 0;
-}
-#endif /* splint */
-#endif /* USE_ECDSA */
-
-ldns_rdf *
-ldns_sign_public_evp(ldns_buffer *to_sign,
- EVP_PKEY *key,
- const EVP_MD *digest_type)
-{
- unsigned int siglen;
- ldns_rdf *sigdata_rdf = NULL;
- ldns_buffer *b64sig;
- EVP_MD_CTX *ctx;
- const EVP_MD *md_type;
- int r;
-
- siglen = 0;
- b64sig = ldns_buffer_new(LDNS_MAX_PACKETLEN);
- if (!b64sig) {
- return NULL;
- }
-
- /* initializes a signing context */
- md_type = digest_type;
-#ifdef USE_ED25519
- if(EVP_PKEY_id(key) == NID_ED25519) {
- /* digest must be NULL for ED25519 sign and verify */
- md_type = NULL;
- } else
-#endif
-#ifdef USE_ED448
- if(EVP_PKEY_id(key) == NID_ED448) {
- md_type = NULL;
- } else
-#endif
- if(!md_type) {
- /* unknown message digest */
- ldns_buffer_free(b64sig);
- return NULL;
- }
-
-#ifdef HAVE_EVP_MD_CTX_NEW
- ctx = EVP_MD_CTX_new();
-#else
- ctx = (EVP_MD_CTX*)malloc(sizeof(*ctx));
- if(ctx) EVP_MD_CTX_init(ctx);
-#endif
- if(!ctx) {
- ldns_buffer_free(b64sig);
- return NULL;
- }
-
-#if defined(USE_ED25519) || defined(USE_ED448)
- if(md_type == NULL) {
- /* for these methods we must use the one-shot DigestSign */
- r = EVP_DigestSignInit(ctx, NULL, md_type, NULL, key);
- if(r == 1) {
- size_t siglen_sizet = ldns_buffer_capacity(b64sig);
- r = EVP_DigestSign(ctx,
- (unsigned char*)ldns_buffer_begin(b64sig),
- &siglen_sizet,
- (unsigned char*)ldns_buffer_begin(to_sign),
- ldns_buffer_position(to_sign));
- siglen = (unsigned int)siglen_sizet;
- }
- } else {
-#else
- r = 0;
- if(md_type != NULL) {
-#endif
- r = EVP_SignInit(ctx, md_type);
- if(r == 1) {
- r = EVP_SignUpdate(ctx, (unsigned char*)
- ldns_buffer_begin(to_sign),
- ldns_buffer_position(to_sign));
- }
- if(r == 1) {
- r = EVP_SignFinal(ctx, (unsigned char*)
- ldns_buffer_begin(b64sig), &siglen, key);
- }
- }
- if(r != 1) {
- ldns_buffer_free(b64sig);
- EVP_MD_CTX_destroy(ctx);
- return NULL;
- }
-
- /* OpenSSL output is different, convert it */
- r = 0;
-#ifdef USE_DSA
-#ifndef S_SPLINT_S
- /* unfortunately, OpenSSL output is different from DNS DSA format */
-# ifdef HAVE_EVP_PKEY_BASE_ID
- if (EVP_PKEY_base_id(key) == EVP_PKEY_DSA) {
-# else
- if (EVP_PKEY_type(key->type) == EVP_PKEY_DSA) {
-# endif
- r = 1;
- sigdata_rdf = ldns_convert_dsa_rrsig_asn12rdf(b64sig, siglen);
- }
-#endif
-#endif
-#if defined(USE_ECDSA)
- if(
-# ifdef HAVE_EVP_PKEY_BASE_ID
- EVP_PKEY_base_id(key)
-# else
- EVP_PKEY_type(key->type)
-# endif
- == EVP_PKEY_EC) {
-# ifdef USE_ECDSA
- if(ldns_pkey_is_ecdsa(key)) {
- r = 1;
- sigdata_rdf = ldns_convert_ecdsa_rrsig_asn1len2rdf(
- b64sig, (long)siglen, ldns_pkey_is_ecdsa(key));
- }
-# endif /* USE_ECDSA */
- }
-#endif /* PKEY_EC */
- if(r == 0) {
- /* ok output for other types is the same */
- sigdata_rdf = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64, siglen,
- ldns_buffer_begin(b64sig));
- }
- ldns_buffer_free(b64sig);
- EVP_MD_CTX_destroy(ctx);
- return sigdata_rdf;
-}
-
-ldns_rdf *
-ldns_sign_public_rsasha1(ldns_buffer *to_sign, RSA *key)
-{
- unsigned char *sha1_hash;
- unsigned int siglen;
- ldns_rdf *sigdata_rdf;
- ldns_buffer *b64sig;
- int result;
-
- siglen = 0;
- b64sig = ldns_buffer_new(LDNS_MAX_PACKETLEN);
- if (!b64sig) {
- return NULL;
- }
-
- sha1_hash = SHA1((unsigned char*)ldns_buffer_begin(to_sign),
- ldns_buffer_position(to_sign), NULL);
- if (!sha1_hash) {
- ldns_buffer_free(b64sig);
- return NULL;
- }
-
- result = RSA_sign(NID_sha1, sha1_hash, SHA_DIGEST_LENGTH,
- (unsigned char*)ldns_buffer_begin(b64sig),
- &siglen, key);
- if (result != 1) {
- ldns_buffer_free(b64sig);
- return NULL;
- }
-
- sigdata_rdf = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64, siglen,
- ldns_buffer_begin(b64sig));
- ldns_buffer_free(b64sig); /* can't free this buffer ?? */
- return sigdata_rdf;
-}
-
-ldns_rdf *
-ldns_sign_public_rsamd5(ldns_buffer *to_sign, RSA *key)
-{
- unsigned char *md5_hash;
- unsigned int siglen;
- ldns_rdf *sigdata_rdf;
- ldns_buffer *b64sig;
-
- b64sig = ldns_buffer_new(LDNS_MAX_PACKETLEN);
- if (!b64sig) {
- return NULL;
- }
-
- md5_hash = MD5((unsigned char*)ldns_buffer_begin(to_sign),
- ldns_buffer_position(to_sign), NULL);
- if (!md5_hash) {
- ldns_buffer_free(b64sig);
- return NULL;
- }
-
- RSA_sign(NID_md5, md5_hash, MD5_DIGEST_LENGTH,
- (unsigned char*)ldns_buffer_begin(b64sig),
- &siglen, key);
-
- sigdata_rdf = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64, siglen,
- ldns_buffer_begin(b64sig));
- ldns_buffer_free(b64sig);
- return sigdata_rdf;
-}
-#endif /* HAVE_SSL */
-
-/**
- * Pushes all rrs from the rrsets of type A and AAAA on gluelist.
- */
-static ldns_status
-ldns_dnssec_addresses_on_glue_list(
- ldns_dnssec_rrsets *cur_rrset,
- ldns_rr_list *glue_list)
-{
- ldns_dnssec_rrs *cur_rrs;
- while (cur_rrset) {
- if (cur_rrset->type == LDNS_RR_TYPE_A
- || cur_rrset->type == LDNS_RR_TYPE_AAAA) {
- for (cur_rrs = cur_rrset->rrs;
- cur_rrs;
- cur_rrs = cur_rrs->next) {
- if (cur_rrs->rr) {
- if (!ldns_rr_list_push_rr(glue_list,
- cur_rrs->rr)) {
- return LDNS_STATUS_MEM_ERR;
- /* ldns_rr_list_push_rr()
- * returns false when unable
- * to increase the capacity
- * of the ldsn_rr_list
- */
- }
- }
- }
- }
- cur_rrset = cur_rrset->next;
- }
- return LDNS_STATUS_OK;
-}
-
-/**
- * Marks the names in the zone that are occluded. Those names will be skipped
- * when walking the tree with the ldns_dnssec_name_node_next_nonglue()
- * function. But watch out! Names that are partially occluded (like glue with
- * the same name as the delegation) will not be marked and should specifically
- * be taken into account separately.
- *
- * When glue_list is given (not NULL), in the process of marking the names, all
- * glue resource records will be pushed to that list, even glue at delegation names.
- *
- * \param[in] zone the zone in which to mark the names
- * \param[in] glue_list the list to which to push the glue rrs
- * \return LDNS_STATUS_OK on success, an error code otherwise
- */
-ldns_status
-ldns_dnssec_zone_mark_and_get_glue(ldns_dnssec_zone *zone,
- ldns_rr_list *glue_list)
-{
- ldns_rbnode_t *node;
- ldns_dnssec_name *name;
- ldns_rdf *owner;
- ldns_rdf *cut = NULL; /* keeps track of zone cuts */
- /* When the cut is caused by a delegation, below_delegation will be 1.
- * When caused by a DNAME, below_delegation will be 0.
- */
- int below_delegation = -1; /* init suppresses comiler warning */
- ldns_status s;
-
- if (!zone || !zone->names) {
- return LDNS_STATUS_NULL;
- }
- for (node = ldns_rbtree_first(zone->names);
- node != LDNS_RBTREE_NULL;
- node = ldns_rbtree_next(node)) {
- name = (ldns_dnssec_name *) node->data;
- owner = ldns_dnssec_name_name(name);
-
- if (cut) {
- /* The previous node was a zone cut, or a subdomain
- * below a zone cut. Is this node (still) a subdomain
- * below the cut? Then the name is occluded. Unless
- * the name contains a SOA, after which we are
- * authoritative again.
- *
- * FIXME! If there are labels in between the SOA and
- * the cut, going from the authoritative space (below
- * the SOA) up into occluded space again, will not be
- * detected with the contruct below!
- */
- if (ldns_dname_is_subdomain(owner, cut) &&
- !ldns_dnssec_rrsets_contains_type(
- name->rrsets, LDNS_RR_TYPE_SOA)) {
-
- if (below_delegation && glue_list) {
- s = ldns_dnssec_addresses_on_glue_list(
- name->rrsets, glue_list);
- if (s != LDNS_STATUS_OK) {
- return s;
- }
- }
- name->is_glue = true; /* Mark occluded name! */
- continue;
- } else {
- cut = NULL;
- }
- }
-
- /* The node is not below a zone cut. Is it a zone cut itself?
- * Everything below a SOA is authoritative of course; Except
- * when the name also contains a DNAME :).
- */
- if (ldns_dnssec_rrsets_contains_type(
- name->rrsets, LDNS_RR_TYPE_NS)
- && !ldns_dnssec_rrsets_contains_type(
- name->rrsets, LDNS_RR_TYPE_SOA)) {
- cut = owner;
- below_delegation = 1;
- if (glue_list) { /* record glue on the zone cut */
- s = ldns_dnssec_addresses_on_glue_list(
- name->rrsets, glue_list);
- if (s != LDNS_STATUS_OK) {
- return s;
- }
- }
- } else if (ldns_dnssec_rrsets_contains_type(
- name->rrsets, LDNS_RR_TYPE_DNAME)) {
- cut = owner;
- below_delegation = 0;
- }
- }
- return LDNS_STATUS_OK;
-}
-
-/**
- * Marks the names in the zone that are occluded. Those names will be skipped
- * when walking the tree with the ldns_dnssec_name_node_next_nonglue()
- * function. But watch out! Names that are partially occluded (like glue with
- * the same name as the delegation) will not be marked and should specifically
- * be taken into account separately.
- *
- * \param[in] zone the zone in which to mark the names
- * \return LDNS_STATUS_OK on success, an error code otherwise
- */
-ldns_status
-ldns_dnssec_zone_mark_glue(ldns_dnssec_zone *zone)
-{
- return ldns_dnssec_zone_mark_and_get_glue(zone, NULL);
-}
-
-ldns_rbnode_t *
-ldns_dnssec_name_node_next_nonglue(ldns_rbnode_t *node)
-{
- ldns_rbnode_t *next_node = NULL;
- ldns_dnssec_name *next_name = NULL;
- bool done = false;
-
- if (node == LDNS_RBTREE_NULL) {
- return NULL;
- }
- next_node = node;
- while (!done) {
- if (next_node == LDNS_RBTREE_NULL) {
- return NULL;
- } else {
- next_name = (ldns_dnssec_name *)next_node->data;
- if (!next_name->is_glue) {
- done = true;
- } else {
- next_node = ldns_rbtree_next(next_node);
- }
- }
- }
- return next_node;
-}
-
-ldns_status
-ldns_dnssec_zone_create_nsecs(ldns_dnssec_zone *zone,
- ldns_rr_list *new_rrs)
-{
-
- ldns_rbnode_t *first_node, *cur_node, *next_node;
- ldns_dnssec_name *cur_name, *next_name;
- ldns_rr *nsec_rr;
- uint32_t nsec_ttl;
- ldns_dnssec_rrsets *soa;
-
- /* the TTL of NSEC rrs should be set to the minimum TTL of
- * the zone SOA (RFC4035 Section 2.3)
- */
- soa = ldns_dnssec_name_find_rrset(zone->soa, LDNS_RR_TYPE_SOA);
-
- /* did the caller actually set it? if not,
- * fall back to default ttl
- */
- if (soa && soa->rrs && soa->rrs->rr
- && (ldns_rr_rdf(soa->rrs->rr, 6) != NULL)) {
- nsec_ttl = ldns_rdf2native_int32(ldns_rr_rdf(soa->rrs->rr, 6));
- } else {
- nsec_ttl = LDNS_DEFAULT_TTL;
- }
-
- first_node = ldns_dnssec_name_node_next_nonglue(
- ldns_rbtree_first(zone->names));
- cur_node = first_node;
- if (cur_node) {
- next_node = ldns_dnssec_name_node_next_nonglue(
- ldns_rbtree_next(cur_node));
- } else {
- next_node = NULL;
- }
-
- while (cur_node && next_node) {
- cur_name = (ldns_dnssec_name *)cur_node->data;
- next_name = (ldns_dnssec_name *)next_node->data;
- nsec_rr = ldns_dnssec_create_nsec(cur_name,
- next_name,
- LDNS_RR_TYPE_NSEC);
- ldns_rr_set_ttl(nsec_rr, nsec_ttl);
- if(ldns_dnssec_name_add_rr(cur_name, nsec_rr)!=LDNS_STATUS_OK){
- ldns_rr_free(nsec_rr);
- return LDNS_STATUS_ERR;
- }
- ldns_rr_list_push_rr(new_rrs, nsec_rr);
- cur_node = next_node;
- if (cur_node) {
- next_node = ldns_dnssec_name_node_next_nonglue(
- ldns_rbtree_next(cur_node));
- }
- }
-
- if (cur_node && !next_node) {
- cur_name = (ldns_dnssec_name *)cur_node->data;
- next_name = (ldns_dnssec_name *)first_node->data;
- nsec_rr = ldns_dnssec_create_nsec(cur_name,
- next_name,
- LDNS_RR_TYPE_NSEC);
- ldns_rr_set_ttl(nsec_rr, nsec_ttl);
- if(ldns_dnssec_name_add_rr(cur_name, nsec_rr)!=LDNS_STATUS_OK){
- ldns_rr_free(nsec_rr);
- return LDNS_STATUS_ERR;
- }
- ldns_rr_list_push_rr(new_rrs, nsec_rr);
- } else {
- printf("error\n");
- }
-
- return LDNS_STATUS_OK;
-}
-
-#ifdef HAVE_SSL
-static void
-ldns_hashed_names_node_free(ldns_rbnode_t *node, void *arg) {
- (void) arg;
- LDNS_FREE(node);
-}
-
-static ldns_status
-ldns_dnssec_zone_create_nsec3s_mkmap(ldns_dnssec_zone *zone,
- ldns_rr_list *new_rrs,
- uint8_t algorithm,
- uint8_t flags,
- uint16_t iterations,
- uint8_t salt_length,
- uint8_t *salt,
- ldns_rbtree_t **map)
-{
- ldns_rbnode_t *first_name_node;
- ldns_rbnode_t *current_name_node;
- ldns_dnssec_name *current_name;
- ldns_status result = LDNS_STATUS_OK;
- ldns_rr *nsec_rr;
- ldns_rr_list *nsec3_list;
- uint32_t nsec_ttl;
- ldns_dnssec_rrsets *soa;
- ldns_rbnode_t *hashmap_node;
-
- if (!zone || !new_rrs || !zone->names) {
- return LDNS_STATUS_ERR;
- }
-
- /* the TTL of NSEC rrs should be set to the minimum TTL of
- * the zone SOA (RFC4035 Section 2.3)
- */
- soa = ldns_dnssec_name_find_rrset(zone->soa, LDNS_RR_TYPE_SOA);
-
- /* did the caller actually set it? if not,
- * fall back to default ttl
- */
- if (soa && soa->rrs && soa->rrs->rr
- && ldns_rr_rdf(soa->rrs->rr, 6) != NULL) {
- nsec_ttl = ldns_rdf2native_int32(ldns_rr_rdf(soa->rrs->rr, 6));
- } else {
- nsec_ttl = LDNS_DEFAULT_TTL;
- }
-
- if (ldns_rdf_size(zone->soa->name) > 222) {
- return LDNS_STATUS_NSEC3_DOMAINNAME_OVERFLOW;
- }
-
- if (zone->hashed_names) {
- ldns_traverse_postorder(zone->hashed_names,
- ldns_hashed_names_node_free, NULL);
- LDNS_FREE(zone->hashed_names);
- }
- zone->hashed_names = ldns_rbtree_create(ldns_dname_compare_v);
- if (zone->hashed_names && map) {
- *map = zone->hashed_names;
- }
-
- first_name_node = ldns_dnssec_name_node_next_nonglue(
- ldns_rbtree_first(zone->names));
-
- current_name_node = first_name_node;
-
- while (current_name_node && current_name_node != LDNS_RBTREE_NULL &&
- result == LDNS_STATUS_OK) {
-
- current_name = (ldns_dnssec_name *) current_name_node->data;
- nsec_rr = ldns_dnssec_create_nsec3(current_name,
- NULL,
- zone->soa->name,
- algorithm,
- flags,
- iterations,
- salt_length,
- salt);
- /* by default, our nsec based generator adds rrsigs
- * remove the bitmap for empty nonterminals */
- if (!current_name->rrsets) {
- ldns_rdf_deep_free(ldns_rr_pop_rdf(nsec_rr));
- }
- ldns_rr_set_ttl(nsec_rr, nsec_ttl);
- result = ldns_dnssec_name_add_rr(current_name, nsec_rr);
- ldns_rr_list_push_rr(new_rrs, nsec_rr);
- if (ldns_rr_owner(nsec_rr)) {
- hashmap_node = LDNS_MALLOC(ldns_rbnode_t);
- if (hashmap_node == NULL) {
- return LDNS_STATUS_MEM_ERR;
- }
- current_name->hashed_name =
- ldns_dname_label(ldns_rr_owner(nsec_rr), 0);
-
- if (current_name->hashed_name == NULL) {
- LDNS_FREE(hashmap_node);
- return LDNS_STATUS_MEM_ERR;
- }
- hashmap_node->key = current_name->hashed_name;
- hashmap_node->data = current_name;
-
- if (! ldns_rbtree_insert(zone->hashed_names
- , hashmap_node)) {
- LDNS_FREE(hashmap_node);
- }
- }
- current_name_node = ldns_dnssec_name_node_next_nonglue(
- ldns_rbtree_next(current_name_node));
- }
- if (result != LDNS_STATUS_OK) {
- return result;
- }
-
- /* Make sorted list of nsec3s (via zone->hashed_names)
- */
- nsec3_list = ldns_rr_list_new();
- if (nsec3_list == NULL) {
- return LDNS_STATUS_MEM_ERR;
- }
- for ( hashmap_node = ldns_rbtree_first(zone->hashed_names)
- ; hashmap_node != LDNS_RBTREE_NULL
- ; hashmap_node = ldns_rbtree_next(hashmap_node)
- ) {
- nsec_rr = ((ldns_dnssec_name *) hashmap_node->data)->nsec;
- if (nsec_rr) {
- ldns_rr_list_push_rr(nsec3_list, nsec_rr);
- }
- }
- result = ldns_dnssec_chain_nsec3_list(nsec3_list);
- ldns_rr_list_free(nsec3_list);
-
- return result;
-}
-
-ldns_status
-ldns_dnssec_zone_create_nsec3s(ldns_dnssec_zone *zone,
- ldns_rr_list *new_rrs,
- uint8_t algorithm,
- uint8_t flags,
- uint16_t iterations,
- uint8_t salt_length,
- uint8_t *salt)
-{
- return ldns_dnssec_zone_create_nsec3s_mkmap(zone, new_rrs, algorithm,
- flags, iterations, salt_length, salt, NULL);
-
-}
-#endif /* HAVE_SSL */
-
-ldns_dnssec_rrs *
-ldns_dnssec_remove_signatures( ldns_dnssec_rrs *signatures
- , ATTR_UNUSED(ldns_key_list *key_list)
- , int (*func)(ldns_rr *, void *)
- , void *arg
- )
-{
- ldns_dnssec_rrs *base_rrs = signatures;
- ldns_dnssec_rrs *cur_rr = base_rrs;
- ldns_dnssec_rrs *prev_rr = NULL;
- ldns_dnssec_rrs *next_rr;
-
- uint16_t keytag;
- size_t i;
-
- if (!cur_rr) {
- switch(func(NULL, arg)) {
- case LDNS_SIGNATURE_LEAVE_ADD_NEW:
- case LDNS_SIGNATURE_REMOVE_ADD_NEW:
- break;
- case LDNS_SIGNATURE_LEAVE_NO_ADD:
- case LDNS_SIGNATURE_REMOVE_NO_ADD:
- ldns_key_list_set_use(key_list, false);
- break;
- default:
-#ifdef STDERR_MSGS
- fprintf(stderr, "[XX] unknown return value from callback\n");
-#endif
- break;
- }
- return NULL;
- }
- (void)func(cur_rr->rr, arg);
-
- while (cur_rr) {
- next_rr = cur_rr->next;
-
- switch (func(cur_rr->rr, arg)) {
- case LDNS_SIGNATURE_LEAVE_ADD_NEW:
- prev_rr = cur_rr;
- break;
- case LDNS_SIGNATURE_LEAVE_NO_ADD:
- keytag = ldns_rdf2native_int16(
- ldns_rr_rrsig_keytag(cur_rr->rr));
- for (i = 0; i < ldns_key_list_key_count(key_list); i++) {
- if (ldns_key_keytag(ldns_key_list_key(key_list, i)) ==
- keytag) {
- ldns_key_set_use(ldns_key_list_key(key_list, i),
- false);
- }
- }
- prev_rr = cur_rr;
- break;
- case LDNS_SIGNATURE_REMOVE_NO_ADD:
- keytag = ldns_rdf2native_int16(
- ldns_rr_rrsig_keytag(cur_rr->rr));
- for (i = 0; i < ldns_key_list_key_count(key_list); i++) {
- if (ldns_key_keytag(ldns_key_list_key(key_list, i))
- == keytag) {
- ldns_key_set_use(ldns_key_list_key(key_list, i),
- false);
- }
- }
- if (prev_rr) {
- prev_rr->next = next_rr;
- } else {
- base_rrs = next_rr;
- }
- LDNS_FREE(cur_rr);
- break;
- case LDNS_SIGNATURE_REMOVE_ADD_NEW:
- if (prev_rr) {
- prev_rr->next = next_rr;
- } else {
- base_rrs = next_rr;
- }
- LDNS_FREE(cur_rr);
- break;
- default:
-#ifdef STDERR_MSGS
- fprintf(stderr, "[XX] unknown return value from callback\n");
-#endif
- break;
- }
- cur_rr = next_rr;
- }
-
- return base_rrs;
-}
-
-#ifdef HAVE_SSL
-ldns_status
-ldns_dnssec_zone_create_rrsigs(ldns_dnssec_zone *zone,
- ldns_rr_list *new_rrs,
- ldns_key_list *key_list,
- int (*func)(ldns_rr *, void*),
- void *arg)
-{
- return ldns_dnssec_zone_create_rrsigs_flg(zone, new_rrs, key_list,
- func, arg, 0);
-}
-
-/** If there are KSKs use only them and mark ZSKs unused */
-static void
-ldns_key_list_filter_for_dnskey(ldns_key_list *key_list, int flags)
-{
- bool algos[256]
-#ifndef S_SPLINT_S
- = { false }
-#endif
- ;
- ldns_signing_algorithm saw_ksk = 0;
- ldns_key *key;
- size_t i;
-
- if (!ldns_key_list_key_count(key_list))
- return;
-
- for (i = 0; i < ldns_key_list_key_count(key_list); i++) {
- key = ldns_key_list_key(key_list, i);
- if ((ldns_key_flags(key) & LDNS_KEY_SEP_KEY) && !saw_ksk)
- saw_ksk = ldns_key_algorithm(key);
- algos[ldns_key_algorithm(key)] = true;
- }
- if (!saw_ksk)
- return;
- else
- algos[saw_ksk] = 0;
-
- for (i =0; i < ldns_key_list_key_count(key_list); i++) {
- key = ldns_key_list_key(key_list, i);
- if (!(ldns_key_flags(key) & LDNS_KEY_SEP_KEY)) {
- /* We have a ZSK.
- * Still use it if it has a unique algorithm though!
- */
- if ((flags & LDNS_SIGN_WITH_ALL_ALGORITHMS) &&
- algos[ldns_key_algorithm(key)])
- algos[ldns_key_algorithm(key)] = false;
- else
- ldns_key_set_use(key, 0);
- }
- }
-}
-
-/** If there are no ZSKs use KSK as ZSK */
-static void
-ldns_key_list_filter_for_non_dnskey(ldns_key_list *key_list, int flags)
-{
- bool algos[256]
-#ifndef S_SPLINT_S
- = { false }
-#endif
- ;
- ldns_signing_algorithm saw_zsk = 0;
- ldns_key *key;
- size_t i;
-
- if (!ldns_key_list_key_count(key_list))
- return;
-
- for (i = 0; i < ldns_key_list_key_count(key_list); i++) {
- key = ldns_key_list_key(key_list, i);
- if (!(ldns_key_flags(key) & LDNS_KEY_SEP_KEY) && !saw_zsk)
- saw_zsk = ldns_key_algorithm(key);
- algos[ldns_key_algorithm(key)] = true;
- }
- if (!saw_zsk)
- return;
- else
- algos[saw_zsk] = 0;
-
- for (i = 0; i < ldns_key_list_key_count(key_list); i++) {
- key = ldns_key_list_key(key_list, i);
- if((ldns_key_flags(key) & LDNS_KEY_SEP_KEY)) {
- /* We have a KSK.
- * Still use it if it has a unique algorithm though!
- */
- if ((flags & LDNS_SIGN_WITH_ALL_ALGORITHMS) &&
- algos[ldns_key_algorithm(key)])
- algos[ldns_key_algorithm(key)] = false;
- else
- ldns_key_set_use(key, 0);
- }
- }
-}
-
-ldns_status
-ldns_dnssec_zone_create_rrsigs_flg( ldns_dnssec_zone *zone
- , ldns_rr_list *new_rrs
- , ldns_key_list *key_list
- , int (*func)(ldns_rr *, void*)
- , void *arg
- , int flags
- )
-{
- ldns_status result = LDNS_STATUS_OK;
-
- ldns_rbnode_t *cur_node;
- ldns_rr_list *rr_list;
-
- ldns_dnssec_name *cur_name;
- ldns_dnssec_rrsets *cur_rrset;
- ldns_dnssec_rrs *cur_rr;
-
- ldns_rr_list *siglist;
-
- size_t i;
-
- int on_delegation_point = 0; /* handle partially occluded names */
-
- ldns_rr_list *pubkey_list = ldns_rr_list_new();
- for (i = 0; i<ldns_key_list_key_count(key_list); i++) {
- ldns_rr_list_push_rr( pubkey_list
- , ldns_key2rr(ldns_key_list_key(
- key_list, i))
- );
- }
- /* TODO: callback to see is list should be signed */
- /* TODO: remove 'old' signatures from signature list */
- cur_node = ldns_rbtree_first(zone->names);
- while (cur_node != LDNS_RBTREE_NULL) {
- cur_name = (ldns_dnssec_name *) cur_node->data;
-
- if (!cur_name->is_glue) {
- on_delegation_point = ldns_dnssec_rrsets_contains_type(
- cur_name->rrsets, LDNS_RR_TYPE_NS)
- && !ldns_dnssec_rrsets_contains_type(
- cur_name->rrsets, LDNS_RR_TYPE_SOA);
- cur_rrset = cur_name->rrsets;
- while (cur_rrset) {
- /* reset keys to use */
- ldns_key_list_set_use(key_list, true);
-
- /* walk through old sigs, remove the old,
- and mark which keys (not) to use) */
- cur_rrset->signatures =
- ldns_dnssec_remove_signatures(cur_rrset->signatures,
- key_list,
- func,
- arg);
- if(cur_rrset->type == LDNS_RR_TYPE_DNSKEY ||
- cur_rrset->type == LDNS_RR_TYPE_CDNSKEY ||
- cur_rrset->type == LDNS_RR_TYPE_CDS) {
- if(!(flags&LDNS_SIGN_DNSKEY_WITH_ZSK)) {
- ldns_key_list_filter_for_dnskey(key_list, flags);
- }
- } else {
- ldns_key_list_filter_for_non_dnskey(key_list, flags);
- }
-
- /* TODO: just set count to zero? */
- rr_list = ldns_rr_list_new();
-
- cur_rr = cur_rrset->rrs;
- while (cur_rr) {
- ldns_rr_list_push_rr(rr_list, cur_rr->rr);
- cur_rr = cur_rr->next;
- }
-
- /* only sign non-delegation RRsets */
- /* (glue should have been marked earlier,
- * except on the delegation points itself) */
- if (!on_delegation_point ||
- ldns_rr_list_type(rr_list)
- == LDNS_RR_TYPE_DS ||
- ldns_rr_list_type(rr_list)
- == LDNS_RR_TYPE_NSEC ||
- ldns_rr_list_type(rr_list)
- == LDNS_RR_TYPE_NSEC3) {
- siglist = ldns_sign_public(rr_list, key_list);
- for (i = 0; i < ldns_rr_list_rr_count(siglist); i++) {
- if (cur_rrset->signatures) {
- result = ldns_dnssec_rrs_add_rr(cur_rrset->signatures,
- ldns_rr_list_rr(siglist,
- i));
- } else {
- cur_rrset->signatures = ldns_dnssec_rrs_new();
- cur_rrset->signatures->rr =
- ldns_rr_list_rr(siglist, i);
- }
- if (new_rrs) {
- ldns_rr_list_push_rr(new_rrs,
- ldns_rr_list_rr(siglist,
- i));
- }
- }
- ldns_rr_list_free(siglist);
- }
-
- ldns_rr_list_free(rr_list);
-
- cur_rrset = cur_rrset->next;
- }
-
- /* sign the nsec */
- ldns_key_list_set_use(key_list, true);
- cur_name->nsec_signatures =
- ldns_dnssec_remove_signatures(cur_name->nsec_signatures,
- key_list,
- func,
- arg);
- ldns_key_list_filter_for_non_dnskey(key_list, flags);
-
- rr_list = ldns_rr_list_new();
- ldns_rr_list_push_rr(rr_list, cur_name->nsec);
- siglist = ldns_sign_public(rr_list, key_list);
-
- for (i = 0; i < ldns_rr_list_rr_count(siglist); i++) {
- if (cur_name->nsec_signatures) {
- result = ldns_dnssec_rrs_add_rr(cur_name->nsec_signatures,
- ldns_rr_list_rr(siglist, i));
- } else {
- cur_name->nsec_signatures = ldns_dnssec_rrs_new();
- cur_name->nsec_signatures->rr =
- ldns_rr_list_rr(siglist, i);
- }
- if (new_rrs) {
- ldns_rr_list_push_rr(new_rrs,
- ldns_rr_list_rr(siglist, i));
- }
- }
-
- ldns_rr_list_free(siglist);
- ldns_rr_list_free(rr_list);
- }
- cur_node = ldns_rbtree_next(cur_node);
- }
-
- ldns_rr_list_deep_free(pubkey_list);
- return result;
-}
-
-ldns_status
-ldns_dnssec_zone_sign(ldns_dnssec_zone *zone,
- ldns_rr_list *new_rrs,
- ldns_key_list *key_list,
- int (*func)(ldns_rr *, void *),
- void *arg)
-{
- return ldns_dnssec_zone_sign_flg(zone, new_rrs, key_list, func, arg, 0);
-}
-
-ldns_status
-ldns_dnssec_zone_sign_flg(ldns_dnssec_zone *zone,
- ldns_rr_list *new_rrs,
- ldns_key_list *key_list,
- int (*func)(ldns_rr *, void *),
- void *arg,
- int flags)
-{
- ldns_status result = LDNS_STATUS_OK;
-
- if (!zone || !new_rrs || !key_list) {
- return LDNS_STATUS_ERR;
- }
-
- /* zone is already sorted */
- result = ldns_dnssec_zone_mark_glue(zone);
- if (result != LDNS_STATUS_OK) {
- return result;
- }
-
- /* check whether we need to add nsecs */
- if (zone->names && !((ldns_dnssec_name *)zone->names->root->data)->nsec) {
- result = ldns_dnssec_zone_create_nsecs(zone, new_rrs);
- if (result != LDNS_STATUS_OK) {
- return result;
- }
- }
-
- result = ldns_dnssec_zone_create_rrsigs_flg(zone,
- new_rrs,
- key_list,
- func,
- arg,
- flags);
-
- return result;
-}
-
-ldns_status
-ldns_dnssec_zone_sign_nsec3(ldns_dnssec_zone *zone,
- ldns_rr_list *new_rrs,
- ldns_key_list *key_list,
- int (*func)(ldns_rr *, void *),
- void *arg,
- uint8_t algorithm,
- uint8_t flags,
- uint16_t iterations,
- uint8_t salt_length,
- uint8_t *salt)
-{
- return ldns_dnssec_zone_sign_nsec3_flg_mkmap(zone, new_rrs, key_list,
- func, arg, algorithm, flags, iterations, salt_length, salt, 0,
- NULL);
-}
-
-ldns_status
-ldns_dnssec_zone_sign_nsec3_flg_mkmap(ldns_dnssec_zone *zone,
- ldns_rr_list *new_rrs,
- ldns_key_list *key_list,
- int (*func)(ldns_rr *, void *),
- void *arg,
- uint8_t algorithm,
- uint8_t flags,
- uint16_t iterations,
- uint8_t salt_length,
- uint8_t *salt,
- int signflags,
- ldns_rbtree_t **map)
-{
- ldns_rr *nsec3, *nsec3param;
- ldns_status result = LDNS_STATUS_OK;
-
- /* zone is already sorted */
- result = ldns_dnssec_zone_mark_glue(zone);
- if (result != LDNS_STATUS_OK) {
- return result;
- }
-
- /* TODO if there are already nsec3s presents and their
- * parameters are the same as these, we don't have to recreate
- */
- if (zone->names) {
- /* add empty nonterminals */
- result = ldns_dnssec_zone_add_empty_nonterminals(zone);
- if (result != LDNS_STATUS_OK) {
- return result;
- }
-
- nsec3 = ((ldns_dnssec_name *)zone->names->root->data)->nsec;
- if (nsec3 && ldns_rr_get_type(nsec3) == LDNS_RR_TYPE_NSEC3) {
- /* no need to recreate */
- } else {
- if (!ldns_dnssec_zone_find_rrset(zone,
- zone->soa->name,
- LDNS_RR_TYPE_NSEC3PARAM)) {
- /* create and add the nsec3param rr */
- nsec3param =
- ldns_rr_new_frm_type(LDNS_RR_TYPE_NSEC3PARAM);
- ldns_rr_set_owner(nsec3param,
- ldns_rdf_clone(zone->soa->name));
- ldns_nsec3_add_param_rdfs(nsec3param,
- algorithm,
- flags,
- iterations,
- salt_length,
- salt);
- /* always set bit 7 of the flags to zero, according to
- * rfc5155 section 11. The bits are counted from right to left,
- * so bit 7 in rfc5155 is bit 0 in ldns */
- ldns_set_bit(ldns_rdf_data(ldns_rr_rdf(nsec3param, 1)), 0, 0);
- result = ldns_dnssec_zone_add_rr(zone, nsec3param);
- if (result != LDNS_STATUS_OK) {
- return result;
- }
- ldns_rr_list_push_rr(new_rrs, nsec3param);
- }
- result = ldns_dnssec_zone_create_nsec3s_mkmap(zone,
- new_rrs,
- algorithm,
- flags,
- iterations,
- salt_length,
- salt,
- map);
- if (result != LDNS_STATUS_OK) {
- return result;
- }
- }
-
- result = ldns_dnssec_zone_create_rrsigs_flg(zone,
- new_rrs,
- key_list,
- func,
- arg,
- signflags);
- }
-
- return result;
-}
-
-ldns_status
-ldns_dnssec_zone_sign_nsec3_flg(ldns_dnssec_zone *zone,
- ldns_rr_list *new_rrs,
- ldns_key_list *key_list,
- int (*func)(ldns_rr *, void *),
- void *arg,
- uint8_t algorithm,
- uint8_t flags,
- uint16_t iterations,
- uint8_t salt_length,
- uint8_t *salt,
- int signflags)
-{
- return ldns_dnssec_zone_sign_nsec3_flg_mkmap(zone, new_rrs, key_list,
- func, arg, algorithm, flags, iterations, salt_length, salt,
- signflags, NULL);
-}
-
-ldns_zone *
-ldns_zone_sign(const ldns_zone *zone, ldns_key_list *key_list)
-{
- ldns_dnssec_zone *dnssec_zone;
- ldns_zone *signed_zone;
- ldns_rr_list *new_rrs;
- size_t i;
-
- signed_zone = ldns_zone_new();
- dnssec_zone = ldns_dnssec_zone_new();
-
- (void) ldns_dnssec_zone_add_rr(dnssec_zone, ldns_zone_soa(zone));
- ldns_zone_set_soa(signed_zone, ldns_rr_clone(ldns_zone_soa(zone)));
-
- for (i = 0; i < ldns_rr_list_rr_count(ldns_zone_rrs(zone)); i++) {
- (void) ldns_dnssec_zone_add_rr(dnssec_zone,
- ldns_rr_list_rr(ldns_zone_rrs(zone),
- i));
- ldns_zone_push_rr(signed_zone,
- ldns_rr_clone(ldns_rr_list_rr(ldns_zone_rrs(zone),
- i)));
- }
-
- new_rrs = ldns_rr_list_new();
- (void) ldns_dnssec_zone_sign(dnssec_zone,
- new_rrs,
- key_list,
- ldns_dnssec_default_replace_signatures,
- NULL);
-
- for (i = 0; i < ldns_rr_list_rr_count(new_rrs); i++) {
- ldns_rr_list_push_rr(ldns_zone_rrs(signed_zone),
- ldns_rr_clone(ldns_rr_list_rr(new_rrs, i)));
- }
-
- ldns_rr_list_deep_free(new_rrs);
- ldns_dnssec_zone_free(dnssec_zone);
-
- return signed_zone;
-}
-
-ldns_zone *
-ldns_zone_sign_nsec3(ldns_zone *zone, ldns_key_list *key_list, uint8_t algorithm, uint8_t flags, uint16_t iterations, uint8_t salt_length, uint8_t *salt)
-{
- ldns_dnssec_zone *dnssec_zone;
- ldns_zone *signed_zone;
- ldns_rr_list *new_rrs;
- size_t i;
-
- signed_zone = ldns_zone_new();
- dnssec_zone = ldns_dnssec_zone_new();
-
- (void) ldns_dnssec_zone_add_rr(dnssec_zone, ldns_zone_soa(zone));
- ldns_zone_set_soa(signed_zone, ldns_rr_clone(ldns_zone_soa(zone)));
-
- for (i = 0; i < ldns_rr_list_rr_count(ldns_zone_rrs(zone)); i++) {
- (void) ldns_dnssec_zone_add_rr(dnssec_zone,
- ldns_rr_list_rr(ldns_zone_rrs(zone),
- i));
- ldns_zone_push_rr(signed_zone,
- ldns_rr_clone(ldns_rr_list_rr(ldns_zone_rrs(zone),
- i)));
- }
-
- new_rrs = ldns_rr_list_new();
- (void) ldns_dnssec_zone_sign_nsec3(dnssec_zone,
- new_rrs,
- key_list,
- ldns_dnssec_default_replace_signatures,
- NULL,
- algorithm,
- flags,
- iterations,
- salt_length,
- salt);
-
- for (i = 0; i < ldns_rr_list_rr_count(new_rrs); i++) {
- ldns_rr_list_push_rr(ldns_zone_rrs(signed_zone),
- ldns_rr_clone(ldns_rr_list_rr(new_rrs, i)));
- }
-
- ldns_rr_list_deep_free(new_rrs);
- ldns_dnssec_zone_free(dnssec_zone);
-
- return signed_zone;
-}
-#endif /* HAVE_SSL */
-
-
diff --git a/ldns/dnssec_verify.c b/ldns/dnssec_verify.c
deleted file mode 100644
index d22962e..0000000
--- a/ldns/dnssec_verify.c
+++ /dev/null
@@ -1,2813 +0,0 @@
-#include <ldns/config.h>
-
-#include <ldns/ldns.h>
-
-#include <strings.h>
-#include <time.h>
-
-#ifdef HAVE_SSL
-/* this entire file is rather useless when you don't have
- * crypto...
- */
-#include <openssl/ssl.h>
-#include <openssl/evp.h>
-#include <openssl/rand.h>
-#include <openssl/err.h>
-#include <openssl/md5.h>
-
-ldns_dnssec_data_chain *
-ldns_dnssec_data_chain_new(void)
-{
- ldns_dnssec_data_chain *nc = LDNS_CALLOC(ldns_dnssec_data_chain, 1);
- if(!nc) return NULL;
- /*
- * not needed anymore because CALLOC initalizes everything to zero.
-
- nc->rrset = NULL;
- nc->parent_type = 0;
- nc->parent = NULL;
- nc->signatures = NULL;
- nc->packet_rcode = 0;
- nc->packet_qtype = 0;
- nc->packet_nodata = false;
-
- */
- return nc;
-}
-
-void
-ldns_dnssec_data_chain_free(ldns_dnssec_data_chain *chain)
-{
- LDNS_FREE(chain);
-}
-
-void
-ldns_dnssec_data_chain_deep_free(ldns_dnssec_data_chain *chain)
-{
- ldns_rr_list_deep_free(chain->rrset);
- ldns_rr_list_deep_free(chain->signatures);
- if (chain->parent) {
- ldns_dnssec_data_chain_deep_free(chain->parent);
- }
- LDNS_FREE(chain);
-}
-
-void
-ldns_dnssec_data_chain_print_fmt(FILE *out, const ldns_output_format *fmt,
- const ldns_dnssec_data_chain *chain)
-{
- ldns_lookup_table *rcode;
- const ldns_rr_descriptor *rr_descriptor;
- if (chain) {
- ldns_dnssec_data_chain_print_fmt(out, fmt, chain->parent);
- if (ldns_rr_list_rr_count(chain->rrset) > 0) {
- rcode = ldns_lookup_by_id(ldns_rcodes,
- (int) chain->packet_rcode);
- if (rcode) {
- fprintf(out, ";; rcode: %s\n", rcode->name);
- }
-
- rr_descriptor = ldns_rr_descript(chain->packet_qtype);
- if (rr_descriptor && rr_descriptor->_name) {
- fprintf(out, ";; qtype: %s\n", rr_descriptor->_name);
- } else if (chain->packet_qtype != 0) {
- fprintf(out, "TYPE%u",
- chain->packet_qtype);
- }
- if (chain->packet_nodata) {
- fprintf(out, ";; NODATA response\n");
- }
- fprintf(out, "rrset:\n");
- ldns_rr_list_print_fmt(out, fmt, chain->rrset);
- fprintf(out, "sigs:\n");
- ldns_rr_list_print_fmt(out, fmt, chain->signatures);
- fprintf(out, "---\n");
- } else {
- fprintf(out, "<no data>\n");
- }
- }
-}
-void
-ldns_dnssec_data_chain_print(FILE *out, const ldns_dnssec_data_chain *chain)
-{
- ldns_dnssec_data_chain_print_fmt(
- out, ldns_output_format_default, chain);
-}
-
-
-static void
-ldns_dnssec_build_data_chain_dnskey(ldns_resolver *res,
- uint16_t qflags,
- const ldns_pkt *pkt,
- ldns_rr_list *signatures,
- ldns_dnssec_data_chain *new_chain,
- ldns_rdf *key_name,
- ldns_rr_class c) {
- ldns_rr_list *keys;
- ldns_pkt *my_pkt;
- if (signatures && ldns_rr_list_rr_count(signatures) > 0) {
- new_chain->signatures = ldns_rr_list_clone(signatures);
- new_chain->parent_type = 0;
-
- keys = ldns_pkt_rr_list_by_name_and_type(
- pkt,
- key_name,
- LDNS_RR_TYPE_DNSKEY,
- LDNS_SECTION_ANY_NOQUESTION
- );
- if (!keys) {
- my_pkt = ldns_resolver_query(res,
- key_name,
- LDNS_RR_TYPE_DNSKEY,
- c,
- qflags);
- if (my_pkt) {
- keys = ldns_pkt_rr_list_by_name_and_type(
- my_pkt,
- key_name,
- LDNS_RR_TYPE_DNSKEY,
- LDNS_SECTION_ANY_NOQUESTION
- );
- new_chain->parent = ldns_dnssec_build_data_chain(res,
- qflags,
- keys,
- my_pkt,
- NULL);
- new_chain->parent->packet_qtype = LDNS_RR_TYPE_DNSKEY;
- ldns_pkt_free(my_pkt);
- }
- } else {
- new_chain->parent = ldns_dnssec_build_data_chain(res,
- qflags,
- keys,
- pkt,
- NULL);
- new_chain->parent->packet_qtype = LDNS_RR_TYPE_DNSKEY;
- }
- ldns_rr_list_deep_free(keys);
- }
-}
-
-static void
-ldns_dnssec_build_data_chain_other(ldns_resolver *res,
- uint16_t qflags,
- ldns_dnssec_data_chain *new_chain,
- ldns_rdf *key_name,
- ldns_rr_class c,
- ldns_rr_list *dss)
-{
- /* 'self-signed', parent is a DS */
-
- /* okay, either we have other keys signing the current one,
- * or the current
- * one should have a DS record in the parent zone.
- * How do we find this out? Try both?
- *
- * request DNSKEYS for current zone,
- * add all signatures to current level
- */
- ldns_pkt *my_pkt;
- ldns_rr_list *signatures2;
-
- new_chain->parent_type = 1;
-
- my_pkt = ldns_resolver_query(res,
- key_name,
- LDNS_RR_TYPE_DS,
- c,
- qflags);
- if (my_pkt) {
- dss = ldns_pkt_rr_list_by_name_and_type(my_pkt,
- key_name,
- LDNS_RR_TYPE_DS,
- LDNS_SECTION_ANY_NOQUESTION
- );
- if (dss) {
- new_chain->parent = ldns_dnssec_build_data_chain(res,
- qflags,
- dss,
- my_pkt,
- NULL);
- new_chain->parent->packet_qtype = LDNS_RR_TYPE_DS;
- ldns_rr_list_deep_free(dss);
- }
- ldns_pkt_free(my_pkt);
- }
-
- my_pkt = ldns_resolver_query(res,
- key_name,
- LDNS_RR_TYPE_DNSKEY,
- c,
- qflags);
- if (my_pkt) {
- signatures2 = ldns_pkt_rr_list_by_name_and_type(my_pkt,
- key_name,
- LDNS_RR_TYPE_RRSIG,
- LDNS_SECTION_ANSWER);
- if (signatures2) {
- if (new_chain->signatures) {
- printf("There were already sigs!\n");
- ldns_rr_list_deep_free(new_chain->signatures);
- printf("replacing the old sigs\n");
- }
- new_chain->signatures = signatures2;
- }
- ldns_pkt_free(my_pkt);
- }
-}
-
-static ldns_dnssec_data_chain *
-ldns_dnssec_build_data_chain_nokeyname(ldns_resolver *res,
- uint16_t qflags,
- ldns_rr *orig_rr,
- const ldns_rr_list *rrset,
- ldns_dnssec_data_chain *new_chain)
-{
- ldns_rdf *possible_parent_name;
- ldns_pkt *my_pkt;
- /* apparently we were not able to find a signing key, so
- we assume the chain ends here
- */
- /* try parents for auth denial of DS */
- if (orig_rr) {
- possible_parent_name = ldns_rr_owner(orig_rr);
- } else if (rrset && ldns_rr_list_rr_count(rrset) > 0) {
- possible_parent_name = ldns_rr_owner(ldns_rr_list_rr(rrset, 0));
- } else {
- /* no information to go on, give up */
- return new_chain;
- }
-
- my_pkt = ldns_resolver_query(res,
- possible_parent_name,
- LDNS_RR_TYPE_DS,
- LDNS_RR_CLASS_IN,
- qflags);
- if (!my_pkt) {
- return new_chain;
- }
-
- if (ldns_pkt_ancount(my_pkt) > 0) {
- /* add error, no sigs but DS in parent */
- /*ldns_pkt_print(stdout, my_pkt);*/
- ldns_pkt_free(my_pkt);
- } else {
- /* are there signatures? */
- new_chain->parent = ldns_dnssec_build_data_chain(res,
- qflags,
- NULL,
- my_pkt,
- NULL);
-
- new_chain->parent->packet_qtype = LDNS_RR_TYPE_DS;
-
- }
- return new_chain;
-}
-
-
-ldns_dnssec_data_chain *
-ldns_dnssec_build_data_chain(ldns_resolver *res,
- uint16_t qflags,
- const ldns_rr_list *rrset,
- const ldns_pkt *pkt,
- ldns_rr *orig_rr)
-{
- ldns_rr_list *signatures = NULL;
- ldns_rr_list *dss = NULL;
-
- ldns_rr_list *my_rrset;
-
- ldns_pkt *my_pkt;
-
- ldns_rdf *name = NULL, *key_name = NULL;
- ldns_rr_type type = 0;
- ldns_rr_class c = 0;
-
- bool other_rrset = false;
-
- ldns_dnssec_data_chain *new_chain = ldns_dnssec_data_chain_new();
-
- assert(pkt != NULL);
-
- if (!ldns_dnssec_pkt_has_rrsigs(pkt)) {
- /* hmm. no dnssec data in the packet. go up to try and deny
- * DS? */
- return new_chain;
- }
-
- if (orig_rr) {
- new_chain->rrset = ldns_rr_list_new();
- ldns_rr_list_push_rr(new_chain->rrset, orig_rr);
- new_chain->parent = ldns_dnssec_build_data_chain(res,
- qflags,
- rrset,
- pkt,
- NULL);
- new_chain->packet_rcode = ldns_pkt_get_rcode(pkt);
- new_chain->packet_qtype = ldns_rr_get_type(orig_rr);
- if (ldns_pkt_ancount(pkt) == 0) {
- new_chain->packet_nodata = true;
- }
- return new_chain;
- }
-
- if (!rrset || ldns_rr_list_rr_count(rrset) < 1) {
- /* hmm, no data, do we have denial? only works if pkt was given,
- otherwise caller has to do the check himself */
- new_chain->packet_nodata = true;
- if (pkt) {
- my_rrset = ldns_pkt_rr_list_by_type(pkt,
- LDNS_RR_TYPE_NSEC,
- LDNS_SECTION_ANY_NOQUESTION
- );
- if (my_rrset) {
- if (ldns_rr_list_rr_count(my_rrset) > 0) {
- type = LDNS_RR_TYPE_NSEC;
- other_rrset = true;
- } else {
- ldns_rr_list_deep_free(my_rrset);
- my_rrset = NULL;
- }
- } else {
- /* nothing, try nsec3 */
- my_rrset = ldns_pkt_rr_list_by_type(pkt,
- LDNS_RR_TYPE_NSEC3,
- LDNS_SECTION_ANY_NOQUESTION);
- if (my_rrset) {
- if (ldns_rr_list_rr_count(my_rrset) > 0) {
- type = LDNS_RR_TYPE_NSEC3;
- other_rrset = true;
- } else {
- ldns_rr_list_deep_free(my_rrset);
- my_rrset = NULL;
- }
- } else {
- /* nothing, stop */
- /* try parent zone? for denied insecure? */
- return new_chain;
- }
- }
- } else {
- return new_chain;
- }
- } else {
- my_rrset = (ldns_rr_list *) rrset;
- }
-
- if (my_rrset && ldns_rr_list_rr_count(my_rrset) > 0) {
- new_chain->rrset = ldns_rr_list_clone(my_rrset);
- name = ldns_rr_owner(ldns_rr_list_rr(my_rrset, 0));
- type = ldns_rr_get_type(ldns_rr_list_rr(my_rrset, 0));
- c = ldns_rr_get_class(ldns_rr_list_rr(my_rrset, 0));
- }
-
- if (other_rrset) {
- ldns_rr_list_deep_free(my_rrset);
- }
-
- /* normally there will only be 1 signature 'set'
- but there can be more than 1 denial (wildcards)
- so check for NSEC
- */
- if (type == LDNS_RR_TYPE_NSEC || type == LDNS_RR_TYPE_NSEC3) {
- /* just throw in all signatures, the tree builder must sort
- this out */
- if (pkt) {
- signatures = ldns_dnssec_pkt_get_rrsigs_for_type(pkt, type);
- } else {
- my_pkt = ldns_resolver_query(res, name, type, c, qflags);
- if (my_pkt) {
- signatures = ldns_dnssec_pkt_get_rrsigs_for_type(pkt, type);
- ldns_pkt_free(my_pkt);
- }
- }
- } else {
- if (pkt) {
- signatures =
- ldns_dnssec_pkt_get_rrsigs_for_name_and_type(pkt,
- name,
- type);
- }
- if (!signatures) {
- my_pkt = ldns_resolver_query(res, name, type, c, qflags);
- if (my_pkt) {
- signatures =
- ldns_dnssec_pkt_get_rrsigs_for_name_and_type(my_pkt,
- name,
- type);
- ldns_pkt_free(my_pkt);
- }
- }
- }
-
- if (signatures && ldns_rr_list_rr_count(signatures) > 0) {
- key_name = ldns_rr_rdf(ldns_rr_list_rr(signatures, 0), 7);
- }
- if (!key_name) {
- if (signatures) {
- ldns_rr_list_deep_free(signatures);
- }
- return ldns_dnssec_build_data_chain_nokeyname(res,
- qflags,
- orig_rr,
- rrset,
- new_chain);
- }
- if (type != LDNS_RR_TYPE_DNSKEY) {
- if (type != LDNS_RR_TYPE_DS ||
- ldns_dname_is_subdomain(name, key_name)) {
- ldns_dnssec_build_data_chain_dnskey(res,
- qflags,
- pkt,
- signatures,
- new_chain,
- key_name,
- c
- );
- }
- } else {
- ldns_dnssec_build_data_chain_other(res,
- qflags,
- new_chain,
- key_name,
- c,
- dss
- );
- }
- if (signatures) {
- ldns_rr_list_deep_free(signatures);
- }
- return new_chain;
-}
-
-ldns_dnssec_trust_tree *
-ldns_dnssec_trust_tree_new(void)
-{
- ldns_dnssec_trust_tree *new_tree = LDNS_XMALLOC(ldns_dnssec_trust_tree,
- 1);
- if(!new_tree) return NULL;
- new_tree->rr = NULL;
- new_tree->rrset = NULL;
- new_tree->parent_count = 0;
-
- return new_tree;
-}
-
-void
-ldns_dnssec_trust_tree_free(ldns_dnssec_trust_tree *tree)
-{
- size_t i;
- if (tree) {
- for (i = 0; i < tree->parent_count; i++) {
- ldns_dnssec_trust_tree_free(tree->parents[i]);
- }
- }
- LDNS_FREE(tree);
-}
-
-size_t
-ldns_dnssec_trust_tree_depth(ldns_dnssec_trust_tree *tree)
-{
- size_t result = 0;
- size_t parent = 0;
- size_t i;
-
- for (i = 0; i < tree->parent_count; i++) {
- parent = ldns_dnssec_trust_tree_depth(tree->parents[i]);
- if (parent > result) {
- result = parent;
- }
- }
- return 1 + result;
-}
-
-/* TODO ldns_ */
-static void
-print_tabs(FILE *out, size_t nr, uint8_t *map, size_t treedepth)
-{
- size_t i;
- for (i = 0; i < nr; i++) {
- if (i == nr - 1) {
- fprintf(out, "|---");
- } else if (map && i < treedepth && map[i] == 1) {
- fprintf(out, "| ");
- } else {
- fprintf(out, " ");
- }
- }
-}
-
-static void
-ldns_dnssec_trust_tree_print_sm_fmt(FILE *out,
- const ldns_output_format *fmt,
- ldns_dnssec_trust_tree *tree,
- size_t tabs,
- bool extended,
- uint8_t *sibmap,
- size_t treedepth)
-{
- size_t i;
- const ldns_rr_descriptor *descriptor;
- bool mapset = false;
-
- if (!sibmap) {
- treedepth = ldns_dnssec_trust_tree_depth(tree);
- sibmap = LDNS_XMALLOC(uint8_t, treedepth);
- if(!sibmap)
- return; /* mem err */
- memset(sibmap, 0, treedepth);
- mapset = true;
- }
-
- if (tree) {
- if (tree->rr) {
- print_tabs(out, tabs, sibmap, treedepth);
- ldns_rdf_print(out, ldns_rr_owner(tree->rr));
- descriptor = ldns_rr_descript(ldns_rr_get_type(tree->rr));
-
- if (descriptor->_name) {
- fprintf(out, " (%s", descriptor->_name);
- } else {
- fprintf(out, " (TYPE%d",
- ldns_rr_get_type(tree->rr));
- }
- if (tabs > 0) {
- if (ldns_rr_get_type(tree->rr) == LDNS_RR_TYPE_DNSKEY) {
- fprintf(out, " keytag: %u",
- (unsigned int) ldns_calc_keytag(tree->rr));
- fprintf(out, " alg: ");
- ldns_rdf_print(out, ldns_rr_rdf(tree->rr, 2));
- fprintf(out, " flags: ");
- ldns_rdf_print(out, ldns_rr_rdf(tree->rr, 0));
- } else if (ldns_rr_get_type(tree->rr) == LDNS_RR_TYPE_DS) {
- fprintf(out, " keytag: ");
- ldns_rdf_print(out, ldns_rr_rdf(tree->rr, 0));
- fprintf(out, " digest type: ");
- ldns_rdf_print(out, ldns_rr_rdf(tree->rr, 2));
- }
- if (ldns_rr_get_type(tree->rr) == LDNS_RR_TYPE_NSEC) {
- fprintf(out, " ");
- ldns_rdf_print(out, ldns_rr_rdf(tree->rr, 0));
- fprintf(out, " ");
- ldns_rdf_print(out, ldns_rr_rdf(tree->rr, 1));
- }
- }
-
- fprintf(out, ")\n");
- for (i = 0; i < tree->parent_count; i++) {
- if (tree->parent_count > 1 && i < tree->parent_count - 1) {
- sibmap[tabs] = 1;
- } else {
- sibmap[tabs] = 0;
- }
- /* only print errors */
- if (ldns_rr_get_type(tree->parents[i]->rr) ==
- LDNS_RR_TYPE_NSEC ||
- ldns_rr_get_type(tree->parents[i]->rr) ==
- LDNS_RR_TYPE_NSEC3) {
- if (tree->parent_status[i] == LDNS_STATUS_OK) {
- print_tabs(out, tabs + 1, sibmap, treedepth);
- if (tabs == 0 &&
- ldns_rr_get_type(tree->rr) == LDNS_RR_TYPE_NS &&
- ldns_rr_rd_count(tree->rr) > 0) {
- fprintf(out, "Existence of DS is denied by:\n");
- } else {
- fprintf(out, "Existence is denied by:\n");
- }
- } else {
- /* NS records aren't signed */
- if (ldns_rr_get_type(tree->rr) == LDNS_RR_TYPE_NS) {
- fprintf(out, "Existence of DS is denied by:\n");
- } else {
- print_tabs(out, tabs + 1, sibmap, treedepth);
- fprintf(out,
- "Error in denial of existence: %s\n",
- ldns_get_errorstr_by_id(
- tree->parent_status[i]));
- }
- }
- } else
- if (tree->parent_status[i] != LDNS_STATUS_OK) {
- print_tabs(out, tabs + 1, sibmap, treedepth);
- fprintf(out,
- "%s:\n",
- ldns_get_errorstr_by_id(
- tree->parent_status[i]));
- if (tree->parent_status[i]
- == LDNS_STATUS_SSL_ERR) {
- printf("; SSL Error: ");
- ERR_load_crypto_strings();
- ERR_print_errors_fp(stdout);
- printf("\n");
- }
- ldns_rr_print_fmt(out, fmt,
- tree->
- parent_signature[i]);
- printf("For RRset:\n");
- ldns_rr_list_print_fmt(out, fmt,
- tree->rrset);
- printf("With key:\n");
- ldns_rr_print_fmt(out, fmt,
- tree->parents[i]->rr);
- }
- ldns_dnssec_trust_tree_print_sm_fmt(out, fmt,
- tree->parents[i],
- tabs+1,
- extended,
- sibmap,
- treedepth);
- }
- } else {
- print_tabs(out, tabs, sibmap, treedepth);
- fprintf(out, "<no data>\n");
- }
- } else {
- fprintf(out, "<null pointer>\n");
- }
-
- if (mapset) {
- LDNS_FREE(sibmap);
- }
-}
-
-void
-ldns_dnssec_trust_tree_print_fmt(FILE *out, const ldns_output_format *fmt,
- ldns_dnssec_trust_tree *tree,
- size_t tabs,
- bool extended)
-{
- ldns_dnssec_trust_tree_print_sm_fmt(out, fmt,
- tree, tabs, extended, NULL, 0);
-}
-
-void
-ldns_dnssec_trust_tree_print(FILE *out,
- ldns_dnssec_trust_tree *tree,
- size_t tabs,
- bool extended)
-{
- ldns_dnssec_trust_tree_print_fmt(out, ldns_output_format_default,
- tree, tabs, extended);
-}
-
-
-ldns_status
-ldns_dnssec_trust_tree_add_parent(ldns_dnssec_trust_tree *tree,
- const ldns_dnssec_trust_tree *parent,
- const ldns_rr *signature,
- const ldns_status parent_status)
-{
- if (tree
- && parent
- && tree->parent_count < LDNS_DNSSEC_TRUST_TREE_MAX_PARENTS) {
- /*
- printf("Add parent for: ");
- ldns_rr_print(stdout, tree->rr);
- printf("parent: ");
- ldns_rr_print(stdout, parent->rr);
- */
- tree->parents[tree->parent_count] =
- (ldns_dnssec_trust_tree *) parent;
- tree->parent_status[tree->parent_count] = parent_status;
- tree->parent_signature[tree->parent_count] = (ldns_rr *) signature;
- tree->parent_count++;
- return LDNS_STATUS_OK;
- } else {
- return LDNS_STATUS_ERR;
- }
-}
-
-/* if rr is null, take the first from the rrset */
-ldns_dnssec_trust_tree *
-ldns_dnssec_derive_trust_tree_time(
- ldns_dnssec_data_chain *data_chain,
- ldns_rr *rr,
- time_t check_time
- )
-{
- ldns_rr_list *cur_rrset;
- ldns_rr_list *cur_sigs;
- ldns_rr *cur_rr = NULL;
- ldns_rr *cur_sig_rr;
- size_t i, j;
-
- ldns_dnssec_trust_tree *new_tree = ldns_dnssec_trust_tree_new();
- if(!new_tree)
- return NULL;
-
- if (data_chain && data_chain->rrset) {
- cur_rrset = data_chain->rrset;
-
- cur_sigs = data_chain->signatures;
-
- if (rr) {
- cur_rr = rr;
- }
-
- if (!cur_rr && ldns_rr_list_rr_count(cur_rrset) > 0) {
- cur_rr = ldns_rr_list_rr(cur_rrset, 0);
- }
-
- if (cur_rr) {
- new_tree->rr = cur_rr;
- new_tree->rrset = cur_rrset;
- /* there are three possibilities:
- 1 - 'normal' rrset, signed by a key
- 2 - dnskey signed by other dnskey
- 3 - dnskey proven by higher level DS
- (data denied by nsec is a special case that can
- occur in multiple places)
-
- */
- if (cur_sigs) {
- for (i = 0; i < ldns_rr_list_rr_count(cur_sigs); i++) {
- /* find the appropriate key in the parent list */
- cur_sig_rr = ldns_rr_list_rr(cur_sigs, i);
-
- if (ldns_rr_get_type(cur_rr) == LDNS_RR_TYPE_NSEC) {
- if (ldns_dname_compare(ldns_rr_owner(cur_sig_rr),
- ldns_rr_owner(cur_rr)))
- {
- /* find first that does match */
-
- for (j = 0;
- j < ldns_rr_list_rr_count(cur_rrset) &&
- ldns_dname_compare(ldns_rr_owner(cur_sig_rr),ldns_rr_owner(cur_rr)) != 0;
- j++) {
- cur_rr = ldns_rr_list_rr(cur_rrset, j);
-
- }
- if (ldns_dname_compare(ldns_rr_owner(cur_sig_rr),
- ldns_rr_owner(cur_rr)))
- {
- break;
- }
- }
-
- }
- /* option 1 */
- if (data_chain->parent) {
- ldns_dnssec_derive_trust_tree_normal_rrset_time(
- new_tree,
- data_chain,
- cur_sig_rr,
- check_time);
- }
-
- /* option 2 */
- ldns_dnssec_derive_trust_tree_dnskey_rrset_time(
- new_tree,
- data_chain,
- cur_rr,
- cur_sig_rr,
- check_time);
- }
-
- ldns_dnssec_derive_trust_tree_ds_rrset_time(
- new_tree, data_chain,
- cur_rr, check_time);
- } else {
- /* no signatures? maybe it's nsec data */
-
- /* just add every rr from parent as new parent */
- ldns_dnssec_derive_trust_tree_no_sig_time(
- new_tree, data_chain, check_time);
- }
- }
- }
-
- return new_tree;
-}
-
-ldns_dnssec_trust_tree *
-ldns_dnssec_derive_trust_tree(ldns_dnssec_data_chain *data_chain, ldns_rr *rr)
-{
- return ldns_dnssec_derive_trust_tree_time(data_chain, rr, ldns_time(NULL));
-}
-
-void
-ldns_dnssec_derive_trust_tree_normal_rrset_time(
- ldns_dnssec_trust_tree *new_tree,
- ldns_dnssec_data_chain *data_chain,
- ldns_rr *cur_sig_rr,
- time_t check_time)
-{
- size_t i, j;
- ldns_rr_list *cur_rrset = ldns_rr_list_clone(data_chain->rrset);
- ldns_dnssec_trust_tree *cur_parent_tree;
- ldns_rr *cur_parent_rr;
- uint16_t cur_keytag;
- ldns_rr_list *tmp_rrset = NULL;
- ldns_status cur_status;
-
- cur_keytag = ldns_rdf2native_int16(ldns_rr_rrsig_keytag(cur_sig_rr));
-
- for (j = 0; j < ldns_rr_list_rr_count(data_chain->parent->rrset); j++) {
- cur_parent_rr = ldns_rr_list_rr(data_chain->parent->rrset, j);
- if (ldns_rr_get_type(cur_parent_rr) == LDNS_RR_TYPE_DNSKEY) {
- if (ldns_calc_keytag(cur_parent_rr) == cur_keytag) {
-
- /* TODO: check wildcard nsec too */
- if (cur_rrset && ldns_rr_list_rr_count(cur_rrset) > 0) {
- tmp_rrset = cur_rrset;
- if (ldns_rr_get_type(ldns_rr_list_rr(cur_rrset, 0))
- == LDNS_RR_TYPE_NSEC ||
- ldns_rr_get_type(ldns_rr_list_rr(cur_rrset, 0))
- == LDNS_RR_TYPE_NSEC3) {
- /* might contain different names!
- sort and split */
- ldns_rr_list_sort(cur_rrset);
- assert(tmp_rrset == cur_rrset);
- tmp_rrset = ldns_rr_list_pop_rrset(cur_rrset);
-
- /* with nsecs, this might be the wrong one */
- while (tmp_rrset &&
- ldns_rr_list_rr_count(cur_rrset) > 0 &&
- ldns_dname_compare(
- ldns_rr_owner(ldns_rr_list_rr(
- tmp_rrset, 0)),
- ldns_rr_owner(cur_sig_rr)) != 0) {
- ldns_rr_list_deep_free(tmp_rrset);
- tmp_rrset =
- ldns_rr_list_pop_rrset(cur_rrset);
- }
- }
- cur_status = ldns_verify_rrsig_time(
- tmp_rrset,
- cur_sig_rr,
- cur_parent_rr,
- check_time);
- if (tmp_rrset && tmp_rrset != cur_rrset
- ) {
- ldns_rr_list_deep_free(
- tmp_rrset);
- tmp_rrset = NULL;
- }
- /* avoid dupes */
- for (i = 0; i < new_tree->parent_count; i++) {
- if (cur_parent_rr == new_tree->parents[i]->rr) {
- goto done;
- }
- }
-
- cur_parent_tree =
- ldns_dnssec_derive_trust_tree_time(
- data_chain->parent,
- cur_parent_rr,
- check_time);
- (void)ldns_dnssec_trust_tree_add_parent(new_tree,
- cur_parent_tree,
- cur_sig_rr,
- cur_status);
- }
- }
- }
- }
- done:
- ldns_rr_list_deep_free(cur_rrset);
-}
-
-void
-ldns_dnssec_derive_trust_tree_normal_rrset(ldns_dnssec_trust_tree *new_tree,
- ldns_dnssec_data_chain *data_chain,
- ldns_rr *cur_sig_rr)
-{
- ldns_dnssec_derive_trust_tree_normal_rrset_time(
- new_tree, data_chain, cur_sig_rr, ldns_time(NULL));
-}
-
-void
-ldns_dnssec_derive_trust_tree_dnskey_rrset_time(
- ldns_dnssec_trust_tree *new_tree,
- ldns_dnssec_data_chain *data_chain,
- ldns_rr *cur_rr,
- ldns_rr *cur_sig_rr,
- time_t check_time)
-{
- size_t j;
- ldns_rr_list *cur_rrset = data_chain->rrset;
- ldns_dnssec_trust_tree *cur_parent_tree;
- ldns_rr *cur_parent_rr;
- uint16_t cur_keytag;
- ldns_status cur_status;
-
- cur_keytag = ldns_rdf2native_int16(ldns_rr_rrsig_keytag(cur_sig_rr));
-
- for (j = 0; j < ldns_rr_list_rr_count(cur_rrset); j++) {
- cur_parent_rr = ldns_rr_list_rr(cur_rrset, j);
- if (cur_parent_rr != cur_rr &&
- ldns_rr_get_type(cur_parent_rr) == LDNS_RR_TYPE_DNSKEY) {
- if (ldns_calc_keytag(cur_parent_rr) == cur_keytag
- ) {
- cur_parent_tree = ldns_dnssec_trust_tree_new();
- cur_parent_tree->rr = cur_parent_rr;
- cur_parent_tree->rrset = cur_rrset;
- cur_status = ldns_verify_rrsig_time(
- cur_rrset, cur_sig_rr,
- cur_parent_rr, check_time);
- if (ldns_dnssec_trust_tree_add_parent(new_tree,
- cur_parent_tree, cur_sig_rr, cur_status))
- ldns_dnssec_trust_tree_free(cur_parent_tree);
- }
- }
- }
-}
-
-void
-ldns_dnssec_derive_trust_tree_dnskey_rrset(ldns_dnssec_trust_tree *new_tree,
- ldns_dnssec_data_chain *data_chain,
- ldns_rr *cur_rr,
- ldns_rr *cur_sig_rr)
-{
- ldns_dnssec_derive_trust_tree_dnskey_rrset_time(
- new_tree, data_chain, cur_rr, cur_sig_rr, ldns_time(NULL));
-}
-
-void
-ldns_dnssec_derive_trust_tree_ds_rrset_time(
- ldns_dnssec_trust_tree *new_tree,
- ldns_dnssec_data_chain *data_chain,
- ldns_rr *cur_rr,
- time_t check_time)
-{
- size_t j, h;
- ldns_rr_list *cur_rrset = data_chain->rrset;
- ldns_dnssec_trust_tree *cur_parent_tree;
- ldns_rr *cur_parent_rr;
-
- /* try the parent to see whether there are DSs there */
- if (ldns_rr_get_type(cur_rr) == LDNS_RR_TYPE_DNSKEY &&
- data_chain->parent &&
- data_chain->parent->rrset
- ) {
- for (j = 0;
- j < ldns_rr_list_rr_count(data_chain->parent->rrset);
- j++) {
- cur_parent_rr = ldns_rr_list_rr(data_chain->parent->rrset, j);
- if (ldns_rr_get_type(cur_parent_rr) == LDNS_RR_TYPE_DS) {
- for (h = 0; h < ldns_rr_list_rr_count(cur_rrset); h++) {
- cur_rr = ldns_rr_list_rr(cur_rrset, h);
- if (ldns_rr_compare_ds(cur_rr, cur_parent_rr)) {
- cur_parent_tree =
- ldns_dnssec_derive_trust_tree_time(
- data_chain->parent,
- cur_parent_rr,
- check_time);
- (void) ldns_dnssec_trust_tree_add_parent(
- new_tree,
- cur_parent_tree,
- NULL,
- LDNS_STATUS_OK);
- } else {
- /*ldns_rr_print(stdout, cur_parent_rr);*/
- }
- }
- }
- }
- }
-}
-
-void
-ldns_dnssec_derive_trust_tree_ds_rrset(ldns_dnssec_trust_tree *new_tree,
- ldns_dnssec_data_chain *data_chain,
- ldns_rr *cur_rr)
-{
- ldns_dnssec_derive_trust_tree_ds_rrset_time(
- new_tree, data_chain, cur_rr, ldns_time(NULL));
-}
-
-void
-ldns_dnssec_derive_trust_tree_no_sig_time(
- ldns_dnssec_trust_tree *new_tree,
- ldns_dnssec_data_chain *data_chain,
- time_t check_time)
-{
- size_t i;
- ldns_rr_list *cur_rrset;
- ldns_rr *cur_parent_rr;
- ldns_dnssec_trust_tree *cur_parent_tree;
- ldns_status result;
-
- if (data_chain->parent && data_chain->parent->rrset) {
- cur_rrset = data_chain->parent->rrset;
- /* nsec? */
- if (cur_rrset && ldns_rr_list_rr_count(cur_rrset) > 0) {
- if (ldns_rr_get_type(ldns_rr_list_rr(cur_rrset, 0)) ==
- LDNS_RR_TYPE_NSEC3) {
- result = ldns_dnssec_verify_denial_nsec3(
- new_tree->rr,
- cur_rrset,
- data_chain->parent->signatures,
- data_chain->packet_rcode,
- data_chain->packet_qtype,
- data_chain->packet_nodata);
- } else if (ldns_rr_get_type(ldns_rr_list_rr(cur_rrset, 0)) ==
- LDNS_RR_TYPE_NSEC) {
- result = ldns_dnssec_verify_denial(
- new_tree->rr,
- cur_rrset,
- data_chain->parent->signatures);
- } else {
- /* unsigned zone, unsigned parent */
- result = LDNS_STATUS_OK;
- }
- } else {
- result = LDNS_STATUS_DNSSEC_NSEC_RR_NOT_COVERED;
- }
- for (i = 0; i < ldns_rr_list_rr_count(cur_rrset); i++) {
- cur_parent_rr = ldns_rr_list_rr(cur_rrset, i);
- cur_parent_tree =
- ldns_dnssec_derive_trust_tree_time(
- data_chain->parent,
- cur_parent_rr,
- check_time);
- if (ldns_dnssec_trust_tree_add_parent(new_tree,
- cur_parent_tree, NULL, result))
- ldns_dnssec_trust_tree_free(cur_parent_tree);
-
- }
- }
-}
-
-void
-ldns_dnssec_derive_trust_tree_no_sig(ldns_dnssec_trust_tree *new_tree,
- ldns_dnssec_data_chain *data_chain)
-{
- ldns_dnssec_derive_trust_tree_no_sig_time(
- new_tree, data_chain, ldns_time(NULL));
-}
-
-/*
- * returns OK if there is a path from tree to key with only OK
- * the (first) error in between otherwise
- * or NOT_FOUND if the key wasn't present at all
- */
-ldns_status
-ldns_dnssec_trust_tree_contains_keys(ldns_dnssec_trust_tree *tree,
- ldns_rr_list *trusted_keys)
-{
- size_t i;
- ldns_status result = LDNS_STATUS_CRYPTO_NO_DNSKEY;
- bool equal;
- ldns_status parent_result;
-
- if (tree && trusted_keys && ldns_rr_list_rr_count(trusted_keys) > 0)
- { if (tree->rr) {
- for (i = 0; i < ldns_rr_list_rr_count(trusted_keys); i++) {
- equal = ldns_rr_compare_ds(
- tree->rr,
- ldns_rr_list_rr(trusted_keys, i));
- if (equal) {
- result = LDNS_STATUS_OK;
- return result;
- }
- }
- }
- for (i = 0; i < tree->parent_count; i++) {
- parent_result =
- ldns_dnssec_trust_tree_contains_keys(tree->parents[i],
- trusted_keys);
- if (parent_result != LDNS_STATUS_CRYPTO_NO_DNSKEY) {
- if (tree->parent_status[i] != LDNS_STATUS_OK) {
- result = tree->parent_status[i];
- } else {
- if (tree->rr &&
- ldns_rr_get_type(tree->rr)
- == LDNS_RR_TYPE_NSEC &&
- parent_result == LDNS_STATUS_OK
- ) {
- result =
- LDNS_STATUS_DNSSEC_EXISTENCE_DENIED;
- } else {
- result = parent_result;
- }
- }
- }
- }
- } else {
- result = LDNS_STATUS_ERR;
- }
-
- return result;
-}
-
-ldns_status
-ldns_verify_time(
- const ldns_rr_list *rrset,
- const ldns_rr_list *rrsig,
- const ldns_rr_list *keys,
- time_t check_time,
- ldns_rr_list *good_keys
- )
-{
- uint16_t i;
- ldns_status verify_result = LDNS_STATUS_ERR;
-
- if (!rrset || !rrsig || !keys) {
- return LDNS_STATUS_ERR;
- }
-
- if (ldns_rr_list_rr_count(rrset) < 1) {
- return LDNS_STATUS_ERR;
- }
-
- if (ldns_rr_list_rr_count(rrsig) < 1) {
- return LDNS_STATUS_CRYPTO_NO_RRSIG;
- }
-
- if (ldns_rr_list_rr_count(keys) < 1) {
- verify_result = LDNS_STATUS_CRYPTO_NO_TRUSTED_DNSKEY;
- } else {
- for (i = 0; i < ldns_rr_list_rr_count(rrsig); i++) {
- ldns_status s = ldns_verify_rrsig_keylist_time(
- rrset, ldns_rr_list_rr(rrsig, i),
- keys, check_time, good_keys);
- /* try a little to get more descriptive error */
- if(s == LDNS_STATUS_OK) {
- verify_result = LDNS_STATUS_OK;
- } else if(verify_result == LDNS_STATUS_ERR)
- verify_result = s;
- else if(s != LDNS_STATUS_ERR && verify_result ==
- LDNS_STATUS_CRYPTO_NO_MATCHING_KEYTAG_DNSKEY)
- verify_result = s;
- }
- }
- return verify_result;
-}
-
-ldns_status
-ldns_verify(ldns_rr_list *rrset, ldns_rr_list *rrsig, const ldns_rr_list *keys,
- ldns_rr_list *good_keys)
-{
- return ldns_verify_time(rrset, rrsig, keys, ldns_time(NULL), good_keys);
-}
-
-ldns_status
-ldns_verify_notime(ldns_rr_list *rrset, ldns_rr_list *rrsig,
- const ldns_rr_list *keys, ldns_rr_list *good_keys)
-{
- uint16_t i;
- ldns_status verify_result = LDNS_STATUS_ERR;
-
- if (!rrset || !rrsig || !keys) {
- return LDNS_STATUS_ERR;
- }
-
- if (ldns_rr_list_rr_count(rrset) < 1) {
- return LDNS_STATUS_ERR;
- }
-
- if (ldns_rr_list_rr_count(rrsig) < 1) {
- return LDNS_STATUS_CRYPTO_NO_RRSIG;
- }
-
- if (ldns_rr_list_rr_count(keys) < 1) {
- verify_result = LDNS_STATUS_CRYPTO_NO_TRUSTED_DNSKEY;
- } else {
- for (i = 0; i < ldns_rr_list_rr_count(rrsig); i++) {
- ldns_status s = ldns_verify_rrsig_keylist_notime(rrset,
- ldns_rr_list_rr(rrsig, i), keys, good_keys);
-
- /* try a little to get more descriptive error */
- if (s == LDNS_STATUS_OK) {
- verify_result = LDNS_STATUS_OK;
- } else if (verify_result == LDNS_STATUS_ERR) {
- verify_result = s;
- } else if (s != LDNS_STATUS_ERR && verify_result ==
- LDNS_STATUS_CRYPTO_NO_MATCHING_KEYTAG_DNSKEY) {
- verify_result = s;
- }
- }
- }
- return verify_result;
-}
-
-ldns_rr_list *
-ldns_fetch_valid_domain_keys_time(const ldns_resolver *res,
- const ldns_rdf *domain,
- const ldns_rr_list *keys,
- time_t check_time,
- ldns_status *status)
-{
- ldns_rr_list * trusted_keys = NULL;
- ldns_rr_list * ds_keys = NULL;
- ldns_rdf * prev_parent_domain;
- ldns_rdf * parent_domain;
- ldns_rr_list * parent_keys = NULL;
-
- if (res && domain && keys) {
-
- if ((trusted_keys = ldns_validate_domain_dnskey_time(res,
- domain, keys, check_time))) {
- *status = LDNS_STATUS_OK;
- } else {
- /* No trusted keys in this domain, we'll have to find some in the parent domain */
- *status = LDNS_STATUS_CRYPTO_NO_TRUSTED_DNSKEY;
-
- parent_domain = ldns_dname_left_chop(domain);
- while (parent_domain && /* Fail if we are at the root*/
- ldns_rdf_size(parent_domain) > 0) {
-
- if ((parent_keys =
- ldns_fetch_valid_domain_keys_time(res,
- parent_domain,
- keys,
- check_time,
- status))) {
- /* Check DS records */
- if ((ds_keys =
- ldns_validate_domain_ds_time(res,
- domain,
- parent_keys,
- check_time))) {
- trusted_keys =
- ldns_fetch_valid_domain_keys_time(
- res,
- domain,
- ds_keys,
- check_time,
- status);
- ldns_rr_list_deep_free(ds_keys);
- } else {
- /* No valid DS at the parent -- fail */
- *status = LDNS_STATUS_CRYPTO_NO_TRUSTED_DS ;
- }
- ldns_rr_list_deep_free(parent_keys);
- break;
- } else {
- parent_domain = ldns_dname_left_chop((
- prev_parent_domain
- = parent_domain
- ));
- ldns_rdf_deep_free(prev_parent_domain);
- }
- }
- if (parent_domain) {
- ldns_rdf_deep_free(parent_domain);
- }
- }
- }
- return trusted_keys;
-}
-
-ldns_rr_list *
-ldns_fetch_valid_domain_keys(const ldns_resolver *res,
- const ldns_rdf *domain,
- const ldns_rr_list *keys,
- ldns_status *status)
-{
- return ldns_fetch_valid_domain_keys_time(
- res, domain, keys, ldns_time(NULL), status);
-}
-
-ldns_rr_list *
-ldns_validate_domain_dnskey_time(
- const ldns_resolver * res,
- const ldns_rdf * domain,
- const ldns_rr_list * keys,
- time_t check_time
- )
-{
- ldns_pkt * keypkt;
- ldns_rr * cur_key;
- uint16_t key_i; uint16_t key_j; uint16_t key_k;
- uint16_t sig_i; ldns_rr * cur_sig;
-
- ldns_rr_list * domain_keys = NULL;
- ldns_rr_list * domain_sigs = NULL;
- ldns_rr_list * trusted_keys = NULL;
-
- /* Fetch keys for the domain */
- keypkt = ldns_resolver_query(res, domain,
- LDNS_RR_TYPE_DNSKEY, LDNS_RR_CLASS_IN, LDNS_RD);
- if (keypkt) {
- domain_keys = ldns_pkt_rr_list_by_type(keypkt,
- LDNS_RR_TYPE_DNSKEY,
- LDNS_SECTION_ANSWER);
- domain_sigs = ldns_pkt_rr_list_by_type(keypkt,
- LDNS_RR_TYPE_RRSIG,
- LDNS_SECTION_ANSWER);
-
- /* Try to validate the record using our keys */
- for (key_i=0; key_i< ldns_rr_list_rr_count(domain_keys); key_i++) {
-
- cur_key = ldns_rr_list_rr(domain_keys, key_i);
- for (key_j=0; key_j<ldns_rr_list_rr_count(keys); key_j++) {
- if (ldns_rr_compare_ds(ldns_rr_list_rr(keys, key_j),
- cur_key)) {
-
- /* Current key is trusted -- validate */
- trusted_keys = ldns_rr_list_new();
-
- for (sig_i=0;
- sig_i<ldns_rr_list_rr_count(domain_sigs);
- sig_i++) {
- cur_sig = ldns_rr_list_rr(domain_sigs, sig_i);
- /* Avoid non-matching sigs */
- if (ldns_rdf2native_int16(
- ldns_rr_rrsig_keytag(cur_sig))
- == ldns_calc_keytag(cur_key)) {
- if (ldns_verify_rrsig_time(
- domain_keys,
- cur_sig,
- cur_key,
- check_time)
- == LDNS_STATUS_OK) {
-
- /* Push the whole rrset
- -- we can't do much more */
- for (key_k=0;
- key_k<ldns_rr_list_rr_count(
- domain_keys);
- key_k++) {
- ldns_rr_list_push_rr(
- trusted_keys,
- ldns_rr_clone(
- ldns_rr_list_rr(
- domain_keys,
- key_k)));
- }
-
- ldns_rr_list_deep_free(domain_keys);
- ldns_rr_list_deep_free(domain_sigs);
- ldns_pkt_free(keypkt);
- return trusted_keys;
- }
- }
- }
-
- /* Only push our trusted key */
- ldns_rr_list_push_rr(trusted_keys,
- ldns_rr_clone(cur_key));
- }
- }
- }
-
- ldns_rr_list_deep_free(domain_keys);
- ldns_rr_list_deep_free(domain_sigs);
- ldns_pkt_free(keypkt);
-
- } else {
- /* LDNS_STATUS_CRYPTO_NO_DNSKEY */
- }
-
- return trusted_keys;
-}
-
-ldns_rr_list *
-ldns_validate_domain_dnskey(const ldns_resolver * res,
- const ldns_rdf * domain,
- const ldns_rr_list * keys)
-{
- return ldns_validate_domain_dnskey_time(
- res, domain, keys, ldns_time(NULL));
-}
-
-ldns_rr_list *
-ldns_validate_domain_ds_time(
- const ldns_resolver *res,
- const ldns_rdf * domain,
- const ldns_rr_list * keys,
- time_t check_time)
-{
- ldns_pkt * dspkt;
- uint16_t key_i;
- ldns_rr_list * rrset = NULL;
- ldns_rr_list * sigs = NULL;
- ldns_rr_list * trusted_keys = NULL;
-
- /* Fetch DS for the domain */
- dspkt = ldns_resolver_query(res, domain,
- LDNS_RR_TYPE_DS, LDNS_RR_CLASS_IN, LDNS_RD);
- if (dspkt) {
- rrset = ldns_pkt_rr_list_by_type(dspkt,
- LDNS_RR_TYPE_DS,
- LDNS_SECTION_ANSWER);
- sigs = ldns_pkt_rr_list_by_type(dspkt,
- LDNS_RR_TYPE_RRSIG,
- LDNS_SECTION_ANSWER);
-
- /* Validate sigs */
- if (ldns_verify_time(rrset, sigs, keys, check_time, NULL)
- == LDNS_STATUS_OK) {
- trusted_keys = ldns_rr_list_new();
- for (key_i=0; key_i<ldns_rr_list_rr_count(rrset); key_i++) {
- ldns_rr_list_push_rr(trusted_keys,
- ldns_rr_clone(ldns_rr_list_rr(rrset,
- key_i)
- )
- );
- }
- }
-
- ldns_rr_list_deep_free(rrset);
- ldns_rr_list_deep_free(sigs);
- ldns_pkt_free(dspkt);
-
- } else {
- /* LDNS_STATUS_CRYPTO_NO_DS */
- }
-
- return trusted_keys;
-}
-
-ldns_rr_list *
-ldns_validate_domain_ds(const ldns_resolver *res,
- const ldns_rdf * domain,
- const ldns_rr_list * keys)
-{
- return ldns_validate_domain_ds_time(res, domain, keys, ldns_time(NULL));
-}
-
-ldns_status
-ldns_verify_trusted_time(
- ldns_resolver *res,
- ldns_rr_list *rrset,
- ldns_rr_list * rrsigs,
- time_t check_time,
- ldns_rr_list * validating_keys
- )
-{
- uint16_t sig_i; uint16_t key_i;
- ldns_rr * cur_sig; ldns_rr * cur_key;
- ldns_rr_list * trusted_keys = NULL;
- ldns_status result = LDNS_STATUS_ERR;
-
- if (!res || !rrset || !rrsigs) {
- return LDNS_STATUS_ERR;
- }
-
- if (ldns_rr_list_rr_count(rrset) < 1) {
- return LDNS_STATUS_ERR;
- }
-
- if (ldns_rr_list_rr_count(rrsigs) < 1) {
- return LDNS_STATUS_CRYPTO_NO_RRSIG;
- }
-
- /* Look at each sig */
- for (sig_i=0; sig_i < ldns_rr_list_rr_count(rrsigs); sig_i++) {
-
- cur_sig = ldns_rr_list_rr(rrsigs, sig_i);
- /* Get a valid signer key and validate the sig */
- if ((trusted_keys = ldns_fetch_valid_domain_keys_time(
- res,
- ldns_rr_rrsig_signame(cur_sig),
- ldns_resolver_dnssec_anchors(res),
- check_time,
- &result))) {
-
- for (key_i = 0;
- key_i < ldns_rr_list_rr_count(trusted_keys);
- key_i++) {
- cur_key = ldns_rr_list_rr(trusted_keys, key_i);
-
- if ((result = ldns_verify_rrsig_time(rrset,
- cur_sig,
- cur_key,
- check_time))
- == LDNS_STATUS_OK) {
- if (validating_keys) {
- ldns_rr_list_push_rr(validating_keys,
- ldns_rr_clone(cur_key));
- }
- ldns_rr_list_deep_free(trusted_keys);
- return LDNS_STATUS_OK;
- }
- }
- }
- }
-
- ldns_rr_list_deep_free(trusted_keys);
- return result;
-}
-
-ldns_status
-ldns_verify_trusted(
- ldns_resolver *res,
- ldns_rr_list *rrset,
- ldns_rr_list * rrsigs,
- ldns_rr_list * validating_keys)
-{
- return ldns_verify_trusted_time(
- res, rrset, rrsigs, ldns_time(NULL), validating_keys);
-}
-
-
-ldns_status
-ldns_dnssec_verify_denial(ldns_rr *rr,
- ldns_rr_list *nsecs,
- ldns_rr_list *rrsigs)
-{
- ldns_rdf *rr_name;
- ldns_rdf *wildcard_name;
- ldns_rdf *chopped_dname;
- ldns_rr *cur_nsec;
- size_t i;
- ldns_status result;
- /* needed for wildcard check on exact match */
- ldns_rr *rrsig;
- bool name_covered = false;
- bool type_covered = false;
- bool wildcard_covered = false;
- bool wildcard_type_covered = false;
-
- wildcard_name = ldns_dname_new_frm_str("*");
- rr_name = ldns_rr_owner(rr);
- chopped_dname = ldns_dname_left_chop(rr_name);
- result = ldns_dname_cat(wildcard_name, chopped_dname);
- ldns_rdf_deep_free(chopped_dname);
- if (result != LDNS_STATUS_OK) {
- return result;
- }
-
- for (i = 0; i < ldns_rr_list_rr_count(nsecs); i++) {
- cur_nsec = ldns_rr_list_rr(nsecs, i);
- if (ldns_dname_compare(rr_name, ldns_rr_owner(cur_nsec)) == 0) {
- /* see section 5.4 of RFC4035, if the label count of the NSEC's
- RRSIG is equal, then it is proven that wildcard expansion
- could not have been used to match the request */
- rrsig = ldns_dnssec_get_rrsig_for_name_and_type(
- ldns_rr_owner(cur_nsec),
- ldns_rr_get_type(cur_nsec),
- rrsigs);
- if (rrsig && ldns_rdf2native_int8(ldns_rr_rrsig_labels(rrsig))
- == ldns_dname_label_count(rr_name)) {
- wildcard_covered = true;
- }
-
- if (ldns_nsec_bitmap_covers_type(ldns_nsec_get_bitmap(cur_nsec),
- ldns_rr_get_type(rr))) {
- type_covered = true;
- }
- }
- if (ldns_nsec_covers_name(cur_nsec, rr_name)) {
- name_covered = true;
- }
-
- if (ldns_dname_compare(wildcard_name,
- ldns_rr_owner(cur_nsec)) == 0) {
- if (ldns_nsec_bitmap_covers_type(ldns_nsec_get_bitmap(cur_nsec),
- ldns_rr_get_type(rr))) {
- wildcard_type_covered = true;
- }
- }
-
- if (ldns_nsec_covers_name(cur_nsec, wildcard_name)) {
- wildcard_covered = true;
- }
-
- }
-
- ldns_rdf_deep_free(wildcard_name);
-
- if (type_covered || !name_covered) {
- return LDNS_STATUS_DNSSEC_NSEC_RR_NOT_COVERED;
- }
-
- if (wildcard_type_covered || !wildcard_covered) {
- return LDNS_STATUS_DNSSEC_NSEC_WILDCARD_NOT_COVERED;
- }
-
- return LDNS_STATUS_OK;
-}
-
-ldns_status
-ldns_dnssec_verify_denial_nsec3_match( ldns_rr *rr
- , ldns_rr_list *nsecs
- , ATTR_UNUSED(ldns_rr_list *rrsigs)
- , ldns_pkt_rcode packet_rcode
- , ldns_rr_type packet_qtype
- , bool packet_nodata
- , ldns_rr **match
- )
-{
- ldns_rdf *closest_encloser;
- ldns_rdf *wildcard;
- ldns_rdf *hashed_wildcard_name;
- bool wildcard_covered = false;
- ldns_rdf *zone_name;
- ldns_rdf *hashed_name;
- ldns_rdf *hashed_next_closer;
- size_t i;
- ldns_status result = LDNS_STATUS_DNSSEC_NSEC_RR_NOT_COVERED;
-
- if (match) {
- *match = NULL;
- }
-
- zone_name = ldns_dname_left_chop(ldns_rr_owner(ldns_rr_list_rr(nsecs,0)));
-
- /* section 8.4 */
- if (packet_rcode == LDNS_RCODE_NXDOMAIN) {
- closest_encloser = ldns_dnssec_nsec3_closest_encloser(
- ldns_rr_owner(rr),
- ldns_rr_get_type(rr),
- nsecs);
- if(!closest_encloser) {
- result = LDNS_STATUS_DNSSEC_NSEC_RR_NOT_COVERED;
- goto done;
- }
-
- wildcard = ldns_dname_new_frm_str("*");
- (void) ldns_dname_cat(wildcard, closest_encloser);
-
- for (i = 0; i < ldns_rr_list_rr_count(nsecs); i++) {
- hashed_wildcard_name =
- ldns_nsec3_hash_name_frm_nsec3(ldns_rr_list_rr(nsecs, 0),
- wildcard
- );
- (void) ldns_dname_cat(hashed_wildcard_name, zone_name);
-
- if (ldns_nsec_covers_name(ldns_rr_list_rr(nsecs, i),
- hashed_wildcard_name)) {
- wildcard_covered = true;
- if (match) {
- *match = ldns_rr_list_rr(nsecs, i);
- }
- }
- ldns_rdf_deep_free(hashed_wildcard_name);
- }
-
- if (! wildcard_covered) {
- result = LDNS_STATUS_DNSSEC_NSEC_WILDCARD_NOT_COVERED;
- } else {
- result = LDNS_STATUS_OK;
- }
- ldns_rdf_deep_free(closest_encloser);
- ldns_rdf_deep_free(wildcard);
-
- } else if (packet_nodata && packet_qtype != LDNS_RR_TYPE_DS) {
- /* section 8.5 */
- hashed_name = ldns_nsec3_hash_name_frm_nsec3(
- ldns_rr_list_rr(nsecs, 0),
- ldns_rr_owner(rr));
- (void) ldns_dname_cat(hashed_name, zone_name);
- for (i = 0; i < ldns_rr_list_rr_count(nsecs); i++) {
- if (ldns_dname_compare(hashed_name,
- ldns_rr_owner(ldns_rr_list_rr(nsecs, i)))
- == 0) {
- if (!ldns_nsec_bitmap_covers_type(
- ldns_nsec3_bitmap(ldns_rr_list_rr(nsecs, i)),
- packet_qtype)
- &&
- !ldns_nsec_bitmap_covers_type(
- ldns_nsec3_bitmap(ldns_rr_list_rr(nsecs, i)),
- LDNS_RR_TYPE_CNAME)) {
- result = LDNS_STATUS_OK;
- if (match) {
- *match = ldns_rr_list_rr(nsecs, i);
- }
- goto done;
- }
- }
- }
- ldns_rdf_deep_free(hashed_name);
- result = LDNS_STATUS_DNSSEC_NSEC_RR_NOT_COVERED;
- /* wildcard no data? section 8.7 */
- closest_encloser = ldns_dnssec_nsec3_closest_encloser(
- ldns_rr_owner(rr),
- ldns_rr_get_type(rr),
- nsecs);
- if(!closest_encloser) {
- result = LDNS_STATUS_NSEC3_ERR;
- goto done;
- }
- wildcard = ldns_dname_new_frm_str("*");
- (void) ldns_dname_cat(wildcard, closest_encloser);
- for (i = 0; i < ldns_rr_list_rr_count(nsecs); i++) {
- hashed_wildcard_name =
- ldns_nsec3_hash_name_frm_nsec3(ldns_rr_list_rr(nsecs, 0),
- wildcard);
- (void) ldns_dname_cat(hashed_wildcard_name, zone_name);
-
- if (ldns_dname_compare(hashed_wildcard_name,
- ldns_rr_owner(ldns_rr_list_rr(nsecs, i)))
- == 0) {
- if (!ldns_nsec_bitmap_covers_type(
- ldns_nsec3_bitmap(ldns_rr_list_rr(nsecs, i)),
- packet_qtype)
- &&
- !ldns_nsec_bitmap_covers_type(
- ldns_nsec3_bitmap(ldns_rr_list_rr(nsecs, i)),
- LDNS_RR_TYPE_CNAME)) {
- result = LDNS_STATUS_OK;
- if (match) {
- *match = ldns_rr_list_rr(nsecs, i);
- }
- }
- }
- ldns_rdf_deep_free(hashed_wildcard_name);
- if (result == LDNS_STATUS_OK) {
- break;
- }
- }
- ldns_rdf_deep_free(closest_encloser);
- ldns_rdf_deep_free(wildcard);
- } else if (packet_nodata && packet_qtype == LDNS_RR_TYPE_DS) {
- /* section 8.6 */
- /* note: up to XXX this is the same as for 8.5 */
- hashed_name = ldns_nsec3_hash_name_frm_nsec3(ldns_rr_list_rr(nsecs,
- 0),
- ldns_rr_owner(rr)
- );
- (void) ldns_dname_cat(hashed_name, zone_name);
- for (i = 0; i < ldns_rr_list_rr_count(nsecs); i++) {
- if (ldns_dname_compare(hashed_name,
- ldns_rr_owner(ldns_rr_list_rr(nsecs,
- i)))
- == 0) {
- if (!ldns_nsec_bitmap_covers_type(
- ldns_nsec3_bitmap(ldns_rr_list_rr(nsecs, i)),
- LDNS_RR_TYPE_DS)
- &&
- !ldns_nsec_bitmap_covers_type(
- ldns_nsec3_bitmap(ldns_rr_list_rr(nsecs, i)),
- LDNS_RR_TYPE_CNAME)) {
- result = LDNS_STATUS_OK;
- if (match) {
- *match = ldns_rr_list_rr(nsecs, i);
- }
- goto done;
- }
- }
- }
-
- /* XXX see note above */
- result = LDNS_STATUS_DNSSEC_NSEC_RR_NOT_COVERED;
-
- closest_encloser = ldns_dnssec_nsec3_closest_encloser(
- ldns_rr_owner(rr),
- ldns_rr_get_type(rr),
- nsecs);
- if(!closest_encloser) {
- result = LDNS_STATUS_NSEC3_ERR;
- goto done;
- }
- /* Now check if we have a Opt-Out NSEC3 that covers the "next closer"*/
-
- if (ldns_dname_label_count(closest_encloser) + 1
- >= ldns_dname_label_count(ldns_rr_owner(rr))) {
-
- /* Query name *is* the "next closer". */
- hashed_next_closer = hashed_name;
- } else {
- ldns_rdf *next_closer;
-
- ldns_rdf_deep_free(hashed_name);
- /* "next closer" has less labels than the query name.
- * Create the name and hash it.
- */
- next_closer = ldns_dname_clone_from(
- ldns_rr_owner(rr),
- ldns_dname_label_count(ldns_rr_owner(rr))
- - (ldns_dname_label_count(closest_encloser) + 1)
- );
- hashed_next_closer = ldns_nsec3_hash_name_frm_nsec3(
- ldns_rr_list_rr(nsecs, 0),
- next_closer
- );
- (void) ldns_dname_cat(hashed_next_closer, zone_name);
- ldns_rdf_deep_free(next_closer);
- }
- /* Find the NSEC3 that covers the "next closer" */
- for (i = 0; i < ldns_rr_list_rr_count(nsecs); i++) {
- if (ldns_nsec_covers_name(ldns_rr_list_rr(nsecs, i),
- hashed_next_closer) &&
- ldns_nsec3_optout(ldns_rr_list_rr(nsecs, i))) {
-
- result = LDNS_STATUS_OK;
- if (match) {
- *match = ldns_rr_list_rr(nsecs, i);
- }
- break;
- }
- }
- ldns_rdf_deep_free(hashed_next_closer);
- ldns_rdf_deep_free(closest_encloser);
- }
-
- done:
- ldns_rdf_deep_free(zone_name);
- return result;
-}
-
-ldns_status
-ldns_dnssec_verify_denial_nsec3(ldns_rr *rr,
- ldns_rr_list *nsecs,
- ldns_rr_list *rrsigs,
- ldns_pkt_rcode packet_rcode,
- ldns_rr_type packet_qtype,
- bool packet_nodata)
-{
- return ldns_dnssec_verify_denial_nsec3_match(
- rr, nsecs, rrsigs, packet_rcode,
- packet_qtype, packet_nodata, NULL
- );
-}
-
-#ifdef USE_GOST
-EVP_PKEY*
-ldns_gost2pkey_raw(const unsigned char* key, size_t keylen)
-{
- /* prefix header for X509 encoding */
- uint8_t asn[37] = { 0x30, 0x63, 0x30, 0x1c, 0x06, 0x06, 0x2a, 0x85,
- 0x03, 0x02, 0x02, 0x13, 0x30, 0x12, 0x06, 0x07, 0x2a, 0x85,
- 0x03, 0x02, 0x02, 0x23, 0x01, 0x06, 0x07, 0x2a, 0x85, 0x03,
- 0x02, 0x02, 0x1e, 0x01, 0x03, 0x43, 0x00, 0x04, 0x40};
- unsigned char encoded[37+64];
- const unsigned char* pp;
- if(keylen != 64) {
- /* key wrong size */
- return NULL;
- }
-
- /* create evp_key */
- memmove(encoded, asn, 37);
- memmove(encoded+37, key, 64);
- pp = (unsigned char*)&encoded[0];
-
- return d2i_PUBKEY(NULL, &pp, (int)sizeof(encoded));
-}
-
-static ldns_status
-ldns_verify_rrsig_gost_raw(const unsigned char* sig, size_t siglen,
- const ldns_buffer* rrset, const unsigned char* key, size_t keylen)
-{
- EVP_PKEY *evp_key;
- ldns_status result;
-
- (void) ldns_key_EVP_load_gost_id();
- evp_key = ldns_gost2pkey_raw(key, keylen);
- if(!evp_key) {
- /* could not convert key */
- return LDNS_STATUS_CRYPTO_BOGUS;
- }
-
- /* verify signature */
- result = ldns_verify_rrsig_evp_raw(sig, siglen, rrset,
- evp_key, EVP_get_digestbyname("md_gost94"));
- EVP_PKEY_free(evp_key);
-
- return result;
-}
-#endif
-
-#ifdef USE_ED25519
-EVP_PKEY*
-ldns_ed255192pkey_raw(const unsigned char* key, size_t keylen)
-{
- /* ASN1 for ED25519 is 302a300506032b6570032100 <32byteskey> */
- uint8_t pre[] = {0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65,
- 0x70, 0x03, 0x21, 0x00};
- int pre_len = 12;
- uint8_t buf[256];
- EVP_PKEY *evp_key;
- /* pp gets modified by d2i() */
- const unsigned char* pp = (unsigned char*)buf;
- if(keylen != 32 || keylen + pre_len > sizeof(buf))
- return NULL; /* wrong length */
- memmove(buf, pre, pre_len);
- memmove(buf+pre_len, key, keylen);
- evp_key = d2i_PUBKEY(NULL, &pp, (int)(pre_len+keylen));
- return evp_key;
-}
-
-static ldns_status
-ldns_verify_rrsig_ed25519_raw(unsigned char* sig, size_t siglen,
- ldns_buffer* rrset, unsigned char* key, size_t keylen)
-{
- EVP_PKEY *evp_key;
- ldns_status result;
-
- evp_key = ldns_ed255192pkey_raw(key, keylen);
- if(!evp_key) {
- /* could not convert key */
- return LDNS_STATUS_CRYPTO_BOGUS;
- }
- result = ldns_verify_rrsig_evp_raw(sig, siglen, rrset, evp_key, NULL);
- EVP_PKEY_free(evp_key);
- return result;
-}
-#endif /* USE_ED25519 */
-
-#ifdef USE_ED448
-EVP_PKEY*
-ldns_ed4482pkey_raw(const unsigned char* key, size_t keylen)
-{
- /* ASN1 for ED448 is 3043300506032b6571033a00 <57byteskey> */
- uint8_t pre[] = {0x30, 0x43, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65,
- 0x71, 0x03, 0x3a, 0x00};
- int pre_len = 12;
- uint8_t buf[256];
- EVP_PKEY *evp_key;
- /* pp gets modified by d2i() */
- const unsigned char* pp = (unsigned char*)buf;
- if(keylen != 57 || keylen + pre_len > sizeof(buf))
- return NULL; /* wrong length */
- memmove(buf, pre, pre_len);
- memmove(buf+pre_len, key, keylen);
- evp_key = d2i_PUBKEY(NULL, &pp, (int)(pre_len+keylen));
- return evp_key;
-}
-
-static ldns_status
-ldns_verify_rrsig_ed448_raw(unsigned char* sig, size_t siglen,
- ldns_buffer* rrset, unsigned char* key, size_t keylen)
-{
- EVP_PKEY *evp_key;
- ldns_status result;
-
- evp_key = ldns_ed4482pkey_raw(key, keylen);
- if(!evp_key) {
- /* could not convert key */
- return LDNS_STATUS_CRYPTO_BOGUS;
- }
- result = ldns_verify_rrsig_evp_raw(sig, siglen, rrset, evp_key, NULL);
- EVP_PKEY_free(evp_key);
- return result;
-}
-#endif /* USE_ED448 */
-
-#ifdef USE_ECDSA
-EVP_PKEY*
-ldns_ecdsa2pkey_raw(const unsigned char* key, size_t keylen, uint8_t algo)
-{
- unsigned char buf[256+2]; /* sufficient for 2*384/8+1 */
- const unsigned char* pp = buf;
- EVP_PKEY *evp_key;
- EC_KEY *ec;
- /* check length, which uncompressed must be 2 bignums */
- if(algo == LDNS_ECDSAP256SHA256) {
- if(keylen != 2*256/8) return NULL;
- ec = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
- } else if(algo == LDNS_ECDSAP384SHA384) {
- if(keylen != 2*384/8) return NULL;
- ec = EC_KEY_new_by_curve_name(NID_secp384r1);
- } else ec = NULL;
- if(!ec) return NULL;
- if(keylen+1 > sizeof(buf))
- return NULL; /* sanity check */
- /* prepend the 0x02 (from docs) (or actually 0x04 from implementation
- * of openssl) for uncompressed data */
- buf[0] = POINT_CONVERSION_UNCOMPRESSED;
- memmove(buf+1, key, keylen);
- if(!o2i_ECPublicKey(&ec, &pp, (int)keylen+1)) {
- EC_KEY_free(ec);
- return NULL;
- }
- evp_key = EVP_PKEY_new();
- if(!evp_key) {
- EC_KEY_free(ec);
- return NULL;
- }
- if (!EVP_PKEY_assign_EC_KEY(evp_key, ec)) {
- EVP_PKEY_free(evp_key);
- EC_KEY_free(ec);
- return NULL;
- }
- return evp_key;
-}
-
-static ldns_status
-ldns_verify_rrsig_ecdsa_raw(unsigned char* sig, size_t siglen,
- ldns_buffer* rrset, unsigned char* key, size_t keylen, uint8_t algo)
-{
- EVP_PKEY *evp_key;
- ldns_status result;
- const EVP_MD *d;
-
- evp_key = ldns_ecdsa2pkey_raw(key, keylen, algo);
- if(!evp_key) {
- /* could not convert key */
- return LDNS_STATUS_CRYPTO_BOGUS;
- }
- if(algo == LDNS_ECDSAP256SHA256)
- d = EVP_sha256();
- else d = EVP_sha384(); /* LDNS_ECDSAP384SHA384 */
- result = ldns_verify_rrsig_evp_raw(sig, siglen, rrset, evp_key, d);
- EVP_PKEY_free(evp_key);
- return result;
-}
-#endif
-
-ldns_status
-ldns_verify_rrsig_buffers(ldns_buffer *rawsig_buf, ldns_buffer *verify_buf,
- ldns_buffer *key_buf, uint8_t algo)
-{
- return ldns_verify_rrsig_buffers_raw(
- (unsigned char*)ldns_buffer_begin(rawsig_buf),
- ldns_buffer_position(rawsig_buf),
- verify_buf,
- (unsigned char*)ldns_buffer_begin(key_buf),
- ldns_buffer_position(key_buf), algo);
-}
-
-ldns_status
-ldns_verify_rrsig_buffers_raw(unsigned char* sig, size_t siglen,
- ldns_buffer *verify_buf, unsigned char* key, size_t keylen,
- uint8_t algo)
-{
- /* check for right key */
- switch(algo) {
-#ifdef USE_DSA
- case LDNS_DSA:
- case LDNS_DSA_NSEC3:
- return ldns_verify_rrsig_dsa_raw(sig,
- siglen,
- verify_buf,
- key,
- keylen);
- break;
-#endif
- case LDNS_RSASHA1:
- case LDNS_RSASHA1_NSEC3:
- return ldns_verify_rrsig_rsasha1_raw(sig,
- siglen,
- verify_buf,
- key,
- keylen);
- break;
-#ifdef USE_SHA2
- case LDNS_RSASHA256:
- return ldns_verify_rrsig_rsasha256_raw(sig,
- siglen,
- verify_buf,
- key,
- keylen);
- break;
- case LDNS_RSASHA512:
- return ldns_verify_rrsig_rsasha512_raw(sig,
- siglen,
- verify_buf,
- key,
- keylen);
- break;
-#endif
-#ifdef USE_GOST
- case LDNS_ECC_GOST:
- return ldns_verify_rrsig_gost_raw(sig, siglen, verify_buf,
- key, keylen);
- break;
-#endif
-#ifdef USE_ECDSA
- case LDNS_ECDSAP256SHA256:
- case LDNS_ECDSAP384SHA384:
- return ldns_verify_rrsig_ecdsa_raw(sig, siglen, verify_buf,
- key, keylen, algo);
- break;
-#endif
-#ifdef USE_ED25519
- case LDNS_ED25519:
- return ldns_verify_rrsig_ed25519_raw(sig, siglen, verify_buf,
- key, keylen);
- break;
-#endif
-#ifdef USE_ED448
- case LDNS_ED448:
- return ldns_verify_rrsig_ed448_raw(sig, siglen, verify_buf,
- key, keylen);
- break;
-#endif
- case LDNS_RSAMD5:
- return ldns_verify_rrsig_rsamd5_raw(sig,
- siglen,
- verify_buf,
- key,
- keylen);
- break;
- default:
- /* do you know this alg?! */
- return LDNS_STATUS_CRYPTO_UNKNOWN_ALGO;
- }
-}
-
-
-/**
- * Reset the ttl in the rrset with the orig_ttl from the sig
- * and update owner name if it was wildcard
- * Also canonicalizes the rrset.
- * @param rrset: rrset to modify
- * @param sig: signature to take TTL and wildcard values from
- */
-static void
-ldns_rrset_use_signature_ttl(ldns_rr_list* rrset_clone, const ldns_rr* rrsig)
-{
- uint32_t orig_ttl;
- uint16_t i;
- uint8_t label_count;
- ldns_rdf *wildcard_name;
- ldns_rdf *wildcard_chopped;
- ldns_rdf *wildcard_chopped_tmp;
-
- if ((rrsig == NULL) || ldns_rr_rd_count(rrsig) < 4) {
- return;
- }
-
- orig_ttl = ldns_rdf2native_int32( ldns_rr_rdf(rrsig, 3));
- label_count = ldns_rdf2native_int8(ldns_rr_rdf(rrsig, 2));
-
- for(i = 0; i < ldns_rr_list_rr_count(rrset_clone); i++) {
- if (label_count <
- ldns_dname_label_count(
- ldns_rr_owner(ldns_rr_list_rr(rrset_clone, i)))) {
- (void) ldns_str2rdf_dname(&wildcard_name, "*");
- wildcard_chopped = ldns_rdf_clone(ldns_rr_owner(
- ldns_rr_list_rr(rrset_clone, i)));
- while (label_count < ldns_dname_label_count(wildcard_chopped)) {
- wildcard_chopped_tmp = ldns_dname_left_chop(
- wildcard_chopped);
- ldns_rdf_deep_free(wildcard_chopped);
- wildcard_chopped = wildcard_chopped_tmp;
- }
- (void) ldns_dname_cat(wildcard_name, wildcard_chopped);
- ldns_rdf_deep_free(wildcard_chopped);
- ldns_rdf_deep_free(ldns_rr_owner(ldns_rr_list_rr(
- rrset_clone, i)));
- ldns_rr_set_owner(ldns_rr_list_rr(rrset_clone, i),
- wildcard_name);
- }
- ldns_rr_set_ttl(ldns_rr_list_rr(rrset_clone, i), orig_ttl);
- /* convert to lowercase */
- ldns_rr2canonical(ldns_rr_list_rr(rrset_clone, i));
- }
-}
-
-/**
- * Make raw signature buffer out of rrsig
- * @param rawsig_buf: raw signature buffer for result
- * @param rrsig: signature to convert
- * @return OK or more specific error.
- */
-static ldns_status
-ldns_rrsig2rawsig_buffer(ldns_buffer* rawsig_buf, const ldns_rr* rrsig)
-{
- uint8_t sig_algo;
-
- if (rrsig == NULL) {
- return LDNS_STATUS_CRYPTO_NO_RRSIG;
- }
- if (ldns_rr_rdf(rrsig, 1) == NULL) {
- return LDNS_STATUS_MISSING_RDATA_FIELDS_RRSIG;
- }
- sig_algo = ldns_rdf2native_int8(ldns_rr_rdf(rrsig, 1));
- /* check for known and implemented algo's now (otherwise
- * the function could return a wrong error
- */
- /* create a buffer with signature rdata */
- /* for some algorithms we need other data than for others... */
- /* (the DSA API wants DER encoding for instance) */
-
- switch(sig_algo) {
- case LDNS_RSAMD5:
- case LDNS_RSASHA1:
- case LDNS_RSASHA1_NSEC3:
-#ifdef USE_SHA2
- case LDNS_RSASHA256:
- case LDNS_RSASHA512:
-#endif
-#ifdef USE_GOST
- case LDNS_ECC_GOST:
-#endif
-#ifdef USE_ED25519
- case LDNS_ED25519:
-#endif
-#ifdef USE_ED448
- case LDNS_ED448:
-#endif
- if (ldns_rr_rdf(rrsig, 8) == NULL) {
- return LDNS_STATUS_MISSING_RDATA_FIELDS_RRSIG;
- }
- if (ldns_rdf2buffer_wire(rawsig_buf, ldns_rr_rdf(rrsig, 8))
- != LDNS_STATUS_OK) {
- return LDNS_STATUS_MEM_ERR;
- }
- break;
-#ifdef USE_DSA
- case LDNS_DSA:
- case LDNS_DSA_NSEC3:
- /* EVP takes rfc2459 format, which is a tad longer than dns format */
- if (ldns_rr_rdf(rrsig, 8) == NULL) {
- return LDNS_STATUS_MISSING_RDATA_FIELDS_RRSIG;
- }
- if (ldns_convert_dsa_rrsig_rdf2asn1(
- rawsig_buf, ldns_rr_rdf(rrsig, 8))
- != LDNS_STATUS_OK) {
- /*
- if (ldns_rdf2buffer_wire(rawsig_buf,
- ldns_rr_rdf(rrsig, 8)) != LDNS_STATUS_OK) {
- */
- return LDNS_STATUS_MEM_ERR;
- }
- break;
-#endif
-#ifdef USE_ECDSA
- case LDNS_ECDSAP256SHA256:
- case LDNS_ECDSAP384SHA384:
- /* EVP produces an ASN prefix on the signature, which is
- * not used in the DNS */
- if (ldns_rr_rdf(rrsig, 8) == NULL) {
- return LDNS_STATUS_MISSING_RDATA_FIELDS_RRSIG;
- }
- if (ldns_convert_ecdsa_rrsig_rdf2asn1(
- rawsig_buf, ldns_rr_rdf(rrsig, 8))
- != LDNS_STATUS_OK) {
- return LDNS_STATUS_MEM_ERR;
- }
- break;
-#endif
- case LDNS_DH:
- case LDNS_ECC:
- case LDNS_INDIRECT:
- return LDNS_STATUS_CRYPTO_ALGO_NOT_IMPL;
- default:
- return LDNS_STATUS_CRYPTO_UNKNOWN_ALGO;
- }
- return LDNS_STATUS_OK;
-}
-
-/**
- * Check RRSIG timestamps against the given 'now' time.
- * @param rrsig: signature to check.
- * @param now: the current time in seconds epoch.
- * @return status code LDNS_STATUS_OK if all is fine.
- */
-static ldns_status
-ldns_rrsig_check_timestamps(const ldns_rr* rrsig, time_t now)
-{
- int32_t inception, expiration;
-
- /* check the signature time stamps */
- inception = (int32_t)ldns_rdf2native_time_t(
- ldns_rr_rrsig_inception(rrsig));
- expiration = (int32_t)ldns_rdf2native_time_t(
- ldns_rr_rrsig_expiration(rrsig));
-
- if (expiration - inception < 0) {
- /* bad sig, expiration before inception?? Tsssg */
- return LDNS_STATUS_CRYPTO_EXPIRATION_BEFORE_INCEPTION;
- }
- if (((int32_t) now) - inception < 0) {
- /* bad sig, inception date has not yet come to pass */
- return LDNS_STATUS_CRYPTO_SIG_NOT_INCEPTED;
- }
- if (expiration - ((int32_t) now) < 0) {
- /* bad sig, expiration date has passed */
- return LDNS_STATUS_CRYPTO_SIG_EXPIRED;
- }
- return LDNS_STATUS_OK;
-}
-
-/**
- * Prepare for verification.
- * @param rawsig_buf: raw signature buffer made ready.
- * @param verify_buf: data for verification buffer made ready.
- * @param rrset_clone: made ready.
- * @param rrsig: signature to prepare for.
- * @return LDNS_STATUS_OK is all went well. Otherwise specific error.
- */
-static ldns_status
-ldns_prepare_for_verify(ldns_buffer* rawsig_buf, ldns_buffer* verify_buf,
- ldns_rr_list* rrset_clone, const ldns_rr* rrsig)
-{
- ldns_status result;
-
- /* canonicalize the sig */
- ldns_dname2canonical(ldns_rr_owner(rrsig));
-
- /* check if the typecovered is equal to the type checked */
- if (ldns_rdf2rr_type(ldns_rr_rrsig_typecovered(rrsig)) !=
- ldns_rr_get_type(ldns_rr_list_rr(rrset_clone, 0)))
- return LDNS_STATUS_CRYPTO_TYPE_COVERED_ERR;
-
- /* create a buffer with b64 signature rdata */
- result = ldns_rrsig2rawsig_buffer(rawsig_buf, rrsig);
- if(result != LDNS_STATUS_OK)
- return result;
-
- /* use TTL from signature. Use wildcard names for wildcards */
- /* also canonicalizes rrset_clone */
- ldns_rrset_use_signature_ttl(rrset_clone, rrsig);
-
- /* sort the rrset in canonical order */
- ldns_rr_list_sort(rrset_clone);
-
- /* put the signature rr (without the b64) to the verify_buf */
- if (ldns_rrsig2buffer_wire(verify_buf, rrsig) != LDNS_STATUS_OK)
- return LDNS_STATUS_MEM_ERR;
-
- /* add the rrset in verify_buf */
- if(ldns_rr_list2buffer_wire(verify_buf, rrset_clone)
- != LDNS_STATUS_OK)
- return LDNS_STATUS_MEM_ERR;
-
- return LDNS_STATUS_OK;
-}
-
-/**
- * Check if a key matches a signature.
- * Checks keytag, sigalgo and signature.
- * @param rawsig_buf: raw signature buffer for verify
- * @param verify_buf: raw data buffer for verify
- * @param rrsig: the rrsig
- * @param key: key to attempt.
- * @return LDNS_STATUS_OK if OK, else some specific error.
- */
-static ldns_status
-ldns_verify_test_sig_key(ldns_buffer* rawsig_buf, ldns_buffer* verify_buf,
- const ldns_rr* rrsig, ldns_rr* key)
-{
- uint8_t sig_algo;
-
- if (rrsig == NULL) {
- return LDNS_STATUS_CRYPTO_NO_RRSIG;
- }
- if (ldns_rr_rdf(rrsig, 1) == NULL) {
- return LDNS_STATUS_MISSING_RDATA_FIELDS_RRSIG;
- }
- sig_algo = ldns_rdf2native_int8(ldns_rr_rdf(rrsig, 1));
-
- /* before anything, check if the keytags match */
- if (ldns_calc_keytag(key)
- ==
- ldns_rdf2native_int16(ldns_rr_rrsig_keytag(rrsig))
- ) {
- ldns_buffer* key_buf = ldns_buffer_new(LDNS_MAX_PACKETLEN);
- ldns_status result = LDNS_STATUS_ERR;
-
- /* put the key-data in a buffer, that's the third rdf, with
- * the base64 encoded key data */
- if (ldns_rr_rdf(key, 3) == NULL) {
- ldns_buffer_free(key_buf);
- return LDNS_STATUS_MISSING_RDATA_FIELDS_KEY;
- }
- if (ldns_rdf2buffer_wire(key_buf, ldns_rr_rdf(key, 3))
- != LDNS_STATUS_OK) {
- ldns_buffer_free(key_buf);
- /* returning is bad might screw up
- good keys later in the list
- what to do? */
- return LDNS_STATUS_ERR;
- }
-
- if (ldns_rr_rdf(key, 2) == NULL) {
- result = LDNS_STATUS_MISSING_RDATA_FIELDS_KEY;
- }
- else if (sig_algo == ldns_rdf2native_int8(
- ldns_rr_rdf(key, 2))) {
- result = ldns_verify_rrsig_buffers(rawsig_buf,
- verify_buf, key_buf, sig_algo);
- } else {
- /* No keys with the corresponding algorithm are found */
- result = LDNS_STATUS_CRYPTO_NO_MATCHING_KEYTAG_DNSKEY;
- }
-
- ldns_buffer_free(key_buf);
- return result;
- }
- else {
- /* No keys with the corresponding keytag are found */
- return LDNS_STATUS_CRYPTO_NO_MATCHING_KEYTAG_DNSKEY;
- }
-}
-
-/*
- * to verify:
- * - create the wire fmt of the b64 key rdata
- * - create the wire fmt of the sorted rrset
- * - create the wire fmt of the b64 sig rdata
- * - create the wire fmt of the sig without the b64 rdata
- * - cat the sig data (without b64 rdata) to the rrset
- * - verify the rrset+sig, with the b64 data and the b64 key data
- */
-ldns_status
-ldns_verify_rrsig_keylist_time(
- const ldns_rr_list *rrset,
- const ldns_rr *rrsig,
- const ldns_rr_list *keys,
- time_t check_time,
- ldns_rr_list *good_keys)
-{
- ldns_status result;
- ldns_rr_list *valid = ldns_rr_list_new();
- if (!valid)
- return LDNS_STATUS_MEM_ERR;
-
- result = ldns_verify_rrsig_keylist_notime(rrset, rrsig, keys, valid);
- if(result != LDNS_STATUS_OK) {
- ldns_rr_list_free(valid);
- return result;
- }
-
- /* check timestamps last; its OK except time */
- result = ldns_rrsig_check_timestamps(rrsig, check_time);
- if(result != LDNS_STATUS_OK) {
- ldns_rr_list_free(valid);
- return result;
- }
-
- ldns_rr_list_cat(good_keys, valid);
- ldns_rr_list_free(valid);
- return LDNS_STATUS_OK;
-}
-
-/*
- * to verify:
- * - create the wire fmt of the b64 key rdata
- * - create the wire fmt of the sorted rrset
- * - create the wire fmt of the b64 sig rdata
- * - create the wire fmt of the sig without the b64 rdata
- * - cat the sig data (without b64 rdata) to the rrset
- * - verify the rrset+sig, with the b64 data and the b64 key data
- */
-ldns_status
-ldns_verify_rrsig_keylist(ldns_rr_list *rrset,
- ldns_rr *rrsig,
- const ldns_rr_list *keys,
- ldns_rr_list *good_keys)
-{
- return ldns_verify_rrsig_keylist_time(
- rrset, rrsig, keys, ldns_time(NULL), good_keys);
-}
-
-ldns_status
-ldns_verify_rrsig_keylist_notime(const ldns_rr_list *rrset,
- const ldns_rr *rrsig,
- const ldns_rr_list *keys,
- ldns_rr_list *good_keys)
-{
- ldns_buffer *rawsig_buf;
- ldns_buffer *verify_buf;
- uint16_t i;
- ldns_status result, status;
- ldns_rr_list *rrset_clone;
- ldns_rr_list *validkeys;
-
- if (!rrset) {
- return LDNS_STATUS_ERR;
- }
-
- validkeys = ldns_rr_list_new();
- if (!validkeys) {
- return LDNS_STATUS_MEM_ERR;
- }
-
- /* clone the rrset so that we can fiddle with it */
- rrset_clone = ldns_rr_list_clone(rrset);
-
- /* create the buffers which will certainly hold the raw data */
- rawsig_buf = ldns_buffer_new(LDNS_MAX_PACKETLEN);
- verify_buf = ldns_buffer_new(LDNS_MAX_PACKETLEN);
-
- result = ldns_prepare_for_verify(rawsig_buf, verify_buf,
- rrset_clone, rrsig);
- if(result != LDNS_STATUS_OK) {
- ldns_buffer_free(verify_buf);
- ldns_buffer_free(rawsig_buf);
- ldns_rr_list_deep_free(rrset_clone);
- ldns_rr_list_free(validkeys);
- return result;
- }
-
- result = LDNS_STATUS_CRYPTO_NO_MATCHING_KEYTAG_DNSKEY;
- for(i = 0; i < ldns_rr_list_rr_count(keys); i++) {
- status = ldns_verify_test_sig_key(rawsig_buf, verify_buf,
- rrsig, ldns_rr_list_rr(keys, i));
- if (status == LDNS_STATUS_OK) {
- /* one of the keys has matched, don't break
- * here, instead put the 'winning' key in
- * the validkey list and return the list
- * later */
- if (!ldns_rr_list_push_rr(validkeys,
- ldns_rr_list_rr(keys,i))) {
- /* couldn't push the key?? */
- ldns_buffer_free(rawsig_buf);
- ldns_buffer_free(verify_buf);
- ldns_rr_list_deep_free(rrset_clone);
- ldns_rr_list_free(validkeys);
- return LDNS_STATUS_MEM_ERR;
- }
-
- result = status;
- }
-
- if (result == LDNS_STATUS_CRYPTO_NO_MATCHING_KEYTAG_DNSKEY) {
- result = status;
- }
- }
-
- /* no longer needed */
- ldns_rr_list_deep_free(rrset_clone);
- ldns_buffer_free(rawsig_buf);
- ldns_buffer_free(verify_buf);
-
- if (ldns_rr_list_rr_count(validkeys) == 0) {
- /* no keys were added, return last error */
- ldns_rr_list_free(validkeys);
- return result;
- }
-
- /* do not check timestamps */
-
- ldns_rr_list_cat(good_keys, validkeys);
- ldns_rr_list_free(validkeys);
- return LDNS_STATUS_OK;
-}
-
-ldns_status
-ldns_verify_rrsig_time(
- ldns_rr_list *rrset,
- ldns_rr *rrsig,
- ldns_rr *key,
- time_t check_time)
-{
- ldns_buffer *rawsig_buf;
- ldns_buffer *verify_buf;
- ldns_status result;
- ldns_rr_list *rrset_clone;
-
- if (!rrset) {
- return LDNS_STATUS_NO_DATA;
- }
- /* clone the rrset so that we can fiddle with it */
- rrset_clone = ldns_rr_list_clone(rrset);
- /* create the buffers which will certainly hold the raw data */
- rawsig_buf = ldns_buffer_new(LDNS_MAX_PACKETLEN);
- verify_buf = ldns_buffer_new(LDNS_MAX_PACKETLEN);
-
- result = ldns_prepare_for_verify(rawsig_buf, verify_buf,
- rrset_clone, rrsig);
- if(result != LDNS_STATUS_OK) {
- ldns_rr_list_deep_free(rrset_clone);
- ldns_buffer_free(rawsig_buf);
- ldns_buffer_free(verify_buf);
- return result;
- }
- result = ldns_verify_test_sig_key(rawsig_buf, verify_buf,
- rrsig, key);
- /* no longer needed */
- ldns_rr_list_deep_free(rrset_clone);
- ldns_buffer_free(rawsig_buf);
- ldns_buffer_free(verify_buf);
-
- /* check timestamp last, apart from time its OK */
- if(result == LDNS_STATUS_OK)
- result = ldns_rrsig_check_timestamps(rrsig, check_time);
-
- return result;
-}
-
-ldns_status
-ldns_verify_rrsig(ldns_rr_list *rrset, ldns_rr *rrsig, ldns_rr *key)
-{
- return ldns_verify_rrsig_time(rrset, rrsig, key, ldns_time(NULL));
-}
-
-
-ldns_status
-ldns_verify_rrsig_evp(ldns_buffer *sig,
- ldns_buffer *rrset,
- EVP_PKEY *key,
- const EVP_MD *digest_type)
-{
- return ldns_verify_rrsig_evp_raw(
- (unsigned char*)ldns_buffer_begin(sig),
- ldns_buffer_position(sig),
- rrset,
- key,
- digest_type);
-}
-
-ldns_status
-ldns_verify_rrsig_evp_raw(const unsigned char *sig, size_t siglen,
- const ldns_buffer *rrset, EVP_PKEY *key, const EVP_MD *digest_type)
-{
- EVP_MD_CTX *ctx;
- int res;
-
-#ifdef HAVE_EVP_MD_CTX_NEW
- ctx = EVP_MD_CTX_new();
-#else
- ctx = (EVP_MD_CTX*)malloc(sizeof(*ctx));
- if(ctx) EVP_MD_CTX_init(ctx);
-#endif
- if(!ctx)
- return LDNS_STATUS_MEM_ERR;
-
-#if defined(USE_ED25519) || defined(USE_ED448)
- if(!digest_type) {
- res = EVP_DigestVerifyInit(ctx, NULL, digest_type, NULL, key);
- if(res == 1) {
- res = EVP_DigestVerify(ctx, sig, siglen,
- ldns_buffer_begin(rrset),
- ldns_buffer_position(rrset));
- }
- } else {
-#else
- res = 0;
- if(digest_type) {
-#endif
- EVP_VerifyInit(ctx, digest_type);
- EVP_VerifyUpdate(ctx,
- ldns_buffer_begin(rrset),
- ldns_buffer_position(rrset));
- res = EVP_VerifyFinal(ctx, sig, (unsigned int) siglen, key);
- }
-
- EVP_MD_CTX_destroy(ctx);
-
- if (res == 1) {
- return LDNS_STATUS_OK;
-
- } else if (res == 0) {
- return LDNS_STATUS_CRYPTO_BOGUS;
- }
- /* TODO how to communicate internal SSL error?
- let caller use ssl's get_error() */
- return LDNS_STATUS_SSL_ERR;
-}
-
-ldns_status
-ldns_verify_rrsig_dsa(ldns_buffer *sig, ldns_buffer *rrset, ldns_buffer *key)
-{
- return ldns_verify_rrsig_dsa_raw(
- (unsigned char*) ldns_buffer_begin(sig),
- ldns_buffer_position(sig),
- rrset,
- (unsigned char*) ldns_buffer_begin(key),
- ldns_buffer_position(key));
-}
-
-ldns_status
-ldns_verify_rrsig_rsasha1(ldns_buffer *sig, ldns_buffer *rrset, ldns_buffer *key)
-{
- return ldns_verify_rrsig_rsasha1_raw(
- (unsigned char*)ldns_buffer_begin(sig),
- ldns_buffer_position(sig),
- rrset,
- (unsigned char*) ldns_buffer_begin(key),
- ldns_buffer_position(key));
-}
-
-ldns_status
-ldns_verify_rrsig_rsamd5(ldns_buffer *sig, ldns_buffer *rrset, ldns_buffer *key)
-{
- return ldns_verify_rrsig_rsamd5_raw(
- (unsigned char*)ldns_buffer_begin(sig),
- ldns_buffer_position(sig),
- rrset,
- (unsigned char*) ldns_buffer_begin(key),
- ldns_buffer_position(key));
-}
-
-ldns_status
-ldns_verify_rrsig_dsa_raw(unsigned char* sig, size_t siglen,
- ldns_buffer* rrset, unsigned char* key, size_t keylen)
-{
-#ifdef USE_DSA
- EVP_PKEY *evp_key;
- ldns_status result;
-
- evp_key = EVP_PKEY_new();
- if (EVP_PKEY_assign_DSA(evp_key, ldns_key_buf2dsa_raw(key, keylen))) {
- result = ldns_verify_rrsig_evp_raw(sig,
- siglen,
- rrset,
- evp_key,
-# ifdef HAVE_EVP_DSS1
- EVP_dss1()
-# else
- EVP_sha1()
-# endif
- );
- } else {
- result = LDNS_STATUS_SSL_ERR;
- }
- EVP_PKEY_free(evp_key);
- return result;
-#else
- (void)sig; (void)siglen; (void)rrset; (void)key; (void)keylen;
- return LDNS_STATUS_CRYPTO_ALGO_NOT_IMPL;
-#endif
-}
-
-ldns_status
-ldns_verify_rrsig_rsasha1_raw(unsigned char* sig, size_t siglen,
- ldns_buffer* rrset, unsigned char* key, size_t keylen)
-{
- EVP_PKEY *evp_key;
- ldns_status result;
-
- evp_key = EVP_PKEY_new();
- if (EVP_PKEY_assign_RSA(evp_key, ldns_key_buf2rsa_raw(key, keylen))) {
- result = ldns_verify_rrsig_evp_raw(sig,
- siglen,
- rrset,
- evp_key,
- EVP_sha1());
- } else {
- result = LDNS_STATUS_SSL_ERR;
- }
- EVP_PKEY_free(evp_key);
-
- return result;
-}
-
-ldns_status
-ldns_verify_rrsig_rsasha256_raw(unsigned char* sig,
- size_t siglen,
- ldns_buffer* rrset,
- unsigned char* key,
- size_t keylen)
-{
-#ifdef USE_SHA2
- EVP_PKEY *evp_key;
- ldns_status result;
-
- evp_key = EVP_PKEY_new();
- if (EVP_PKEY_assign_RSA(evp_key, ldns_key_buf2rsa_raw(key, keylen))) {
- result = ldns_verify_rrsig_evp_raw(sig,
- siglen,
- rrset,
- evp_key,
- EVP_sha256());
- } else {
- result = LDNS_STATUS_SSL_ERR;
- }
- EVP_PKEY_free(evp_key);
-
- return result;
-#else
- /* touch these to prevent compiler warnings */
- (void) sig;
- (void) siglen;
- (void) rrset;
- (void) key;
- (void) keylen;
- return LDNS_STATUS_CRYPTO_UNKNOWN_ALGO;
-#endif
-}
-
-ldns_status
-ldns_verify_rrsig_rsasha512_raw(unsigned char* sig,
- size_t siglen,
- ldns_buffer* rrset,
- unsigned char* key,
- size_t keylen)
-{
-#ifdef USE_SHA2
- EVP_PKEY *evp_key;
- ldns_status result;
-
- evp_key = EVP_PKEY_new();
- if (EVP_PKEY_assign_RSA(evp_key, ldns_key_buf2rsa_raw(key, keylen))) {
- result = ldns_verify_rrsig_evp_raw(sig,
- siglen,
- rrset,
- evp_key,
- EVP_sha512());
- } else {
- result = LDNS_STATUS_SSL_ERR;
- }
- EVP_PKEY_free(evp_key);
-
- return result;
-#else
- /* touch these to prevent compiler warnings */
- (void) sig;
- (void) siglen;
- (void) rrset;
- (void) key;
- (void) keylen;
- return LDNS_STATUS_CRYPTO_UNKNOWN_ALGO;
-#endif
-}
-
-
-ldns_status
-ldns_verify_rrsig_rsamd5_raw(unsigned char* sig,
- size_t siglen,
- ldns_buffer* rrset,
- unsigned char* key,
- size_t keylen)
-{
- EVP_PKEY *evp_key;
- ldns_status result;
-
- evp_key = EVP_PKEY_new();
- if (EVP_PKEY_assign_RSA(evp_key, ldns_key_buf2rsa_raw(key, keylen))) {
- result = ldns_verify_rrsig_evp_raw(sig,
- siglen,
- rrset,
- evp_key,
- EVP_md5());
- } else {
- result = LDNS_STATUS_SSL_ERR;
- }
- EVP_PKEY_free(evp_key);
-
- return result;
-}
-
-#endif
diff --git a/ldns/dnssec_zone.c b/ldns/dnssec_zone.c
deleted file mode 100644
index e089754..0000000
--- a/ldns/dnssec_zone.c
+++ /dev/null
@@ -1,1203 +0,0 @@
-/*
- * special zone file structures and functions for better dnssec handling
- */
-
-#include <ldns/config.h>
-
-#include <ldns/ldns.h>
-
-ldns_dnssec_rrs *
-ldns_dnssec_rrs_new(void)
-{
- ldns_dnssec_rrs *new_rrs;
- new_rrs = LDNS_MALLOC(ldns_dnssec_rrs);
- if(!new_rrs) return NULL;
- new_rrs->rr = NULL;
- new_rrs->next = NULL;
- return new_rrs;
-}
-
-INLINE void
-ldns_dnssec_rrs_free_internal(ldns_dnssec_rrs *rrs, int deep)
-{
- ldns_dnssec_rrs *next;
- while (rrs) {
- next = rrs->next;
- if (deep) {
- ldns_rr_free(rrs->rr);
- }
- LDNS_FREE(rrs);
- rrs = next;
- }
-}
-
-void
-ldns_dnssec_rrs_free(ldns_dnssec_rrs *rrs)
-{
- ldns_dnssec_rrs_free_internal(rrs, 0);
-}
-
-void
-ldns_dnssec_rrs_deep_free(ldns_dnssec_rrs *rrs)
-{
- ldns_dnssec_rrs_free_internal(rrs, 1);
-}
-
-ldns_status
-ldns_dnssec_rrs_add_rr(ldns_dnssec_rrs *rrs, ldns_rr *rr)
-{
- int cmp;
- ldns_dnssec_rrs *new_rrs;
- if (!rrs || !rr) {
- return LDNS_STATUS_ERR;
- }
-
- /* this could be done more efficiently; name and type should already
- be equal */
- cmp = ldns_rr_compare(rrs->rr, rr);
- if (cmp < 0) {
- if (rrs->next) {
- return ldns_dnssec_rrs_add_rr(rrs->next, rr);
- } else {
- new_rrs = ldns_dnssec_rrs_new();
- new_rrs->rr = rr;
- rrs->next = new_rrs;
- }
- } else if (cmp > 0) {
- /* put the current old rr in the new next, put the new
- rr in the current container */
- new_rrs = ldns_dnssec_rrs_new();
- new_rrs->rr = rrs->rr;
- new_rrs->next = rrs->next;
- rrs->rr = rr;
- rrs->next = new_rrs;
- }
- /* Silently ignore equal rr's */
- return LDNS_STATUS_OK;
-}
-
-void
-ldns_dnssec_rrs_print_fmt(FILE *out, const ldns_output_format *fmt,
- const ldns_dnssec_rrs *rrs)
-{
- if (!rrs) {
- if ((fmt->flags & LDNS_COMMENT_LAYOUT))
- fprintf(out, "; <void>");
- } else {
- if (rrs->rr) {
- ldns_rr_print_fmt(out, fmt, rrs->rr);
- }
- if (rrs->next) {
- ldns_dnssec_rrs_print_fmt(out, fmt, rrs->next);
- }
- }
-}
-
-void
-ldns_dnssec_rrs_print(FILE *out, const ldns_dnssec_rrs *rrs)
-{
- ldns_dnssec_rrs_print_fmt(out, ldns_output_format_default, rrs);
-}
-
-
-ldns_dnssec_rrsets *
-ldns_dnssec_rrsets_new(void)
-{
- ldns_dnssec_rrsets *new_rrsets;
- new_rrsets = LDNS_MALLOC(ldns_dnssec_rrsets);
- if(!new_rrsets) return NULL;
- new_rrsets->rrs = NULL;
- new_rrsets->type = 0;
- new_rrsets->signatures = NULL;
- new_rrsets->next = NULL;
- return new_rrsets;
-}
-
-INLINE void
-ldns_dnssec_rrsets_free_internal(ldns_dnssec_rrsets *rrsets, int deep)
-{
- if (rrsets) {
- if (rrsets->rrs) {
- ldns_dnssec_rrs_free_internal(rrsets->rrs, deep);
- }
- if (rrsets->next) {
- ldns_dnssec_rrsets_free_internal(rrsets->next, deep);
- }
- if (rrsets->signatures) {
- ldns_dnssec_rrs_free_internal(rrsets->signatures, deep);
- }
- LDNS_FREE(rrsets);
- }
-}
-
-void
-ldns_dnssec_rrsets_free(ldns_dnssec_rrsets *rrsets)
-{
- ldns_dnssec_rrsets_free_internal(rrsets, 0);
-}
-
-void
-ldns_dnssec_rrsets_deep_free(ldns_dnssec_rrsets *rrsets)
-{
- ldns_dnssec_rrsets_free_internal(rrsets, 1);
-}
-
-ldns_rr_type
-ldns_dnssec_rrsets_type(const ldns_dnssec_rrsets *rrsets)
-{
- if (rrsets) {
- return rrsets->type;
- } else {
- return 0;
- }
-}
-
-ldns_status
-ldns_dnssec_rrsets_set_type(ldns_dnssec_rrsets *rrsets,
- ldns_rr_type type)
-{
- if (rrsets) {
- rrsets->type = type;
- return LDNS_STATUS_OK;
- }
- return LDNS_STATUS_ERR;
-}
-
-static ldns_dnssec_rrsets *
-ldns_dnssec_rrsets_new_frm_rr(ldns_rr *rr)
-{
- ldns_dnssec_rrsets *new_rrsets;
- ldns_rr_type rr_type;
- bool rrsig;
-
- new_rrsets = ldns_dnssec_rrsets_new();
- rr_type = ldns_rr_get_type(rr);
- if (rr_type == LDNS_RR_TYPE_RRSIG) {
- rrsig = true;
- rr_type = ldns_rdf2rr_type(ldns_rr_rrsig_typecovered(rr));
- } else {
- rrsig = false;
- }
- if (!rrsig) {
- new_rrsets->rrs = ldns_dnssec_rrs_new();
- new_rrsets->rrs->rr = rr;
- } else {
- new_rrsets->signatures = ldns_dnssec_rrs_new();
- new_rrsets->signatures->rr = rr;
- }
- new_rrsets->type = rr_type;
- return new_rrsets;
-}
-
-ldns_status
-ldns_dnssec_rrsets_add_rr(ldns_dnssec_rrsets *rrsets, ldns_rr *rr)
-{
- ldns_dnssec_rrsets *new_rrsets;
- ldns_rr_type rr_type;
- bool rrsig = false;
- ldns_status result = LDNS_STATUS_OK;
-
- if (!rrsets || !rr) {
- return LDNS_STATUS_ERR;
- }
-
- rr_type = ldns_rr_get_type(rr);
-
- if (rr_type == LDNS_RR_TYPE_RRSIG) {
- rrsig = true;
- rr_type = ldns_rdf2rr_type(ldns_rr_rrsig_typecovered(rr));
- }
-
- if (!rrsets->rrs && rrsets->type == 0 && !rrsets->signatures) {
- if (!rrsig) {
- rrsets->rrs = ldns_dnssec_rrs_new();
- rrsets->rrs->rr = rr;
- rrsets->type = rr_type;
- } else {
- rrsets->signatures = ldns_dnssec_rrs_new();
- rrsets->signatures->rr = rr;
- rrsets->type = rr_type;
- }
- return LDNS_STATUS_OK;
- }
-
- if (rr_type > ldns_dnssec_rrsets_type(rrsets)) {
- if (rrsets->next) {
- result = ldns_dnssec_rrsets_add_rr(rrsets->next, rr);
- } else {
- new_rrsets = ldns_dnssec_rrsets_new_frm_rr(rr);
- rrsets->next = new_rrsets;
- }
- } else if (rr_type < ldns_dnssec_rrsets_type(rrsets)) {
- /* move the current one into the new next,
- replace field of current with data from new rr */
- new_rrsets = ldns_dnssec_rrsets_new();
- new_rrsets->rrs = rrsets->rrs;
- new_rrsets->type = rrsets->type;
- new_rrsets->signatures = rrsets->signatures;
- new_rrsets->next = rrsets->next;
- if (!rrsig) {
- rrsets->rrs = ldns_dnssec_rrs_new();
- rrsets->rrs->rr = rr;
- rrsets->signatures = NULL;
- } else {
- rrsets->rrs = NULL;
- rrsets->signatures = ldns_dnssec_rrs_new();
- rrsets->signatures->rr = rr;
- }
- rrsets->type = rr_type;
- rrsets->next = new_rrsets;
- } else {
- /* equal, add to current rrsets */
- if (rrsig) {
- if (rrsets->signatures) {
- result = ldns_dnssec_rrs_add_rr(rrsets->signatures, rr);
- } else {
- rrsets->signatures = ldns_dnssec_rrs_new();
- rrsets->signatures->rr = rr;
- }
- } else {
- if (rrsets->rrs) {
- result = ldns_dnssec_rrs_add_rr(rrsets->rrs, rr);
- } else {
- rrsets->rrs = ldns_dnssec_rrs_new();
- rrsets->rrs->rr = rr;
- }
- }
- }
-
- return result;
-}
-
-static void
-ldns_dnssec_rrsets_print_soa_fmt(FILE *out, const ldns_output_format *fmt,
- const ldns_dnssec_rrsets *rrsets,
- bool follow,
- bool show_soa)
-{
- if (!rrsets) {
- if ((fmt->flags & LDNS_COMMENT_LAYOUT))
- fprintf(out, "; <void>\n");
- } else {
- if (rrsets->rrs &&
- (show_soa ||
- ldns_rr_get_type(rrsets->rrs->rr) != LDNS_RR_TYPE_SOA
- )
- ) {
- ldns_dnssec_rrs_print_fmt(out, fmt, rrsets->rrs);
- if (rrsets->signatures) {
- ldns_dnssec_rrs_print_fmt(out, fmt,
- rrsets->signatures);
- }
- }
- if (follow && rrsets->next) {
- ldns_dnssec_rrsets_print_soa_fmt(out, fmt,
- rrsets->next, follow, show_soa);
- }
- }
-}
-
-
-void
-ldns_dnssec_rrsets_print_fmt(FILE *out, const ldns_output_format *fmt,
- const ldns_dnssec_rrsets *rrsets,
- bool follow)
-{
- ldns_dnssec_rrsets_print_soa_fmt(out, fmt, rrsets, follow, true);
-}
-
-void
-ldns_dnssec_rrsets_print(FILE *out, const ldns_dnssec_rrsets *rrsets, bool follow)
-{
- ldns_dnssec_rrsets_print_fmt(out, ldns_output_format_default,
- rrsets, follow);
-}
-
-ldns_dnssec_name *
-ldns_dnssec_name_new(void)
-{
- ldns_dnssec_name *new_name;
-
- new_name = LDNS_CALLOC(ldns_dnssec_name, 1);
- if (!new_name) {
- return NULL;
- }
- /*
- * not needed anymore because CALLOC initalizes everything to zero.
-
- new_name->name = NULL;
- new_name->rrsets = NULL;
- new_name->name_alloced = false;
- new_name->nsec = NULL;
- new_name->nsec_signatures = NULL;
-
- new_name->is_glue = false;
- new_name->hashed_name = NULL;
-
- */
- return new_name;
-}
-
-ldns_dnssec_name *
-ldns_dnssec_name_new_frm_rr(ldns_rr *rr)
-{
- ldns_dnssec_name *new_name = ldns_dnssec_name_new();
-
- new_name->name = ldns_rr_owner(rr);
- if(ldns_dnssec_name_add_rr(new_name, rr) != LDNS_STATUS_OK) {
- ldns_dnssec_name_free(new_name);
- return NULL;
- }
-
- return new_name;
-}
-
-INLINE void
-ldns_dnssec_name_free_internal(ldns_dnssec_name *name,
- int deep)
-{
- if (name) {
- if (name->name_alloced) {
- ldns_rdf_deep_free(name->name);
- }
- if (name->rrsets) {
- ldns_dnssec_rrsets_free_internal(name->rrsets, deep);
- }
- if (name->nsec && deep) {
- ldns_rr_free(name->nsec);
- }
- if (name->nsec_signatures) {
- ldns_dnssec_rrs_free_internal(name->nsec_signatures, deep);
- }
- if (name->hashed_name) {
- if (deep) {
- ldns_rdf_deep_free(name->hashed_name);
- }
- }
- LDNS_FREE(name);
- }
-}
-
-void
-ldns_dnssec_name_free(ldns_dnssec_name *name)
-{
- ldns_dnssec_name_free_internal(name, 0);
-}
-
-void
-ldns_dnssec_name_deep_free(ldns_dnssec_name *name)
-{
- ldns_dnssec_name_free_internal(name, 1);
-}
-
-ldns_rdf *
-ldns_dnssec_name_name(const ldns_dnssec_name *name)
-{
- if (name) {
- return name->name;
- }
- return NULL;
-}
-
-bool
-ldns_dnssec_name_is_glue(const ldns_dnssec_name *name)
-{
- if (name) {
- return name->is_glue;
- }
- return false;
-}
-
-void
-ldns_dnssec_name_set_name(ldns_dnssec_name *rrset,
- ldns_rdf *dname)
-{
- if (rrset && dname) {
- rrset->name = dname;
- }
-}
-
-
-void
-ldns_dnssec_name_set_nsec(ldns_dnssec_name *rrset, ldns_rr *nsec)
-{
- if (rrset && nsec) {
- rrset->nsec = nsec;
- }
-}
-
-int
-ldns_dnssec_name_cmp(const void *a, const void *b)
-{
- ldns_dnssec_name *na = (ldns_dnssec_name *) a;
- ldns_dnssec_name *nb = (ldns_dnssec_name *) b;
-
- if (na && nb) {
- return ldns_dname_compare(ldns_dnssec_name_name(na),
- ldns_dnssec_name_name(nb));
- } else if (na) {
- return 1;
- } else if (nb) {
- return -1;
- } else {
- return 0;
- }
-}
-
-ldns_status
-ldns_dnssec_name_add_rr(ldns_dnssec_name *name,
- ldns_rr *rr)
-{
- ldns_status result = LDNS_STATUS_OK;
- ldns_rr_type rr_type;
- ldns_rr_type typecovered = 0;
-
- /* special handling for NSEC3 and NSECX covering RRSIGS */
-
- if (!name || !rr) {
- return LDNS_STATUS_ERR;
- }
-
- rr_type = ldns_rr_get_type(rr);
-
- if (rr_type == LDNS_RR_TYPE_RRSIG) {
- typecovered = ldns_rdf2rr_type(ldns_rr_rrsig_typecovered(rr));
- }
-
- if (rr_type == LDNS_RR_TYPE_NSEC ||
- rr_type == LDNS_RR_TYPE_NSEC3) {
- /* XX check if is already set (and error?) */
- name->nsec = rr;
- } else if (typecovered == LDNS_RR_TYPE_NSEC ||
- typecovered == LDNS_RR_TYPE_NSEC3) {
- if (name->nsec_signatures) {
- result = ldns_dnssec_rrs_add_rr(name->nsec_signatures, rr);
- } else {
- name->nsec_signatures = ldns_dnssec_rrs_new();
- name->nsec_signatures->rr = rr;
- }
- } else {
- /* it's a 'normal' RR, add it to the right rrset */
- if (name->rrsets) {
- result = ldns_dnssec_rrsets_add_rr(name->rrsets, rr);
- } else {
- name->rrsets = ldns_dnssec_rrsets_new();
- result = ldns_dnssec_rrsets_add_rr(name->rrsets, rr);
- }
- }
- return result;
-}
-
-ldns_dnssec_rrsets *
-ldns_dnssec_name_find_rrset(const ldns_dnssec_name *name,
- ldns_rr_type type) {
- ldns_dnssec_rrsets *result;
-
- result = name->rrsets;
- while (result) {
- if (result->type == type) {
- return result;
- } else {
- result = result->next;
- }
- }
- return NULL;
-}
-
-ldns_dnssec_rrsets *
-ldns_dnssec_zone_find_rrset(const ldns_dnssec_zone *zone,
- const ldns_rdf *dname,
- ldns_rr_type type)
-{
- ldns_rbnode_t *node;
-
- if (!zone || !dname || !zone->names) {
- return NULL;
- }
-
- node = ldns_rbtree_search(zone->names, dname);
- if (node) {
- return ldns_dnssec_name_find_rrset((ldns_dnssec_name *)node->data,
- type);
- } else {
- return NULL;
- }
-}
-
-static void
-ldns_dnssec_name_print_soa_fmt(FILE *out, const ldns_output_format *fmt,
- const ldns_dnssec_name *name,
- bool show_soa)
-{
- if (name) {
- if(name->rrsets) {
- ldns_dnssec_rrsets_print_soa_fmt(out, fmt,
- name->rrsets, true, show_soa);
- } else if ((fmt->flags & LDNS_COMMENT_LAYOUT)) {
- fprintf(out, ";; Empty nonterminal: ");
- ldns_rdf_print(out, name->name);
- fprintf(out, "\n");
- }
- if(name->nsec) {
- ldns_rr_print_fmt(out, fmt, name->nsec);
- }
- if (name->nsec_signatures) {
- ldns_dnssec_rrs_print_fmt(out, fmt,
- name->nsec_signatures);
- }
- } else if ((fmt->flags & LDNS_COMMENT_LAYOUT)) {
- fprintf(out, "; <void>\n");
- }
-}
-
-
-void
-ldns_dnssec_name_print_fmt(FILE *out, const ldns_output_format *fmt,
- const ldns_dnssec_name *name)
-{
- ldns_dnssec_name_print_soa_fmt(out, fmt, name, true);
-}
-
-void
-ldns_dnssec_name_print(FILE *out, const ldns_dnssec_name *name)
-{
- ldns_dnssec_name_print_fmt(out, ldns_output_format_default, name);
-}
-
-
-ldns_dnssec_zone *
-ldns_dnssec_zone_new(void)
-{
- ldns_dnssec_zone *zone = LDNS_MALLOC(ldns_dnssec_zone);
- if(!zone) return NULL;
- zone->soa = NULL;
- zone->names = NULL;
- zone->hashed_names = NULL;
- zone->_nsec3params = NULL;
-
- return zone;
-}
-
-static bool
-rr_is_rrsig_covering(ldns_rr* rr, ldns_rr_type t)
-{
- return ldns_rr_get_type(rr) == LDNS_RR_TYPE_RRSIG
- && ldns_rdf2rr_type(ldns_rr_rrsig_typecovered(rr)) == t;
-}
-
-/* When the zone is first read into an list and then inserted into an
- * ldns_dnssec_zone (rbtree) the nodes of the rbtree are allocated close (next)
- * to each other. Because ldns-verify-zone (the only program that uses this
- * function) uses the rbtree mostly for sequentual walking, this results
- * in a speed increase (of 15% on linux) because we have less CPU-cache misses.
- */
-#define FASTER_DNSSEC_ZONE_NEW_FRM_FP 1 /* Because of L2 cache efficiency */
-
-static ldns_status
-ldns_dnssec_zone_add_empty_nonterminals_nsec3(
- ldns_dnssec_zone *zone, ldns_rbtree_t *nsec3s);
-
-static void
-ldns_todo_nsec3_ents_node_free(ldns_rbnode_t *node, void *arg) {
- (void) arg;
- ldns_rdf_deep_free((ldns_rdf *)node->key);
- LDNS_FREE(node);
-}
-
-ldns_status
-ldns_dnssec_zone_new_frm_fp_l(ldns_dnssec_zone** z, FILE* fp, const ldns_rdf* origin,
- uint32_t ttl, ldns_rr_class ATTR_UNUSED(c), int* line_nr)
-{
- ldns_rr* cur_rr;
- size_t i;
-
- ldns_rdf *my_origin = NULL;
- ldns_rdf *my_prev = NULL;
-
- ldns_dnssec_zone *newzone = ldns_dnssec_zone_new();
- /* NSEC3s may occur before the names they refer to. We must remember
- them and add them to the name later on, after the name is read.
- We track not yet matching NSEC3s*n the todo_nsec3s list */
- ldns_rr_list* todo_nsec3s = ldns_rr_list_new();
- /* when reading NSEC3s, there is a chance that we encounter nsecs
- for empty nonterminals, whose nonterminals we cannot derive yet
- because the needed information is to be read later.
-
- nsec3_ents (where ent is e.n.t.; i.e. empty non terminal) will
- hold the NSEC3s that still didn't have a matching name in the
- zone tree, even after all names were read. They can only match
- after the zone is equiped with all the empty non terminals. */
- ldns_rbtree_t todo_nsec3_ents;
- ldns_rbnode_t *new_node;
- ldns_rr_list* todo_nsec3_rrsigs = ldns_rr_list_new();
-
- ldns_status status;
-
-#ifdef FASTER_DNSSEC_ZONE_NEW_FRM_FP
- ldns_zone* zone = NULL;
-#else
- uint32_t my_ttl = ttl;
-#endif
-
- ldns_rbtree_init(&todo_nsec3_ents, ldns_dname_compare_v);
-
-#ifdef FASTER_DNSSEC_ZONE_NEW_FRM_FP
- status = ldns_zone_new_frm_fp_l(&zone, fp, origin,ttl, c, line_nr);
- if (status != LDNS_STATUS_OK)
- goto error;
-#endif
- if (!newzone || !todo_nsec3s || !todo_nsec3_rrsigs ) {
- status = LDNS_STATUS_MEM_ERR;
- goto error;
- }
- if (origin) {
- if (!(my_origin = ldns_rdf_clone(origin))) {
- status = LDNS_STATUS_MEM_ERR;
- goto error;
- }
- if (!(my_prev = ldns_rdf_clone(origin))) {
- status = LDNS_STATUS_MEM_ERR;
- goto error;
- }
- }
-
-#ifdef FASTER_DNSSEC_ZONE_NEW_FRM_FP
- if (ldns_zone_soa(zone)) {
- status = ldns_dnssec_zone_add_rr(newzone, ldns_zone_soa(zone));
- if (status != LDNS_STATUS_OK)
- goto error;
- }
- for (i = 0; i < ldns_rr_list_rr_count(ldns_zone_rrs(zone)); i++) {
- cur_rr = ldns_rr_list_rr(ldns_zone_rrs(zone), i);
- status = LDNS_STATUS_OK;
-#else
- while (!feof(fp)) {
- status = ldns_rr_new_frm_fp_l(&cur_rr, fp, &my_ttl, &my_origin,
- &my_prev, line_nr);
-
-#endif
- switch (status) {
- case LDNS_STATUS_OK:
-
- status = ldns_dnssec_zone_add_rr(newzone, cur_rr);
- if (status ==
- LDNS_STATUS_DNSSEC_NSEC3_ORIGINAL_NOT_FOUND) {
-
- if (rr_is_rrsig_covering(cur_rr,
- LDNS_RR_TYPE_NSEC3)){
- ldns_rr_list_push_rr(todo_nsec3_rrsigs,
- cur_rr);
- } else {
- ldns_rr_list_push_rr(todo_nsec3s,
- cur_rr);
- }
- status = LDNS_STATUS_OK;
-
- } else if (status != LDNS_STATUS_OK)
- goto error;
-
- break;
-
-
- case LDNS_STATUS_SYNTAX_EMPTY: /* empty line was seen */
- case LDNS_STATUS_SYNTAX_TTL: /* the ttl was set*/
- case LDNS_STATUS_SYNTAX_ORIGIN: /* the origin was set*/
- status = LDNS_STATUS_OK;
- break;
-
- case LDNS_STATUS_SYNTAX_INCLUDE:/* $include not implemented */
- status = LDNS_STATUS_SYNTAX_INCLUDE_ERR_NOTIMPL;
- break;
-
- default:
- goto error;
- }
- }
-
- for (i = 0; status == LDNS_STATUS_OK &&
- i < ldns_rr_list_rr_count(todo_nsec3s); i++) {
- cur_rr = ldns_rr_list_rr(todo_nsec3s, i);
- status = ldns_dnssec_zone_add_rr(newzone, cur_rr);
- if (status == LDNS_STATUS_DNSSEC_NSEC3_ORIGINAL_NOT_FOUND) {
- if (!(new_node = LDNS_MALLOC(ldns_rbnode_t))) {
- status = LDNS_STATUS_MEM_ERR;
- break;
- }
- new_node->key = ldns_dname_label(ldns_rr_owner(cur_rr), 0);
- new_node->data = cur_rr;
- if (!ldns_rbtree_insert(&todo_nsec3_ents, new_node)) {
- LDNS_FREE(new_node);
- status = LDNS_STATUS_MEM_ERR;
- break;
- }
- status = LDNS_STATUS_OK;
- }
- }
- if (todo_nsec3_ents.count > 0)
- (void) ldns_dnssec_zone_add_empty_nonterminals_nsec3(
- newzone, &todo_nsec3_ents);
- for (i = 0; status == LDNS_STATUS_OK &&
- i < ldns_rr_list_rr_count(todo_nsec3_rrsigs); i++) {
- cur_rr = ldns_rr_list_rr(todo_nsec3_rrsigs, i);
- status = ldns_dnssec_zone_add_rr(newzone, cur_rr);
- }
- if (z) {
- *z = newzone;
- newzone = NULL;
- } else {
- ldns_dnssec_zone_free(newzone);
- newzone = NULL;
- }
-
-error:
-#ifdef FASTER_DNSSEC_ZONE_NEW_FRM_FP
- if (zone) {
- ldns_zone_free(zone);
- }
-#endif
- ldns_rr_list_free(todo_nsec3_rrsigs);
- ldns_traverse_postorder(&todo_nsec3_ents,
- ldns_todo_nsec3_ents_node_free, NULL);
- ldns_rr_list_free(todo_nsec3s);
-
- if (my_origin) {
- ldns_rdf_deep_free(my_origin);
- }
- if (my_prev) {
- ldns_rdf_deep_free(my_prev);
- }
- if (newzone) {
- ldns_dnssec_zone_free(newzone);
- }
- return status;
-}
-
-ldns_status
-ldns_dnssec_zone_new_frm_fp(ldns_dnssec_zone** z, FILE* fp, const ldns_rdf* origin,
- uint32_t ttl, ldns_rr_class ATTR_UNUSED(c))
-{
- return ldns_dnssec_zone_new_frm_fp_l(z, fp, origin, ttl, c, NULL);
-}
-
-static void
-ldns_dnssec_name_node_free(ldns_rbnode_t *node, void *arg) {
- (void) arg;
- ldns_dnssec_name_free((ldns_dnssec_name *)node->data);
- LDNS_FREE(node);
-}
-
-static void
-ldns_dnssec_name_node_deep_free(ldns_rbnode_t *node, void *arg) {
- (void) arg;
- ldns_dnssec_name_deep_free((ldns_dnssec_name *)node->data);
- LDNS_FREE(node);
-}
-
-void
-ldns_dnssec_zone_free(ldns_dnssec_zone *zone)
-{
- if (zone) {
- if (zone->names) {
- /* destroy all name structures within the tree */
- ldns_traverse_postorder(zone->names,
- ldns_dnssec_name_node_free,
- NULL);
- LDNS_FREE(zone->names);
- }
- LDNS_FREE(zone);
- }
-}
-
-void
-ldns_dnssec_zone_deep_free(ldns_dnssec_zone *zone)
-{
- if (zone) {
- if (zone->names) {
- /* destroy all name structures within the tree */
- ldns_traverse_postorder(zone->names,
- ldns_dnssec_name_node_deep_free,
- NULL);
- LDNS_FREE(zone->names);
- }
- LDNS_FREE(zone);
- }
-}
-
-/* use for dname comparison in tree */
-int
-ldns_dname_compare_v(const void *a, const void *b) {
- return ldns_dname_compare((ldns_rdf *)a, (ldns_rdf *)b);
-}
-
-static void
-ldns_dnssec_name_make_hashed_name(ldns_dnssec_zone *zone,
- ldns_dnssec_name* name, ldns_rr* nsec3rr);
-
-static void
-ldns_hashed_names_node_free(ldns_rbnode_t *node, void *arg) {
- (void) arg;
- LDNS_FREE(node);
-}
-
-static void
-ldns_dnssec_zone_hashed_names_from_nsec3(
- ldns_dnssec_zone* zone, ldns_rr* nsec3rr)
-{
- ldns_rbnode_t* current_node;
- ldns_dnssec_name* current_name;
-
- assert(zone != NULL);
- assert(nsec3rr != NULL);
-
- if (zone->hashed_names) {
- ldns_traverse_postorder(zone->hashed_names,
- ldns_hashed_names_node_free, NULL);
- LDNS_FREE(zone->hashed_names);
- }
- zone->_nsec3params = nsec3rr;
-
- /* So this is a NSEC3 zone.
- * Calculate hashes for all names already in the zone
- */
- zone->hashed_names = ldns_rbtree_create(ldns_dname_compare_v);
- if (zone->hashed_names == NULL) {
- return;
- }
- for ( current_node = ldns_rbtree_first(zone->names)
- ; current_node != LDNS_RBTREE_NULL
- ; current_node = ldns_rbtree_next(current_node)
- ) {
- current_name = (ldns_dnssec_name *) current_node->data;
- ldns_dnssec_name_make_hashed_name(zone, current_name, nsec3rr);
-
- }
-}
-
-static void
-ldns_dnssec_name_make_hashed_name(ldns_dnssec_zone *zone,
- ldns_dnssec_name* name, ldns_rr* nsec3rr)
-{
- ldns_rbnode_t* new_node;
-
- assert(name != NULL);
- if (! zone->_nsec3params) {
- if (! nsec3rr) {
- return;
- }
- ldns_dnssec_zone_hashed_names_from_nsec3(zone, nsec3rr);
-
- } else if (! nsec3rr) {
- nsec3rr = zone->_nsec3params;
- }
- name->hashed_name = ldns_nsec3_hash_name_frm_nsec3(nsec3rr, name->name);
-
- /* Also store in zone->hashed_names */
- if ((new_node = LDNS_MALLOC(ldns_rbnode_t))) {
-
- new_node->key = name->hashed_name;
- new_node->data = name;
-
- if (ldns_rbtree_insert(zone->hashed_names, new_node) == NULL) {
-
- LDNS_FREE(new_node);
- }
- }
-}
-
-
-static ldns_rbnode_t *
-ldns_dnssec_zone_find_nsec3_original(ldns_dnssec_zone *zone, ldns_rr *rr) {
- ldns_rdf *hashed_name;
-
- hashed_name = ldns_dname_label(ldns_rr_owner(rr), 0);
- if (hashed_name == NULL) {
- return NULL;
- }
- if (ldns_rr_get_type(rr) == LDNS_RR_TYPE_NSEC3 && ! zone->_nsec3params){
-
- ldns_dnssec_zone_hashed_names_from_nsec3(zone, rr);
- }
- if (zone->hashed_names == NULL) {
- ldns_rdf_deep_free(hashed_name);
- return NULL;
- }
- return ldns_rbtree_search(zone->hashed_names, hashed_name);
-}
-
-ldns_status
-ldns_dnssec_zone_add_rr(ldns_dnssec_zone *zone, ldns_rr *rr)
-{
- ldns_status result = LDNS_STATUS_OK;
- ldns_dnssec_name *cur_name;
- ldns_rbnode_t *cur_node;
- ldns_rr_type type_covered = 0;
-
- if (!zone || !rr) {
- return LDNS_STATUS_ERR;
- }
-
- if (!zone->names) {
- zone->names = ldns_rbtree_create(ldns_dname_compare_v);
- if(!zone->names) return LDNS_STATUS_MEM_ERR;
- }
-
- /* we need the original of the hashed name if this is
- an NSEC3, or an RRSIG that covers an NSEC3 */
- if (ldns_rr_get_type(rr) == LDNS_RR_TYPE_RRSIG) {
- type_covered = ldns_rdf2rr_type(ldns_rr_rrsig_typecovered(rr));
- }
- if (ldns_rr_get_type(rr) == LDNS_RR_TYPE_NSEC3 ||
- type_covered == LDNS_RR_TYPE_NSEC3) {
- cur_node = ldns_dnssec_zone_find_nsec3_original(zone, rr);
- if (!cur_node) {
- return LDNS_STATUS_DNSSEC_NSEC3_ORIGINAL_NOT_FOUND;
- }
- } else {
- cur_node = ldns_rbtree_search(zone->names, ldns_rr_owner(rr));
- }
- if (!cur_node) {
- /* add */
- cur_name = ldns_dnssec_name_new_frm_rr(rr);
- if(!cur_name) return LDNS_STATUS_MEM_ERR;
- cur_node = LDNS_MALLOC(ldns_rbnode_t);
- if(!cur_node) {
- ldns_dnssec_name_free(cur_name);
- return LDNS_STATUS_MEM_ERR;
- }
- cur_node->key = ldns_rr_owner(rr);
- cur_node->data = cur_name;
- (void)ldns_rbtree_insert(zone->names, cur_node);
- ldns_dnssec_name_make_hashed_name(zone, cur_name, NULL);
- } else {
- cur_name = (ldns_dnssec_name *) cur_node->data;
- result = ldns_dnssec_name_add_rr(cur_name, rr);
- }
- if (ldns_rr_get_type(rr) == LDNS_RR_TYPE_SOA) {
- zone->soa = cur_name;
- }
- return result;
-}
-
-void
-ldns_dnssec_zone_names_print_fmt(FILE *out, const ldns_output_format *fmt,
- const ldns_rbtree_t *tree,
- bool print_soa)
-{
- ldns_rbnode_t *node;
- ldns_dnssec_name *name;
-
- node = ldns_rbtree_first(tree);
- while (node != LDNS_RBTREE_NULL) {
- name = (ldns_dnssec_name *) node->data;
- ldns_dnssec_name_print_soa_fmt(out, fmt, name, print_soa);
- if ((fmt->flags & LDNS_COMMENT_LAYOUT))
- fprintf(out, ";\n");
- node = ldns_rbtree_next(node);
- }
-}
-
-void
-ldns_dnssec_zone_names_print(FILE *out, const ldns_rbtree_t *tree, bool print_soa)
-{
- ldns_dnssec_zone_names_print_fmt(out, ldns_output_format_default,
- tree, print_soa);
-}
-
-void
-ldns_dnssec_zone_print_fmt(FILE *out, const ldns_output_format *fmt,
- const ldns_dnssec_zone *zone)
-{
- if (zone) {
- if (zone->soa) {
- if ((fmt->flags & LDNS_COMMENT_LAYOUT)) {
- fprintf(out, ";; Zone: ");
- ldns_rdf_print(out, ldns_dnssec_name_name(
- zone->soa));
- fprintf(out, "\n;\n");
- }
- ldns_dnssec_rrsets_print_fmt(out, fmt,
- ldns_dnssec_name_find_rrset(
- zone->soa,
- LDNS_RR_TYPE_SOA),
- false);
- if ((fmt->flags & LDNS_COMMENT_LAYOUT))
- fprintf(out, ";\n");
- }
-
- if (zone->names) {
- ldns_dnssec_zone_names_print_fmt(out, fmt,
- zone->names, false);
- }
- }
-}
-
-void
-ldns_dnssec_zone_print(FILE *out, const ldns_dnssec_zone *zone)
-{
- ldns_dnssec_zone_print_fmt(out, ldns_output_format_default, zone);
-}
-
-static ldns_status
-ldns_dnssec_zone_add_empty_nonterminals_nsec3(
- ldns_dnssec_zone *zone, ldns_rbtree_t *nsec3s)
-{
- ldns_dnssec_name *new_name;
- ldns_rdf *cur_name;
- ldns_rdf *next_name;
- ldns_rbnode_t *cur_node, *next_node, *new_node;
-
- /* for the detection */
- uint16_t i, cur_label_count, next_label_count;
- uint16_t soa_label_count = 0;
- ldns_rdf *l1, *l2;
- int lpos;
-
- if (!zone) {
- return LDNS_STATUS_ERR;
- }
- if (zone->soa && zone->soa->name) {
- soa_label_count = ldns_dname_label_count(zone->soa->name);
- }
-
- cur_node = ldns_rbtree_first(zone->names);
- while (cur_node != LDNS_RBTREE_NULL) {
- next_node = ldns_rbtree_next(cur_node);
-
- /* skip glue */
- while (next_node != LDNS_RBTREE_NULL &&
- next_node->data &&
- ((ldns_dnssec_name *)next_node->data)->is_glue
- ) {
- next_node = ldns_rbtree_next(next_node);
- }
-
- if (next_node == LDNS_RBTREE_NULL) {
- next_node = ldns_rbtree_first(zone->names);
- }
- if (! cur_node->data || ! next_node->data) {
- return LDNS_STATUS_ERR;
- }
- cur_name = ((ldns_dnssec_name *)cur_node->data)->name;
- next_name = ((ldns_dnssec_name *)next_node->data)->name;
- cur_label_count = ldns_dname_label_count(cur_name);
- next_label_count = ldns_dname_label_count(next_name);
-
- /* Since the names are in canonical order, we can
- * recognize empty non-terminals by their labels;
- * every label after the first one on the next owner
- * name is a non-terminal if it either does not exist
- * in the current name or is different from the same
- * label in the current name (counting from the end)
- */
- for (i = 1; i < next_label_count - soa_label_count; i++) {
- lpos = (int)cur_label_count - (int)next_label_count + (int)i;
- if (lpos >= 0) {
- l1 = ldns_dname_clone_from(cur_name, (uint8_t)lpos);
- } else {
- l1 = NULL;
- }
- l2 = ldns_dname_clone_from(next_name, i);
-
- if (!l1 || ldns_dname_compare(l1, l2) != 0) {
- /* We have an empty nonterminal, add it to the
- * tree
- */
- ldns_rbnode_t *node = NULL;
- ldns_rdf *ent_name;
-
- if (!(ent_name = ldns_dname_clone_from(
- next_name, i))) {
-
- ldns_rdf_deep_free(l1);
- ldns_rdf_deep_free(l2);
- return LDNS_STATUS_MEM_ERR;
- }
-
- if (nsec3s && zone->_nsec3params) {
- ldns_rdf *ent_hashed_name;
-
- if (!(ent_hashed_name =
- ldns_nsec3_hash_name_frm_nsec3(
- zone->_nsec3params,
- ent_name))) {
- ldns_rdf_deep_free(l1);
- ldns_rdf_deep_free(l2);
- ldns_rdf_deep_free(ent_name);
- return LDNS_STATUS_MEM_ERR;
- }
- node = ldns_rbtree_search(nsec3s,
- ent_hashed_name);
- if (!node) {
- ldns_rdf_deep_free(l1);
- ldns_rdf_deep_free(l2);
- ldns_rdf_deep_free(ent_name);
- continue;
- }
- }
- new_name = ldns_dnssec_name_new();
- if (!new_name) {
- ldns_rdf_deep_free(l1);
- ldns_rdf_deep_free(l2);
- ldns_rdf_deep_free(ent_name);
- return LDNS_STATUS_MEM_ERR;
- }
- new_name->name = ent_name;
- new_name->name_alloced = true;
- new_node = LDNS_MALLOC(ldns_rbnode_t);
- if (!new_node) {
- ldns_rdf_deep_free(l1);
- ldns_rdf_deep_free(l2);
- ldns_dnssec_name_free(new_name);
- return LDNS_STATUS_MEM_ERR;
- }
- new_node->key = new_name->name;
- new_node->data = new_name;
- (void)ldns_rbtree_insert(zone->names, new_node);
- ldns_dnssec_name_make_hashed_name(
- zone, new_name, NULL);
- if (node)
- (void) ldns_dnssec_zone_add_rr(zone,
- (ldns_rr *)node->data);
- }
- ldns_rdf_deep_free(l1);
- ldns_rdf_deep_free(l2);
- }
-
- /* we might have inserted a new node after
- * the current one so we can't just use next()
- */
- if (next_node != ldns_rbtree_first(zone->names)) {
- cur_node = next_node;
- } else {
- cur_node = LDNS_RBTREE_NULL;
- }
- }
- return LDNS_STATUS_OK;
-}
-
-ldns_status
-ldns_dnssec_zone_add_empty_nonterminals(ldns_dnssec_zone *zone)
-{
- return ldns_dnssec_zone_add_empty_nonterminals_nsec3(zone, NULL);
-}
-
-bool
-ldns_dnssec_zone_is_nsec3_optout(const ldns_dnssec_zone* zone)
-{
- ldns_rr* nsec3;
- ldns_rbnode_t* node;
-
- if (ldns_dnssec_name_find_rrset(zone->soa, LDNS_RR_TYPE_NSEC3PARAM)) {
- node = ldns_rbtree_first(zone->names);
- while (node != LDNS_RBTREE_NULL) {
- nsec3 = ((ldns_dnssec_name*)node->data)->nsec;
- if (nsec3 &&ldns_rr_get_type(nsec3)
- == LDNS_RR_TYPE_NSEC3 &&
- ldns_nsec3_optout(nsec3)) {
- return true;
- }
- node = ldns_rbtree_next(node);
- }
- }
- return false;
-}
diff --git a/ldns/duration.c b/ldns/duration.c
deleted file mode 100644
index 0a8d79b..0000000
--- a/ldns/duration.c
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * $Id: duration.c 4518 2011-02-24 15:39:09Z matthijs $
- *
- * Copyright (c) 2009 NLNet Labs. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
- * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-/**
- *
- * This file is copied from the OpenDNSSEC source repository
- * and only slightly adapted to make it fit.
- */
-
-/**
- *
- * Durations.
- */
-
-#include <ldns/config.h>
-#include <ldns/duration.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-
-/**
- * Create a new 'instant' duration.
- *
- */
-ldns_duration_type*
-ldns_duration_create(void)
-{
- ldns_duration_type* duration;
-
- duration = malloc(sizeof(ldns_duration_type));
- if (!duration) {
- return NULL;
- }
- duration->years = 0;
- duration->months = 0;
- duration->weeks = 0;
- duration->days = 0;
- duration->hours = 0;
- duration->minutes = 0;
- duration->seconds = 0;
- return duration;
-}
-
-
-/**
- * Compare durations.
- *
- */
-int
-ldns_duration_compare(const ldns_duration_type* d1, const ldns_duration_type* d2)
-{
- if (!d1 && !d2) {
- return 0;
- }
- if (!d1 || !d2) {
- return d1?-1:1;
- }
-
- if (d1->years != d2->years) {
- return (int) (d1->years - d2->years);
- }
- if (d1->months != d2->months) {
- return (int) (d1->months - d2->months);
- }
- if (d1->weeks != d2->weeks) {
- return (int) (d1->weeks - d2->weeks);
- }
- if (d1->days != d2->days) {
- return (int) (d1->days - d2->days);
- }
- if (d1->hours != d2->hours) {
- return (int) (d1->hours - d2->hours);
- }
- if (d1->minutes != d2->minutes) {
- return (int) (d1->minutes - d2->minutes);
- }
- if (d1->seconds != d2->seconds) {
- return (int) (d1->seconds - d2->seconds);
- }
-
- return 0;
-}
-
-
-/**
- * Create a duration from string.
- *
- */
-ldns_duration_type*
-ldns_duration_create_from_string(const char* str)
-{
- ldns_duration_type* duration = ldns_duration_create();
- char* P, *X, *T, *W;
- int not_weeks = 0;
-
- if (!duration) {
- return NULL;
- }
- if (!str) {
- return duration;
- }
-
- P = strchr(str, 'P');
- if (!P) {
- ldns_duration_cleanup(duration);
- return NULL;
- }
-
- T = strchr(str, 'T');
- X = strchr(str, 'Y');
- if (X) {
- duration->years = (time_t) atoi(str+1);
- str = X;
- not_weeks = 1;
- }
- X = strchr(str, 'M');
- if (X && (!T || (size_t) (X-P) < (size_t) (T-P))) {
- duration->months = (time_t) atoi(str+1);
- str = X;
- not_weeks = 1;
- }
- X = strchr(str, 'D');
- if (X) {
- duration->days = (time_t) atoi(str+1);
- str = X;
- not_weeks = 1;
- }
- if (T) {
- str = T;
- not_weeks = 1;
- }
- X = strchr(str, 'H');
- if (X && T) {
- duration->hours = (time_t) atoi(str+1);
- str = X;
- not_weeks = 1;
- }
- X = strrchr(str, 'M');
- if (X && T && (size_t) (X-P) > (size_t) (T-P)) {
- duration->minutes = (time_t) atoi(str+1);
- str = X;
- not_weeks = 1;
- }
- X = strchr(str, 'S');
- if (X && T) {
- duration->seconds = (time_t) atoi(str+1);
- str = X;
- not_weeks = 1;
- }
-
- W = strchr(str, 'W');
- if (W) {
- if (not_weeks) {
- ldns_duration_cleanup(duration);
- return NULL;
- } else {
- duration->weeks = (time_t) atoi(str+1);
- }
- }
- return duration;
-}
-
-
-/**
- * Get the number of digits in a number.
- *
- */
-static size_t
-digits_in_number(time_t duration)
-{
- unsigned int i = (unsigned int) duration;
- size_t n = 1;
-
- while (i >= 100000000) {
- n += 8;
- i /= 100000000;
- }
- if (i >= 10000) { n += 4; i /= 10000; }
- if (i >= 100 ) { n += 2; i /= 100; }
- if (i >= 10 ) { n += 1; }
- return n;
-}
-
-
-/**
- * Convert a duration to a string.
- *
- */
-char*
-ldns_duration2string(const ldns_duration_type* duration)
-{
- char* str = NULL;
- size_t count = 2;
- int T = 0;
- char num[sizeof(unsigned int) + 2];
-
- if (!duration) {
- return NULL;
- }
-
- if (duration->years > 0) {
- count = count + 1 + digits_in_number(duration->years);
- }
- if (duration->months > 0) {
- count = count + 1 + digits_in_number(duration->months);
- }
- if (duration->weeks > 0) {
- count = count + 1 + digits_in_number(duration->weeks);
- }
- if (duration->days > 0) {
- count = count + 1 + digits_in_number(duration->days);
- }
- if (duration->hours > 0) {
- count = count + 1 + digits_in_number(duration->hours);
- T = 1;
- }
- if (duration->minutes > 0) {
- count = count + 1 + digits_in_number(duration->minutes);
- T = 1;
- }
- if (duration->seconds > 0) {
- count = count + 1 + digits_in_number(duration->seconds);
- T = 1;
- }
- if (T) {
- count++;
- }
-
- if (!(str = (char*) calloc(count, sizeof(char))))
- return NULL;
- str[0] = 'P';
- str[1] = '\0';
-
- if (duration->years > 0) {
- count = digits_in_number(duration->years);
- assert(count <= sizeof(num) - 2);
- snprintf(num, count+2, "%uY", (unsigned int) duration->years);
- str = strncat(str, num, count+2);
- }
- if (duration->months > 0) {
- count = digits_in_number(duration->months);
- assert(count <= sizeof(num) - 2);
- snprintf(num, count+2, "%uM", (unsigned int) duration->months);
- str = strncat(str, num, count+2);
- }
- if (duration->weeks > 0) {
- count = digits_in_number(duration->weeks);
- assert(count <= sizeof(num) - 2);
- snprintf(num, count+2, "%uW", (unsigned int) duration->weeks);
- str = strncat(str, num, count+2);
- }
- if (duration->days > 0) {
- count = digits_in_number(duration->days);
- assert(count <= sizeof(num) - 2);
- snprintf(num, count+2, "%uD", (unsigned int) duration->days);
- str = strncat(str, num, count+2);
- }
- if (T) {
- str = strcat(str, "T");
- }
- if (duration->hours > 0) {
- count = digits_in_number(duration->hours);
- assert(count <= sizeof(num) - 2);
- snprintf(num, count+2, "%uH", (unsigned int) duration->hours);
- str = strncat(str, num, count+2);
- }
- if (duration->minutes > 0) {
- count = digits_in_number(duration->minutes);
- assert(count <= sizeof(num) - 2);
- snprintf(num, count+2, "%uM", (unsigned int) duration->minutes);
- str = strncat(str, num, count+2);
- }
- if (duration->seconds > 0) {
- count = digits_in_number(duration->seconds);
- assert(count <= sizeof(num) - 2);
- snprintf(num, count+2, "%uS", (unsigned int) duration->seconds);
- str = strncat(str, num, count+2);
- }
- return str;
-}
-
-
-/**
- * Convert a duration to a time.
- *
- */
-time_t
-ldns_duration2time(const ldns_duration_type* duration)
-{
- time_t period = 0;
-
- if (duration) {
- period += (duration->seconds);
- period += (duration->minutes)*60;
- period += (duration->hours)*3600;
- period += (duration->days)*86400;
- period += (duration->weeks)*86400*7;
- period += (duration->months)*86400*31;
- period += (duration->years)*86400*365;
-
- /* [TODO] calculate correct number of days in this month/year */
- /*
- if (duration->months || duration->years) {
- }
- */
- }
- return period;
-}
-
-
-/**
- * Clean up duration.
- *
- */
-void
-ldns_duration_cleanup(ldns_duration_type* duration)
-{
- if (!duration) {
- return;
- }
- free(duration);
- return;
-}
diff --git a/ldns/error.c b/ldns/error.c
deleted file mode 100644
index 7943017..0000000
--- a/ldns/error.c
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * a error2str function to make sense of all the
- * error codes we have laying ardoun
- *
- * a Net::DNS like library for C
- * LibDNS Team @ NLnet Labs
- * (c) NLnet Labs, 2005-2006
- * See the file LICENSE for the license
- */
-
-#include <ldns/config.h>
-
-#include <ldns/ldns.h>
-
-ldns_lookup_table ldns_error_str[] = {
- { LDNS_STATUS_OK, "All OK" },
- { LDNS_STATUS_EMPTY_LABEL, "Empty label" },
- { LDNS_STATUS_LABEL_OVERFLOW, "Label length overflow" },
- { LDNS_STATUS_DOMAINNAME_OVERFLOW, "Domainname length overflow" },
- { LDNS_STATUS_DOMAINNAME_UNDERFLOW, "Domainname length underflow (zero length)" },
- { LDNS_STATUS_DDD_OVERFLOW, "\\DDD sequence overflow (>255)" },
- { LDNS_STATUS_PACKET_OVERFLOW, "Packet size overflow" },
- { LDNS_STATUS_INVALID_POINTER, "Invalid compression pointer" },
- { LDNS_STATUS_MEM_ERR, "General memory error" },
- { LDNS_STATUS_INTERNAL_ERR, "Internal error, this should not happen" },
- { LDNS_STATUS_SSL_ERR, "Error in SSL library" },
- { LDNS_STATUS_ERR, "General LDNS error" },
- { LDNS_STATUS_INVALID_INT, "Conversion error, integer expected" },
- { LDNS_STATUS_INVALID_IP4, "Conversion error, ip4 addr expected" },
- { LDNS_STATUS_INVALID_IP6, "Conversion error, ip6 addr expected" },
- { LDNS_STATUS_INVALID_STR, "Conversion error, string expected" },
- { LDNS_STATUS_INVALID_B32_EXT, "Conversion error, b32 ext encoding expected" },
- { LDNS_STATUS_INVALID_B64, "Conversion error, b64 encoding expected" },
- { LDNS_STATUS_INVALID_HEX, "Conversion error, hex encoding expected" },
- { LDNS_STATUS_INVALID_TIME, "Conversion error, time encoding expected" },
- { LDNS_STATUS_NETWORK_ERR, "Could not send or receive, because of network error" },
- { LDNS_STATUS_ADDRESS_ERR, "Could not start AXFR, because of address error" },
- { LDNS_STATUS_FILE_ERR, "Could not open the files" },
- { LDNS_STATUS_UNKNOWN_INET, "Unknown address family" },
- { LDNS_STATUS_NOT_IMPL, "This function is not implemented (yet), please notify the developers - or not..." },
- { LDNS_STATUS_NULL, "Supplied value pointer null" },
- { LDNS_STATUS_CRYPTO_UNKNOWN_ALGO, "Unknown cryptographic algorithm" },
- { LDNS_STATUS_CRYPTO_ALGO_NOT_IMPL, "Cryptographic algorithm not implemented" },
- { LDNS_STATUS_CRYPTO_NO_RRSIG, "No DNSSEC signature(s)" },
- { LDNS_STATUS_CRYPTO_NO_DNSKEY, "No DNSSEC public key(s)" },
- { LDNS_STATUS_CRYPTO_TYPE_COVERED_ERR, "The signature does not cover this RRset" },
- { LDNS_STATUS_CRYPTO_NO_TRUSTED_DNSKEY, "No signatures found for trusted DNSSEC public key(s)" },
- { LDNS_STATUS_CRYPTO_NO_DS, "No DS record(s)" },
- { LDNS_STATUS_CRYPTO_NO_TRUSTED_DS, "Could not validate DS record(s)" },
- { LDNS_STATUS_CRYPTO_NO_MATCHING_KEYTAG_DNSKEY, "No keys with the keytag and algorithm from the RRSIG found" },
- { LDNS_STATUS_CRYPTO_VALIDATED, "Valid DNSSEC signature" },
- { LDNS_STATUS_CRYPTO_BOGUS, "Bogus DNSSEC signature" },
- { LDNS_STATUS_CRYPTO_SIG_EXPIRED, "DNSSEC signature has expired" },
- { LDNS_STATUS_CRYPTO_SIG_NOT_INCEPTED, "DNSSEC signature not incepted yet" },
- { LDNS_STATUS_CRYPTO_TSIG_BOGUS, "Bogus TSIG signature" },
- { LDNS_STATUS_CRYPTO_TSIG_ERR, "Could not create TSIG signature" },
- { LDNS_STATUS_CRYPTO_EXPIRATION_BEFORE_INCEPTION, "DNSSEC signature has expiration date earlier than inception date" },
- { LDNS_STATUS_ENGINE_KEY_NOT_LOADED, "Unable to load private key from engine" },
- { LDNS_STATUS_NSEC3_ERR, "Error in NSEC3 denial of existence proof" },
- { LDNS_STATUS_RES_NO_NS, "No (valid) nameservers defined in the resolver" },
- { LDNS_STATUS_RES_QUERY, "No correct query given to resolver" },
- { LDNS_STATUS_WIRE_INCOMPLETE_HEADER, "header section incomplete" },
- { LDNS_STATUS_WIRE_INCOMPLETE_QUESTION, "question section incomplete" },
- { LDNS_STATUS_WIRE_INCOMPLETE_ANSWER, "answer section incomplete" },
- { LDNS_STATUS_WIRE_INCOMPLETE_AUTHORITY, "authority section incomplete" },
- { LDNS_STATUS_WIRE_INCOMPLETE_ADDITIONAL, "additional section incomplete" },
- { LDNS_STATUS_NO_DATA, "No data" },
- { LDNS_STATUS_EXISTS_ERR, "Element already exists" },
- { LDNS_STATUS_CERT_BAD_ALGORITHM, "Bad algorithm type for CERT record" },
- { LDNS_STATUS_SYNTAX_TYPE_ERR, "Syntax error, could not parse the RR's type" },
- { LDNS_STATUS_SYNTAX_CLASS_ERR, "Syntax error, could not parse the RR's class" },
- { LDNS_STATUS_SYNTAX_TTL_ERR, "Syntax error, could not parse the RR's TTL" },
- { LDNS_STATUS_SYNTAX_INCLUDE_ERR_NOTIMPL, "Syntax error, $INCLUDE not implemented" },
- { LDNS_STATUS_SYNTAX_RDATA_ERR, "Syntax error, could not parse the RR's rdata" },
- { LDNS_STATUS_SYNTAX_DNAME_ERR, "Syntax error, could not parse the RR's dname(s)" },
- { LDNS_STATUS_SYNTAX_VERSION_ERR, "Syntax error, version mismatch" },
- { LDNS_STATUS_SYNTAX_ALG_ERR, "Syntax error, algorithm unknown or non parseable" },
- { LDNS_STATUS_SYNTAX_KEYWORD_ERR, "Syntax error, unknown keyword in input" },
- { LDNS_STATUS_SYNTAX_ERR, "Syntax error, could not parse the RR" },
- { LDNS_STATUS_SYNTAX_EMPTY, "Empty line was returned" },
- { LDNS_STATUS_SYNTAX_TTL, "$TTL directive was seen in the zone" },
- { LDNS_STATUS_SYNTAX_ORIGIN, "$ORIGIN directive was seen in the zone" },
- { LDNS_STATUS_SYNTAX_INCLUDE, "$INCLUDE directive was seen in the zone" },
- { LDNS_STATUS_SYNTAX_ITERATIONS_OVERFLOW, "Iterations count for NSEC3 record higher than maximum" },
- { LDNS_STATUS_SYNTAX_MISSING_VALUE_ERR, "Syntax error, value expected" },
- { LDNS_STATUS_SYNTAX_INTEGER_OVERFLOW, "Syntax error, integer value too large" },
- { LDNS_STATUS_SYNTAX_BAD_ESCAPE, "Syntax error, bad escape sequence" },
- { LDNS_STATUS_SOCKET_ERROR, "Error creating socket" },
- { LDNS_STATUS_DNSSEC_EXISTENCE_DENIED, "Existence denied by NSEC" },
- { LDNS_STATUS_DNSSEC_NSEC_RR_NOT_COVERED, "RR not covered by the given NSEC RRs" },
- { LDNS_STATUS_DNSSEC_NSEC_WILDCARD_NOT_COVERED, "wildcard not covered by the given NSEC RRs" },
- { LDNS_STATUS_DNSSEC_NSEC3_ORIGINAL_NOT_FOUND, "original of NSEC3 hashed name could not be found" },
- { LDNS_STATUS_MISSING_RDATA_FIELDS_RRSIG, "The RRSIG has to few rdata fields" },
- { LDNS_STATUS_MISSING_RDATA_FIELDS_KEY, "The DNSKEY has to few rdata fields" },
- { LDNS_STATUS_CRYPTO_SIG_EXPIRED_WITHIN_MARGIN,
- "DNSSEC signature will expire too soon" },
- { LDNS_STATUS_CRYPTO_SIG_NOT_INCEPTED_WITHIN_MARGIN,
- "DNSSEC signature not incepted long enough" },
- { LDNS_STATUS_DANE_UNKNOWN_CERTIFICATE_USAGE,
- "Unknown TLSA Certificate Usage" },
- { LDNS_STATUS_DANE_UNKNOWN_SELECTOR, "Unknown TLSA Selector" },
- { LDNS_STATUS_DANE_UNKNOWN_MATCHING_TYPE,
- "Unknown TLSA Matching Type" },
- { LDNS_STATUS_DANE_UNKNOWN_PROTOCOL,
- "Unknown protocol. Only IPv4 and IPv6 are understood" },
- { LDNS_STATUS_DANE_UNKNOWN_TRANSPORT,
- "Unknown transport. Should be one of {tcp, udp, sctp}" },
- { LDNS_STATUS_DANE_MISSING_EXTRA_CERTS, /* Trust anchor assertion */
- "More than one certificate should be provided" },
- { LDNS_STATUS_DANE_EXTRA_CERTS_NOT_USED, /* Trust anchor assertion */
- "Non of the extra certificates is used to sign the first" },
- { LDNS_STATUS_DANE_OFFSET_OUT_OF_RANGE, /* Trust anchor assertion */
- "The offset was out of range" },
- { LDNS_STATUS_DANE_INSECURE, /* Unused by library */
- "The queried resource records were insecure" },
- { LDNS_STATUS_DANE_BOGUS, /* Unused by library */
- "The queried resource records were bogus" },
- { LDNS_STATUS_DANE_TLSA_DID_NOT_MATCH,
- "The TLSA record(s) "
- "did not match with the server certificate (chain)" },
- { LDNS_STATUS_DANE_NON_CA_CERTIFICATE,
- "The certificate was not a CA certificate" },
- { LDNS_STATUS_DANE_PKIX_DID_NOT_VALIDATE,
- "Could not PKIX validate" },
- { LDNS_STATUS_DANE_PKIX_NO_SELF_SIGNED_TRUST_ANCHOR,
- "The validation path "
- "did not end in a self-signed certificate" },
- { LDNS_STATUS_INVALID_ILNP64,
- "Conversion error, 4 colon separated hex numbers expected" },
- { LDNS_STATUS_INVALID_EUI48,
- "Conversion error, 6 two character hex numbers "
- "separated by dashes expected (i.e. xx-xx-xx-xx-xx-xx" },
- { LDNS_STATUS_INVALID_EUI64,
- "Conversion error, 8 two character hex numbers "
- "separated by dashes expected (i.e. xx-xx-xx-xx-xx-xx-xx-xx" },
- { LDNS_STATUS_WIRE_RDATA_ERR, "invalid rdata in wire format" },
- { LDNS_STATUS_INVALID_TAG,
- "Conversion error, a non-zero sequence of US-ASCII letters "
- "and numbers in lower case expected" },
- { LDNS_STATUS_TYPE_NOT_IN_BITMAP,
- "The RR type bitmap rdata field did not have "
- "a bit reserved for the specific RR type" },
- { LDNS_STATUS_INVALID_RDF_TYPE,
- "The rdata field was not of the expected type" },
- { LDNS_STATUS_RDATA_OVERFLOW, "Rdata size overflow" },
- { LDNS_STATUS_SYNTAX_SUPERFLUOUS_TEXT_ERR,
- "Syntax error, superfluous text present" },
- { LDNS_STATUS_NSEC3_DOMAINNAME_OVERFLOW,
- "The NSEC3 domainname length overflow" },
-#if OPENSSL_VERSION_NUMBER < 0x10100000 || defined(HAVE_LIBRESSL)
- { LDNS_STATUS_DANE_NEED_OPENSSL_GE_1_1_FOR_DANE_TA,
- "ldns needs to be linked with OpenSSL >= 1.1.0 to be able "
- "to verify the DANE-TA usage type." },
-#else
- { LDNS_STATUS_DANE_NEED_OPENSSL_GE_1_1_FOR_DANE_TA,
- "ldns depends on the availability of the SSL_get0_dane() and "
- "X509_STORE_CTX_set0_dane() functions within OpenSSL >= 1.1.0 "
- "to be able to verify the DANE-TA usage type." },
-#endif
- { 0, NULL }
-};
-
-const char *
-ldns_get_errorstr_by_id(ldns_status err)
-{
- ldns_lookup_table *lt;
-
- lt = ldns_lookup_by_id(ldns_error_str, err);
-
- if (lt) {
- return lt->name;
- }
- return NULL;
-}
diff --git a/ldns/higher.c b/ldns/higher.c
deleted file mode 100644
index 4ca347b..0000000
--- a/ldns/higher.c
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
- * higher.c
- *
- * Specify some higher level functions that would
- * be useful to would be developers
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2004-2006
- *
- * See the file LICENSE for the license
- */
-
-#include <ldns/config.h>
-
-#include <ldns/ldns.h>
-
-#ifdef HAVE_SSL
-#include <openssl/ssl.h>
-#include <openssl/sha.h>
-#endif /* HAVE_SSL */
-
-ldns_rr_list *
-ldns_get_rr_list_addr_by_name(ldns_resolver *res, const ldns_rdf *name,
- ldns_rr_class c, uint16_t flags)
-{
- ldns_pkt *pkt;
- ldns_rr_list *aaaa;
- ldns_rr_list *a;
- ldns_rr_list *result = NULL;
- ldns_rr_list *hostsfilenames;
- size_t i;
- uint8_t ip6;
-
- a = NULL;
- aaaa = NULL;
- result = NULL;
-
- if (!res) {
- return NULL;
- }
- if (ldns_rdf_get_type(name) != LDNS_RDF_TYPE_DNAME) {
- return NULL;
- }
-
- ip6 = ldns_resolver_ip6(res); /* we use INET_ANY here, save
- what was there */
-
- ldns_resolver_set_ip6(res, LDNS_RESOLV_INETANY);
-
- hostsfilenames = ldns_get_rr_list_hosts_frm_file(NULL);
- for (i = 0; i < ldns_rr_list_rr_count(hostsfilenames); i++) {
- if (ldns_rdf_compare(name,
- ldns_rr_owner(ldns_rr_list_rr(hostsfilenames,
- i))) == 0) {
- if (!result) {
- result = ldns_rr_list_new();
- }
- ldns_rr_list_push_rr(result,
- ldns_rr_clone(ldns_rr_list_rr(hostsfilenames, i)));
- }
- }
- ldns_rr_list_deep_free(hostsfilenames);
-
- if (result) {
- return result;
- }
-
- /* add the RD flags, because we want an answer */
- pkt = ldns_resolver_query(res, name, LDNS_RR_TYPE_AAAA, c, flags | LDNS_RD);
- if (pkt) {
- /* extract the data we need */
- aaaa = ldns_pkt_rr_list_by_type(pkt, LDNS_RR_TYPE_AAAA,
- LDNS_SECTION_ANSWER);
- ldns_pkt_free(pkt);
- }
-
- pkt = ldns_resolver_query(res, name, LDNS_RR_TYPE_A, c, flags | LDNS_RD);
- if (pkt) {
- /* extract the data we need */
- a = ldns_pkt_rr_list_by_type(pkt, LDNS_RR_TYPE_A, LDNS_SECTION_ANSWER);
- ldns_pkt_free(pkt);
- }
- ldns_resolver_set_ip6(res, ip6);
-
- if (aaaa && a) {
- result = ldns_rr_list_cat_clone(aaaa, a);
- ldns_rr_list_deep_free(aaaa);
- ldns_rr_list_deep_free(a);
- return result;
- }
-
- if (aaaa) {
- result = ldns_rr_list_clone(aaaa);
- }
-
- if (a) {
- result = ldns_rr_list_clone(a);
- }
-
- ldns_rr_list_deep_free(aaaa);
- ldns_rr_list_deep_free(a);
- return result;
-}
-
-ldns_rr_list *
-ldns_get_rr_list_name_by_addr(ldns_resolver *res, const ldns_rdf *addr,
- ldns_rr_class c, uint16_t flags)
-{
- ldns_pkt *pkt;
- ldns_rr_list *names;
- ldns_rdf *name;
-
- names = NULL;
-
- if (!res || !addr) {
- return NULL;
- }
-
- if (ldns_rdf_get_type(addr) != LDNS_RDF_TYPE_A &&
- ldns_rdf_get_type(addr) != LDNS_RDF_TYPE_AAAA) {
- return NULL;
- }
-
- name = ldns_rdf_address_reverse(addr);
-
- /* add the RD flags, because we want an answer */
- pkt = ldns_resolver_query(res, name, LDNS_RR_TYPE_PTR, c, flags | LDNS_RD);
- ldns_rdf_deep_free(name);
- if (pkt) {
- /* extract the data we need */
- names = ldns_pkt_rr_list_by_type(pkt,
- LDNS_RR_TYPE_PTR, LDNS_SECTION_ANSWER);
- ldns_pkt_free(pkt);
- }
- return names;
-}
-
-/* read a line, put it in a buffer, parse the buffer */
-ldns_rr_list *
-ldns_get_rr_list_hosts_frm_fp(FILE *fp)
-{
- return ldns_get_rr_list_hosts_frm_fp_l(fp, NULL);
-}
-
-ldns_rr_list *
-ldns_get_rr_list_hosts_frm_fp_l(FILE *fp, int *line_nr)
-{
- ssize_t i, j;
- size_t cnt;
- char *line;
- char *word;
- char *addr;
- char *rr_str;
- ldns_buffer *linebuf;
- ldns_rr *rr;
- ldns_rr_list *list;
- ldns_rdf *tmp;
- bool ip6;
- ldns_status parse_result;
-
- line = LDNS_XMALLOC(char, LDNS_MAX_LINELEN + 1);
- word = LDNS_XMALLOC(char, LDNS_MAX_LINELEN + 1);
- addr = LDNS_XMALLOC(char, LDNS_MAX_LINELEN + 1);
- rr_str = LDNS_XMALLOC(char, LDNS_MAX_LINELEN + 1);
- ip6 = false;
- list = ldns_rr_list_new();
- rr = NULL;
- if(!line || !word || !addr || !rr_str || !list) {
- LDNS_FREE(line);
- LDNS_FREE(word);
- LDNS_FREE(addr);
- LDNS_FREE(rr_str);
- ldns_rr_list_free(list);
- return NULL;
- }
-
- for(i = ldns_fget_token_l(fp, line, "\n", LDNS_MAX_LINELEN, line_nr);
- i > 0; i = ldns_fget_token_l(fp, line, "\n", LDNS_MAX_LINELEN, line_nr)) {
- /* # is comment */
- if (line[0] == '#') {
- continue;
- }
- /* put it in a buffer for further processing */
- linebuf = LDNS_MALLOC(ldns_buffer);
- if(!linebuf) {
- LDNS_FREE(line);
- LDNS_FREE(word);
- LDNS_FREE(addr);
- LDNS_FREE(rr_str);
- ldns_rr_list_deep_free(list);
- return NULL;
- }
-
- ldns_buffer_new_frm_data(linebuf, line, (size_t) i);
- for(cnt = 0, j = ldns_bget_token(linebuf, word, LDNS_PARSE_NO_NL, LDNS_MAX_LINELEN);
- j > 0;
- j = ldns_bget_token(linebuf, word, LDNS_PARSE_NO_NL, LDNS_MAX_LINELEN), cnt++) {
- if (cnt == 0) {
- /* the address */
- if ((tmp = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_AAAA,
- word))) {
- /* ip6 */
- ldns_rdf_deep_free(tmp);
- ip6 = true;
- } else {
- if ((tmp = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_A,
- word))) {
- /* ip4 */
- ldns_rdf_deep_free(tmp);
- ip6 = false;
- } else {
- /* kaput */
- break;
- }
- }
- (void)strlcpy(addr, word, LDNS_MAX_LINELEN+1);
- } else {
- /* Stop parsing line when a comment begins. */
- if (word[0] == '#')
- break;
- /* la al la la */
- if (ip6) {
- snprintf(rr_str, LDNS_MAX_LINELEN,
- "%s IN AAAA %s", word, addr);
- } else {
- snprintf(rr_str, LDNS_MAX_LINELEN,
- "%s IN A %s", word, addr);
- }
- parse_result = ldns_rr_new_frm_str(&rr, rr_str, 0, NULL, NULL);
- if (parse_result == LDNS_STATUS_OK && ldns_rr_owner(rr) && ldns_rr_rd_count(rr) > 0) {
- ldns_rr_list_push_rr(list, ldns_rr_clone(rr));
- ldns_rr_free(rr);
- }
- }
- }
- ldns_buffer_free(linebuf);
- }
- LDNS_FREE(line);
- LDNS_FREE(word);
- LDNS_FREE(addr);
- LDNS_FREE(rr_str);
- return list;
-}
-
-ldns_rr_list *
-ldns_get_rr_list_hosts_frm_file(char *filename)
-{
- ldns_rr_list *names;
- FILE *fp;
-
- if (!filename) {
- fp = fopen(LDNS_RESOLV_HOSTS, "r");
-
- } else {
- fp = fopen(filename, "r");
- }
- if (!fp) {
- return NULL;
- }
-
- names = ldns_get_rr_list_hosts_frm_fp(fp);
- fclose(fp);
- return names;
-}
-
-uint16_t
-ldns_getaddrinfo(ldns_resolver *res, const ldns_rdf *node,
- ldns_rr_class c, ldns_rr_list **ret)
-{
- ldns_rdf_type t;
- uint16_t names_found;
- ldns_resolver *r;
- ldns_status s;
-
- t = ldns_rdf_get_type(node);
- names_found = 0;
- r = res;
-
- if (res == NULL) {
- /* prepare a new resolver, using /etc/resolv.conf as a guide */
- s = ldns_resolver_new_frm_file(&r, NULL);
- if (s != LDNS_STATUS_OK) {
- return 0;
- }
- }
-
- if (t == LDNS_RDF_TYPE_DNAME) {
- /* we're asked to query for a name */
- *ret = ldns_get_rr_list_addr_by_name(r, node, c, 0);
- names_found = ldns_rr_list_rr_count(*ret);
- }
-
- if (t == LDNS_RDF_TYPE_A || t == LDNS_RDF_TYPE_AAAA) {
- /* an address */
- *ret = ldns_get_rr_list_name_by_addr(r, node, c, 0);
- names_found = ldns_rr_list_rr_count(*ret);
- }
-
- if (res == NULL) {
- ldns_resolver_deep_free(r);
- }
-
- return names_found;
-}
-
-bool
-ldns_nsec_type_check(const ldns_rr *nsec, ldns_rr_type t)
-{
- switch (ldns_rr_get_type(nsec)) {
- case LDNS_RR_TYPE_NSEC : if (ldns_rr_rd_count(nsec) < 2) {
- return false;
- }
- return ldns_nsec_bitmap_covers_type(
- ldns_rr_rdf(nsec, 1), t);
-
- case LDNS_RR_TYPE_NSEC3 : if (ldns_rr_rd_count(nsec) < 6) {
- return false;
- }
- return ldns_nsec_bitmap_covers_type(
- ldns_rr_rdf(nsec, 5), t);
-
- default : return false;
- }
-}
-
-void
-ldns_print_rr_rdf(FILE *fp, ldns_rr *r, int rdfnum, ...)
-{
- int16_t rdf;
- ldns_rdf *rd;
- va_list va_rdf;
- va_start(va_rdf, rdfnum);
-
- for (rdf = (int16_t)rdfnum; rdf != -1; rdf = (int16_t)va_arg(va_rdf, int))
- {
- rd = ldns_rr_rdf(r, rdf);
- if (!rd) {
- continue;
- } else {
- ldns_rdf_print(fp, rd);
- fprintf(fp, " "); /* not sure if we want to do this */
- }
- }
- va_end(va_rdf);
-}
-
diff --git a/ldns/host2str.c b/ldns/host2str.c
deleted file mode 100644
index 3ca23c2..0000000
--- a/ldns/host2str.c
+++ /dev/null
@@ -1,2709 +0,0 @@
-/*
- * host2str.c
- *
- * conversion routines from the host format
- * to the presentation format (strings)
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2004-2006
- *
- * See the file LICENSE for the license
- */
-#include <ldns/config.h>
-
-#include <ldns/ldns.h>
-
-#include <limits.h>
-
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#include <time.h>
-#include <sys/time.h>
-
-#ifdef HAVE_SSL
-#include <openssl/bn.h>
-#include <openssl/rsa.h>
-#ifdef USE_DSA
-#include <openssl/dsa.h>
-#endif
-#endif
-
-#ifndef INET_ADDRSTRLEN
-#define INET_ADDRSTRLEN 16
-#endif
-#ifndef INET6_ADDRSTRLEN
-#define INET6_ADDRSTRLEN 46
-#endif
-
-/* lookup tables for standard DNS stuff */
-
-/* Taken from RFC 2535, section 7. */
-ldns_lookup_table ldns_algorithms[] = {
- { LDNS_RSAMD5, "RSAMD5" },
- { LDNS_DH, "DH" },
- { LDNS_DSA, "DSA" },
- { LDNS_ECC, "ECC" },
- { LDNS_RSASHA1, "RSASHA1" },
- { LDNS_DSA_NSEC3, "DSA-NSEC3-SHA1" },
- { LDNS_RSASHA1_NSEC3, "RSASHA1-NSEC3-SHA1" },
-#ifdef USE_SHA2
- { LDNS_RSASHA256, "RSASHA256"},
- { LDNS_RSASHA512, "RSASHA512"},
-#endif
-#ifdef USE_GOST
- { LDNS_ECC_GOST, "ECC-GOST"},
-#endif
-#ifdef USE_ECDSA
- { LDNS_ECDSAP256SHA256, "ECDSAP256SHA256"},
- { LDNS_ECDSAP384SHA384, "ECDSAP384SHA384"},
-#endif
-#ifdef USE_ED25519
- { LDNS_ED25519, "ED25519"},
-#endif
-#ifdef USE_ED448
- { LDNS_ED448, "ED448"},
-#endif
- { LDNS_INDIRECT, "INDIRECT" },
- { LDNS_PRIVATEDNS, "PRIVATEDNS" },
- { LDNS_PRIVATEOID, "PRIVATEOID" },
- { 0, NULL }
-};
-
-/* Taken from RFC 4398 */
-ldns_lookup_table ldns_cert_algorithms[] = {
- { LDNS_CERT_PKIX, "PKIX" },
- { LDNS_CERT_SPKI, "SPKI" },
- { LDNS_CERT_PGP, "PGP" },
- { LDNS_CERT_IPKIX, "IPKIX" },
- { LDNS_CERT_ISPKI, "ISPKI" },
- { LDNS_CERT_IPGP, "IPGP" },
- { LDNS_CERT_ACPKIX, "ACPKIX" },
- { LDNS_CERT_IACPKIX, "IACPKIX" },
- { LDNS_CERT_URI, "URI" },
- { LDNS_CERT_OID, "OID" },
- { 0, NULL }
-};
-
-/* classes */
-ldns_lookup_table ldns_rr_classes[] = {
- { LDNS_RR_CLASS_IN, "IN" },
- { LDNS_RR_CLASS_CH, "CH" },
- { LDNS_RR_CLASS_HS, "HS" },
- { LDNS_RR_CLASS_NONE, "NONE" },
- { LDNS_RR_CLASS_ANY, "ANY" },
- { 0, NULL }
-};
-
-/* if these are used elsewhere */
-ldns_lookup_table ldns_rcodes[] = {
- { LDNS_RCODE_NOERROR, "NOERROR" },
- { LDNS_RCODE_FORMERR, "FORMERR" },
- { LDNS_RCODE_SERVFAIL, "SERVFAIL" },
- { LDNS_RCODE_NXDOMAIN, "NXDOMAIN" },
- { LDNS_RCODE_NOTIMPL, "NOTIMPL" },
- { LDNS_RCODE_REFUSED, "REFUSED" },
- { LDNS_RCODE_YXDOMAIN, "YXDOMAIN" },
- { LDNS_RCODE_YXRRSET, "YXRRSET" },
- { LDNS_RCODE_NXRRSET, "NXRRSET" },
- { LDNS_RCODE_NOTAUTH, "NOTAUTH" },
- { LDNS_RCODE_NOTZONE, "NOTZONE" },
- { 0, NULL }
-};
-
-ldns_lookup_table ldns_opcodes[] = {
- { LDNS_PACKET_QUERY, "QUERY" },
- { LDNS_PACKET_IQUERY, "IQUERY" },
- { LDNS_PACKET_STATUS, "STATUS" },
- { LDNS_PACKET_NOTIFY, "NOTIFY" },
- { LDNS_PACKET_UPDATE, "UPDATE" },
- { 0, NULL }
-};
-
-const ldns_output_format ldns_output_format_nocomments_record = { 0, NULL };
-const ldns_output_format *ldns_output_format_nocomments
- = &ldns_output_format_nocomments_record;
-const ldns_output_format ldns_output_format_onlykeyids_record = {
- LDNS_COMMENT_KEY, NULL
-};
-const ldns_output_format *ldns_output_format_onlykeyids
- = &ldns_output_format_onlykeyids_record;
-const ldns_output_format *ldns_output_format_default
- = &ldns_output_format_onlykeyids_record;
-
-const ldns_output_format ldns_output_format_bubblebabble_record = {
- LDNS_COMMENT_KEY | LDNS_COMMENT_BUBBLEBABBLE | LDNS_COMMENT_FLAGS, NULL
-};
-const ldns_output_format *ldns_output_format_bubblebabble
- = &ldns_output_format_bubblebabble_record;
-
-static bool
-ldns_output_format_covers_type(const ldns_output_format* fmt, ldns_rr_type t)
-{
- return fmt && (fmt->flags & LDNS_FMT_RFC3597) &&
- ((ldns_output_format_storage*)fmt)->bitmap &&
- ldns_nsec_bitmap_covers_type(
- ((ldns_output_format_storage*)fmt)->bitmap, t);
-}
-
-ldns_status
-ldns_output_format_set_type(ldns_output_format* fmt, ldns_rr_type t)
-{
- ldns_output_format_storage* fmt_st = (ldns_output_format_storage*)fmt;
- ldns_status s;
-
- assert(fmt != NULL);
-
- if (!(fmt_st->flags & LDNS_FMT_RFC3597)) {
- ldns_output_format_set(fmt, LDNS_FMT_RFC3597);
- }
- if (! fmt_st->bitmap) {
- s = ldns_rdf_bitmap_known_rr_types_space(&fmt_st->bitmap);
- if (s != LDNS_STATUS_OK) {
- return s;
- }
- }
- return ldns_nsec_bitmap_set_type(fmt_st->bitmap, t);
-}
-
-ldns_status
-ldns_output_format_clear_type(ldns_output_format* fmt, ldns_rr_type t)
-{
- ldns_output_format_storage* fmt_st = (ldns_output_format_storage*)fmt;
- ldns_status s;
-
- assert(fmt != NULL);
-
- if (!(fmt_st->flags & LDNS_FMT_RFC3597)) {
- ldns_output_format_set(fmt, LDNS_FMT_RFC3597);
- }
- if (! fmt_st->bitmap) {
- s = ldns_rdf_bitmap_known_rr_types(&fmt_st->bitmap);
- if (s != LDNS_STATUS_OK) {
- return s;
- }
- }
- return ldns_nsec_bitmap_clear_type(fmt_st->bitmap, t);
-}
-
-ldns_status
-ldns_pkt_opcode2buffer_str(ldns_buffer *output, ldns_pkt_opcode opcode)
-{
- ldns_lookup_table *lt = ldns_lookup_by_id(ldns_opcodes, opcode);
- if (lt && lt->name) {
- ldns_buffer_printf(output, "%s", lt->name);
- } else {
- ldns_buffer_printf(output, "OPCODE%u", opcode);
- }
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_pkt_rcode2buffer_str(ldns_buffer *output, ldns_pkt_rcode rcode)
-{
- ldns_lookup_table *lt = ldns_lookup_by_id(ldns_rcodes, rcode);
- if (lt && lt->name) {
- ldns_buffer_printf(output, "%s", lt->name);
- } else {
- ldns_buffer_printf(output, "RCODE%u", rcode);
- }
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_algorithm2buffer_str(ldns_buffer *output,
- ldns_algorithm algorithm)
-{
- ldns_lookup_table *lt = ldns_lookup_by_id(ldns_algorithms,
- algorithm);
- if (lt && lt->name) {
- ldns_buffer_printf(output, "%s", lt->name);
- } else {
- ldns_buffer_printf(output, "ALG%u", algorithm);
- }
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_cert_algorithm2buffer_str(ldns_buffer *output,
- ldns_cert_algorithm cert_algorithm)
-{
- ldns_lookup_table *lt = ldns_lookup_by_id(ldns_cert_algorithms,
- cert_algorithm);
- if (lt && lt->name) {
- ldns_buffer_printf(output, "%s", lt->name);
- } else {
- ldns_buffer_printf(output, "CERT_ALG%u",
- cert_algorithm);
- }
- return ldns_buffer_status(output);
-}
-
-char *
-ldns_pkt_opcode2str(ldns_pkt_opcode opcode)
-{
- char *str;
- ldns_buffer *buf;
-
- buf = ldns_buffer_new(12);
- if (!buf) {
- return NULL;
- }
-
- str = NULL;
- if (ldns_pkt_opcode2buffer_str(buf, opcode) == LDNS_STATUS_OK) {
- str = ldns_buffer_export2str(buf);
- }
-
- ldns_buffer_free(buf);
- return str;
-}
-
-char *
-ldns_pkt_rcode2str(ldns_pkt_rcode rcode)
-{
- char *str;
- ldns_buffer *buf;
-
- buf = ldns_buffer_new(10);
- if (!buf) {
- return NULL;
- }
-
- str = NULL;
- if (ldns_pkt_rcode2buffer_str(buf, rcode) == LDNS_STATUS_OK) {
- str = ldns_buffer_export2str(buf);
- }
-
- ldns_buffer_free(buf);
- return str;
-}
-
-char *
-ldns_pkt_algorithm2str(ldns_algorithm algorithm)
-{
- char *str;
- ldns_buffer *buf;
-
- buf = ldns_buffer_new(10);
- if (!buf) {
- return NULL;
- }
-
- str = NULL;
- if (ldns_algorithm2buffer_str(buf, algorithm)
- == LDNS_STATUS_OK) {
- str = ldns_buffer_export2str(buf);
- }
-
- ldns_buffer_free(buf);
- return str;
-}
-
-char *
-ldns_pkt_cert_algorithm2str(ldns_cert_algorithm cert_algorithm)
-{
- char *str;
- ldns_buffer *buf;
-
- buf = ldns_buffer_new(10);
- if (!buf) {
- return NULL;
- }
-
- str = NULL;
- if (ldns_cert_algorithm2buffer_str(buf, cert_algorithm)
- == LDNS_STATUS_OK) {
- str = ldns_buffer_export2str(buf);
- }
-
- ldns_buffer_free(buf);
- return str;
-}
-
-
-/* do NOT pass compressed data here :p */
-ldns_status
-ldns_rdf2buffer_str_dname(ldns_buffer *output, const ldns_rdf *dname)
-{
- /* can we do with 1 pos var? or without at all? */
- uint8_t src_pos = 0;
- uint8_t len;
- uint8_t *data;
- uint8_t i;
- unsigned char c;
-
- data = (uint8_t*)ldns_rdf_data(dname);
- len = data[src_pos];
-
- if (ldns_rdf_size(dname) > LDNS_MAX_DOMAINLEN) {
- /* too large, return */
- return LDNS_STATUS_DOMAINNAME_OVERFLOW;
- }
-
- /* special case: root label */
- if (1 == ldns_rdf_size(dname)) {
- ldns_buffer_printf(output, ".");
- } else {
- while ((len > 0) && src_pos < ldns_rdf_size(dname)) {
- src_pos++;
- for(i = 0; i < len; i++) {
- /* paranoia check for various 'strange'
- characters in dnames
- */
- c = (unsigned char) data[src_pos];
- if(c == '.' || c == ';' ||
- c == '(' || c == ')' ||
- c == '\\') {
- ldns_buffer_printf(output, "\\%c",
- data[src_pos]);
- } else if (!(isascii(c) && isgraph(c))) {
- ldns_buffer_printf(output, "\\%03u",
- data[src_pos]);
- } else {
- ldns_buffer_printf(output, "%c", data[src_pos]);
- }
- src_pos++;
- }
-
- if (src_pos < ldns_rdf_size(dname)) {
- ldns_buffer_printf(output, ".");
- }
- len = data[src_pos];
- }
- }
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_int8(ldns_buffer *output, const ldns_rdf *rdf)
-{
- uint8_t data = ldns_rdf_data(rdf)[0];
- ldns_buffer_printf(output, "%lu", (unsigned long) data);
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_int16(ldns_buffer *output, const ldns_rdf *rdf)
-{
- uint16_t data = ldns_read_uint16(ldns_rdf_data(rdf));
- ldns_buffer_printf(output, "%lu", (unsigned long) data);
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_int32(ldns_buffer *output, const ldns_rdf *rdf)
-{
- uint32_t data = ldns_read_uint32(ldns_rdf_data(rdf));
- ldns_buffer_printf(output, "%lu", (unsigned long) data);
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_time(ldns_buffer *output, const ldns_rdf *rdf)
-{
- /* create a YYYYMMDDHHMMSS string if possible */
- struct tm tm;
- char date_buf[16];
-
- memset(&tm, 0, sizeof(tm));
- if (ldns_serial_arithmitics_gmtime_r(ldns_rdf2native_int32(rdf), time(NULL), &tm)
- && strftime(date_buf, 15, "%Y%m%d%H%M%S", &tm)) {
- ldns_buffer_printf(output, "%s", date_buf);
- }
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_a(ldns_buffer *output, const ldns_rdf *rdf)
-{
- char str[INET_ADDRSTRLEN];
-
- if (inet_ntop(AF_INET, ldns_rdf_data(rdf), str, INET_ADDRSTRLEN)) {
- ldns_buffer_printf(output, "%s", str);
- }
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_aaaa(ldns_buffer *output, const ldns_rdf *rdf)
-{
- char str[INET6_ADDRSTRLEN];
-
- if (inet_ntop(AF_INET6, ldns_rdf_data(rdf), str, INET6_ADDRSTRLEN)) {
- ldns_buffer_printf(output, "%s", str);
- }
-
- return ldns_buffer_status(output);
-}
-
-static void
-ldns_characters2buffer_str(ldns_buffer* output,
- size_t amount, const uint8_t* characters)
-{
- uint8_t ch;
- while (amount > 0) {
- ch = *characters++;
- if (isprint((int)ch) || ch == '\t') {
- if (ch == '\"' || ch == '\\')
- ldns_buffer_printf(output, "\\%c", ch);
- else
- ldns_buffer_printf(output, "%c", ch);
- } else {
- ldns_buffer_printf(output, "\\%03u",
- (unsigned)(uint8_t) ch);
- }
- amount--;
- }
-}
-
-ldns_status
-ldns_rdf2buffer_str_str(ldns_buffer *output, const ldns_rdf *rdf)
-{
- if(ldns_rdf_size(rdf) < 1) {
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
- if((int)ldns_rdf_size(rdf) < (int)ldns_rdf_data(rdf)[0] + 1) {
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
- ldns_buffer_printf(output, "\"");
- ldns_characters2buffer_str(output,
- ldns_rdf_data(rdf)[0], ldns_rdf_data(rdf) + 1);
- ldns_buffer_printf(output, "\"");
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_b64(ldns_buffer *output, const ldns_rdf *rdf)
-{
- size_t size;
- char *b64;
-
- if (ldns_rdf_size(rdf) == 0) {
- ldns_buffer_printf(output, "0");
- return ldns_buffer_status(output);
- } else
- size = ldns_b64_ntop_calculate_size(ldns_rdf_size(rdf));
-
- if (!(b64 = LDNS_XMALLOC(char, size)))
- return LDNS_STATUS_MEM_ERR;
-
- if (ldns_b64_ntop(ldns_rdf_data(rdf), ldns_rdf_size(rdf), b64, size)) {
- ldns_buffer_printf(output, "%s", b64);
- }
- LDNS_FREE(b64);
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_b32_ext(ldns_buffer *output, const ldns_rdf *rdf)
-{
- size_t size;
- char *b32;
- if(ldns_rdf_size(rdf) == 0)
- return LDNS_STATUS_OK;
- /* remove -1 for the b32-hash-len octet */
- size = ldns_b32_ntop_calculate_size(ldns_rdf_size(rdf) - 1);
- /* add one for the end nul for the string */
- b32 = LDNS_XMALLOC(char, size + 1);
- if(!b32) return LDNS_STATUS_MEM_ERR;
- size = (size_t) ldns_b32_ntop_extended_hex(ldns_rdf_data(rdf) + 1,
- ldns_rdf_size(rdf) - 1, b32, size+1);
- if (size > 0) {
- ldns_buffer_printf(output, "%s", b32);
- }
- LDNS_FREE(b32);
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_hex(ldns_buffer *output, const ldns_rdf *rdf)
-{
- size_t i;
- for (i = 0; i < ldns_rdf_size(rdf); i++) {
- ldns_buffer_printf(output, "%02x", ldns_rdf_data(rdf)[i]);
- }
-
- return ldns_buffer_status(output);
-}
-
-static ldns_status
-ldns_rdf2buffer_str_type_fmt(ldns_buffer *output,
- const ldns_output_format* fmt, const ldns_rdf *rdf)
-{
- uint16_t data = ldns_read_uint16(ldns_rdf_data(rdf));
-
- if (! ldns_output_format_covers_type(fmt, data) &&
- ldns_rr_descript(data) &&
- ldns_rr_descript(data)->_name) {
-
- ldns_buffer_printf(output, "%s",ldns_rr_descript(data)->_name);
- } else {
- ldns_buffer_printf(output, "TYPE%u", data);
- }
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_type(ldns_buffer *output, const ldns_rdf *rdf)
-{
- return ldns_rdf2buffer_str_type_fmt(output,
- ldns_output_format_default, rdf);
-}
-
-ldns_status
-ldns_rdf2buffer_str_class(ldns_buffer *output, const ldns_rdf *rdf)
-{
- uint16_t data = ldns_read_uint16(ldns_rdf_data(rdf));
- ldns_lookup_table *lt;
-
- lt = ldns_lookup_by_id(ldns_rr_classes, (int) data);
- if (lt) {
- ldns_buffer_printf(output, "\t%s", lt->name);
- } else {
- ldns_buffer_printf(output, "\tCLASS%d", data);
- }
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_cert_alg(ldns_buffer *output, const ldns_rdf *rdf)
-{
- uint16_t data = ldns_read_uint16(ldns_rdf_data(rdf));
- ldns_lookup_table *lt;
- lt = ldns_lookup_by_id(ldns_cert_algorithms, (int) data);
- if (lt) {
- ldns_buffer_printf(output, "%s", lt->name);
- } else {
- ldns_buffer_printf(output, "%d", data);
- }
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_alg(ldns_buffer *output, const ldns_rdf *rdf)
-{
- return ldns_rdf2buffer_str_int8(output, rdf);
-}
-
-static void
-loc_cm_print(ldns_buffer *output, uint8_t mantissa, uint8_t exponent)
-{
- uint8_t i;
- /* is it 0.<two digits> ? */
- if(exponent < 2) {
- if(exponent == 1)
- mantissa *= 10;
- ldns_buffer_printf(output, "0.%02ld", (long)mantissa);
- return;
- }
- /* always <digit><string of zeros> */
- ldns_buffer_printf(output, "%d", (int)mantissa);
- for(i=0; i<exponent-2; i++)
- ldns_buffer_printf(output, "0");
-}
-
-ldns_status
-ldns_rr_type2buffer_str(ldns_buffer *output, const ldns_rr_type type)
-{
- const ldns_rr_descriptor *descriptor;
-
- descriptor = ldns_rr_descript(type);
-
- switch (type) {
- case LDNS_RR_TYPE_IXFR:
- ldns_buffer_printf(output, "IXFR");
- break;
- case LDNS_RR_TYPE_AXFR:
- ldns_buffer_printf(output, "AXFR");
- break;
- case LDNS_RR_TYPE_MAILA:
- ldns_buffer_printf(output, "MAILA");
- break;
- case LDNS_RR_TYPE_MAILB:
- ldns_buffer_printf(output, "MAILB");
- break;
- case LDNS_RR_TYPE_ANY:
- ldns_buffer_printf(output, "ANY");
- break;
- default:
- if (descriptor && descriptor->_name) {
- ldns_buffer_printf(output, "%s", descriptor->_name);
- } else {
- ldns_buffer_printf(output, "TYPE%u", type);
- }
- }
- return ldns_buffer_status(output);
-}
-
-char *
-ldns_rr_type2str(const ldns_rr_type type)
-{
- char *str;
- ldns_buffer *buf;
-
- buf = ldns_buffer_new(10);
- if (!buf) {
- return NULL;
- }
-
- str = NULL;
- if (ldns_rr_type2buffer_str(buf, type) == LDNS_STATUS_OK) {
- str = ldns_buffer_export2str(buf);
- }
-
- ldns_buffer_free(buf);
- return str;
-}
-
-
-ldns_status
-ldns_rr_class2buffer_str(ldns_buffer *output,
- const ldns_rr_class klass)
-{
- ldns_lookup_table *lt;
-
- lt = ldns_lookup_by_id(ldns_rr_classes, klass);
- if (lt) {
- ldns_buffer_printf(output, "%s", lt->name);
- } else {
- ldns_buffer_printf(output, "CLASS%d", klass);
- }
- return ldns_buffer_status(output);
-}
-
-char *
-ldns_rr_class2str(const ldns_rr_class klass)
-{
- ldns_buffer *buf;
- char *str;
-
- buf = ldns_buffer_new(10);
- if (!buf) {
- return NULL;
- }
-
- str = NULL;
- if (ldns_rr_class2buffer_str(buf, klass) == LDNS_STATUS_OK) {
- str = ldns_buffer_export2str(buf);
- }
- ldns_buffer_free(buf);
- return str;
-}
-
-ldns_status
-ldns_rdf2buffer_str_loc(ldns_buffer *output, const ldns_rdf *rdf)
-{
- /* we could do checking (ie degrees < 90 etc)? */
- uint8_t version;
- uint8_t size;
- uint8_t horizontal_precision;
- uint8_t vertical_precision;
- uint32_t longitude;
- uint32_t latitude;
- uint32_t altitude;
- char northerness;
- char easterness;
- uint32_t h;
- uint32_t m;
- double s;
-
- uint32_t equator = (uint32_t) ldns_power(2, 31);
-
- if(ldns_rdf_size(rdf) < 1) {
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
- version = ldns_rdf_data(rdf)[0];
- if (version == 0) {
- if(ldns_rdf_size(rdf) < 16) {
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
- size = ldns_rdf_data(rdf)[1];
- horizontal_precision = ldns_rdf_data(rdf)[2];
- vertical_precision = ldns_rdf_data(rdf)[3];
-
- latitude = ldns_read_uint32(&ldns_rdf_data(rdf)[4]);
- longitude = ldns_read_uint32(&ldns_rdf_data(rdf)[8]);
- altitude = ldns_read_uint32(&ldns_rdf_data(rdf)[12]);
-
- if (latitude > equator) {
- northerness = 'N';
- latitude = latitude - equator;
- } else {
- northerness = 'S';
- latitude = equator - latitude;
- }
- h = latitude / (1000 * 60 * 60);
- latitude = latitude % (1000 * 60 * 60);
- m = latitude / (1000 * 60);
- latitude = latitude % (1000 * 60);
- s = (double) latitude / 1000.0;
- ldns_buffer_printf(output, "%02u %02u %0.3f %c ",
- h, m, s, northerness);
-
- if (longitude > equator) {
- easterness = 'E';
- longitude = longitude - equator;
- } else {
- easterness = 'W';
- longitude = equator - longitude;
- }
- h = longitude / (1000 * 60 * 60);
- longitude = longitude % (1000 * 60 * 60);
- m = longitude / (1000 * 60);
- longitude = longitude % (1000 * 60);
- s = (double) longitude / (1000.0);
- ldns_buffer_printf(output, "%02u %02u %0.3f %c ",
- h, m, s, easterness);
-
-
- s = ((double) altitude) / 100;
- s -= 100000;
-
- if(altitude%100 != 0)
- ldns_buffer_printf(output, "%.2f", s);
- else
- ldns_buffer_printf(output, "%.0f", s);
-
- ldns_buffer_printf(output, "m ");
-
- loc_cm_print(output, (size & 0xf0) >> 4, size & 0x0f);
- ldns_buffer_printf(output, "m ");
-
- loc_cm_print(output, (horizontal_precision & 0xf0) >> 4,
- horizontal_precision & 0x0f);
- ldns_buffer_printf(output, "m ");
-
- loc_cm_print(output, (vertical_precision & 0xf0) >> 4,
- vertical_precision & 0x0f);
- ldns_buffer_printf(output, "m");
-
- return ldns_buffer_status(output);
- } else {
- return ldns_rdf2buffer_str_hex(output, rdf);
- }
-}
-
-ldns_status
-ldns_rdf2buffer_str_unknown(ldns_buffer *output, const ldns_rdf *rdf)
-{
- ldns_buffer_printf(output, "\\# %u ", ldns_rdf_size(rdf));
- return ldns_rdf2buffer_str_hex(output, rdf);
-}
-
-ldns_status
-ldns_rdf2buffer_str_nsap(ldns_buffer *output, const ldns_rdf *rdf)
-{
- ldns_buffer_printf(output, "0x");
- return ldns_rdf2buffer_str_hex(output, rdf);
-}
-
-ldns_status
-ldns_rdf2buffer_str_atma(ldns_buffer *output, const ldns_rdf *rdf)
-{
- return ldns_rdf2buffer_str_hex(output, rdf);
-}
-
-ldns_status
-ldns_rdf2buffer_str_wks(ldns_buffer *output, const ldns_rdf *rdf)
-{
- /* protocol, followed by bitmap of services */
- struct protoent *protocol;
- char *proto_name = NULL;
- uint8_t protocol_nr;
- struct servent *service;
- uint16_t current_service;
-
- if(ldns_rdf_size(rdf) < 1) {
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
- protocol_nr = ldns_rdf_data(rdf)[0];
- protocol = getprotobynumber((int) protocol_nr);
- if (protocol && (protocol->p_name != NULL)) {
- proto_name = protocol->p_name;
- ldns_buffer_printf(output, "%s ", protocol->p_name);
- } else {
- ldns_buffer_printf(output, "%u ", protocol_nr);
- }
-
-#ifdef HAVE_ENDPROTOENT
- endprotoent();
-#endif
-
- for (current_service = 0;
- current_service < (ldns_rdf_size(rdf)-1)*8; current_service++) {
- if (ldns_get_bit(&(ldns_rdf_data(rdf)[1]), current_service)) {
- service = getservbyport((int) htons(current_service),
- proto_name);
- if (service && service->s_name) {
- ldns_buffer_printf(output, "%s ", service->s_name);
- } else {
- ldns_buffer_printf(output, "%u ", current_service);
- }
-#ifdef HAVE_ENDSERVENT
- endservent();
-#endif
- }
- }
- return ldns_buffer_status(output);
-}
-
-static ldns_status
-ldns_rdf2buffer_str_nsec_fmt(ldns_buffer *output,
- const ldns_output_format* fmt, const ldns_rdf *rdf)
-{
- /* Note: this code is duplicated in higher.c in
- * ldns_nsec_type_check() function
- */
- uint8_t window_block_nr;
- uint8_t bitmap_length;
- uint16_t type;
- uint16_t pos = 0;
- uint16_t bit_pos;
- uint8_t *data = ldns_rdf_data(rdf);
-
- while((size_t)(pos + 2) < ldns_rdf_size(rdf)) {
- window_block_nr = data[pos];
- bitmap_length = data[pos + 1];
- pos += 2;
- if (ldns_rdf_size(rdf) < pos + bitmap_length) {
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
- for (bit_pos = 0; bit_pos < (bitmap_length) * 8; bit_pos++) {
- if (! ldns_get_bit(&data[pos], bit_pos)) {
- continue;
- }
- type = 256 * (uint16_t) window_block_nr + bit_pos;
-
- if (! ldns_output_format_covers_type(fmt, type) &&
- ldns_rr_descript(type) &&
- ldns_rr_descript(type)->_name){
-
- ldns_buffer_printf(output, "%s ",
- ldns_rr_descript(type)->_name);
- } else {
- ldns_buffer_printf(output, "TYPE%u ", type);
- }
- }
- pos += (uint16_t) bitmap_length;
- }
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_nsec(ldns_buffer *output, const ldns_rdf *rdf)
-{
- return ldns_rdf2buffer_str_nsec_fmt(output,
- ldns_output_format_default, rdf);
-}
-
-ldns_status
-ldns_rdf2buffer_str_nsec3_salt(ldns_buffer *output, const ldns_rdf *rdf)
-{
- uint8_t salt_length;
- uint8_t salt_pos;
-
- uint8_t *data = ldns_rdf_data(rdf);
-
- if(ldns_rdf_size(rdf) < 1) {
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
- salt_length = data[0];
- /* from now there are variable length entries so remember pos */
- if (salt_length == 0 || ((size_t)salt_length)+1 > ldns_rdf_size(rdf)) {
- ldns_buffer_printf(output, "- ");
- } else {
- for (salt_pos = 0; salt_pos < salt_length; salt_pos++) {
- ldns_buffer_printf(output, "%02x", data[1 + salt_pos]);
- }
- ldns_buffer_printf(output, " ");
- }
-
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_period(ldns_buffer *output, const ldns_rdf *rdf)
-{
- /* period is the number of seconds */
- if (ldns_rdf_size(rdf) != 4) {
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
- ldns_buffer_printf(output, "%u", ldns_read_uint32(ldns_rdf_data(rdf)));
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_tsigtime(ldns_buffer *output,const ldns_rdf *rdf)
-{
- /* tsigtime is 48 bits network order unsigned integer */
- uint64_t tsigtime = 0;
- uint8_t *data = ldns_rdf_data(rdf);
- uint64_t d0, d1, d2, d3, d4, d5;
-
- if (ldns_rdf_size(rdf) < 6) {
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
- d0 = data[0]; /* cast to uint64 for shift operations */
- d1 = data[1];
- d2 = data[2];
- d3 = data[3];
- d4 = data[4];
- d5 = data[5];
- tsigtime = (d0<<40) | (d1<<32) | (d2<<24) | (d3<<16) | (d4<<8) | d5;
-
- ldns_buffer_printf(output, "%llu ", (long long)tsigtime);
-
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_apl(ldns_buffer *output, const ldns_rdf *rdf)
-{
- uint8_t *data = ldns_rdf_data(rdf);
- uint16_t address_family;
- uint8_t prefix;
- bool negation;
- uint8_t adf_length;
- size_t i;
- size_t pos = 0;
-
- while (pos < (unsigned int) ldns_rdf_size(rdf)) {
- if(pos + 3 >= (unsigned)ldns_rdf_size(rdf))
- return LDNS_STATUS_WIRE_RDATA_ERR;
- address_family = ldns_read_uint16(&data[pos]);
- prefix = data[pos + 2];
- negation = data[pos + 3] & LDNS_APL_NEGATION;
- adf_length = data[pos + 3] & LDNS_APL_MASK;
- if (address_family == LDNS_APL_IP4) {
- /* check if prefix < 32? */
- if (negation) {
- ldns_buffer_printf(output, "!");
- }
- ldns_buffer_printf(output, "%u:", address_family);
- /* address is variable length 0 - 4 */
- for (i = 0; i < 4; i++) {
- if (i > 0) {
- ldns_buffer_printf(output, ".");
- }
- if (i < (unsigned short) adf_length) {
- if(pos+i+4 >= ldns_rdf_size(rdf))
- return LDNS_STATUS_WIRE_RDATA_ERR;
- ldns_buffer_printf(output, "%d",
- data[pos + i + 4]);
- } else {
- ldns_buffer_printf(output, "0");
- }
- }
- ldns_buffer_printf(output, "/%u ", prefix);
- } else if (address_family == LDNS_APL_IP6) {
- /* check if prefix < 128? */
- if (negation) {
- ldns_buffer_printf(output, "!");
- }
- ldns_buffer_printf(output, "%u:", address_family);
- /* address is variable length 0 - 16 */
- for (i = 0; i < 16; i++) {
- if (i % 2 == 0 && i > 0) {
- ldns_buffer_printf(output, ":");
- }
- if (i < (unsigned short) adf_length) {
- if(pos+i+4 >= ldns_rdf_size(rdf))
- return LDNS_STATUS_WIRE_RDATA_ERR;
- ldns_buffer_printf(output, "%02x",
- data[pos + i + 4]);
- } else {
- ldns_buffer_printf(output, "00");
- }
- }
- ldns_buffer_printf(output, "/%u ", prefix);
-
- } else {
- /* unknown address family */
- ldns_buffer_printf(output,
- "Unknown address family: %u data: ",
- address_family);
- for (i = 1; i < (unsigned short) (4 + adf_length); i++) {
- if(pos+i >= ldns_rdf_size(rdf))
- return LDNS_STATUS_WIRE_RDATA_ERR;
- ldns_buffer_printf(output, "%02x", data[i]);
- }
- }
- pos += 4 + adf_length;
- }
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_int16_data(ldns_buffer *output, const ldns_rdf *rdf)
-{
- size_t size;
- char *b64;
- if (ldns_rdf_size(rdf) < 2) {
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
- /* Subtract the size (2) of the number that specifies the length */
- size = ldns_b64_ntop_calculate_size(ldns_rdf_size(rdf) - 2);
- ldns_buffer_printf(output, "%u ", ldns_rdf_size(rdf) - 2);
- if (ldns_rdf_size(rdf) > 2) {
- b64 = LDNS_XMALLOC(char, size);
- if(!b64)
- return LDNS_STATUS_MEM_ERR;
-
- if (ldns_rdf_size(rdf) > 2 &&
- ldns_b64_ntop(ldns_rdf_data(rdf) + 2,
- ldns_rdf_size(rdf) - 2,
- b64, size)) {
- ldns_buffer_printf(output, "%s", b64);
- }
- LDNS_FREE(b64);
- }
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_ipseckey(ldns_buffer *output, const ldns_rdf *rdf)
-{
- /* wire format from
- http://www.ietf.org/internet-drafts/draft-ietf-ipseckey-rr-12.txt
- */
- uint8_t *data = ldns_rdf_data(rdf);
- uint8_t precedence;
- uint8_t gateway_type;
- uint8_t algorithm;
-
- ldns_rdf *gateway = NULL;
- uint8_t *gateway_data;
-
- size_t public_key_size;
- uint8_t *public_key_data;
- ldns_rdf *public_key;
-
- size_t offset = 0;
- ldns_status status;
-
- if (ldns_rdf_size(rdf) < 3) {
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
- precedence = data[0];
- gateway_type = data[1];
- algorithm = data[2];
- offset = 3;
-
- switch (gateway_type) {
- case 0:
- /* no gateway */
- break;
- case 1:
- if (ldns_rdf_size(rdf) < offset + LDNS_IP4ADDRLEN) {
- return LDNS_STATUS_ERR;
- }
- gateway_data = LDNS_XMALLOC(uint8_t, LDNS_IP4ADDRLEN);
- if(!gateway_data)
- return LDNS_STATUS_MEM_ERR;
- memcpy(gateway_data, &data[offset], LDNS_IP4ADDRLEN);
- gateway = ldns_rdf_new(LDNS_RDF_TYPE_A,
- LDNS_IP4ADDRLEN , gateway_data);
- offset += LDNS_IP4ADDRLEN;
- if(!gateway) {
- LDNS_FREE(gateway_data);
- return LDNS_STATUS_MEM_ERR;
- }
- break;
- case 2:
- if (ldns_rdf_size(rdf) < offset + LDNS_IP6ADDRLEN) {
- return LDNS_STATUS_ERR;
- }
- gateway_data = LDNS_XMALLOC(uint8_t, LDNS_IP6ADDRLEN);
- if(!gateway_data)
- return LDNS_STATUS_MEM_ERR;
- memcpy(gateway_data, &data[offset], LDNS_IP6ADDRLEN);
- offset += LDNS_IP6ADDRLEN;
- gateway =
- ldns_rdf_new(LDNS_RDF_TYPE_AAAA,
- LDNS_IP6ADDRLEN, gateway_data);
- if(!gateway) {
- LDNS_FREE(gateway_data);
- return LDNS_STATUS_MEM_ERR;
- }
- break;
- case 3:
- status = ldns_wire2dname(&gateway, data,
- ldns_rdf_size(rdf), &offset);
- if(status != LDNS_STATUS_OK)
- return status;
- break;
- default:
- /* error? */
- break;
- }
-
- if (ldns_rdf_size(rdf) <= offset) {
- ldns_rdf_deep_free(gateway);
- return LDNS_STATUS_ERR;
- }
- public_key_size = ldns_rdf_size(rdf) - offset;
- public_key_data = LDNS_XMALLOC(uint8_t, public_key_size);
- if(!public_key_data) {
- ldns_rdf_deep_free(gateway);
- return LDNS_STATUS_MEM_ERR;
- }
- memcpy(public_key_data, &data[offset], public_key_size);
- public_key = ldns_rdf_new(LDNS_RDF_TYPE_B64,
- public_key_size, public_key_data);
- if(!public_key) {
- LDNS_FREE(public_key_data);
- ldns_rdf_deep_free(gateway);
- return LDNS_STATUS_MEM_ERR;
- }
-
- ldns_buffer_printf(output, "%u %u %u ", precedence, gateway_type, algorithm);
- if (gateway)
- (void) ldns_rdf2buffer_str(output, gateway);
- else
- ldns_buffer_printf(output, ".");
- ldns_buffer_printf(output, " ");
- (void) ldns_rdf2buffer_str(output, public_key);
-
- ldns_rdf_deep_free(gateway);
- ldns_rdf_deep_free(public_key);
-
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_ilnp64(ldns_buffer *output, const ldns_rdf *rdf)
-{
- if (ldns_rdf_size(rdf) != 8) {
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
- ldns_buffer_printf(output,"%.4x:%.4x:%.4x:%.4x",
- ldns_read_uint16(ldns_rdf_data(rdf)),
- ldns_read_uint16(ldns_rdf_data(rdf)+2),
- ldns_read_uint16(ldns_rdf_data(rdf)+4),
- ldns_read_uint16(ldns_rdf_data(rdf)+6));
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_eui48(ldns_buffer *output, const ldns_rdf *rdf)
-{
- if (ldns_rdf_size(rdf) != 6) {
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
- ldns_buffer_printf(output,"%.2x-%.2x-%.2x-%.2x-%.2x-%.2x",
- ldns_rdf_data(rdf)[0], ldns_rdf_data(rdf)[1],
- ldns_rdf_data(rdf)[2], ldns_rdf_data(rdf)[3],
- ldns_rdf_data(rdf)[4], ldns_rdf_data(rdf)[5]);
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_eui64(ldns_buffer *output, const ldns_rdf *rdf)
-{
- if (ldns_rdf_size(rdf) != 8) {
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
- ldns_buffer_printf(output,"%.2x-%.2x-%.2x-%.2x-%.2x-%.2x-%.2x-%.2x",
- ldns_rdf_data(rdf)[0], ldns_rdf_data(rdf)[1],
- ldns_rdf_data(rdf)[2], ldns_rdf_data(rdf)[3],
- ldns_rdf_data(rdf)[4], ldns_rdf_data(rdf)[5],
- ldns_rdf_data(rdf)[6], ldns_rdf_data(rdf)[7]);
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_tag(ldns_buffer *output, const ldns_rdf *rdf)
-{
- size_t nchars;
- const uint8_t* chars;
- char ch;
- if (ldns_rdf_size(rdf) < 2) {
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
- nchars = ldns_rdf_data(rdf)[0];
- if (nchars >= ldns_rdf_size(rdf) || /* should be rdf_size - 1 */
- nchars < 1) {
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
- chars = ldns_rdf_data(rdf) + 1;
- while (nchars > 0) {
- ch = (char)*chars++;
- if (! isalnum((unsigned char)ch)) {
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
- ldns_buffer_printf(output, "%c", ch);
- nchars--;
- }
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_long_str(ldns_buffer *output, const ldns_rdf *rdf)
-{
-
- ldns_buffer_printf(output, "\"");
- ldns_characters2buffer_str(output,
- ldns_rdf_size(rdf), ldns_rdf_data(rdf));
- ldns_buffer_printf(output, "\"");
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rdf2buffer_str_hip(ldns_buffer *output, const ldns_rdf *rdf)
-{
- uint8_t *data = ldns_rdf_data(rdf);
- size_t rdf_size = ldns_rdf_size(rdf);
- uint8_t hit_size;
- uint16_t pk_size;
- int written;
-
- if (rdf_size < 6) {
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
- if ((hit_size = data[0]) == 0 ||
- (pk_size = ldns_read_uint16(data + 2)) == 0 ||
- rdf_size < (size_t) hit_size + pk_size + 4) {
-
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
-
- ldns_buffer_printf(output, "%d ", (int) data[1]);
-
- for (data += 4; hit_size > 0; hit_size--, data++) {
-
- ldns_buffer_printf(output, "%02x", (int) *data);
- }
- ldns_buffer_write_u8(output, (uint8_t) ' ');
-
- if (ldns_buffer_reserve(output,
- ldns_b64_ntop_calculate_size(pk_size))) {
-
- written = ldns_b64_ntop(data, pk_size,
- (char *) ldns_buffer_current(output),
- ldns_buffer_remaining(output));
-
- if (written > 0 &&
- written < (int) ldns_buffer_remaining(output)) {
-
- output->_position += written;
- }
- }
- return ldns_buffer_status(output);
-}
-
-/* implementation mimiced from ldns_rdf2buffer_str_ipseckey */
-ldns_status
-ldns_rdf2buffer_str_amtrelay(ldns_buffer *output, const ldns_rdf *rdf)
-{
- /* wire format from
- * draft-ietf-mboned-driad-amt-discovery Section 4.2
- */
- uint8_t *data = ldns_rdf_data(rdf);
- uint8_t precedence;
- uint8_t discovery_optional;
- uint8_t relay_type;
-
- ldns_rdf *relay = NULL;
- uint8_t *relay_data;
-
- size_t offset = 0;
- ldns_status status;
-
- if (ldns_rdf_size(rdf) < 2) {
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
- precedence = data[0];
- discovery_optional = ((data[1] & 0x80) >> 7);
- relay_type = data[1] & 0x7F;
- offset = 2;
-
- switch (relay_type) {
- case 0:
- /* no relay */
- break;
- case 1:
- if (ldns_rdf_size(rdf) < offset + LDNS_IP4ADDRLEN) {
- return LDNS_STATUS_ERR;
- }
- relay_data = LDNS_XMALLOC(uint8_t, LDNS_IP4ADDRLEN);
- if(!relay_data)
- return LDNS_STATUS_MEM_ERR;
- memcpy(relay_data, &data[offset], LDNS_IP4ADDRLEN);
- relay = ldns_rdf_new(LDNS_RDF_TYPE_A,
- LDNS_IP4ADDRLEN , relay_data);
- offset += LDNS_IP4ADDRLEN;
- if(!relay) {
- LDNS_FREE(relay_data);
- return LDNS_STATUS_MEM_ERR;
- }
- break;
- case 2:
- if (ldns_rdf_size(rdf) < offset + LDNS_IP6ADDRLEN) {
- return LDNS_STATUS_ERR;
- }
- relay_data = LDNS_XMALLOC(uint8_t, LDNS_IP6ADDRLEN);
- if(!relay_data)
- return LDNS_STATUS_MEM_ERR;
- memcpy(relay_data, &data[offset], LDNS_IP6ADDRLEN);
- offset += LDNS_IP6ADDRLEN;
- relay =
- ldns_rdf_new(LDNS_RDF_TYPE_AAAA,
- LDNS_IP6ADDRLEN, relay_data);
- if(!relay) {
- LDNS_FREE(relay_data);
- return LDNS_STATUS_MEM_ERR;
- }
- break;
- case 3:
- status = ldns_wire2dname(&relay, data,
- ldns_rdf_size(rdf), &offset);
- if(status != LDNS_STATUS_OK)
- return status;
- break;
- default:
- /* error? */
- break;
- }
-
- if (ldns_rdf_size(rdf) != offset) {
- ldns_rdf_deep_free(relay);
- return LDNS_STATUS_ERR;
- }
- ldns_buffer_printf(output, "%u %u %u ",
- precedence, discovery_optional, relay_type);
- if (relay)
- (void) ldns_rdf2buffer_str(output, relay);
-
- ldns_rdf_deep_free(relay);
- return ldns_buffer_status(output);
-}
-
-
-static ldns_status
-ldns_rdf2buffer_str_fmt(ldns_buffer *buffer,
- const ldns_output_format* fmt, const ldns_rdf *rdf)
-{
- ldns_status res = LDNS_STATUS_OK;
-
- /*ldns_buffer_printf(buffer, "%u:", ldns_rdf_get_type(rdf));*/
- if (rdf) {
- switch(ldns_rdf_get_type(rdf)) {
- case LDNS_RDF_TYPE_NONE:
- break;
- case LDNS_RDF_TYPE_DNAME:
- res = ldns_rdf2buffer_str_dname(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_INT8: /* Don't output mnemonics for these */
- case LDNS_RDF_TYPE_ALG:
- case LDNS_RDF_TYPE_CERTIFICATE_USAGE:
- case LDNS_RDF_TYPE_SELECTOR:
- case LDNS_RDF_TYPE_MATCHING_TYPE:
- res = ldns_rdf2buffer_str_int8(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_INT16:
- res = ldns_rdf2buffer_str_int16(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_INT32:
- res = ldns_rdf2buffer_str_int32(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_PERIOD:
- res = ldns_rdf2buffer_str_period(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_TSIGTIME:
- res = ldns_rdf2buffer_str_tsigtime(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_A:
- res = ldns_rdf2buffer_str_a(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_AAAA:
- res = ldns_rdf2buffer_str_aaaa(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_STR:
- res = ldns_rdf2buffer_str_str(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_APL:
- res = ldns_rdf2buffer_str_apl(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_B32_EXT:
- res = ldns_rdf2buffer_str_b32_ext(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_B64:
- res = ldns_rdf2buffer_str_b64(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_HEX:
- res = ldns_rdf2buffer_str_hex(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_NSEC:
- res = ldns_rdf2buffer_str_nsec_fmt(buffer, fmt, rdf);
- break;
- case LDNS_RDF_TYPE_NSEC3_SALT:
- res = ldns_rdf2buffer_str_nsec3_salt(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_TYPE:
- res = ldns_rdf2buffer_str_type_fmt(buffer, fmt, rdf);
- break;
- case LDNS_RDF_TYPE_CLASS:
- res = ldns_rdf2buffer_str_class(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_CERT_ALG:
- res = ldns_rdf2buffer_str_cert_alg(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_UNKNOWN:
- res = ldns_rdf2buffer_str_unknown(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_TIME:
- res = ldns_rdf2buffer_str_time(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_HIP:
- res = ldns_rdf2buffer_str_hip(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_LOC:
- res = ldns_rdf2buffer_str_loc(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_WKS:
- case LDNS_RDF_TYPE_SERVICE:
- res = ldns_rdf2buffer_str_wks(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_NSAP:
- res = ldns_rdf2buffer_str_nsap(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_ATMA:
- res = ldns_rdf2buffer_str_atma(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_IPSECKEY:
- res = ldns_rdf2buffer_str_ipseckey(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_INT16_DATA:
- res = ldns_rdf2buffer_str_int16_data(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_NSEC3_NEXT_OWNER:
- res = ldns_rdf2buffer_str_b32_ext(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_ILNP64:
- res = ldns_rdf2buffer_str_ilnp64(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_EUI48:
- res = ldns_rdf2buffer_str_eui48(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_EUI64:
- res = ldns_rdf2buffer_str_eui64(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_TAG:
- res = ldns_rdf2buffer_str_tag(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_LONG_STR:
- res = ldns_rdf2buffer_str_long_str(buffer, rdf);
- break;
- case LDNS_RDF_TYPE_AMTRELAY:
- res = ldns_rdf2buffer_str_amtrelay(buffer, rdf);
- break;
- }
- } else {
- /** This will write mangled RRs */
- ldns_buffer_printf(buffer, "(null) ");
- res = LDNS_STATUS_ERR;
- }
- return res;
-}
-
-ldns_status
-ldns_rdf2buffer_str(ldns_buffer *buffer, const ldns_rdf *rdf)
-{
- return ldns_rdf2buffer_str_fmt(buffer,ldns_output_format_default,rdf);
-}
-
-static ldns_rdf *
-ldns_b32_ext2dname(const ldns_rdf *rdf)
-{
- size_t size;
- char *b32;
- ldns_rdf *out;
- if(ldns_rdf_size(rdf) == 0)
- return NULL;
- /* remove -1 for the b32-hash-len octet */
- size = ldns_b32_ntop_calculate_size(ldns_rdf_size(rdf) - 1);
- /* add one for the end nul for the string */
- b32 = LDNS_XMALLOC(char, size + 2);
- if (b32) {
- if (ldns_b32_ntop_extended_hex(ldns_rdf_data(rdf) + 1,
- ldns_rdf_size(rdf) - 1, b32, size+1) > 0) {
- b32[size] = '.';
- b32[size+1] = '\0';
- if (ldns_str2rdf_dname(&out, b32) == LDNS_STATUS_OK) {
- LDNS_FREE(b32);
- return out;
- }
- }
- LDNS_FREE(b32);
- }
- return NULL;
-}
-
-static ldns_status
-ldns_rr2buffer_str_rfc3597(ldns_buffer *output, const ldns_rr *rr)
-{
- size_t total_rdfsize = 0;
- size_t i, j;
-
- ldns_buffer_printf(output, "TYPE%u\t", ldns_rr_get_type(rr));
- for (i = 0; i < ldns_rr_rd_count(rr); i++) {
- total_rdfsize += ldns_rdf_size(ldns_rr_rdf(rr, i));
- }
- if (total_rdfsize == 0) {
- ldns_buffer_printf(output, "\\# 0\n");
- return ldns_buffer_status(output);
- }
- ldns_buffer_printf(output, "\\# %d ", total_rdfsize);
- for (i = 0; i < ldns_rr_rd_count(rr); i++) {
- for (j = 0; j < ldns_rdf_size(ldns_rr_rdf(rr, i)); j++) {
- ldns_buffer_printf(output, "%.2x",
- ldns_rdf_data(ldns_rr_rdf(rr, i))[j]);
- }
- }
- ldns_buffer_printf(output, "\n");
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rr2buffer_str_fmt(ldns_buffer *output,
- const ldns_output_format *fmt, const ldns_rr *rr)
-{
- uint16_t i, flags;
- ldns_status status = LDNS_STATUS_OK;
- ldns_output_format_storage* fmt_st = (ldns_output_format_storage*)fmt;
-
- if (fmt_st == NULL) {
- fmt_st = (ldns_output_format_storage*)
- ldns_output_format_default;
- }
- if (!rr) {
- if (LDNS_COMMENT_NULLS & fmt_st->flags) {
- ldns_buffer_printf(output, "; (null)\n");
- }
- return ldns_buffer_status(output);
- }
- if (ldns_rr_owner(rr)) {
- status = ldns_rdf2buffer_str_dname(output, ldns_rr_owner(rr));
- }
- if (status != LDNS_STATUS_OK) {
- return status;
- }
-
- /* TTL should NOT be printed if it is a question */
- if (!ldns_rr_is_question(rr)) {
- ldns_buffer_printf(output, "\t%d", ldns_rr_ttl(rr));
- }
-
- ldns_buffer_printf(output, "\t");
- status = ldns_rr_class2buffer_str(output, ldns_rr_get_class(rr));
- if (status != LDNS_STATUS_OK) {
- return status;
- }
- ldns_buffer_printf(output, "\t");
-
- if (ldns_output_format_covers_type(fmt, ldns_rr_get_type(rr))) {
- return ldns_rr2buffer_str_rfc3597(output, rr);
- }
- status = ldns_rr_type2buffer_str(output, ldns_rr_get_type(rr));
- if (status != LDNS_STATUS_OK) {
- return status;
- }
-
- if (ldns_rr_rd_count(rr) > 0) {
- ldns_buffer_printf(output, "\t");
- } else if (!ldns_rr_is_question(rr)) {
- ldns_buffer_printf(output, "\t\\# 0");
- }
-
- for (i = 0; i < ldns_rr_rd_count(rr); i++) {
- /* ldns_rdf2buffer_str handles NULL input fine! */
- if ((fmt_st->flags & LDNS_FMT_ZEROIZE_RRSIGS) &&
- (ldns_rr_get_type(rr) == LDNS_RR_TYPE_RRSIG) &&
- ((/* inception */ i == 4 &&
- ldns_rdf_get_type(ldns_rr_rdf(rr, 4)) ==
- LDNS_RDF_TYPE_TIME) ||
- (/* expiration */ i == 5 &&
- ldns_rdf_get_type(ldns_rr_rdf(rr, 5)) ==
- LDNS_RDF_TYPE_TIME) ||
- (/* signature */ i == 8 &&
- ldns_rdf_get_type(ldns_rr_rdf(rr, 8)) ==
- LDNS_RDF_TYPE_B64))) {
-
- ldns_buffer_printf(output, "(null)");
- status = ldns_buffer_status(output);
- } else if ((fmt_st->flags & LDNS_FMT_PAD_SOA_SERIAL) &&
- (ldns_rr_get_type(rr) == LDNS_RR_TYPE_SOA) &&
- /* serial */ i == 2 &&
- ldns_rdf_get_type(ldns_rr_rdf(rr, 2)) ==
- LDNS_RDF_TYPE_INT32) {
- ldns_buffer_printf(output, "%10lu",
- (unsigned long) ldns_read_uint32(
- ldns_rdf_data(ldns_rr_rdf(rr, 2))));
- status = ldns_buffer_status(output);
- } else {
- status = ldns_rdf2buffer_str_fmt(output,
- fmt, ldns_rr_rdf(rr, i));
- }
- if(status != LDNS_STATUS_OK)
- return status;
- if (i < ldns_rr_rd_count(rr) - 1) {
- ldns_buffer_printf(output, " ");
- }
- }
- /* per RR special comments - handy for DNSSEC types */
- /* check to prevent question sec. rr from
- * getting here */
- if (ldns_rr_rd_count(rr) > 0) {
- switch (ldns_rr_get_type(rr)) {
- case LDNS_RR_TYPE_DNSKEY:
- /* if ldns_rr_rd_count(rr) > 0
- then ldns_rr_rdf(rr, 0) exists! */
- if (! (fmt_st->flags & LDNS_COMMENT_KEY)) {
- break;
- }
- flags = ldns_rdf2native_int16(ldns_rr_rdf(rr, 0));
- ldns_buffer_printf(output, " ;{");
- if (fmt_st->flags & LDNS_COMMENT_KEY_ID) {
- ldns_buffer_printf(output, "id = %u",
- (unsigned int) ldns_calc_keytag(rr));
- }
- if ((fmt_st->flags & LDNS_COMMENT_KEY_TYPE) &&
- (flags & LDNS_KEY_ZONE_KEY)){
-
- if (flags & LDNS_KEY_SEP_KEY) {
- ldns_buffer_printf(output, " (ksk)");
- } else {
- ldns_buffer_printf(output, " (zsk)");
- }
- if (fmt_st->flags & LDNS_COMMENT_KEY_SIZE){
- ldns_buffer_printf(output, ", ");
- }
- } else if (fmt_st->flags
- & (LDNS_COMMENT_KEY_ID
- |LDNS_COMMENT_KEY_SIZE)) {
- ldns_buffer_printf( output, ", ");
- }
- if (fmt_st->flags & LDNS_COMMENT_KEY_SIZE) {
- ldns_buffer_printf(output, "size = %db",
- ldns_rr_dnskey_key_size(rr));
- }
- ldns_buffer_printf(output, "}");
- break;
- case LDNS_RR_TYPE_RRSIG:
- if ((fmt_st->flags & LDNS_COMMENT_KEY)
- && (fmt_st->flags& LDNS_COMMENT_RRSIGS)
- && ldns_rr_rdf(rr, 6) != NULL) {
- ldns_buffer_printf(output, " ;{id = %d}",
- ldns_rdf2native_int16(
- ldns_rr_rdf(rr, 6)));
- }
- break;
- case LDNS_RR_TYPE_DS:
- if ((fmt_st->flags & LDNS_COMMENT_BUBBLEBABBLE) &&
- ldns_rr_rdf(rr, 3) != NULL) {
-
- uint8_t *data = ldns_rdf_data(
- ldns_rr_rdf(rr, 3));
- size_t len = ldns_rdf_size(ldns_rr_rdf(rr, 3));
- char *babble = ldns_bubblebabble(data, len);
- if(babble) {
- ldns_buffer_printf(output,
- " ;{%s}", babble);
- }
- LDNS_FREE(babble);
- }
- break;
- case LDNS_RR_TYPE_NSEC3:
- if (! (fmt_st->flags & LDNS_COMMENT_FLAGS) &&
- ! (fmt_st->flags & LDNS_COMMENT_NSEC3_CHAIN)) {
- break;
- }
- ldns_buffer_printf(output, " ;{");
- if ((fmt_st->flags & LDNS_COMMENT_FLAGS)) {
- if (ldns_nsec3_optout(rr)) {
- ldns_buffer_printf(output,
- " flags: optout");
- } else {
- ldns_buffer_printf(output," flags: -");
- }
- if (fmt_st->flags & LDNS_COMMENT_NSEC3_CHAIN &&
- fmt_st->hashmap != NULL) {
- ldns_buffer_printf(output, ", ");
- }
- }
- if (fmt_st->flags & LDNS_COMMENT_NSEC3_CHAIN &&
- fmt_st->hashmap != NULL) {
- ldns_rbnode_t *node;
- ldns_rdf *key = ldns_dname_label(
- ldns_rr_owner(rr), 0);
- if (key) {
- node = ldns_rbtree_search(
- fmt_st->hashmap,
- (void *) key);
- if (node->data) {
- ldns_buffer_printf(output,
- "from: ");
- (void) ldns_rdf2buffer_str(
- output,
- ldns_dnssec_name_name(
- (ldns_dnssec_name*)
- node->data
- ));
- }
- ldns_rdf_free(key);
- }
- key = ldns_b32_ext2dname(
- ldns_nsec3_next_owner(rr));
- if (key) {
- node = ldns_rbtree_search(
- fmt_st->hashmap,
- (void *) key);
- if (node->data) {
- ldns_buffer_printf(output,
- " to: ");
- (void) ldns_rdf2buffer_str(
- output,
- ldns_dnssec_name_name(
- (ldns_dnssec_name*)
- node->data
- ));
- }
- ldns_rdf_free(key);
- }
- }
- ldns_buffer_printf(output, "}");
- break;
- default:
- break;
-
- }
- }
- /* last */
- ldns_buffer_printf(output, "\n");
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rr2buffer_str(ldns_buffer *output, const ldns_rr *rr)
-{
- return ldns_rr2buffer_str_fmt(output, ldns_output_format_default, rr);
-}
-
-ldns_status
-ldns_rr_list2buffer_str_fmt(ldns_buffer *output,
- const ldns_output_format *fmt, const ldns_rr_list *list)
-{
- uint16_t i;
-
- for(i = 0; i < ldns_rr_list_rr_count(list); i++) {
- (void) ldns_rr2buffer_str_fmt(output, fmt,
- ldns_rr_list_rr(list, i));
- }
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_rr_list2buffer_str(ldns_buffer *output, const ldns_rr_list *list)
-{
- return ldns_rr_list2buffer_str_fmt(
- output, ldns_output_format_default, list);
-}
-
-ldns_status
-ldns_pktheader2buffer_str(ldns_buffer *output, const ldns_pkt *pkt)
-{
- ldns_lookup_table *opcode = ldns_lookup_by_id(ldns_opcodes,
- (int) ldns_pkt_get_opcode(pkt));
- ldns_lookup_table *rcode = ldns_lookup_by_id(ldns_rcodes,
- (int) ldns_pkt_get_rcode(pkt));
-
- ldns_buffer_printf(output, ";; ->>HEADER<<- ");
- if (opcode) {
- ldns_buffer_printf(output, "opcode: %s, ", opcode->name);
- } else {
- ldns_buffer_printf(output, "opcode: ?? (%u), ",
- ldns_pkt_get_opcode(pkt));
- }
- if (rcode) {
- ldns_buffer_printf(output, "rcode: %s, ", rcode->name);
- } else {
- ldns_buffer_printf(output, "rcode: ?? (%u), ", ldns_pkt_get_rcode(pkt));
- }
- ldns_buffer_printf(output, "id: %d\n", ldns_pkt_id(pkt));
- ldns_buffer_printf(output, ";; flags: ");
-
- if (ldns_pkt_qr(pkt)) {
- ldns_buffer_printf(output, "qr ");
- }
- if (ldns_pkt_aa(pkt)) {
- ldns_buffer_printf(output, "aa ");
- }
- if (ldns_pkt_tc(pkt)) {
- ldns_buffer_printf(output, "tc ");
- }
- if (ldns_pkt_rd(pkt)) {
- ldns_buffer_printf(output, "rd ");
- }
- if (ldns_pkt_cd(pkt)) {
- ldns_buffer_printf(output, "cd ");
- }
- if (ldns_pkt_ra(pkt)) {
- ldns_buffer_printf(output, "ra ");
- }
- if (ldns_pkt_ad(pkt)) {
- ldns_buffer_printf(output, "ad ");
- }
- ldns_buffer_printf(output, "; ");
- ldns_buffer_printf(output, "QUERY: %u, ", ldns_pkt_qdcount(pkt));
- ldns_buffer_printf(output, "ANSWER: %u, ", ldns_pkt_ancount(pkt));
- ldns_buffer_printf(output, "AUTHORITY: %u, ", ldns_pkt_nscount(pkt));
- ldns_buffer_printf(output, "ADDITIONAL: %u ", ldns_pkt_arcount(pkt));
- return ldns_buffer_status(output);
-}
-
-ldns_status
-ldns_pkt2buffer_str_fmt(ldns_buffer *output,
- const ldns_output_format *fmt, const ldns_pkt *pkt)
-{
- uint16_t i;
- ldns_status status = LDNS_STATUS_OK;
- char *tmp;
- struct timeval time;
- time_t time_tt;
-
- if (!pkt) {
- ldns_buffer_printf(output, "null");
- return LDNS_STATUS_OK;
- }
-
- if (ldns_buffer_status_ok(output)) {
- status = ldns_pktheader2buffer_str(output, pkt);
- if (status != LDNS_STATUS_OK) {
- return status;
- }
-
- ldns_buffer_printf(output, "\n");
-
- ldns_buffer_printf(output, ";; QUESTION SECTION:\n;; ");
-
-
- for (i = 0; i < ldns_pkt_qdcount(pkt); i++) {
- status = ldns_rr2buffer_str_fmt(output, fmt,
- ldns_rr_list_rr(
- ldns_pkt_question(pkt), i));
- if (status != LDNS_STATUS_OK) {
- return status;
- }
- }
- ldns_buffer_printf(output, "\n");
-
- ldns_buffer_printf(output, ";; ANSWER SECTION:\n");
- for (i = 0; i < ldns_pkt_ancount(pkt); i++) {
- status = ldns_rr2buffer_str_fmt(output, fmt,
- ldns_rr_list_rr(
- ldns_pkt_answer(pkt), i));
- if (status != LDNS_STATUS_OK) {
- return status;
- }
-
- }
- ldns_buffer_printf(output, "\n");
-
- ldns_buffer_printf(output, ";; AUTHORITY SECTION:\n");
-
- for (i = 0; i < ldns_pkt_nscount(pkt); i++) {
- status = ldns_rr2buffer_str_fmt(output, fmt,
- ldns_rr_list_rr(
- ldns_pkt_authority(pkt), i));
- if (status != LDNS_STATUS_OK) {
- return status;
- }
- }
- ldns_buffer_printf(output, "\n");
-
- ldns_buffer_printf(output, ";; ADDITIONAL SECTION:\n");
- for (i = 0; i < ldns_pkt_arcount(pkt); i++) {
- status = ldns_rr2buffer_str_fmt(output, fmt,
- ldns_rr_list_rr(
- ldns_pkt_additional(pkt), i));
- if (status != LDNS_STATUS_OK) {
- return status;
- }
-
- }
- ldns_buffer_printf(output, "\n");
- /* add some futher fields */
- ldns_buffer_printf(output, ";; Query time: %d msec\n",
- ldns_pkt_querytime(pkt));
- if (ldns_pkt_edns(pkt)) {
- ldns_buffer_printf(output,
- ";; EDNS: version %u; flags:",
- ldns_pkt_edns_version(pkt));
- if (ldns_pkt_edns_do(pkt)) {
- ldns_buffer_printf(output, " do");
- }
- /* the extended rcode is the value set, shifted four bits,
- * and or'd with the original rcode */
- if (ldns_pkt_edns_extended_rcode(pkt)) {
- ldns_buffer_printf(output, " ; ext-rcode: %d",
- (ldns_pkt_edns_extended_rcode(pkt) << 4 | ldns_pkt_get_rcode(pkt)));
- }
- ldns_buffer_printf(output, " ; udp: %u\n",
- ldns_pkt_edns_udp_size(pkt));
-
- if (ldns_pkt_edns_data(pkt)) {
- ldns_buffer_printf(output, ";; Data: ");
- (void)ldns_rdf2buffer_str(output,
- ldns_pkt_edns_data(pkt));
- ldns_buffer_printf(output, "\n");
- }
- }
- if (ldns_pkt_tsig(pkt)) {
- ldns_buffer_printf(output, ";; TSIG:\n;; ");
- (void) ldns_rr2buffer_str_fmt(
- output, fmt, ldns_pkt_tsig(pkt));
- ldns_buffer_printf(output, "\n");
- }
- if (ldns_pkt_answerfrom(pkt)) {
- tmp = ldns_rdf2str(ldns_pkt_answerfrom(pkt));
- ldns_buffer_printf(output, ";; SERVER: %s\n", tmp);
- LDNS_FREE(tmp);
- }
- time = ldns_pkt_timestamp(pkt);
- time_tt = (time_t)time.tv_sec;
- ldns_buffer_printf(output, ";; WHEN: %s",
- (char*)ctime(&time_tt));
-
- ldns_buffer_printf(output, ";; MSG SIZE rcvd: %d\n",
- (int)ldns_pkt_size(pkt));
- } else {
- return ldns_buffer_status(output);
- }
- return status;
-}
-
-ldns_status
-ldns_pkt2buffer_str(ldns_buffer *output, const ldns_pkt *pkt)
-{
- return ldns_pkt2buffer_str_fmt(output, ldns_output_format_default, pkt);
-}
-
-
-#ifdef HAVE_SSL
-static ldns_status
-ldns_hmac_key2buffer_str(ldns_buffer *output, const ldns_key *k)
-{
- ldns_status status;
- size_t i;
- ldns_rdf *b64_bignum;
-
- ldns_buffer_printf(output, "Key: ");
-
- i = ldns_key_hmac_size(k);
- b64_bignum = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64, i, ldns_key_hmac_key(k));
- status = ldns_rdf2buffer_str(output, b64_bignum);
- ldns_rdf_deep_free(b64_bignum);
- ldns_buffer_printf(output, "\n");
- return status;
-}
-#endif
-
-#if defined(HAVE_SSL) && defined(USE_GOST)
-static ldns_status
-ldns_gost_key2buffer_str(ldns_buffer *output, EVP_PKEY *p)
-{
- unsigned char* pp = NULL;
- int ret;
- ldns_rdf *b64_bignum;
- ldns_status status;
-
- ldns_buffer_printf(output, "GostAsn1: ");
-
- ret = i2d_PrivateKey(p, &pp);
- b64_bignum = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64, (size_t)ret, pp);
- status = ldns_rdf2buffer_str(output, b64_bignum);
-
- ldns_rdf_deep_free(b64_bignum);
- OPENSSL_free(pp);
- ldns_buffer_printf(output, "\n");
- return status;
-}
-#endif
-
-#if defined(HAVE_SSL) && defined(USE_ED25519)
-static ldns_status
-ldns_ed25519_key2buffer_str(ldns_buffer *output, EVP_PKEY *p)
-{
- unsigned char* pp = NULL;
- int ret;
- ldns_rdf *b64_bignum;
- ldns_status status;
-
- ldns_buffer_printf(output, "PrivateKey: ");
-
- ret = i2d_PrivateKey(p, &pp);
- /* 16 byte asn (302e020100300506032b657004220420) + 32byte key */
- if(ret != 16 + 32) {
- OPENSSL_free(pp);
- return LDNS_STATUS_ERR;
- }
- b64_bignum = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64,
- (size_t)ret-16, pp+16);
- status = ldns_rdf2buffer_str(output, b64_bignum);
-
- ldns_rdf_deep_free(b64_bignum);
- OPENSSL_free(pp);
- ldns_buffer_printf(output, "\n");
- return status;
-}
-#endif
-
-#if defined(HAVE_SSL) && defined(USE_ED448)
-static ldns_status
-ldns_ed448_key2buffer_str(ldns_buffer *output, EVP_PKEY *p)
-{
- unsigned char* pp = NULL;
- int ret;
- ldns_rdf *b64_bignum;
- ldns_status status;
-
- ldns_buffer_printf(output, "PrivateKey: ");
-
- ret = i2d_PrivateKey(p, &pp);
- /* some-ASN + 57byte key */
- if(ret != 16 + 57) {
- OPENSSL_free(pp);
- return LDNS_STATUS_ERR;
- }
- b64_bignum = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64,
- (size_t)ret-16, pp+16);
- status = ldns_rdf2buffer_str(output, b64_bignum);
-
- ldns_rdf_deep_free(b64_bignum);
- OPENSSL_free(pp);
- ldns_buffer_printf(output, "\n");
- return status;
-}
-#endif
-
-#if defined(HAVE_SSL)
-/** print one b64 encoded bignum to a line in the keybuffer */
-static int
-ldns_print_bignum_b64_line(ldns_buffer* output, const char* label, const BIGNUM* num)
-{
- unsigned char *bignumbuf = LDNS_XMALLOC(unsigned char, LDNS_MAX_KEYLEN);
- if(!bignumbuf) return 0;
-
- ldns_buffer_printf(output, "%s: ", label);
- if(num) {
- ldns_rdf *b64_bignum = NULL;
- int i = BN_bn2bin(num, bignumbuf);
- if (i > LDNS_MAX_KEYLEN) {
- LDNS_FREE(bignumbuf);
- return 0;
- }
- b64_bignum = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64, (size_t)i, bignumbuf);
- if (ldns_rdf2buffer_str(output, b64_bignum) != LDNS_STATUS_OK) {
- ldns_rdf_deep_free(b64_bignum);
- LDNS_FREE(bignumbuf);
- return 0;
- }
- ldns_rdf_deep_free(b64_bignum);
- ldns_buffer_printf(output, "\n");
- } else {
- ldns_buffer_printf(output, "(Not available)\n");
- }
- LDNS_FREE(bignumbuf);
- return 1;
-}
-#endif
-
-ldns_status
-ldns_key2buffer_str(ldns_buffer *output, const ldns_key *k)
-{
- ldns_status status = LDNS_STATUS_OK;
- unsigned char *bignum;
-#ifdef HAVE_SSL
- RSA *rsa;
- DSA *dsa;
-#endif /* HAVE_SSL */
-
- if (!k) {
- return LDNS_STATUS_ERR;
- }
-
- bignum = LDNS_XMALLOC(unsigned char, LDNS_MAX_KEYLEN);
- if (!bignum) {
- return LDNS_STATUS_ERR;
- }
-
- if (ldns_buffer_status_ok(output)) {
-#ifdef HAVE_SSL
- switch(ldns_key_algorithm(k)) {
- case LDNS_SIGN_RSASHA1:
- case LDNS_SIGN_RSASHA1_NSEC3:
- case LDNS_SIGN_RSASHA256:
- case LDNS_SIGN_RSASHA512:
- case LDNS_SIGN_RSAMD5:
- /* copied by looking at dnssec-keygen output */
- /* header */
- rsa = ldns_key_rsa_key(k);
-
- ldns_buffer_printf(output,"Private-key-format: v1.2\n");
- switch(ldns_key_algorithm(k)) {
- case LDNS_SIGN_RSAMD5:
- ldns_buffer_printf(output,
- "Algorithm: %u (RSA)\n",
- LDNS_RSAMD5);
- break;
- case LDNS_SIGN_RSASHA1:
- ldns_buffer_printf(output,
- "Algorithm: %u (RSASHA1)\n",
- LDNS_RSASHA1);
- break;
- case LDNS_SIGN_RSASHA1_NSEC3:
- ldns_buffer_printf(output,
- "Algorithm: %u (RSASHA1_NSEC3)\n",
- LDNS_RSASHA1_NSEC3);
- break;
-#ifdef USE_SHA2
- case LDNS_SIGN_RSASHA256:
- ldns_buffer_printf(output,
- "Algorithm: %u (RSASHA256)\n",
- LDNS_RSASHA256);
- break;
- case LDNS_SIGN_RSASHA512:
- ldns_buffer_printf(output,
- "Algorithm: %u (RSASHA512)\n",
- LDNS_RSASHA512);
- break;
-#endif
- default:
-#ifdef STDERR_MSGS
- fprintf(stderr, "Warning: unknown signature ");
- fprintf(stderr,
- "algorithm type %u\n",
- ldns_key_algorithm(k));
-#endif
- ldns_buffer_printf(output,
- "Algorithm: %u (Unknown)\n",
- ldns_key_algorithm(k));
- break;
- }
-
- /* print to buf, convert to bin, convert to b64,
- * print to buf */
-
-#ifndef S_SPLINT_S
- if(1) {
- const BIGNUM *n=NULL, *e=NULL, *d=NULL,
- *p=NULL, *q=NULL, *dmp1=NULL,
- *dmq1=NULL, *iqmp=NULL;
-#if OPENSSL_VERSION_NUMBER < 0x10100000 || defined(HAVE_LIBRESSL)
- n = rsa->n;
- e = rsa->e;
- d = rsa->d;
- p = rsa->p;
- q = rsa->q;
- dmp1 = rsa->dmp1;
- dmq1 = rsa->dmq1;
- iqmp = rsa->iqmp;
-#else
- RSA_get0_key(rsa, &n, &e, &d);
- RSA_get0_factors(rsa, &p, &q);
- RSA_get0_crt_params(rsa, &dmp1,
- &dmq1, &iqmp);
-#endif
- if(!ldns_print_bignum_b64_line(output, "Modulus", n))
- goto error;
- if(!ldns_print_bignum_b64_line(output, "PublicExponent", e))
- goto error;
- if(!ldns_print_bignum_b64_line(output, "PrivateExponent", d))
- goto error;
- if(!ldns_print_bignum_b64_line(output, "Prime1", p))
- goto error;
- if(!ldns_print_bignum_b64_line(output, "Prime2", q))
- goto error;
- if(!ldns_print_bignum_b64_line(output, "Exponent1", dmp1))
- goto error;
- if(!ldns_print_bignum_b64_line(output, "Exponent2", dmq1))
- goto error;
- if(!ldns_print_bignum_b64_line(output, "Coefficient", iqmp))
- goto error;
- }
-#endif /* splint */
-
- RSA_free(rsa);
- break;
- case LDNS_SIGN_DSA:
- case LDNS_SIGN_DSA_NSEC3:
- dsa = ldns_key_dsa_key(k);
-
- ldns_buffer_printf(output,"Private-key-format: v1.2\n");
- if (ldns_key_algorithm(k) == LDNS_SIGN_DSA) {
- ldns_buffer_printf(output,"Algorithm: 3 (DSA)\n");
- } else if (ldns_key_algorithm(k) == LDNS_SIGN_DSA_NSEC3) {
- ldns_buffer_printf(output,"Algorithm: 6 (DSA_NSEC3)\n");
- }
-
- /* print to buf, convert to bin, convert to b64,
- * print to buf */
- if(1) {
- const BIGNUM *p=NULL, *q=NULL, *g=NULL,
- *priv_key=NULL, *pub_key=NULL;
-#if OPENSSL_VERSION_NUMBER < 0x10100000 || defined(HAVE_LIBRESSL)
-#ifndef S_SPLINT_S
- p = dsa->p;
- q = dsa->q;
- g = dsa->g;
- priv_key = dsa->priv_key;
- pub_key = dsa->pub_key;
-#endif /* splint */
-#else
- DSA_get0_pqg(dsa, &p, &q, &g);
- DSA_get0_key(dsa, &pub_key, &priv_key);
-#endif
- if(!ldns_print_bignum_b64_line(output, "Prime(p)", p))
- goto error;
- if(!ldns_print_bignum_b64_line(output, "Subprime(q)", q))
- goto error;
- if(!ldns_print_bignum_b64_line(output, "Base(g)", g))
- goto error;
- if(!ldns_print_bignum_b64_line(output, "Private_value(x)", priv_key))
- goto error;
- if(!ldns_print_bignum_b64_line(output, "Public_value(y)", pub_key))
- goto error;
- }
- break;
- case LDNS_SIGN_ECC_GOST:
- /* no format defined, use blob */
-#if defined(HAVE_SSL) && defined(USE_GOST)
- ldns_buffer_printf(output, "Private-key-format: v1.2\n");
- ldns_buffer_printf(output, "Algorithm: %d (ECC-GOST)\n", LDNS_SIGN_ECC_GOST);
- status = ldns_gost_key2buffer_str(output,
-#ifndef S_SPLINT_S
- k->_key.key
-#else
- NULL
-#endif
- );
-#else
- goto error;
-#endif /* GOST */
- break;
- case LDNS_SIGN_ECDSAP256SHA256:
- case LDNS_SIGN_ECDSAP384SHA384:
-#ifdef USE_ECDSA
- ldns_buffer_printf(output, "Private-key-format: v1.2\n");
- ldns_buffer_printf(output, "Algorithm: %d (", ldns_key_algorithm(k));
- status=ldns_algorithm2buffer_str(output, (ldns_algorithm)ldns_key_algorithm(k));
-#ifndef S_SPLINT_S
- ldns_buffer_printf(output, ")\n");
- if(k->_key.key) {
- EC_KEY* ec = EVP_PKEY_get1_EC_KEY(k->_key.key);
- const BIGNUM* b = EC_KEY_get0_private_key(ec);
- if(!ldns_print_bignum_b64_line(output, "PrivateKey", b))
- goto error;
- /* down reference count in EC_KEY
- * its still assigned to the PKEY */
- EC_KEY_free(ec);
- }
-#endif /* splint */
-#else
- goto error;
-#endif /* ECDSA */
- break;
-#ifdef USE_ED25519
- case LDNS_SIGN_ED25519:
- ldns_buffer_printf(output, "Private-key-format: v1.2\n");
- ldns_buffer_printf(output, "Algorithm: %d (", ldns_key_algorithm(k));
- status=ldns_algorithm2buffer_str(output, (ldns_algorithm)ldns_key_algorithm(k));
- ldns_buffer_printf(output, ")\n");
- if (status) break;
- status = ldns_ed25519_key2buffer_str(output,
- k->_key.key);
- break;
-#endif /* USE_ED25519 */
-#ifdef USE_ED448
- case LDNS_SIGN_ED448:
- ldns_buffer_printf(output, "Private-key-format: v1.2\n");
- ldns_buffer_printf(output, "Algorithm: %d (", ldns_key_algorithm(k));
- status=ldns_algorithm2buffer_str(output, (ldns_algorithm)ldns_key_algorithm(k));
- ldns_buffer_printf(output, ")\n");
- if (status) break;
- status = ldns_ed448_key2buffer_str(output,
- k->_key.key);
- break;
-#endif /* USE_ED448 */
- case LDNS_SIGN_HMACMD5:
- /* there's not much of a format defined for TSIG */
- /* It's just a binary blob, Same for all algorithms */
- ldns_buffer_printf(output, "Private-key-format: v1.2\n");
- ldns_buffer_printf(output, "Algorithm: 157 (HMAC_MD5)\n");
- status = ldns_hmac_key2buffer_str(output, k);
- break;
- case LDNS_SIGN_HMACSHA1:
- ldns_buffer_printf(output, "Private-key-format: v1.2\n");
- ldns_buffer_printf(output, "Algorithm: 158 (HMAC_SHA1)\n");
- status = ldns_hmac_key2buffer_str(output, k);
- break;
- case LDNS_SIGN_HMACSHA224:
- ldns_buffer_printf(output, "Private-key-format: v1.2\n");
- ldns_buffer_printf(output, "Algorithm: 162 (HMAC_SHA224)\n");
- status = ldns_hmac_key2buffer_str(output, k);
- break;
- case LDNS_SIGN_HMACSHA256:
- ldns_buffer_printf(output, "Private-key-format: v1.2\n");
- ldns_buffer_printf(output, "Algorithm: 159 (HMAC_SHA256)\n");
- status = ldns_hmac_key2buffer_str(output, k);
- break;
- case LDNS_SIGN_HMACSHA384:
- ldns_buffer_printf(output, "Private-key-format: v1.2\n");
- ldns_buffer_printf(output, "Algorithm: 164 (HMAC_SHA384)\n");
- status = ldns_hmac_key2buffer_str(output, k);
- break;
- case LDNS_SIGN_HMACSHA512:
- ldns_buffer_printf(output, "Private-key-format: v1.2\n");
- ldns_buffer_printf(output, "Algorithm: 165 (HMAC_SHA512)\n");
- status = ldns_hmac_key2buffer_str(output, k);
- break;
- }
-#endif /* HAVE_SSL */
- } else {
- LDNS_FREE(bignum);
- return ldns_buffer_status(output);
- }
- LDNS_FREE(bignum);
- return status;
-
-#ifdef HAVE_SSL
- /* compiles warn the label isn't used */
-error:
- LDNS_FREE(bignum);
- return LDNS_STATUS_ERR;
-#endif /* HAVE_SSL */
-
-}
-
-/*
- * Zero terminate the buffer and copy data.
- */
-char *
-ldns_buffer2str(ldns_buffer *buffer)
-{
- char *str;
-
- /* check if buffer ends with \0, if not, and
- if there is space, add it */
- if (*(ldns_buffer_at(buffer, ldns_buffer_position(buffer))) != 0) {
- if (!ldns_buffer_reserve(buffer, 1)) {
- return NULL;
- }
- ldns_buffer_write_u8(buffer, (uint8_t) '\0');
- if (!ldns_buffer_set_capacity(buffer, ldns_buffer_position(buffer))) {
- return NULL;
- }
- }
-
- str = strdup((const char *)ldns_buffer_begin(buffer));
- if(!str) {
- return NULL;
- }
- return str;
-}
-
-/*
- * Zero terminate the buffer and export data.
- */
-char *
-ldns_buffer_export2str(ldns_buffer *buffer)
-{
- /* Append '\0' as string terminator */
- if (! ldns_buffer_reserve(buffer, 1)) {
- return NULL;
- }
- ldns_buffer_write_u8(buffer, 0);
-
- /* reallocate memory to the size of the string and export */
- ldns_buffer_set_capacity(buffer, ldns_buffer_position(buffer));
- return ldns_buffer_export(buffer);
-}
-
-char *
-ldns_rdf2str(const ldns_rdf *rdf)
-{
- char *result = NULL;
- ldns_buffer *tmp_buffer = ldns_buffer_new(LDNS_MAX_PACKETLEN);
-
- if (!tmp_buffer) {
- return NULL;
- }
- if (ldns_rdf2buffer_str(tmp_buffer, rdf) == LDNS_STATUS_OK) {
- /* export and return string, destroy rest */
- result = ldns_buffer_export2str(tmp_buffer);
- }
- ldns_buffer_free(tmp_buffer);
- return result;
-}
-
-char *
-ldns_rr2str_fmt(const ldns_output_format *fmt, const ldns_rr *rr)
-{
- char *result = NULL;
- ldns_buffer *tmp_buffer = ldns_buffer_new(LDNS_MAX_PACKETLEN);
-
- if (!tmp_buffer) {
- return NULL;
- }
- if (ldns_rr2buffer_str_fmt(tmp_buffer, fmt, rr)
- == LDNS_STATUS_OK) {
- /* export and return string, destroy rest */
- result = ldns_buffer_export2str(tmp_buffer);
- }
- ldns_buffer_free(tmp_buffer);
- return result;
-}
-
-char *
-ldns_rr2str(const ldns_rr *rr)
-{
- return ldns_rr2str_fmt(ldns_output_format_default, rr);
-}
-
-char *
-ldns_pkt2str_fmt(const ldns_output_format *fmt, const ldns_pkt *pkt)
-{
- char *result = NULL;
- ldns_buffer *tmp_buffer = ldns_buffer_new(LDNS_MAX_PACKETLEN);
-
- if (!tmp_buffer) {
- return NULL;
- }
- if (ldns_pkt2buffer_str_fmt(tmp_buffer, fmt, pkt)
- == LDNS_STATUS_OK) {
- /* export and return string, destroy rest */
- result = ldns_buffer_export2str(tmp_buffer);
- }
-
- ldns_buffer_free(tmp_buffer);
- return result;
-}
-
-char *
-ldns_pkt2str(const ldns_pkt *pkt)
-{
- return ldns_pkt2str_fmt(ldns_output_format_default, pkt);
-}
-
-char *
-ldns_key2str(const ldns_key *k)
-{
- char *result = NULL;
- ldns_buffer *tmp_buffer = ldns_buffer_new(LDNS_MAX_PACKETLEN);
-
- if (!tmp_buffer) {
- return NULL;
- }
- if (ldns_key2buffer_str(tmp_buffer, k) == LDNS_STATUS_OK) {
- /* export and return string, destroy rest */
- result = ldns_buffer_export2str(tmp_buffer);
- }
- ldns_buffer_free(tmp_buffer);
- return result;
-}
-
-char *
-ldns_rr_list2str_fmt(const ldns_output_format *fmt, const ldns_rr_list *list)
-{
- char *result = NULL;
- ldns_buffer *tmp_buffer = ldns_buffer_new(LDNS_MAX_PACKETLEN);
-
- if (!tmp_buffer) {
- return NULL;
- }
- if (list) {
- if (ldns_rr_list2buffer_str_fmt(
- tmp_buffer, fmt, list)
- == LDNS_STATUS_OK) {
- }
- } else {
- if (fmt == NULL) {
- fmt = ldns_output_format_default;
- }
- if (fmt->flags & LDNS_COMMENT_NULLS) {
- ldns_buffer_printf(tmp_buffer, "; (null)\n");
- }
- }
-
- /* export and return string, destroy rest */
- result = ldns_buffer_export2str(tmp_buffer);
- ldns_buffer_free(tmp_buffer);
- return result;
-}
-
-char *
-ldns_rr_list2str(const ldns_rr_list *list)
-{
- return ldns_rr_list2str_fmt(ldns_output_format_default, list);
-}
-
-void
-ldns_rdf_print(FILE *output, const ldns_rdf *rdf)
-{
- char *str = ldns_rdf2str(rdf);
- if (str) {
- fprintf(output, "%s", str);
- } else {
- fprintf(output, ";Unable to convert rdf to string\n");
- }
- LDNS_FREE(str);
-}
-
-void
-ldns_rr_print_fmt(FILE *output,
- const ldns_output_format *fmt, const ldns_rr *rr)
-{
- char *str = ldns_rr2str_fmt(fmt, rr);
- if (str) {
- fprintf(output, "%s", str);
- } else {
- fprintf(output, ";Unable to convert rr to string\n");
- }
- LDNS_FREE(str);
-}
-
-void
-ldns_rr_print(FILE *output, const ldns_rr *rr)
-{
- ldns_rr_print_fmt(output, ldns_output_format_default, rr);
-}
-
-void
-ldns_pkt_print_fmt(FILE *output,
- const ldns_output_format *fmt, const ldns_pkt *pkt)
-{
- char *str = ldns_pkt2str_fmt(fmt, pkt);
- if (str) {
- fprintf(output, "%s", str);
- } else {
- fprintf(output, ";Unable to convert packet to string\n");
- }
- LDNS_FREE(str);
-}
-
-void
-ldns_pkt_print(FILE *output, const ldns_pkt *pkt)
-{
- ldns_pkt_print_fmt(output, ldns_output_format_default, pkt);
-}
-
-void
-ldns_rr_list_print_fmt(FILE *output,
- const ldns_output_format *fmt, const ldns_rr_list *lst)
-{
- size_t i;
- for (i = 0; i < ldns_rr_list_rr_count(lst); i++) {
- ldns_rr_print_fmt(output, fmt, ldns_rr_list_rr(lst, i));
- }
-}
-
-void
-ldns_rr_list_print(FILE *output, const ldns_rr_list *lst)
-{
- ldns_rr_list_print_fmt(output, ldns_output_format_default, lst);
-}
-
-void
-ldns_resolver_print_fmt(FILE *output,
- const ldns_output_format *fmt, const ldns_resolver *r)
-{
- uint16_t i;
- ldns_rdf **n;
- ldns_rdf **s;
- size_t *rtt;
- if (!r) {
- return;
- }
- n = ldns_resolver_nameservers(r);
- s = ldns_resolver_searchlist(r);
- rtt = ldns_resolver_rtt(r);
-
- fprintf(output, "port: %d\n", (int)ldns_resolver_port(r));
- fprintf(output, "edns0 size: %d\n", (int)ldns_resolver_edns_udp_size(r));
- fprintf(output, "use ip6: %d\n", (int)ldns_resolver_ip6(r));
-
- fprintf(output, "recursive: %d\n", ldns_resolver_recursive(r));
- fprintf(output, "usevc: %d\n", ldns_resolver_usevc(r));
- fprintf(output, "igntc: %d\n", ldns_resolver_igntc(r));
- fprintf(output, "fail: %d\n", ldns_resolver_fail(r));
- fprintf(output, "retry: %d\n", (int)ldns_resolver_retry(r));
- fprintf(output, "retrans: %d\n", (int)ldns_resolver_retrans(r));
- fprintf(output, "fallback: %d\n", ldns_resolver_fallback(r));
- fprintf(output, "random: %d\n", ldns_resolver_random(r));
- fprintf(output, "timeout: %d\n", (int)ldns_resolver_timeout(r).tv_sec);
- fprintf(output, "dnssec: %d\n", ldns_resolver_dnssec(r));
- fprintf(output, "dnssec cd: %d\n", ldns_resolver_dnssec_cd(r));
- fprintf(output, "trust anchors (%d listed):\n",
- (int)ldns_rr_list_rr_count(ldns_resolver_dnssec_anchors(r)));
- ldns_rr_list_print_fmt(output, fmt, ldns_resolver_dnssec_anchors(r));
- fprintf(output, "tsig: %s %s\n",
- ldns_resolver_tsig_keyname(r)?ldns_resolver_tsig_keyname(r):"-",
- ldns_resolver_tsig_algorithm(r)?ldns_resolver_tsig_algorithm(r):"-");
- fprintf(output, "debug: %d\n", ldns_resolver_debug(r));
-
- fprintf(output, "default domain: ");
- ldns_rdf_print(output, ldns_resolver_domain(r));
- fprintf(output, "\n");
- fprintf(output, "apply default domain: %d\n", ldns_resolver_defnames(r));
-
- fprintf(output, "searchlist (%d listed):\n", (int)ldns_resolver_searchlist_count(r));
- for (i = 0; i < ldns_resolver_searchlist_count(r); i++) {
- fprintf(output, "\t");
- ldns_rdf_print(output, s[i]);
- fprintf(output, "\n");
- }
- fprintf(output, "apply search list: %d\n", ldns_resolver_dnsrch(r));
-
- fprintf(output, "nameservers (%d listed):\n", (int)ldns_resolver_nameserver_count(r));
- for (i = 0; i < ldns_resolver_nameserver_count(r); i++) {
- fprintf(output, "\t");
- ldns_rdf_print(output, n[i]);
-
- switch ((int)rtt[i]) {
- case LDNS_RESOLV_RTT_MIN:
- fprintf(output, " - reachable\n");
- break;
- case LDNS_RESOLV_RTT_INF:
- fprintf(output, " - unreachable\n");
- break;
- }
- }
-}
-
-void
-ldns_resolver_print(FILE *output, const ldns_resolver *r)
-{
- ldns_resolver_print_fmt(output, ldns_output_format_default, r);
-}
-
-void
-ldns_zone_print_fmt(FILE *output,
- const ldns_output_format *fmt, const ldns_zone *z)
-{
- if(ldns_zone_soa(z))
- ldns_rr_print_fmt(output, fmt, ldns_zone_soa(z));
- ldns_rr_list_print_fmt(output, fmt, ldns_zone_rrs(z));
-}
-void
-ldns_zone_print(FILE *output, const ldns_zone *z)
-{
- ldns_zone_print_fmt(output, ldns_output_format_default, z);
-}
diff --git a/ldns/host2wire.c b/ldns/host2wire.c
deleted file mode 100644
index a12b6b0..0000000
--- a/ldns/host2wire.c
+++ /dev/null
@@ -1,504 +0,0 @@
-/*
- * host2wire.c
- *
- * conversion routines from the host to the wire format.
- * This will usually just a re-ordering of the
- * data (as we store it in network format)
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2004-2006
- *
- * See the file LICENSE for the license
- */
-
-#include <ldns/config.h>
-
-#include <ldns/ldns.h>
-
-ldns_status
-ldns_dname2buffer_wire(ldns_buffer *buffer, const ldns_rdf *name)
-{
- return ldns_dname2buffer_wire_compress(buffer, name, NULL);
-}
-
-ldns_status
-ldns_dname2buffer_wire_compress(ldns_buffer *buffer, const ldns_rdf *name, ldns_rbtree_t *compression_data)
-{
- ldns_rbnode_t *node;
- uint8_t *data;
- size_t size;
- ldns_rdf *label;
- ldns_rdf *rest;
- ldns_status s;
-
- /* If no tree, just add the data */
- if(!compression_data)
- {
- if (ldns_buffer_reserve(buffer, ldns_rdf_size(name)))
- {
- ldns_buffer_write(buffer, ldns_rdf_data(name), ldns_rdf_size(name));
- }
- return ldns_buffer_status(buffer);
- }
-
- /* No labels left, write final zero */
- if(ldns_dname_label_count(name)==0)
- {
- if(ldns_buffer_reserve(buffer,1))
- {
- ldns_buffer_write_u8(buffer, 0);
- }
- return ldns_buffer_status(buffer);
- }
-
- /* Can we find the name in the tree? */
- if((node = ldns_rbtree_search(compression_data, name)) != NULL)
- {
- /* Found */
- uint16_t position = (uint16_t) (intptr_t) node->data | 0xC000;
- if (ldns_buffer_reserve(buffer, 2))
- {
- ldns_buffer_write_u16(buffer, position);
- }
- return ldns_buffer_status(buffer);
- }
- else
- {
- /* Not found. Write cache entry, take off first label, write it, */
- /* try again with the rest of the name. */
- if (ldns_buffer_position(buffer) < 16384) {
- ldns_rdf *key;
-
- node = LDNS_MALLOC(ldns_rbnode_t);
- if(!node)
- {
- return LDNS_STATUS_MEM_ERR;
- }
-
- key = ldns_rdf_clone(name);
- if (!key) {
- LDNS_FREE(node);
- return LDNS_STATUS_MEM_ERR;
- }
- node->key = key;
- node->data = (void *) (intptr_t) ldns_buffer_position(buffer);
- if(!ldns_rbtree_insert(compression_data,node))
- {
- /* fprintf(stderr,"Name not found but now it's there?\n"); */
- ldns_rdf_deep_free(key);
- LDNS_FREE(node);
- }
- }
- label = ldns_dname_label(name, 0);
- rest = ldns_dname_left_chop(name);
- size = ldns_rdf_size(label) - 1; /* Don't want the final zero */
- data = ldns_rdf_data(label);
- if(ldns_buffer_reserve(buffer, size))
- {
- ldns_buffer_write(buffer, data, size);
- }
- ldns_rdf_deep_free(label);
- s = ldns_dname2buffer_wire_compress(buffer, rest, compression_data);
- ldns_rdf_deep_free(rest);
- return s;
- }
-}
-
-ldns_status
-ldns_rdf2buffer_wire(ldns_buffer *buffer, const ldns_rdf *rdf)
-{
- return ldns_rdf2buffer_wire_compress(buffer, rdf, NULL);
-}
-
-ldns_status
-ldns_rdf2buffer_wire_compress(ldns_buffer *buffer, const ldns_rdf *rdf, ldns_rbtree_t *compression_data)
-{
- /* If it's a DNAME, call that function to get compression */
- if(compression_data && ldns_rdf_get_type(rdf) == LDNS_RDF_TYPE_DNAME)
- {
- return ldns_dname2buffer_wire_compress(buffer,rdf,compression_data);
- }
-
- if (ldns_buffer_reserve(buffer, ldns_rdf_size(rdf))) {
- ldns_buffer_write(buffer, ldns_rdf_data(rdf), ldns_rdf_size(rdf));
- }
- return ldns_buffer_status(buffer);
-}
-
-ldns_status
-ldns_rdf2buffer_wire_canonical(ldns_buffer *buffer, const ldns_rdf *rdf)
-{
- size_t i;
- uint8_t *rdf_data;
-
- if (ldns_rdf_get_type(rdf) == LDNS_RDF_TYPE_DNAME) {
- if (ldns_buffer_reserve(buffer, ldns_rdf_size(rdf))) {
- rdf_data = ldns_rdf_data(rdf);
- for (i = 0; i < ldns_rdf_size(rdf); i++) {
- ldns_buffer_write_u8(buffer,
- (uint8_t) LDNS_DNAME_NORMALIZE((int)rdf_data[i]));
- }
- }
- } else {
- /* direct copy for all other types */
- if (ldns_buffer_reserve(buffer, ldns_rdf_size(rdf))) {
- ldns_buffer_write(buffer,
- ldns_rdf_data(rdf),
- ldns_rdf_size(rdf));
- }
- }
- return ldns_buffer_status(buffer);
-}
-
-/* convert a rr list to wireformat */
-ldns_status
-ldns_rr_list2buffer_wire(ldns_buffer *buffer,const ldns_rr_list *rr_list)
-{
- uint16_t rr_count;
- uint16_t i;
-
- rr_count = ldns_rr_list_rr_count(rr_list);
- for(i = 0; i < rr_count; i++) {
- (void)ldns_rr2buffer_wire(buffer, ldns_rr_list_rr(rr_list, i),
- LDNS_SECTION_ANY);
- }
- return ldns_buffer_status(buffer);
-}
-
-
-ldns_status
-ldns_rr2buffer_wire_canonical(ldns_buffer *buffer,
- const ldns_rr *rr,
- int section)
-{
- uint16_t i;
- uint16_t rdl_pos = 0;
- bool pre_rfc3597 = false;
- switch (ldns_rr_get_type(rr)) {
- case LDNS_RR_TYPE_NS:
- case LDNS_RR_TYPE_MD:
- case LDNS_RR_TYPE_MF:
- case LDNS_RR_TYPE_CNAME:
- case LDNS_RR_TYPE_SOA:
- case LDNS_RR_TYPE_MB:
- case LDNS_RR_TYPE_MG:
- case LDNS_RR_TYPE_MR:
- case LDNS_RR_TYPE_PTR:
- case LDNS_RR_TYPE_HINFO:
- case LDNS_RR_TYPE_MINFO:
- case LDNS_RR_TYPE_MX:
- case LDNS_RR_TYPE_RP:
- case LDNS_RR_TYPE_AFSDB:
- case LDNS_RR_TYPE_RT:
- case LDNS_RR_TYPE_SIG:
- case LDNS_RR_TYPE_PX:
- case LDNS_RR_TYPE_NXT:
- case LDNS_RR_TYPE_NAPTR:
- case LDNS_RR_TYPE_KX:
- case LDNS_RR_TYPE_SRV:
- case LDNS_RR_TYPE_DNAME:
- case LDNS_RR_TYPE_A6:
- case LDNS_RR_TYPE_RRSIG:
- pre_rfc3597 = true;
- break;
- default:
- break;
- }
-
- if (ldns_rr_owner(rr)) {
- (void) ldns_rdf2buffer_wire_canonical(buffer, ldns_rr_owner(rr));
- }
-
- if (ldns_buffer_reserve(buffer, 4)) {
- (void) ldns_buffer_write_u16(buffer, ldns_rr_get_type(rr));
- (void) ldns_buffer_write_u16(buffer, ldns_rr_get_class(rr));
- }
-
- if (section != LDNS_SECTION_QUESTION) {
- if (ldns_buffer_reserve(buffer, 6)) {
- ldns_buffer_write_u32(buffer, ldns_rr_ttl(rr));
- /* remember pos for later */
- rdl_pos = ldns_buffer_position(buffer);
- ldns_buffer_write_u16(buffer, 0);
- }
- for (i = 0; i < ldns_rr_rd_count(rr); i++) {
- if (pre_rfc3597) {
- (void) ldns_rdf2buffer_wire_canonical(
- buffer, ldns_rr_rdf(rr, i));
- } else {
- (void) ldns_rdf2buffer_wire(
- buffer, ldns_rr_rdf(rr, i));
- }
- }
- if (rdl_pos != 0) {
- ldns_buffer_write_u16_at(buffer, rdl_pos,
- ldns_buffer_position(buffer)
- - rdl_pos - 2);
- }
- }
- return ldns_buffer_status(buffer);
-}
-
-ldns_status
-ldns_rr2buffer_wire(ldns_buffer *buffer, const ldns_rr *rr, int section)
-{
- return ldns_rr2buffer_wire_compress(buffer,rr,section,NULL);
-}
-
-ldns_status
-ldns_rr2buffer_wire_compress(ldns_buffer *buffer, const ldns_rr *rr, int section, ldns_rbtree_t *compression_data)
-{
- uint16_t i;
- uint16_t rdl_pos = 0;
-
- if (ldns_rr_owner(rr)) {
- (void) ldns_dname2buffer_wire_compress(buffer, ldns_rr_owner(rr), compression_data);
- }
-
- if (ldns_buffer_reserve(buffer, 4)) {
- (void) ldns_buffer_write_u16(buffer, ldns_rr_get_type(rr));
- (void) ldns_buffer_write_u16(buffer, ldns_rr_get_class(rr));
- }
-
- if (section != LDNS_SECTION_QUESTION) {
- if (ldns_buffer_reserve(buffer, 6)) {
- ldns_buffer_write_u32(buffer, ldns_rr_ttl(rr));
- /* remember pos for later */
- rdl_pos = ldns_buffer_position(buffer);
- ldns_buffer_write_u16(buffer, 0);
- }
- if (LDNS_RR_COMPRESS ==
- ldns_rr_descript(ldns_rr_get_type(rr))->_compress) {
-
- for (i = 0; i < ldns_rr_rd_count(rr); i++) {
- (void) ldns_rdf2buffer_wire_compress(buffer,
- ldns_rr_rdf(rr, i), compression_data);
- }
- } else {
- for (i = 0; i < ldns_rr_rd_count(rr); i++) {
- (void) ldns_rdf2buffer_wire(
- buffer, ldns_rr_rdf(rr, i));
- }
- }
- if (rdl_pos != 0) {
- ldns_buffer_write_u16_at(buffer, rdl_pos,
- ldns_buffer_position(buffer)
- - rdl_pos - 2);
- }
- }
- return ldns_buffer_status(buffer);
-}
-
-ldns_status
-ldns_rrsig2buffer_wire(ldns_buffer *buffer, const ldns_rr *rr)
-{
- uint16_t i;
-
- /* it must be a sig RR */
- if (ldns_rr_get_type(rr) != LDNS_RR_TYPE_RRSIG) {
- return LDNS_STATUS_ERR;
- }
-
- /* Convert all the rdfs, except the actual signature data
- * rdf number 8 - the last, hence: -1 */
- for (i = 0; i < ldns_rr_rd_count(rr) - 1; i++) {
- (void) ldns_rdf2buffer_wire_canonical(buffer,
- ldns_rr_rdf(rr, i));
- }
-
- return ldns_buffer_status(buffer);
-}
-
-ldns_status
-ldns_rr_rdata2buffer_wire(ldns_buffer *buffer, const ldns_rr *rr)
-{
- uint16_t i;
-
- /* convert all the rdf's */
- for (i = 0; i < ldns_rr_rd_count(rr); i++) {
- (void) ldns_rdf2buffer_wire(buffer, ldns_rr_rdf(rr,i));
- }
- return ldns_buffer_status(buffer);
-}
-
-/*
- * Copies the packet header data to the buffer in wire format
- */
-static ldns_status
-ldns_hdr2buffer_wire(ldns_buffer *buffer, const ldns_pkt *packet)
-{
- uint8_t flags;
- uint16_t arcount;
-
- if (ldns_buffer_reserve(buffer, 12)) {
- ldns_buffer_write_u16(buffer, ldns_pkt_id(packet));
-
- flags = ldns_pkt_qr(packet) << 7
- | ldns_pkt_get_opcode(packet) << 3
- | ldns_pkt_aa(packet) << 2
- | ldns_pkt_tc(packet) << 1 | ldns_pkt_rd(packet);
- ldns_buffer_write_u8(buffer, flags);
-
- flags = ldns_pkt_ra(packet) << 7
- /*| ldns_pkt_z(packet) << 6*/
- | ldns_pkt_ad(packet) << 5
- | ldns_pkt_cd(packet) << 4
- | ldns_pkt_get_rcode(packet);
- ldns_buffer_write_u8(buffer, flags);
-
- ldns_buffer_write_u16(buffer, ldns_pkt_qdcount(packet));
- ldns_buffer_write_u16(buffer, ldns_pkt_ancount(packet));
- ldns_buffer_write_u16(buffer, ldns_pkt_nscount(packet));
- /* add EDNS0 and TSIG to additional if they are there */
- arcount = ldns_pkt_arcount(packet);
- if (ldns_pkt_tsig(packet)) {
- arcount++;
- }
- if (ldns_pkt_edns(packet)) {
- arcount++;
- }
- ldns_buffer_write_u16(buffer, arcount);
- }
-
- return ldns_buffer_status(buffer);
-}
-
-static void
-compression_node_free(ldns_rbnode_t *node, void *arg)
-{
- (void)arg; /* Yes, dear compiler, it is used */
- ldns_rdf_deep_free((ldns_rdf *)node->key);
- LDNS_FREE(node);
-}
-
-ldns_status
-ldns_pkt2buffer_wire(ldns_buffer *buffer, const ldns_pkt *packet)
-{
- ldns_rr_list *rr_list;
- uint16_t i;
-
- /* edns tmp vars */
- ldns_rr *edns_rr;
- uint8_t edata[4];
-
- ldns_rbtree_t *compression_data = ldns_rbtree_create((int (*)(const void *, const void *))ldns_dname_compare);
-
- (void) ldns_hdr2buffer_wire(buffer, packet);
-
- rr_list = ldns_pkt_question(packet);
- if (rr_list) {
- for (i = 0; i < ldns_rr_list_rr_count(rr_list); i++) {
- (void) ldns_rr2buffer_wire_compress(buffer,
- ldns_rr_list_rr(rr_list, i), LDNS_SECTION_QUESTION, compression_data);
- }
- }
- rr_list = ldns_pkt_answer(packet);
- if (rr_list) {
- for (i = 0; i < ldns_rr_list_rr_count(rr_list); i++) {
- (void) ldns_rr2buffer_wire_compress(buffer,
- ldns_rr_list_rr(rr_list, i), LDNS_SECTION_ANSWER, compression_data);
- }
- }
- rr_list = ldns_pkt_authority(packet);
- if (rr_list) {
- for (i = 0; i < ldns_rr_list_rr_count(rr_list); i++) {
- (void) ldns_rr2buffer_wire_compress(buffer,
- ldns_rr_list_rr(rr_list, i), LDNS_SECTION_AUTHORITY, compression_data);
- }
- }
- rr_list = ldns_pkt_additional(packet);
- if (rr_list) {
- for (i = 0; i < ldns_rr_list_rr_count(rr_list); i++) {
- (void) ldns_rr2buffer_wire_compress(buffer,
- ldns_rr_list_rr(rr_list, i), LDNS_SECTION_ADDITIONAL, compression_data);
- }
- }
-
- /* add EDNS to additional if it is needed */
- if (ldns_pkt_edns(packet)) {
- edns_rr = ldns_rr_new();
- if(!edns_rr) return LDNS_STATUS_MEM_ERR;
- ldns_rr_set_owner(edns_rr,
- ldns_rdf_new_frm_str(LDNS_RDF_TYPE_DNAME, "."));
- ldns_rr_set_type(edns_rr, LDNS_RR_TYPE_OPT);
- ldns_rr_set_class(edns_rr, ldns_pkt_edns_udp_size(packet));
- edata[0] = ldns_pkt_edns_extended_rcode(packet);
- edata[1] = ldns_pkt_edns_version(packet);
- ldns_write_uint16(&edata[2], ldns_pkt_edns_z(packet));
- ldns_rr_set_ttl(edns_rr, ldns_read_uint32(edata));
- /* don't forget to add the edns rdata (if any) */
- if (packet->_edns_data)
- ldns_rr_push_rdf (edns_rr, packet->_edns_data);
- (void)ldns_rr2buffer_wire_compress(buffer, edns_rr, LDNS_SECTION_ADDITIONAL, compression_data);
- /* take the edns rdata back out of the rr before we free rr */
- if (packet->_edns_data)
- (void)ldns_rr_pop_rdf (edns_rr);
- ldns_rr_free(edns_rr);
- }
-
- /* add TSIG to additional if it is there */
- if (ldns_pkt_tsig(packet)) {
- (void) ldns_rr2buffer_wire_compress(buffer,
- ldns_pkt_tsig(packet), LDNS_SECTION_ADDITIONAL, compression_data);
- }
-
- ldns_traverse_postorder(compression_data,compression_node_free,NULL);
- ldns_rbtree_free(compression_data);
-
- return LDNS_STATUS_OK;
-}
-
-ldns_status
-ldns_rdf2wire(uint8_t **dest, const ldns_rdf *rdf, size_t *result_size)
-{
- ldns_buffer *buffer = ldns_buffer_new(LDNS_MAX_PACKETLEN);
- ldns_status status;
- *result_size = 0;
- *dest = NULL;
- if(!buffer) return LDNS_STATUS_MEM_ERR;
-
- status = ldns_rdf2buffer_wire(buffer, rdf);
- if (status == LDNS_STATUS_OK) {
- *result_size = ldns_buffer_position(buffer);
- *dest = (uint8_t *) ldns_buffer_export(buffer);
- }
- ldns_buffer_free(buffer);
- return status;
-}
-
-ldns_status
-ldns_rr2wire(uint8_t **dest, const ldns_rr *rr, int section, size_t *result_size)
-{
- ldns_buffer *buffer = ldns_buffer_new(LDNS_MAX_PACKETLEN);
- ldns_status status;
- *result_size = 0;
- *dest = NULL;
- if(!buffer) return LDNS_STATUS_MEM_ERR;
-
- status = ldns_rr2buffer_wire(buffer, rr, section);
- if (status == LDNS_STATUS_OK) {
- *result_size = ldns_buffer_position(buffer);
- *dest = (uint8_t *) ldns_buffer_export(buffer);
- }
- ldns_buffer_free(buffer);
- return status;
-}
-
-ldns_status
-ldns_pkt2wire(uint8_t **dest, const ldns_pkt *packet, size_t *result_size)
-{
- ldns_buffer *buffer = ldns_buffer_new(LDNS_MAX_PACKETLEN);
- ldns_status status;
- *result_size = 0;
- *dest = NULL;
- if(!buffer) return LDNS_STATUS_MEM_ERR;
-
- status = ldns_pkt2buffer_wire(buffer, packet);
- if (status == LDNS_STATUS_OK) {
- *result_size = ldns_buffer_position(buffer);
- *dest = (uint8_t *) ldns_buffer_export(buffer);
- }
- ldns_buffer_free(buffer);
- return status;
-}
diff --git a/ldns/install-sh b/ldns/install-sh
deleted file mode 100755
index ec298b5..0000000
--- a/ldns/install-sh
+++ /dev/null
@@ -1,541 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2020-11-14.01; # UTC
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# 'make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.
-
-tab=' '
-nl='
-'
-IFS=" $tab$nl"
-
-# Set DOITPROG to "echo" to test this script.
-
-doit=${DOITPROG-}
-doit_exec=${doit:-exec}
-
-# Put in absolute file names if you don't have them in your path;
-# or use environment vars.
-
-chgrpprog=${CHGRPPROG-chgrp}
-chmodprog=${CHMODPROG-chmod}
-chownprog=${CHOWNPROG-chown}
-cmpprog=${CMPPROG-cmp}
-cpprog=${CPPROG-cp}
-mkdirprog=${MKDIRPROG-mkdir}
-mvprog=${MVPROG-mv}
-rmprog=${RMPROG-rm}
-stripprog=${STRIPPROG-strip}
-
-posix_mkdir=
-
-# Desired mode of installed file.
-mode=0755
-
-# Create dirs (including intermediate dirs) using mode 755.
-# This is like GNU 'install' as of coreutils 8.32 (2020).
-mkdir_umask=22
-
-backupsuffix=
-chgrpcmd=
-chmodcmd=$chmodprog
-chowncmd=
-mvcmd=$mvprog
-rmcmd="$rmprog -f"
-stripcmd=
-
-src=
-dst=
-dir_arg=
-dst_arg=
-
-copy_on_change=false
-is_target_a_directory=possibly
-
-usage="\
-Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
- or: $0 [OPTION]... SRCFILES... DIRECTORY
- or: $0 [OPTION]... -t DIRECTORY SRCFILES...
- or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
- --help display this help and exit.
- --version display version info and exit.
-
- -c (ignored)
- -C install only if different (preserve data modification time)
- -d create directories instead of installing files.
- -g GROUP $chgrpprog installed files to GROUP.
- -m MODE $chmodprog installed files to MODE.
- -o USER $chownprog installed files to USER.
- -p pass -p to $cpprog.
- -s $stripprog installed files.
- -S SUFFIX attempt to back up existing files, with suffix SUFFIX.
- -t DIRECTORY install into DIRECTORY.
- -T report an error if DSTFILE is a directory.
-
-Environment variables override the default commands:
- CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
- RMPROG STRIPPROG
-
-By default, rm is invoked with -f; when overridden with RMPROG,
-it's up to you to specify -f if you want it.
-
-If -S is not specified, no backups are attempted.
-
-Email bug reports to bug-automake@gnu.org.
-Automake home page: https://www.gnu.org/software/automake/
-"
-
-while test $# -ne 0; do
- case $1 in
- -c) ;;
-
- -C) copy_on_change=true;;
-
- -d) dir_arg=true;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift;;
-
- --help) echo "$usage"; exit $?;;
-
- -m) mode=$2
- case $mode in
- *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
- echo "$0: invalid mode: $mode" >&2
- exit 1;;
- esac
- shift;;
-
- -o) chowncmd="$chownprog $2"
- shift;;
-
- -p) cpprog="$cpprog -p";;
-
- -s) stripcmd=$stripprog;;
-
- -S) backupsuffix="$2"
- shift;;
-
- -t)
- is_target_a_directory=always
- dst_arg=$2
- # Protect names problematic for 'test' and other utilities.
- case $dst_arg in
- -* | [=\(\)!]) dst_arg=./$dst_arg;;
- esac
- shift;;
-
- -T) is_target_a_directory=never;;
-
- --version) echo "$0 $scriptversion"; exit $?;;
-
- --) shift
- break;;
-
- -*) echo "$0: invalid option: $1" >&2
- exit 1;;
-
- *) break;;
- esac
- shift
-done
-
-# We allow the use of options -d and -T together, by making -d
-# take the precedence; this is for compatibility with GNU install.
-
-if test -n "$dir_arg"; then
- if test -n "$dst_arg"; then
- echo "$0: target directory not allowed when installing a directory." >&2
- exit 1
- fi
-fi
-
-if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
- # When -d is used, all remaining arguments are directories to create.
- # When -t is used, the destination is already specified.
- # Otherwise, the last argument is the destination. Remove it from $@.
- for arg
- do
- if test -n "$dst_arg"; then
- # $@ is not empty: it contains at least $arg.
- set fnord "$@" "$dst_arg"
- shift # fnord
- fi
- shift # arg
- dst_arg=$arg
- # Protect names problematic for 'test' and other utilities.
- case $dst_arg in
- -* | [=\(\)!]) dst_arg=./$dst_arg;;
- esac
- done
-fi
-
-if test $# -eq 0; then
- if test -z "$dir_arg"; then
- echo "$0: no input file specified." >&2
- exit 1
- fi
- # It's OK to call 'install-sh -d' without argument.
- # This can happen when creating conditional directories.
- exit 0
-fi
-
-if test -z "$dir_arg"; then
- if test $# -gt 1 || test "$is_target_a_directory" = always; then
- if test ! -d "$dst_arg"; then
- echo "$0: $dst_arg: Is not a directory." >&2
- exit 1
- fi
- fi
-fi
-
-if test -z "$dir_arg"; then
- do_exit='(exit $ret); exit $ret'
- trap "ret=129; $do_exit" 1
- trap "ret=130; $do_exit" 2
- trap "ret=141; $do_exit" 13
- trap "ret=143; $do_exit" 15
-
- # Set umask so as not to create temps with too-generous modes.
- # However, 'strip' requires both read and write access to temps.
- case $mode in
- # Optimize common cases.
- *644) cp_umask=133;;
- *755) cp_umask=22;;
-
- *[0-7])
- if test -z "$stripcmd"; then
- u_plus_rw=
- else
- u_plus_rw='% 200'
- fi
- cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
- *)
- if test -z "$stripcmd"; then
- u_plus_rw=
- else
- u_plus_rw=,u+rw
- fi
- cp_umask=$mode$u_plus_rw;;
- esac
-fi
-
-for src
-do
- # Protect names problematic for 'test' and other utilities.
- case $src in
- -* | [=\(\)!]) src=./$src;;
- esac
-
- if test -n "$dir_arg"; then
- dst=$src
- dstdir=$dst
- test -d "$dstdir"
- dstdir_status=$?
- # Don't chown directories that already exist.
- if test $dstdir_status = 0; then
- chowncmd=""
- fi
- else
-
- # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
- # might cause directories to be created, which would be especially bad
- # if $src (and thus $dsttmp) contains '*'.
- if test ! -f "$src" && test ! -d "$src"; then
- echo "$0: $src does not exist." >&2
- exit 1
- fi
-
- if test -z "$dst_arg"; then
- echo "$0: no destination specified." >&2
- exit 1
- fi
- dst=$dst_arg
-
- # If destination is a directory, append the input filename.
- if test -d "$dst"; then
- if test "$is_target_a_directory" = never; then
- echo "$0: $dst_arg: Is a directory" >&2
- exit 1
- fi
- dstdir=$dst
- dstbase=`basename "$src"`
- case $dst in
- */) dst=$dst$dstbase;;
- *) dst=$dst/$dstbase;;
- esac
- dstdir_status=0
- else
- dstdir=`dirname "$dst"`
- test -d "$dstdir"
- dstdir_status=$?
- fi
- fi
-
- case $dstdir in
- */) dstdirslash=$dstdir;;
- *) dstdirslash=$dstdir/;;
- esac
-
- obsolete_mkdir_used=false
-
- if test $dstdir_status != 0; then
- case $posix_mkdir in
- '')
- # With -d, create the new directory with the user-specified mode.
- # Otherwise, rely on $mkdir_umask.
- if test -n "$dir_arg"; then
- mkdir_mode=-m$mode
- else
- mkdir_mode=
- fi
-
- posix_mkdir=false
- # The $RANDOM variable is not portable (e.g., dash). Use it
- # here however when possible just to lower collision chance.
- tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-
- trap '
- ret=$?
- rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
- exit $ret
- ' 0
-
- # Because "mkdir -p" follows existing symlinks and we likely work
- # directly in world-writeable /tmp, make sure that the '$tmpdir'
- # directory is successfully created first before we actually test
- # 'mkdir -p'.
- if (umask $mkdir_umask &&
- $mkdirprog $mkdir_mode "$tmpdir" &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
- then
- if test -z "$dir_arg" || {
- # Check for POSIX incompatibilities with -m.
- # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
- # other-writable bit of parent directory when it shouldn't.
- # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
- test_tmpdir="$tmpdir/a"
- ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
- case $ls_ld_tmpdir in
- d????-?r-*) different_mode=700;;
- d????-?--*) different_mode=755;;
- *) false;;
- esac &&
- $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
- ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
- test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
- }
- }
- then posix_mkdir=:
- fi
- rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
- else
- # Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
- fi
- trap '' 0;;
- esac
-
- if
- $posix_mkdir && (
- umask $mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
- )
- then :
- else
-
- # mkdir does not conform to POSIX,
- # or it failed possibly due to a race condition. Create the
- # directory the slow way, step by step, checking for races as we go.
-
- case $dstdir in
- /*) prefix='/';;
- [-=\(\)!]*) prefix='./';;
- *) prefix='';;
- esac
-
- oIFS=$IFS
- IFS=/
- set -f
- set fnord $dstdir
- shift
- set +f
- IFS=$oIFS
-
- prefixes=
-
- for d
- do
- test X"$d" = X && continue
-
- prefix=$prefix$d
- if test -d "$prefix"; then
- prefixes=
- else
- if $posix_mkdir; then
- (umask $mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
- # Don't fail if two instances are running concurrently.
- test -d "$prefix" || exit 1
- else
- case $prefix in
- *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
- *) qprefix=$prefix;;
- esac
- prefixes="$prefixes '$qprefix'"
- fi
- fi
- prefix=$prefix/
- done
-
- if test -n "$prefixes"; then
- # Don't fail if two instances are running concurrently.
- (umask $mkdir_umask &&
- eval "\$doit_exec \$mkdirprog $prefixes") ||
- test -d "$dstdir" || exit 1
- obsolete_mkdir_used=true
- fi
- fi
- fi
-
- if test -n "$dir_arg"; then
- { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
- { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
- test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
- else
-
- # Make a couple of temp file names in the proper directory.
- dsttmp=${dstdirslash}_inst.$$_
- rmtmp=${dstdirslash}_rm.$$_
-
- # Trap to clean up those temp files at exit.
- trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-
- # Copy the file name to the temp name.
- (umask $cp_umask &&
- { test -z "$stripcmd" || {
- # Create $dsttmp read-write so that cp doesn't create it read-only,
- # which would cause strip to fail.
- if test -z "$doit"; then
- : >"$dsttmp" # No need to fork-exec 'touch'.
- else
- $doit touch "$dsttmp"
- fi
- }
- } &&
- $doit_exec $cpprog "$src" "$dsttmp") &&
-
- # and set any options; do chmod last to preserve setuid bits.
- #
- # If any of these fail, we abort the whole thing. If we want to
- # ignore errors from any of these, just make sure not to ignore
- # errors from the above "$doit $cpprog $src $dsttmp" command.
- #
- { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
- { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
- { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
- { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
-
- # If -C, don't bother to copy if it wouldn't change the file.
- if $copy_on_change &&
- old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
- new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
- set -f &&
- set X $old && old=:$2:$4:$5:$6 &&
- set X $new && new=:$2:$4:$5:$6 &&
- set +f &&
- test "$old" = "$new" &&
- $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
- then
- rm -f "$dsttmp"
- else
- # If $backupsuffix is set, and the file being installed
- # already exists, attempt a backup. Don't worry if it fails,
- # e.g., if mv doesn't support -f.
- if test -n "$backupsuffix" && test -f "$dst"; then
- $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
- fi
-
- # Rename the file to the real destination.
- $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
-
- # The rename failed, perhaps because mv can't rename something else
- # to itself, or perhaps because mv is so ancient that it does not
- # support -f.
- {
- # Now remove or move aside any old file at destination location.
- # We try this two ways since rm can't unlink itself on some
- # systems and the destination file might be busy for other
- # reasons. In this case, the final cleanup might fail but the new
- # file should still install successfully.
- {
- test ! -f "$dst" ||
- $doit $rmcmd "$dst" 2>/dev/null ||
- { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
- { $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
- } ||
- { echo "$0: cannot unlink or rename $dst" >&2
- (exit 1); exit 1
- }
- } &&
-
- # Now rename the file to the real destination.
- $doit $mvcmd "$dsttmp" "$dst"
- }
- fi || exit 1
-
- trap '' 0
- fi
-done
-
-# Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC0"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/ldns/keys.c b/ldns/keys.c
deleted file mode 100644
index 016f973..0000000
--- a/ldns/keys.c
+++ /dev/null
@@ -1,2204 +0,0 @@
-/*
- * keys.c handle private keys for use in DNSSEC
- *
- * This module should hide some of the openSSL complexities
- * and give a general interface for private keys and hmac
- * handling
- *
- * (c) NLnet Labs, 2004-2006
- *
- * See the file LICENSE for the license
- */
-
-#include <ldns/config.h>
-
-#include <ldns/ldns.h>
-
-#ifdef HAVE_SSL
-#include <openssl/ssl.h>
-#include <openssl/rand.h>
-#include <openssl/bn.h>
-#include <openssl/rsa.h>
-#ifdef USE_DSA
-#include <openssl/dsa.h>
-#endif
-#ifndef OPENSSL_NO_ENGINE
-#include <openssl/engine.h>
-#endif
-#endif /* HAVE_SSL */
-
-ldns_lookup_table ldns_signing_algorithms[] = {
- { LDNS_SIGN_RSAMD5, "RSAMD5" },
- { LDNS_SIGN_RSASHA1, "RSASHA1" },
- { LDNS_SIGN_RSASHA1_NSEC3, "RSASHA1-NSEC3-SHA1" },
-#ifdef USE_SHA2
- { LDNS_SIGN_RSASHA256, "RSASHA256" },
- { LDNS_SIGN_RSASHA512, "RSASHA512" },
-#endif
-#ifdef USE_GOST
- { LDNS_SIGN_ECC_GOST, "ECC-GOST" },
-#endif
-#ifdef USE_ECDSA
- { LDNS_SIGN_ECDSAP256SHA256, "ECDSAP256SHA256" },
- { LDNS_SIGN_ECDSAP384SHA384, "ECDSAP384SHA384" },
-#endif
-#ifdef USE_ED25519
- { LDNS_SIGN_ED25519, "ED25519" },
-#endif
-#ifdef USE_ED448
- { LDNS_SIGN_ED448, "ED448" },
-#endif
-#ifdef USE_DSA
- { LDNS_SIGN_DSA, "DSA" },
- { LDNS_SIGN_DSA_NSEC3, "DSA-NSEC3-SHA1" },
-#endif
- { LDNS_SIGN_HMACMD5, "hmac-md5.sig-alg.reg.int" },
- { LDNS_SIGN_HMACSHA1, "hmac-sha1" },
- { LDNS_SIGN_HMACSHA256, "hmac-sha256" },
- { LDNS_SIGN_HMACSHA224, "hmac-sha224" },
- { LDNS_SIGN_HMACSHA384, "hmac-sha384" },
- { LDNS_SIGN_HMACSHA512, "hmac-sha512" },
- { 0, NULL }
-};
-
-ldns_key_list *
-ldns_key_list_new(void)
-{
- ldns_key_list *key_list = LDNS_MALLOC(ldns_key_list);
- if (!key_list) {
- return NULL;
- } else {
- key_list->_key_count = 0;
- key_list->_keys = NULL;
- return key_list;
- }
-}
-
-ldns_key *
-ldns_key_new(void)
-{
- ldns_key *newkey;
-
- newkey = LDNS_MALLOC(ldns_key);
- if (!newkey) {
- return NULL;
- } else {
- /* some defaults - not sure wether to do this */
- ldns_key_set_use(newkey, true);
- ldns_key_set_flags(newkey, LDNS_KEY_ZONE_KEY);
- ldns_key_set_origttl(newkey, 0);
- ldns_key_set_keytag(newkey, 0);
- ldns_key_set_inception(newkey, 0);
- ldns_key_set_expiration(newkey, 0);
- ldns_key_set_pubkey_owner(newkey, NULL);
-#ifdef HAVE_SSL
- ldns_key_set_evp_key(newkey, NULL);
-#endif /* HAVE_SSL */
- ldns_key_set_hmac_key(newkey, NULL);
- ldns_key_set_external_key(newkey, NULL);
- return newkey;
- }
-}
-
-ldns_status
-ldns_key_new_frm_fp(ldns_key **k, FILE *fp)
-{
- return ldns_key_new_frm_fp_l(k, fp, NULL);
-}
-
-#if defined(HAVE_SSL) && !defined(OPENSSL_NO_ENGINE)
-ldns_status
-ldns_key_new_frm_engine(ldns_key **key, ENGINE *e, char *key_id, ldns_algorithm alg)
-{
- ldns_key *k;
-
- k = ldns_key_new();
- if(!k) return LDNS_STATUS_MEM_ERR;
-#ifndef S_SPLINT_S
- k->_key.key = ENGINE_load_private_key(e, key_id, UI_OpenSSL(), NULL);
- if(!k->_key.key) {
- ldns_key_free(k);
- return LDNS_STATUS_ERR;
- }
- ldns_key_set_algorithm(k, (ldns_signing_algorithm) alg);
- if (!k->_key.key) {
- ldns_key_free(k);
- return LDNS_STATUS_ENGINE_KEY_NOT_LOADED;
- }
-#endif /* splint */
- *key = k;
- return LDNS_STATUS_OK;
-}
-#endif
-
-#ifdef USE_GOST
-/** store GOST engine reference loaded into OpenSSL library */
-ENGINE* ldns_gost_engine = NULL;
-
-int
-ldns_key_EVP_load_gost_id(void)
-{
- static int gost_id = 0;
- const EVP_PKEY_ASN1_METHOD* meth;
- ENGINE* e;
-
- if(gost_id) return gost_id;
-
- /* see if configuration loaded gost implementation from other engine*/
- meth = EVP_PKEY_asn1_find_str(NULL, "gost2001", -1);
- if(meth) {
- EVP_PKEY_asn1_get0_info(&gost_id, NULL, NULL, NULL, NULL, meth);
- return gost_id;
- }
-
- /* see if engine can be loaded already */
- e = ENGINE_by_id("gost");
- if(!e) {
- /* load it ourself, in case statically linked */
- ENGINE_load_builtin_engines();
- ENGINE_load_dynamic();
- e = ENGINE_by_id("gost");
- }
- if(!e) {
- /* no gost engine in openssl */
- return 0;
- }
- if(!ENGINE_set_default(e, ENGINE_METHOD_ALL)) {
- ENGINE_finish(e);
- ENGINE_free(e);
- return 0;
- }
-
- meth = EVP_PKEY_asn1_find_str(&e, "gost2001", -1);
- if(!meth) {
- /* algo not found */
- ENGINE_finish(e);
- ENGINE_free(e);
- return 0;
- }
- /* Note: do not ENGINE_finish and ENGINE_free the acquired engine
- * on some platforms this frees up the meth and unloads gost stuff */
- ldns_gost_engine = e;
-
- EVP_PKEY_asn1_get0_info(&gost_id, NULL, NULL, NULL, NULL, meth);
- return gost_id;
-}
-
-void ldns_key_EVP_unload_gost(void)
-{
- if(ldns_gost_engine) {
- ENGINE_finish(ldns_gost_engine);
- ENGINE_free(ldns_gost_engine);
- ldns_gost_engine = NULL;
- }
-}
-
-/** read GOST private key */
-static EVP_PKEY*
-ldns_key_new_frm_fp_gost_l(FILE* fp, int* line_nr)
-{
- char token[16384];
- const unsigned char* pp;
- int gost_id;
- EVP_PKEY* pkey;
- ldns_rdf* b64rdf = NULL;
-
- gost_id = ldns_key_EVP_load_gost_id();
- if(!gost_id)
- return NULL;
-
- if (ldns_fget_keyword_data_l(fp, "GostAsn1", ": ", token, "\n",
- sizeof(token), line_nr) == -1)
- return NULL;
- while(strlen(token) < 96) {
- /* read more b64 from the file, b64 split on multiple lines */
- if(ldns_fget_token_l(fp, token+strlen(token), "\n",
- sizeof(token)-strlen(token), line_nr) == -1)
- return NULL;
- }
- if(ldns_str2rdf_b64(&b64rdf, token) != LDNS_STATUS_OK)
- return NULL;
- pp = (unsigned char*)ldns_rdf_data(b64rdf);
- pkey = d2i_PrivateKey(gost_id, NULL, &pp, (int)ldns_rdf_size(b64rdf));
- ldns_rdf_deep_free(b64rdf);
- return pkey;
-}
-#endif
-
-#ifdef USE_ECDSA
-/** calculate public key from private key */
-static int
-ldns_EC_KEY_calc_public(EC_KEY* ec)
-{
- EC_POINT* pub_key;
- const EC_GROUP* group;
- group = EC_KEY_get0_group(ec);
- pub_key = EC_POINT_new(group);
- if(!pub_key) return 0;
- if(!EC_POINT_copy(pub_key, EC_GROUP_get0_generator(group))) {
- EC_POINT_free(pub_key);
- return 0;
- }
- if(!EC_POINT_mul(group, pub_key, EC_KEY_get0_private_key(ec),
- NULL, NULL, NULL)) {
- EC_POINT_free(pub_key);
- return 0;
- }
- if(EC_KEY_set_public_key(ec, pub_key) == 0) {
- EC_POINT_free(pub_key);
- return 0;
- }
- EC_POINT_free(pub_key);
- return 1;
-}
-
-/** read ECDSA private key */
-static EVP_PKEY*
-ldns_key_new_frm_fp_ecdsa_l(FILE* fp, ldns_algorithm alg, int* line_nr)
-{
- char token[16384];
- ldns_rdf* b64rdf = NULL;
- unsigned char* pp;
- BIGNUM* bn;
- EVP_PKEY* evp_key;
- EC_KEY* ec;
- if (ldns_fget_keyword_data_l(fp, "PrivateKey", ": ", token, "\n",
- sizeof(token), line_nr) == -1)
- return NULL;
- if(ldns_str2rdf_b64(&b64rdf, token) != LDNS_STATUS_OK)
- return NULL;
- pp = (unsigned char*)ldns_rdf_data(b64rdf);
-
- if(alg == LDNS_ECDSAP256SHA256)
- ec = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
- else if(alg == LDNS_ECDSAP384SHA384)
- ec = EC_KEY_new_by_curve_name(NID_secp384r1);
- else ec = NULL;
- if(!ec) {
- ldns_rdf_deep_free(b64rdf);
- return NULL;
- }
- bn = BN_bin2bn(pp, (int)ldns_rdf_size(b64rdf), NULL);
- ldns_rdf_deep_free(b64rdf);
- if(!bn) {
- EC_KEY_free(ec);
- return NULL;
- }
- EC_KEY_set_private_key(ec, bn);
- BN_free(bn);
- if(!ldns_EC_KEY_calc_public(ec)) {
- EC_KEY_free(ec);
- return NULL;
- }
-
- evp_key = EVP_PKEY_new();
- if(!evp_key) {
- EC_KEY_free(ec);
- return NULL;
- }
- if (!EVP_PKEY_assign_EC_KEY(evp_key, ec)) {
- EVP_PKEY_free(evp_key);
- EC_KEY_free(ec);
- return NULL;
- }
- return evp_key;
-}
-#endif
-
-#ifdef USE_ED25519
-/** turn private key buffer into EC_KEY structure */
-static EVP_PKEY*
-ldns_ed25519_priv_raw(uint8_t* pkey, int plen)
-{
- const unsigned char* pp;
- uint8_t buf[256];
- int buflen = 0;
- uint8_t pre[] = {0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06,
- 0x03, 0x2b, 0x65, 0x70, 0x04, 0x22, 0x04, 0x20};
- int pre_len = 16;
- /* ASN looks like this for ED25519 public key
- * 302a300506032b6570032100 <32byteskey>
- * for ED25519 private key
- * 302e020100300506032b657004220420 <32bytes>
- *
- * for X25519 this was
- * 30320201010420 <32byteskey>
- * andparameters a00b06092b06010401da470f01
- * (noparameters, preamble is 30250201010420).
- * the key is reversed (little endian).
- */
- buflen = pre_len + plen;
- if((size_t)buflen > sizeof(buf))
- return NULL;
- memmove(buf, pre, pre_len);
- memmove(buf+pre_len, pkey, plen);
- /* reverse the pkey into the buf - key is not reversed it seems */
- /* for(i=0; i<plen; i++)
- buf[pre_len+i] = pkey[plen-1-i]; */
- pp = buf;
- return d2i_PrivateKey(NID_ED25519, NULL, &pp, buflen);
-}
-
-/** read ED25519 private key */
-static EVP_PKEY*
-ldns_key_new_frm_fp_ed25519_l(FILE* fp, int* line_nr)
-{
- char token[16384];
- ldns_rdf* b64rdf = NULL;
- EVP_PKEY* evp_key;
- if (ldns_fget_keyword_data_l(fp, "PrivateKey", ": ", token, "\n",
- sizeof(token), line_nr) == -1)
- return NULL;
- if(ldns_str2rdf_b64(&b64rdf, token) != LDNS_STATUS_OK)
- return NULL;
-
- /* we use d2i_ECPrivateKey because it calculates the public key
- * from the private part, which others, EC_KEY_set_private_key,
- * and o2i methods, do not do */
- /* for that the private key has to be encoded in ASN1 notation
- * with a ED25519 prefix on it */
-
- evp_key = ldns_ed25519_priv_raw(ldns_rdf_data(b64rdf),
- (int)ldns_rdf_size(b64rdf));
- ldns_rdf_deep_free(b64rdf);
- return evp_key;
-}
-#endif
-
-#ifdef USE_ED448
-/** turn private key buffer into EC_KEY structure */
-static EVP_PKEY*
-ldns_ed448_priv_raw(uint8_t* pkey, int plen)
-{
- const unsigned char* pp;
- uint8_t buf[256];
- int buflen = 0;
- uint8_t pre[] = {0x30, 0x47, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x71, 0x04, 0x3b, 0x04, 0x39};
- int pre_len = 16;
- /* ASN looks like this for ED448
- * 3047020100300506032b6571043b0439 <57bytekey>
- * the key is reversed (little endian).
- */
- buflen = pre_len + plen;
- if((size_t)buflen > sizeof(buf))
- return NULL;
- memmove(buf, pre, pre_len);
- memmove(buf+pre_len, pkey, plen);
- /* reverse the pkey into the buf - key is not reversed it seems */
- /* for(i=0; i<plen; i++)
- buf[pre_len+i] = pkey[plen-1-i]; */
- pp = buf;
- return d2i_PrivateKey(NID_ED448, NULL, &pp, buflen);
-}
-
-/** read ED448 private key */
-static EVP_PKEY*
-ldns_key_new_frm_fp_ed448_l(FILE* fp, int* line_nr)
-{
- char token[16384];
- ldns_rdf* b64rdf = NULL;
- EVP_PKEY* evp_key;
- if (ldns_fget_keyword_data_l(fp, "PrivateKey", ": ", token, "\n",
- sizeof(token), line_nr) == -1)
- return NULL;
- if(ldns_str2rdf_b64(&b64rdf, token) != LDNS_STATUS_OK)
- return NULL;
-
- /* convert private key into ASN notation and then convert that */
- evp_key = ldns_ed448_priv_raw(ldns_rdf_data(b64rdf),
- (int)ldns_rdf_size(b64rdf));
- ldns_rdf_deep_free(b64rdf);
- return evp_key;
-}
-#endif
-
-ldns_status
-ldns_key_new_frm_fp_l(ldns_key **key, FILE *fp, int *line_nr)
-{
- ldns_key *k;
- char *d;
- ldns_signing_algorithm alg;
- ldns_rr *key_rr;
-#ifdef HAVE_SSL
- RSA *rsa;
-#ifdef USE_DSA
- DSA *dsa;
-#endif
- unsigned char *hmac;
- size_t hmac_size;
-#endif /* HAVE_SSL */
-
- k = ldns_key_new();
-
- d = LDNS_XMALLOC(char, LDNS_MAX_LINELEN);
- if (!k || !d) {
- ldns_key_free(k);
- LDNS_FREE(d);
- return LDNS_STATUS_MEM_ERR;
- }
-
- alg = 0;
-
- /* the file is highly structured. Do this in sequence */
- /* RSA:
- * Private-key-format: v1.x.
- * Algorithm: 1 (RSA)
-
- */
- /* get the key format version number */
- if (ldns_fget_keyword_data_l(fp, "Private-key-format", ": ", d, "\n",
- LDNS_MAX_LINELEN, line_nr) == -1) {
- /* no version information */
- ldns_key_free(k);
- LDNS_FREE(d);
- return LDNS_STATUS_SYNTAX_ERR;
- }
- if (strncmp(d, "v1.", 3) != 0) {
- ldns_key_free(k);
- LDNS_FREE(d);
- return LDNS_STATUS_SYNTAX_VERSION_ERR;
- }
-
- /* get the algorithm type, our file function strip ( ) so there are
- * not in the return string! */
- if (ldns_fget_keyword_data_l(fp, "Algorithm", ": ", d, "\n",
- LDNS_MAX_LINELEN, line_nr) == -1) {
- /* no alg information */
- ldns_key_free(k);
- LDNS_FREE(d);
- return LDNS_STATUS_SYNTAX_ALG_ERR;
- }
-
- if (strncmp(d, "1 RSA", 2) == 0) {
- alg = LDNS_SIGN_RSAMD5;
- }
- if (strncmp(d, "2 DH", 2) == 0) {
- alg = (ldns_signing_algorithm)LDNS_DH;
- }
- if (strncmp(d, "3 DSA", 2) == 0) {
-#ifdef USE_DSA
- alg = LDNS_SIGN_DSA;
-#else
-# ifdef STDERR_MSGS
- fprintf(stderr, "Warning: DSA not compiled into this ");
- fprintf(stderr, "version of ldns\n");
-# endif
-#endif
- }
- if (strncmp(d, "4 ECC", 2) == 0) {
- alg = (ldns_signing_algorithm)LDNS_ECC;
- }
- if (strncmp(d, "5 RSASHA1", 2) == 0) {
- alg = LDNS_SIGN_RSASHA1;
- }
- if (strncmp(d, "6 DSA", 2) == 0) {
-#ifdef USE_DSA
- alg = LDNS_SIGN_DSA_NSEC3;
-#else
-# ifdef STDERR_MSGS
- fprintf(stderr, "Warning: DSA not compiled into this ");
- fprintf(stderr, "version of ldns\n");
-# endif
-#endif
- }
- if (strncmp(d, "7 RSASHA1", 2) == 0) {
- alg = LDNS_SIGN_RSASHA1_NSEC3;
- }
-
- if (strncmp(d, "8 RSASHA256", 2) == 0) {
-#ifdef USE_SHA2
- alg = LDNS_SIGN_RSASHA256;
-#else
-# ifdef STDERR_MSGS
- fprintf(stderr, "Warning: SHA256 not compiled into this ");
- fprintf(stderr, "version of ldns\n");
-# endif
-#endif
- }
- if (strncmp(d, "10 RSASHA512", 3) == 0) {
-#ifdef USE_SHA2
- alg = LDNS_SIGN_RSASHA512;
-#else
-# ifdef STDERR_MSGS
- fprintf(stderr, "Warning: SHA512 not compiled into this ");
- fprintf(stderr, "version of ldns\n");
-# endif
-#endif
- }
- if (strncmp(d, "12 ECC-GOST", 3) == 0) {
-#ifdef USE_GOST
- alg = LDNS_SIGN_ECC_GOST;
-#else
-# ifdef STDERR_MSGS
- fprintf(stderr, "Warning: ECC-GOST not compiled into this ");
- fprintf(stderr, "version of ldns, use --enable-gost\n");
-# endif
-#endif
- }
- if (strncmp(d, "13 ECDSAP256SHA256", 3) == 0) {
-#ifdef USE_ECDSA
- alg = LDNS_SIGN_ECDSAP256SHA256;
-#else
-# ifdef STDERR_MSGS
- fprintf(stderr, "Warning: ECDSA not compiled into this ");
- fprintf(stderr, "version of ldns, use --enable-ecdsa\n");
-# endif
-#endif
- }
- if (strncmp(d, "14 ECDSAP384SHA384", 3) == 0) {
-#ifdef USE_ECDSA
- alg = LDNS_SIGN_ECDSAP384SHA384;
-#else
-# ifdef STDERR_MSGS
- fprintf(stderr, "Warning: ECDSA not compiled into this ");
- fprintf(stderr, "version of ldns, use --enable-ecdsa\n");
-# endif
-#endif
- }
- if (strncmp(d, "15 ED25519", 3) == 0) {
-#ifdef USE_ED25519
- alg = LDNS_SIGN_ED25519;
-#else
-# ifdef STDERR_MSGS
- fprintf(stderr, "Warning: ED25519 not compiled into this ");
- fprintf(stderr, "version of ldns, use --enable-ed25519\n");
-# endif
-#endif
- }
- if (strncmp(d, "16 ED448", 3) == 0) {
-#ifdef USE_ED448
- alg = LDNS_SIGN_ED448;
-#else
-# ifdef STDERR_MSGS
- fprintf(stderr, "Warning: ED448 not compiled into this ");
- fprintf(stderr, "version of ldns, use --enable-ed448\n");
-# endif
-#endif
- }
- if (strncmp(d, "157 HMAC-MD5", 4) == 0) {
- alg = LDNS_SIGN_HMACMD5;
- }
- if (strncmp(d, "158 HMAC-SHA1", 4) == 0) {
- alg = LDNS_SIGN_HMACSHA1;
- }
- if (strncmp(d, "159 HMAC-SHA256", 4) == 0) {
- alg = LDNS_SIGN_HMACSHA256;
- }
- /* For compatibility with dnssec-keygen */
- if (strncmp(d, "161 ", 4) == 0) {
- alg = LDNS_SIGN_HMACSHA1;
- }
- if (strncmp(d, "162 HMAC-SHA224", 4) == 0) {
- alg = LDNS_SIGN_HMACSHA224;
- }
- /* For compatibility with dnssec-keygen */
- if (strncmp(d, "163 ", 4) == 0) {
- alg = LDNS_SIGN_HMACSHA256;
- }
- if (strncmp(d, "164 HMAC-SHA384", 4) == 0) {
- alg = LDNS_SIGN_HMACSHA384;
- }
- if (strncmp(d, "165 HMAC-SHA512", 4) == 0) {
- alg = LDNS_SIGN_HMACSHA512;
- }
- LDNS_FREE(d);
-
- switch(alg) {
- case LDNS_SIGN_RSAMD5:
- case LDNS_SIGN_RSASHA1:
- case LDNS_SIGN_RSASHA1_NSEC3:
-#ifdef USE_SHA2
- case LDNS_SIGN_RSASHA256:
- case LDNS_SIGN_RSASHA512:
-#endif
- ldns_key_set_algorithm(k, alg);
-#ifdef HAVE_SSL
- rsa = ldns_key_new_frm_fp_rsa_l(fp, line_nr);
- if (!rsa) {
- ldns_key_free(k);
- return LDNS_STATUS_ERR;
- }
- ldns_key_assign_rsa_key(k, rsa);
-#endif /* HAVE_SSL */
- break;
-#ifdef USE_DSA
- case LDNS_SIGN_DSA:
- case LDNS_SIGN_DSA_NSEC3:
- ldns_key_set_algorithm(k, alg);
-#ifdef HAVE_SSL
- dsa = ldns_key_new_frm_fp_dsa_l(fp, line_nr);
- if (!dsa) {
- ldns_key_free(k);
- return LDNS_STATUS_ERR;
- }
- ldns_key_assign_dsa_key(k, dsa);
-#endif /* HAVE_SSL */
- break;
-#endif /* USE_DSA */
- case LDNS_SIGN_HMACMD5:
- case LDNS_SIGN_HMACSHA1:
- case LDNS_SIGN_HMACSHA224:
- case LDNS_SIGN_HMACSHA256:
- case LDNS_SIGN_HMACSHA384:
- case LDNS_SIGN_HMACSHA512:
- ldns_key_set_algorithm(k, alg);
-#ifdef HAVE_SSL
- hmac = ldns_key_new_frm_fp_hmac_l(fp, line_nr, &hmac_size);
- if (!hmac) {
- ldns_key_free(k);
- return LDNS_STATUS_ERR;
- }
- ldns_key_set_hmac_size(k, hmac_size);
- ldns_key_set_hmac_key(k, hmac);
-#endif /* HAVE_SSL */
- break;
- case LDNS_SIGN_ECC_GOST:
- ldns_key_set_algorithm(k, alg);
-#if defined(HAVE_SSL) && defined(USE_GOST)
- if(!ldns_key_EVP_load_gost_id()) {
- ldns_key_free(k);
- return LDNS_STATUS_CRYPTO_ALGO_NOT_IMPL;
- }
- ldns_key_set_evp_key(k,
- ldns_key_new_frm_fp_gost_l(fp, line_nr));
-#ifndef S_SPLINT_S
- if(!k->_key.key) {
- ldns_key_free(k);
- return LDNS_STATUS_ERR;
- }
-#endif /* splint */
-#endif
- break;
-#ifdef USE_ECDSA
- case LDNS_SIGN_ECDSAP256SHA256:
- case LDNS_SIGN_ECDSAP384SHA384:
- ldns_key_set_algorithm(k, alg);
- ldns_key_set_evp_key(k,
- ldns_key_new_frm_fp_ecdsa_l(fp, (ldns_algorithm)alg, line_nr));
-#ifndef S_SPLINT_S
- if(!k->_key.key) {
- ldns_key_free(k);
- return LDNS_STATUS_ERR;
- }
-#endif /* splint */
- break;
-#endif
-#ifdef USE_ED25519
- case LDNS_SIGN_ED25519:
- ldns_key_set_algorithm(k, alg);
- ldns_key_set_evp_key(k,
- ldns_key_new_frm_fp_ed25519_l(fp, line_nr));
-#ifndef S_SPLINT_S
- if(!k->_key.key) {
- ldns_key_free(k);
- return LDNS_STATUS_ERR;
- }
-#endif /* splint */
- break;
-#endif
-#ifdef USE_ED448
- case LDNS_SIGN_ED448:
- ldns_key_set_algorithm(k, alg);
- ldns_key_set_evp_key(k,
- ldns_key_new_frm_fp_ed448_l(fp, line_nr));
-#ifndef S_SPLINT_S
- if(!k->_key.key) {
- ldns_key_free(k);
- return LDNS_STATUS_ERR;
- }
-#endif /* splint */
- break;
-#endif
- default:
- ldns_key_free(k);
- return LDNS_STATUS_SYNTAX_ALG_ERR;
- }
- key_rr = ldns_key2rr(k);
- ldns_key_set_keytag(k, ldns_calc_keytag(key_rr));
- ldns_rr_free(key_rr);
-
- if (key) {
- *key = k;
- return LDNS_STATUS_OK;
- }
- ldns_key_free(k);
- return LDNS_STATUS_ERR;
-}
-
-#ifdef HAVE_SSL
-RSA *
-ldns_key_new_frm_fp_rsa(FILE *f)
-{
- return ldns_key_new_frm_fp_rsa_l(f, NULL);
-}
-
-RSA *
-ldns_key_new_frm_fp_rsa_l(FILE *f, int *line_nr)
-{
- /* we parse
- * Modulus:
- * PublicExponent:
- * PrivateExponent:
- * Prime1:
- * Prime2:
- * Exponent1:
- * Exponent2:
- * Coefficient:
- *
- * man 3 RSA:
- *
- * struct
- * {
- * BIGNUM *n; // public modulus
- * BIGNUM *e; // public exponent
- * BIGNUM *d; // private exponent
- * BIGNUM *p; // secret prime factor
- * BIGNUM *q; // secret prime factor
- * BIGNUM *dmp1; // d mod (p-1)
- * BIGNUM *dmq1; // d mod (q-1)
- * BIGNUM *iqmp; // q^-1 mod p
- * // ...
- *
- */
- char *b;
- RSA *rsa;
- uint8_t *buf;
- int i;
- BIGNUM *n=NULL, *e=NULL, *d=NULL, *p=NULL, *q=NULL,
- *dmp1=NULL, *dmq1=NULL, *iqmp=NULL;
-
- b = LDNS_XMALLOC(char, LDNS_MAX_LINELEN);
- buf = LDNS_XMALLOC(uint8_t, LDNS_MAX_LINELEN);
- rsa = RSA_new();
- if (!b || !rsa || !buf) {
- goto error;
- }
-
- /* I could use functions again, but that seems an overkill,
- * allthough this also looks tedious
- */
-
- /* Modules, rsa->n */
- if (ldns_fget_keyword_data_l(f, "Modulus", ": ", b, "\n", LDNS_MAX_LINELEN, line_nr) == -1) {
- goto error;
- }
- i = ldns_b64_pton((const char*)b, buf, ldns_b64_ntop_calculate_size(strlen(b)));
-#ifndef S_SPLINT_S
- n = BN_bin2bn((const char unsigned*)buf, i, NULL);
- if (!n) {
- goto error;
- }
-
- /* PublicExponent, rsa->e */
- if (ldns_fget_keyword_data_l(f, "PublicExponent", ": ", b, "\n", LDNS_MAX_LINELEN, line_nr) == -1) {
- goto error;
- }
- i = ldns_b64_pton((const char*)b, buf, ldns_b64_ntop_calculate_size(strlen(b)));
- e = BN_bin2bn((const char unsigned*)buf, i, NULL);
- if (!e) {
- goto error;
- }
-
- /* PrivateExponent, rsa->d */
- if (ldns_fget_keyword_data_l(f, "PrivateExponent", ": ", b, "\n", LDNS_MAX_LINELEN, line_nr) == -1) {
- goto error;
- }
- i = ldns_b64_pton((const char*)b, buf, ldns_b64_ntop_calculate_size(strlen(b)));
- d = BN_bin2bn((const char unsigned*)buf, i, NULL);
- if (!d) {
- goto error;
- }
-
- /* Prime1, rsa->p */
- if (ldns_fget_keyword_data_l(f, "Prime1", ": ", b, "\n", LDNS_MAX_LINELEN, line_nr) == -1) {
- goto error;
- }
- i = ldns_b64_pton((const char*)b, buf, ldns_b64_ntop_calculate_size(strlen(b)));
- p = BN_bin2bn((const char unsigned*)buf, i, NULL);
- if (!p) {
- goto error;
- }
-
- /* Prime2, rsa->q */
- if (ldns_fget_keyword_data_l(f, "Prime2", ": ", b, "\n", LDNS_MAX_LINELEN, line_nr) == -1) {
- goto error;
- }
- i = ldns_b64_pton((const char*)b, buf, ldns_b64_ntop_calculate_size(strlen(b)));
- q = BN_bin2bn((const char unsigned*)buf, i, NULL);
- if (!q) {
- goto error;
- }
-
- /* Exponent1, rsa->dmp1 */
- if (ldns_fget_keyword_data_l(f, "Exponent1", ": ", b, "\n", LDNS_MAX_LINELEN, line_nr) == -1) {
- goto error;
- }
- i = ldns_b64_pton((const char*)b, buf, ldns_b64_ntop_calculate_size(strlen(b)));
- dmp1 = BN_bin2bn((const char unsigned*)buf, i, NULL);
- if (!dmp1) {
- goto error;
- }
-
- /* Exponent2, rsa->dmq1 */
- if (ldns_fget_keyword_data_l(f, "Exponent2", ": ", b, "\n", LDNS_MAX_LINELEN, line_nr) == -1) {
- goto error;
- }
- i = ldns_b64_pton((const char*)b, buf, ldns_b64_ntop_calculate_size(strlen(b)));
- dmq1 = BN_bin2bn((const char unsigned*)buf, i, NULL);
- if (!dmq1) {
- goto error;
- }
-
- /* Coefficient, rsa->iqmp */
- if (ldns_fget_keyword_data_l(f, "Coefficient", ": ", b, "\n", LDNS_MAX_LINELEN, line_nr) == -1) {
- goto error;
- }
- i = ldns_b64_pton((const char*)b, buf, ldns_b64_ntop_calculate_size(strlen(b)));
- iqmp = BN_bin2bn((const char unsigned*)buf, i, NULL);
- if (!iqmp) {
- goto error;
- }
-#endif /* splint */
-
-#if OPENSSL_VERSION_NUMBER < 0x10100000 || defined(HAVE_LIBRESSL)
-# ifndef S_SPLINT_S
- rsa->n = n;
- rsa->e = e;
- rsa->d = d;
- rsa->p = p;
- rsa->q = q;
- rsa->dmp1 = dmp1;
- rsa->dmq1 = dmq1;
- rsa->iqmp = iqmp;
-# endif
-#else
- if(!RSA_set0_key(rsa, n, e, d))
- goto error;
- n = NULL;
- e = NULL;
- d = NULL;
- if(!RSA_set0_factors(rsa, p, q))
- goto error;
- p = NULL;
- q = NULL;
- if(!RSA_set0_crt_params(rsa, dmp1, dmq1, iqmp))
- goto error;
-#endif
-
- LDNS_FREE(buf);
- LDNS_FREE(b);
- return rsa;
-
-error:
- RSA_free(rsa);
- LDNS_FREE(b);
- LDNS_FREE(buf);
- BN_free(n);
- BN_free(e);
- BN_free(d);
- BN_free(p);
- BN_free(q);
- BN_free(dmp1);
- BN_free(dmq1);
- BN_free(iqmp);
- return NULL;
-}
-
-DSA *
-ldns_key_new_frm_fp_dsa(FILE *f)
-{
- return ldns_key_new_frm_fp_dsa_l(f, NULL);
-}
-
-DSA *
-ldns_key_new_frm_fp_dsa_l(FILE *f, ATTR_UNUSED(int *line_nr))
-{
- int i;
- char *d;
- DSA *dsa;
- uint8_t *buf;
- BIGNUM *p=NULL, *q=NULL, *g=NULL, *priv_key=NULL, *pub_key=NULL;
-
- d = LDNS_XMALLOC(char, LDNS_MAX_LINELEN);
- buf = LDNS_XMALLOC(uint8_t, LDNS_MAX_LINELEN);
- dsa = DSA_new();
- if (!d || !dsa || !buf) {
- goto error;
- }
-
- /* the line parser removes the () from the input... */
-
- /* Prime, dsa->p */
- if (ldns_fget_keyword_data_l(f, "Primep", ": ", d, "\n", LDNS_MAX_LINELEN, line_nr) == -1) {
- goto error;
- }
- i = ldns_b64_pton((const char*)d, buf, ldns_b64_ntop_calculate_size(strlen(d)));
-#ifndef S_SPLINT_S
- p = BN_bin2bn((const char unsigned*)buf, i, NULL);
- if (!p) {
- goto error;
- }
-
- /* Subprime, dsa->q */
- if (ldns_fget_keyword_data_l(f, "Subprimeq", ": ", d, "\n", LDNS_MAX_LINELEN, line_nr) == -1) {
- goto error;
- }
- i = ldns_b64_pton((const char*)d, buf, ldns_b64_ntop_calculate_size(strlen(d)));
- q = BN_bin2bn((const char unsigned*)buf, i, NULL);
- if (!q) {
- goto error;
- }
-
- /* Base, dsa->g */
- if (ldns_fget_keyword_data_l(f, "Baseg", ": ", d, "\n", LDNS_MAX_LINELEN, line_nr) == -1) {
- goto error;
- }
- i = ldns_b64_pton((const char*)d, buf, ldns_b64_ntop_calculate_size(strlen(d)));
- g = BN_bin2bn((const char unsigned*)buf, i, NULL);
- if (!g) {
- goto error;
- }
-
- /* Private key, dsa->priv_key */
- if (ldns_fget_keyword_data_l(f, "Private_valuex", ": ", d, "\n", LDNS_MAX_LINELEN, line_nr) == -1) {
- goto error;
- }
- i = ldns_b64_pton((const char*)d, buf, ldns_b64_ntop_calculate_size(strlen(d)));
- priv_key = BN_bin2bn((const char unsigned*)buf, i, NULL);
- if (!priv_key) {
- goto error;
- }
-
- /* Public key, dsa->priv_key */
- if (ldns_fget_keyword_data_l(f, "Public_valuey", ": ", d, "\n", LDNS_MAX_LINELEN, line_nr) == -1) {
- goto error;
- }
- i = ldns_b64_pton((const char*)d, buf, ldns_b64_ntop_calculate_size(strlen(d)));
- pub_key = BN_bin2bn((const char unsigned*)buf, i, NULL);
- if (!pub_key) {
- goto error;
- }
-#endif /* splint */
-
-#if OPENSSL_VERSION_NUMBER < 0x10100000 || defined(HAVE_LIBRESSL)
-# ifndef S_SPLINT_S
- dsa->p = p;
- dsa->q = q;
- dsa->g = g;
- dsa->priv_key = priv_key;
- dsa->pub_key = pub_key;
-# endif
-#else
- if(!DSA_set0_pqg(dsa, p, q, g))
- goto error;
- p = NULL;
- q = NULL;
- g = NULL;
- if(!DSA_set0_key(dsa, pub_key, priv_key))
- goto error;
-#endif
-
- LDNS_FREE(buf);
- LDNS_FREE(d);
-
- return dsa;
-
-error:
- LDNS_FREE(d);
- LDNS_FREE(buf);
- DSA_free(dsa);
- BN_free(p);
- BN_free(q);
- BN_free(g);
- BN_free(priv_key);
- BN_free(pub_key);
- return NULL;
-}
-
-unsigned char *
-ldns_key_new_frm_fp_hmac(FILE *f, size_t *hmac_size)
-{
- return ldns_key_new_frm_fp_hmac_l(f, NULL, hmac_size);
-}
-
-unsigned char *
-ldns_key_new_frm_fp_hmac_l( FILE *f
- , ATTR_UNUSED(int *line_nr)
- , size_t *hmac_size
- )
-{
- size_t bufsz;
- char d[LDNS_MAX_LINELEN];
- unsigned char *buf = NULL;
-
- *hmac_size = ldns_fget_keyword_data_l(f, "Key", ": ", d, "\n",
- LDNS_MAX_LINELEN, line_nr) == -1
- ? 0
- : (buf = LDNS_XMALLOC( unsigned char, (bufsz =
- ldns_b64_ntop_calculate_size(strlen(d))))) == NULL
- ? 0
- : (size_t) ldns_b64_pton((const char*)d, buf, bufsz);
- return buf;
-}
-#endif /* HAVE_SSL */
-
-#ifdef USE_GOST
-static EVP_PKEY*
-ldns_gen_gost_key(void)
-{
- EVP_PKEY_CTX* ctx;
- EVP_PKEY* p = NULL;
- int gost_id = ldns_key_EVP_load_gost_id();
- if(!gost_id)
- return NULL;
- ctx = EVP_PKEY_CTX_new_id(gost_id, NULL);
- if(!ctx) {
- /* the id should be available now */
- return NULL;
- }
- if(EVP_PKEY_CTX_ctrl_str(ctx, "paramset", "A") <= 0) {
- /* cannot set paramset */
- EVP_PKEY_CTX_free(ctx);
- return NULL;
- }
-
- if(EVP_PKEY_keygen_init(ctx) <= 0) {
- EVP_PKEY_CTX_free(ctx);
- return NULL;
- }
- if(EVP_PKEY_keygen(ctx, &p) <= 0) {
- EVP_PKEY_free(p);
- EVP_PKEY_CTX_free(ctx);
- return NULL;
- }
- EVP_PKEY_CTX_free(ctx);
- return p;
-}
-#endif
-
-ldns_key *
-ldns_key_new_frm_algorithm(ldns_signing_algorithm alg, uint16_t size)
-{
- ldns_key *k;
-#ifdef HAVE_SSL
-#ifdef USE_DSA
- DSA *d;
-#endif /* USE_DSA */
-# ifdef USE_ECDSA
- EC_KEY *ec = NULL;
-# endif
-# ifdef HAVE_EVP_PKEY_KEYGEN
- EVP_PKEY_CTX *ctx;
-# else
- RSA *r;
-# endif
-#else
- int i;
- uint16_t offset = 0;
-#endif
- unsigned char *hmac;
-
- k = ldns_key_new();
- if (!k) {
- return NULL;
- }
- switch(alg) {
- case LDNS_SIGN_RSAMD5:
- case LDNS_SIGN_RSASHA1:
- case LDNS_SIGN_RSASHA1_NSEC3:
- case LDNS_SIGN_RSASHA256:
- case LDNS_SIGN_RSASHA512:
-#ifdef HAVE_SSL
-#ifdef HAVE_EVP_PKEY_KEYGEN
- ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL);
- if(!ctx) {
- ldns_key_free(k);
- return NULL;
- }
- if(EVP_PKEY_keygen_init(ctx) <= 0) {
- ldns_key_free(k);
- EVP_PKEY_CTX_free(ctx);
- return NULL;
- }
- if (EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, size) <= 0) {
- ldns_key_free(k);
- EVP_PKEY_CTX_free(ctx);
- return NULL;
- }
-#ifndef S_SPLINT_S
- if (EVP_PKEY_keygen(ctx, &k->_key.key) <= 0) {
- ldns_key_free(k);
- EVP_PKEY_CTX_free(ctx);
- return NULL;
- }
-#endif
- EVP_PKEY_CTX_free(ctx);
-#else /* HAVE_EVP_PKEY_KEYGEN */
- r = RSA_generate_key((int)size, RSA_F4, NULL, NULL);
- if(!r) {
- ldns_key_free(k);
- return NULL;
- }
- if (RSA_check_key(r) != 1) {
- ldns_key_free(k);
- return NULL;
- }
- ldns_key_set_rsa_key(k, r);
- RSA_free(r);
-#endif /* HAVE_EVP_PKEY_KEYGEN */
-#endif /* HAVE_SSL */
- break;
- case LDNS_SIGN_DSA:
- case LDNS_SIGN_DSA_NSEC3:
-#ifdef USE_DSA
-#ifdef HAVE_SSL
-# if OPENSSL_VERSION_NUMBER < 0x00908000L
- d = DSA_generate_parameters((int)size, NULL, 0, NULL, NULL, NULL, NULL);
- if (!d) {
- ldns_key_free(k);
- return NULL;
- }
-
-# else
- if (! (d = DSA_new())) {
- ldns_key_free(k);
- return NULL;
- }
- if (! DSA_generate_parameters_ex(d, (int)size, NULL, 0, NULL, NULL, NULL)) {
- DSA_free(d);
- ldns_key_free(k);
- return NULL;
- }
-# endif
- if (DSA_generate_key(d) != 1) {
- ldns_key_free(k);
- return NULL;
- }
- ldns_key_set_dsa_key(k, d);
- DSA_free(d);
-#endif /* HAVE_SSL */
-#endif /* USE_DSA */
- break;
- case LDNS_SIGN_HMACMD5:
- case LDNS_SIGN_HMACSHA1:
- case LDNS_SIGN_HMACSHA224:
- case LDNS_SIGN_HMACSHA256:
- case LDNS_SIGN_HMACSHA384:
- case LDNS_SIGN_HMACSHA512:
-#ifdef HAVE_SSL
-#ifndef S_SPLINT_S
- k->_key.key = NULL;
-#endif /* splint */
-#endif /* HAVE_SSL */
- size = size / 8;
- ldns_key_set_hmac_size(k, size);
-
- hmac = LDNS_XMALLOC(unsigned char, size);
- if(!hmac) {
- ldns_key_free(k);
- return NULL;
- }
-#ifdef HAVE_SSL
- if (RAND_bytes(hmac, (int) size) != 1) {
- LDNS_FREE(hmac);
- ldns_key_free(k);
- return NULL;
- }
-#else
- while (offset + sizeof(i) < size) {
- i = random();
- memcpy(&hmac[offset], &i, sizeof(i));
- offset += sizeof(i);
- }
- if (offset < size) {
- i = random();
- memcpy(&hmac[offset], &i, size - offset);
- }
-#endif /* HAVE_SSL */
- ldns_key_set_hmac_key(k, hmac);
-
- ldns_key_set_flags(k, 0);
- break;
- case LDNS_SIGN_ECC_GOST:
-#if defined(HAVE_SSL) && defined(USE_GOST)
- ldns_key_set_evp_key(k, ldns_gen_gost_key());
-#ifndef S_SPLINT_S
- if(!k->_key.key) {
- ldns_key_free(k);
- return NULL;
- }
-#endif /* splint */
-#else
- ldns_key_free(k);
- return NULL;
-#endif /* HAVE_SSL and USE_GOST */
- break;
- case LDNS_SIGN_ECDSAP256SHA256:
- case LDNS_SIGN_ECDSAP384SHA384:
-#ifdef USE_ECDSA
- if(alg == LDNS_SIGN_ECDSAP256SHA256)
- ec = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
- else if(alg == LDNS_SIGN_ECDSAP384SHA384)
- ec = EC_KEY_new_by_curve_name(NID_secp384r1);
- if(!ec) {
- ldns_key_free(k);
- return NULL;
- }
- if(!EC_KEY_generate_key(ec)) {
- ldns_key_free(k);
- EC_KEY_free(ec);
- return NULL;
- }
-#ifndef S_SPLINT_S
- k->_key.key = EVP_PKEY_new();
- if(!k->_key.key) {
- ldns_key_free(k);
- EC_KEY_free(ec);
- return NULL;
- }
- if (!EVP_PKEY_assign_EC_KEY(k->_key.key, ec)) {
- ldns_key_free(k);
- EC_KEY_free(ec);
- return NULL;
- }
-#endif /* splint */
-#else
- ldns_key_free(k);
- return NULL;
-#endif /* ECDSA */
- break;
-#ifdef USE_ED25519
- case LDNS_SIGN_ED25519:
-#ifdef HAVE_EVP_PKEY_KEYGEN
- ctx = EVP_PKEY_CTX_new_id(NID_ED25519, NULL);
- if(!ctx) {
- ldns_key_free(k);
- return NULL;
- }
- if(EVP_PKEY_keygen_init(ctx) <= 0) {
- ldns_key_free(k);
- EVP_PKEY_CTX_free(ctx);
- return NULL;
- }
- if (EVP_PKEY_keygen(ctx, &k->_key.key) <= 0) {
- ldns_key_free(k);
- EVP_PKEY_CTX_free(ctx);
- return NULL;
- }
- EVP_PKEY_CTX_free(ctx);
-#endif
- break;
-#endif /* ED25519 */
-#ifdef USE_ED448
- case LDNS_SIGN_ED448:
-#ifdef HAVE_EVP_PKEY_KEYGEN
- ctx = EVP_PKEY_CTX_new_id(NID_ED448, NULL);
- if(!ctx) {
- ldns_key_free(k);
- return NULL;
- }
- if(EVP_PKEY_keygen_init(ctx) <= 0) {
- ldns_key_free(k);
- EVP_PKEY_CTX_free(ctx);
- return NULL;
- }
- if (EVP_PKEY_keygen(ctx, &k->_key.key) <= 0) {
- ldns_key_free(k);
- EVP_PKEY_CTX_free(ctx);
- return NULL;
- }
- EVP_PKEY_CTX_free(ctx);
-#endif
- break;
-#endif /* ED448 */
- }
- ldns_key_set_algorithm(k, alg);
- return k;
-}
-
-void
-ldns_key_print(FILE *output, const ldns_key *k)
-{
- char *str = ldns_key2str(k);
- if (str) {
- fprintf(output, "%s", str);
- } else {
- fprintf(output, "Unable to convert private key to string\n");
- }
- LDNS_FREE(str);
-}
-
-
-void
-ldns_key_set_algorithm(ldns_key *k, ldns_signing_algorithm l)
-{
- k->_alg = l;
-}
-
-void
-ldns_key_set_flags(ldns_key *k, uint16_t f)
-{
- k->_extra.dnssec.flags = f;
-}
-
-#ifdef HAVE_SSL
-#ifndef S_SPLINT_S
-void
-ldns_key_set_evp_key(ldns_key *k, EVP_PKEY *e)
-{
- k->_key.key = e;
-}
-
-void
-ldns_key_set_rsa_key(ldns_key *k, RSA *r)
-{
- EVP_PKEY *key = EVP_PKEY_new();
- EVP_PKEY_set1_RSA(key, r);
- k->_key.key = key;
-}
-
-void
-ldns_key_set_dsa_key(ldns_key *k, DSA *d)
-{
-#ifdef USE_DSA
- EVP_PKEY *key = EVP_PKEY_new();
- EVP_PKEY_set1_DSA(key, d);
- k->_key.key = key;
-#else
- (void)k; (void)d;
-#endif
-}
-
-void
-ldns_key_assign_rsa_key(ldns_key *k, RSA *r)
-{
- EVP_PKEY *key = EVP_PKEY_new();
- EVP_PKEY_assign_RSA(key, r);
- k->_key.key = key;
-}
-
-void
-ldns_key_assign_dsa_key(ldns_key *k, DSA *d)
-{
-#ifdef USE_DSA
- EVP_PKEY *key = EVP_PKEY_new();
- EVP_PKEY_assign_DSA(key, d);
- k->_key.key = key;
-#else
- (void)k; (void)d;
-#endif
-}
-#endif /* splint */
-#endif /* HAVE_SSL */
-
-void
-ldns_key_set_hmac_key(ldns_key *k, unsigned char *hmac)
-{
- k->_key.hmac.key = hmac;
-}
-
-void
-ldns_key_set_hmac_size(ldns_key *k, size_t hmac_size)
-{
- k->_key.hmac.size = hmac_size;
-}
-
-void
-ldns_key_set_external_key(ldns_key *k, void *external_key)
-{
- k->_key.external_key = external_key;
-}
-
-void
-ldns_key_set_origttl(ldns_key *k, uint32_t t)
-{
- k->_extra.dnssec.orig_ttl = t;
-}
-
-void
-ldns_key_set_inception(ldns_key *k, uint32_t i)
-{
- k->_extra.dnssec.inception = i;
-}
-
-void
-ldns_key_set_expiration(ldns_key *k, uint32_t e)
-{
- k->_extra.dnssec.expiration = e;
-}
-
-void
-ldns_key_set_pubkey_owner(ldns_key *k, ldns_rdf *r)
-{
- k->_pubkey_owner = r;
-}
-
-void
-ldns_key_set_keytag(ldns_key *k, uint16_t tag)
-{
- k->_extra.dnssec.keytag = tag;
-}
-
-/* read */
-size_t
-ldns_key_list_key_count(const ldns_key_list *key_list)
-{
- return key_list->_key_count;
-}
-
-ldns_key *
-ldns_key_list_key(const ldns_key_list *key, size_t nr)
-{
- if (nr < ldns_key_list_key_count(key)) {
- return key->_keys[nr];
- } else {
- return NULL;
- }
-}
-
-ldns_signing_algorithm
-ldns_key_algorithm(const ldns_key *k)
-{
- return k->_alg;
-}
-
-void
-ldns_key_set_use(ldns_key *k, bool v)
-{
- if (k) {
- k->_use = v;
- }
-}
-
-bool
-ldns_key_use(const ldns_key *k)
-{
- if (k) {
- return k->_use;
- }
- return false;
-}
-
-#ifdef HAVE_SSL
-#ifndef S_SPLINT_S
-EVP_PKEY *
-ldns_key_evp_key(const ldns_key *k)
-{
- return k->_key.key;
-}
-
-RSA *
-ldns_key_rsa_key(const ldns_key *k)
-{
- if (k->_key.key) {
- return EVP_PKEY_get1_RSA(k->_key.key);
- } else {
- return NULL;
- }
-}
-
-DSA *
-ldns_key_dsa_key(const ldns_key *k)
-{
-#ifdef USE_DSA
- if (k->_key.key) {
- return EVP_PKEY_get1_DSA(k->_key.key);
- } else {
- return NULL;
- }
-#else
- (void)k;
- return NULL;
-#endif
-}
-#endif /* splint */
-#endif /* HAVE_SSL */
-
-unsigned char *
-ldns_key_hmac_key(const ldns_key *k)
-{
- if (k->_key.hmac.key) {
- return k->_key.hmac.key;
- } else {
- return NULL;
- }
-}
-
-size_t
-ldns_key_hmac_size(const ldns_key *k)
-{
- if (k->_key.hmac.size) {
- return k->_key.hmac.size;
- } else {
- return 0;
- }
-}
-
-void *
-ldns_key_external_key(const ldns_key *k)
-{
- return k->_key.external_key;
-}
-
-uint32_t
-ldns_key_origttl(const ldns_key *k)
-{
- return k->_extra.dnssec.orig_ttl;
-}
-
-uint16_t
-ldns_key_flags(const ldns_key *k)
-{
- return k->_extra.dnssec.flags;
-}
-
-uint32_t
-ldns_key_inception(const ldns_key *k)
-{
- return k->_extra.dnssec.inception;
-}
-
-uint32_t
-ldns_key_expiration(const ldns_key *k)
-{
- return k->_extra.dnssec.expiration;
-}
-
-uint16_t
-ldns_key_keytag(const ldns_key *k)
-{
- return k->_extra.dnssec.keytag;
-}
-
-ldns_rdf *
-ldns_key_pubkey_owner(const ldns_key *k)
-{
- return k->_pubkey_owner;
-}
-
-/* write */
-void
-ldns_key_list_set_use(ldns_key_list *keys, bool v)
-{
- size_t i;
-
- for (i = 0; i < ldns_key_list_key_count(keys); i++) {
- ldns_key_set_use(ldns_key_list_key(keys, i), v);
- }
-}
-
-void
-ldns_key_list_set_key_count(ldns_key_list *key, size_t count)
-{
- key->_key_count = count;
-}
-
-bool
-ldns_key_list_push_key(ldns_key_list *key_list, ldns_key *key)
-{
- size_t key_count;
- ldns_key **keys;
-
- key_count = ldns_key_list_key_count(key_list);
-
- /* grow the array */
- keys = LDNS_XREALLOC(
- key_list->_keys, ldns_key *, key_count + 1);
- if (!keys) {
- return false;
- }
-
- /* add the new member */
- key_list->_keys = keys;
- key_list->_keys[key_count] = key;
-
- ldns_key_list_set_key_count(key_list, key_count + 1);
- return true;
-}
-
-ldns_key *
-ldns_key_list_pop_key(ldns_key_list *key_list)
-{
- size_t key_count;
- ldns_key** a;
- ldns_key *pop;
-
- if (!key_list) {
- return NULL;
- }
-
- key_count = ldns_key_list_key_count(key_list);
- if (key_count == 0) {
- return NULL;
- }
-
- pop = ldns_key_list_key(key_list, key_count);
-
- /* shrink the array */
- a = LDNS_XREALLOC(key_list->_keys, ldns_key *, key_count - 1);
- if(a) {
- key_list->_keys = a;
- }
-
- ldns_key_list_set_key_count(key_list, key_count - 1);
-
- return pop;
-}
-
-#ifdef HAVE_SSL
-#ifndef S_SPLINT_S
-/* data pointer must be large enough (LDNS_MAX_KEYLEN) */
-static bool
-ldns_key_rsa2bin(unsigned char *data, RSA *k, uint16_t *size)
-{
- int i,j;
- const BIGNUM *n=NULL, *e=NULL;
-
- if (!k) {
- return false;
- }
-#if OPENSSL_VERSION_NUMBER < 0x10100000 || defined(HAVE_LIBRESSL)
- n = k->n;
- e = k->e;
-#else
- RSA_get0_key(k, &n, &e, NULL);
-#endif
-
- if (BN_num_bytes(e) <= 256) {
- /* normally only this path is executed (small factors are
- * more common
- */
- data[0] = (unsigned char) BN_num_bytes(e);
- i = BN_bn2bin(e, data + 1);
- j = BN_bn2bin(n, data + i + 1);
- *size = (uint16_t) i + j;
- } else if (BN_num_bytes(e) <= 65536) {
- data[0] = 0;
- /* BN_bn2bin does bigendian, _uint16 also */
- ldns_write_uint16(data + 1, (uint16_t) BN_num_bytes(e));
-
- BN_bn2bin(e, data + 3);
- BN_bn2bin(n, data + 4 + BN_num_bytes(e));
- *size = (uint16_t) BN_num_bytes(n) + 6;
- } else {
- return false;
- }
- return true;
-}
-
-#ifdef USE_DSA
-/* data pointer must be large enough (LDNS_MAX_KEYLEN) */
-static bool
-ldns_key_dsa2bin(unsigned char *data, DSA *k, uint16_t *size)
-{
- uint8_t T;
- const BIGNUM *p, *q, *g;
- const BIGNUM *pub_key, *priv_key;
-
- if (!k) {
- return false;
- }
-
- /* See RFC2536 */
-# ifdef HAVE_DSA_GET0_PQG
- DSA_get0_pqg(k, &p, &q, &g);
-# else
- p = k->p; q = k->q; g = k->g;
-# endif
-# ifdef HAVE_DSA_GET0_KEY
- DSA_get0_key(k, &pub_key, &priv_key);
-# else
- pub_key = k->pub_key; priv_key = k->priv_key;
-# endif
- (void)priv_key;
- *size = (uint16_t)BN_num_bytes(p);
- T = (*size - 64) / 8;
-
- if (T > 8) {
-#ifdef STDERR_MSGS
- fprintf(stderr, "DSA key with T > 8 (ie. > 1024 bits)");
- fprintf(stderr, " not implemented\n");
-#endif
- return false;
- }
-
- /* size = 64 + (T * 8); */
- memset(data, 0, 21 + *size * 3);
- data[0] = (unsigned char)T;
- BN_bn2bin(q, data + 1 ); /* 20 octects */
- BN_bn2bin(p, data + 21 ); /* offset octects */
- BN_bn2bin(g, data + 21 + *size * 2 - BN_num_bytes(g));
- BN_bn2bin(pub_key,data + 21 + *size * 3 - BN_num_bytes(pub_key));
- *size = 21 + *size * 3;
- return true;
-}
-#endif /* USE_DSA */
-
-#ifdef USE_GOST
-static bool
-ldns_key_gost2bin(unsigned char* data, EVP_PKEY* k, uint16_t* size)
-{
- int i;
- unsigned char* pp = NULL;
- if(i2d_PUBKEY(k, &pp) != 37 + 64) {
- /* expect 37 byte(ASN header) and 64 byte(X and Y) */
- free(pp);
- return false;
- }
- /* omit ASN header */
- for(i=0; i<64; i++)
- data[i] = pp[i+37];
- free(pp);
- *size = 64;
- return true;
-}
-#endif /* USE_GOST */
-
-#ifdef USE_ED25519
-static bool
-ldns_key_ed255192bin(unsigned char* data, EVP_PKEY* k, uint16_t* size)
-{
- int i;
- unsigned char* pp = NULL;
- if(i2d_PUBKEY(k, &pp) != 12 + 32) {
- /* expect 12 byte(ASN header) and 32 byte(pubkey) */
- free(pp);
- return false;
- }
- /* omit ASN header */
- for(i=0; i<32; i++)
- data[i] = pp[i+12];
- free(pp);
- *size = 32;
- return true;
-}
-#endif /* USE_ED25519 */
-
-#ifdef USE_ED448
-static bool
-ldns_key_ed4482bin(unsigned char* data, EVP_PKEY* k, uint16_t* size)
-{
- int i;
- unsigned char* pp = NULL;
- if(i2d_PUBKEY(k, &pp) != 12 + 57) {
- /* expect 12 byte(ASN header) and 57 byte(pubkey) */
- free(pp);
- return false;
- }
- /* omit ASN header */
- for(i=0; i<57; i++)
- data[i] = pp[i+12];
- free(pp);
- *size = 57;
- return true;
-}
-#endif /* USE_ED448 */
-#endif /* splint */
-#endif /* HAVE_SSL */
-
-ldns_rr *
-ldns_key2rr(const ldns_key *k)
-{
- /* this function will convert a the keydata contained in
- * rsa/dsa pointers to a DNSKEY rr. It will fill in as
- * much as it can, but it does not know about key-flags
- * for instance
- */
- ldns_rr *pubkey;
- ldns_rdf *keybin;
- unsigned char *bin = NULL;
- uint16_t size = 0;
-#ifdef HAVE_SSL
- RSA *rsa = NULL;
-#ifdef USE_DSA
- DSA *dsa = NULL;
-#endif /* USE_DSA */
-#endif /* HAVE_SSL */
-#ifdef USE_ECDSA
- EC_KEY* ec;
-#endif
- int internal_data = 0;
-
- if (!k) {
- return NULL;
- }
- pubkey = ldns_rr_new();
-
- switch (ldns_key_algorithm(k)) {
- case LDNS_SIGN_HMACMD5:
- case LDNS_SIGN_HMACSHA1:
- case LDNS_SIGN_HMACSHA224:
- case LDNS_SIGN_HMACSHA256:
- case LDNS_SIGN_HMACSHA384:
- case LDNS_SIGN_HMACSHA512:
- ldns_rr_set_type(pubkey, LDNS_RR_TYPE_KEY);
- break;
- default:
- ldns_rr_set_type(pubkey, LDNS_RR_TYPE_DNSKEY);
- break;
- }
- /* zero-th rdf - flags */
- ldns_rr_push_rdf(pubkey,
- ldns_native2rdf_int16(LDNS_RDF_TYPE_INT16,
- ldns_key_flags(k)));
- /* first - proto */
- ldns_rr_push_rdf(pubkey,
- ldns_native2rdf_int8(LDNS_RDF_TYPE_INT8, LDNS_DNSSEC_KEYPROTO));
-
- if (ldns_key_pubkey_owner(k)) {
- ldns_rr_set_owner(pubkey, ldns_rdf_clone(ldns_key_pubkey_owner(k)));
- }
-
- /* third - da algorithm */
- switch(ldns_key_algorithm(k)) {
- case LDNS_SIGN_RSAMD5:
- case LDNS_SIGN_RSASHA1:
- case LDNS_SIGN_RSASHA1_NSEC3:
- case LDNS_SIGN_RSASHA256:
- case LDNS_SIGN_RSASHA512:
- ldns_rr_push_rdf(pubkey,
- ldns_native2rdf_int8(LDNS_RDF_TYPE_ALG, ldns_key_algorithm(k)));
-#ifdef HAVE_SSL
- rsa = ldns_key_rsa_key(k);
- if (rsa) {
- bin = LDNS_XMALLOC(unsigned char, LDNS_MAX_KEYLEN);
- if (!bin) {
- ldns_rr_free(pubkey);
- return NULL;
- }
- if (!ldns_key_rsa2bin(bin, rsa, &size)) {
- LDNS_FREE(bin);
- ldns_rr_free(pubkey);
- return NULL;
- }
- RSA_free(rsa);
- internal_data = 1;
- }
-#endif
- size++;
- break;
- case LDNS_SIGN_DSA:
- ldns_rr_push_rdf(pubkey,
- ldns_native2rdf_int8(LDNS_RDF_TYPE_ALG, LDNS_DSA));
-#ifdef USE_DSA
-#ifdef HAVE_SSL
- dsa = ldns_key_dsa_key(k);
- if (dsa) {
- bin = LDNS_XMALLOC(unsigned char, LDNS_MAX_KEYLEN);
- if (!bin) {
- ldns_rr_free(pubkey);
- return NULL;
- }
- if (!ldns_key_dsa2bin(bin, dsa, &size)) {
- LDNS_FREE(bin);
- ldns_rr_free(pubkey);
- return NULL;
- }
- DSA_free(dsa);
- internal_data = 1;
- }
-#endif /* HAVE_SSL */
-#endif /* USE_DSA */
- break;
- case LDNS_SIGN_DSA_NSEC3:
- ldns_rr_push_rdf(pubkey,
- ldns_native2rdf_int8(LDNS_RDF_TYPE_ALG, LDNS_DSA_NSEC3));
-#ifdef USE_DSA
-#ifdef HAVE_SSL
- dsa = ldns_key_dsa_key(k);
- if (dsa) {
- bin = LDNS_XMALLOC(unsigned char, LDNS_MAX_KEYLEN);
- if (!bin) {
- ldns_rr_free(pubkey);
- return NULL;
- }
- if (!ldns_key_dsa2bin(bin, dsa, &size)) {
- LDNS_FREE(bin);
- ldns_rr_free(pubkey);
- return NULL;
- }
- DSA_free(dsa);
- internal_data = 1;
- }
-#endif /* HAVE_SSL */
-#endif /* USE_DSA */
- break;
- case LDNS_SIGN_ECC_GOST:
- ldns_rr_push_rdf(pubkey, ldns_native2rdf_int8(
- LDNS_RDF_TYPE_ALG, ldns_key_algorithm(k)));
-#if defined(HAVE_SSL) && defined(USE_GOST)
- bin = LDNS_XMALLOC(unsigned char, LDNS_MAX_KEYLEN);
- if (!bin) {
- ldns_rr_free(pubkey);
- return NULL;
- }
-#ifndef S_SPLINT_S
- if (!ldns_key_gost2bin(bin, k->_key.key, &size)) {
- LDNS_FREE(bin);
- ldns_rr_free(pubkey);
- return NULL;
- }
-#endif /* splint */
- internal_data = 1;
-#else
- ldns_rr_free(pubkey);
- return NULL;
-#endif /* HAVE_SSL and USE_GOST */
- break;
- case LDNS_SIGN_ECDSAP256SHA256:
- case LDNS_SIGN_ECDSAP384SHA384:
-#ifdef USE_ECDSA
- ldns_rr_push_rdf(pubkey, ldns_native2rdf_int8(
- LDNS_RDF_TYPE_ALG, ldns_key_algorithm(k)));
- bin = NULL;
-#ifndef S_SPLINT_S
- ec = EVP_PKEY_get1_EC_KEY(k->_key.key);
-#endif
- EC_KEY_set_conv_form(ec, POINT_CONVERSION_UNCOMPRESSED);
- size = (uint16_t)i2o_ECPublicKey(ec, NULL);
- if(!i2o_ECPublicKey(ec, &bin)) {
- EC_KEY_free(ec);
- ldns_rr_free(pubkey);
- return NULL;
- }
- if(size > 1) {
- /* move back one byte to shave off the 0x02
- * 'uncompressed' indicator that openssl made
- * Actually its 0x04 (from implementation).
- */
- assert(bin[0] == POINT_CONVERSION_UNCOMPRESSED);
- size -= 1;
- memmove(bin, bin+1, size);
- }
- /* down the reference count for ec, its still assigned
- * to the pkey */
- EC_KEY_free(ec);
- internal_data = 1;
-#else
- ldns_rr_free(pubkey);
- return NULL;
-#endif /* ECDSA */
- break;
-#ifdef USE_ED25519
- case LDNS_SIGN_ED25519:
- ldns_rr_push_rdf(pubkey, ldns_native2rdf_int8(
- LDNS_RDF_TYPE_ALG, ldns_key_algorithm(k)));
- bin = LDNS_XMALLOC(unsigned char, LDNS_MAX_KEYLEN);
- if (!bin) {
- ldns_rr_free(pubkey);
- return NULL;
- }
- if (!ldns_key_ed255192bin(bin, k->_key.key, &size)) {
- LDNS_FREE(bin);
- ldns_rr_free(pubkey);
- return NULL;
- }
- internal_data = 1;
- break;
-#endif
-#ifdef USE_ED448
- case LDNS_SIGN_ED448:
- ldns_rr_push_rdf(pubkey, ldns_native2rdf_int8(
- LDNS_RDF_TYPE_ALG, ldns_key_algorithm(k)));
- bin = LDNS_XMALLOC(unsigned char, LDNS_MAX_KEYLEN);
- if (!bin) {
- ldns_rr_free(pubkey);
- return NULL;
- }
- if (!ldns_key_ed4482bin(bin, k->_key.key, &size)) {
- LDNS_FREE(bin);
- ldns_rr_free(pubkey);
- return NULL;
- }
- internal_data = 1;
- break;
-#endif
- case LDNS_SIGN_HMACMD5:
- case LDNS_SIGN_HMACSHA1:
- case LDNS_SIGN_HMACSHA224:
- case LDNS_SIGN_HMACSHA256:
- case LDNS_SIGN_HMACSHA384:
- case LDNS_SIGN_HMACSHA512:
- bin = LDNS_XMALLOC(unsigned char, ldns_key_hmac_size(k));
- if (!bin) {
- ldns_rr_free(pubkey);
- return NULL;
- }
- ldns_rr_push_rdf(pubkey,
- ldns_native2rdf_int8(LDNS_RDF_TYPE_ALG,
- ldns_key_algorithm(k)));
- size = ldns_key_hmac_size(k);
- memcpy(bin, ldns_key_hmac_key(k), size);
- internal_data = 1;
- break;
- }
- /* fourth the key bin material */
- if (internal_data) {
- keybin = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64, size, bin);
- LDNS_FREE(bin);
- ldns_rr_push_rdf(pubkey, keybin);
- }
- return pubkey;
-}
-
-void
-ldns_key_free(ldns_key *key)
-{
- LDNS_FREE(key);
-}
-
-void
-ldns_key_deep_free(ldns_key *key)
-{
- unsigned char* hmac;
- if (ldns_key_pubkey_owner(key)) {
- ldns_rdf_deep_free(ldns_key_pubkey_owner(key));
- }
-#ifdef HAVE_SSL
- if (ldns_key_evp_key(key)) {
- EVP_PKEY_free(ldns_key_evp_key(key));
- }
-#endif /* HAVE_SSL */
- if (ldns_key_hmac_key(key)) {
- hmac = ldns_key_hmac_key(key);
- LDNS_FREE(hmac);
- }
- LDNS_FREE(key);
-}
-
-void
-ldns_key_list_free(ldns_key_list *key_list)
-{
- size_t i;
- for (i = 0; i < ldns_key_list_key_count(key_list); i++) {
- ldns_key_deep_free(ldns_key_list_key(key_list, i));
- }
- LDNS_FREE(key_list->_keys);
- LDNS_FREE(key_list);
-}
-
-ldns_rr *
-ldns_read_anchor_file(const char *filename)
-{
- FILE *fp;
- /*char line[LDNS_MAX_PACKETLEN];*/
- char *line = LDNS_XMALLOC(char, LDNS_MAX_PACKETLEN);
- int c;
- size_t i = 0;
- ldns_rr *r;
- ldns_status status;
- if(!line) {
- return NULL;
- }
-
- fp = fopen(filename, "r");
- if (!fp) {
-#ifdef STDERR_MSGS
- fprintf(stderr, "Unable to open %s: %s\n", filename, strerror(errno));
-#endif
- LDNS_FREE(line);
- return NULL;
- }
-
- while ((c = fgetc(fp)) && i+1 < LDNS_MAX_PACKETLEN && c != EOF) {
- line[i] = c;
- i++;
- }
- line[i] = '\0';
-
- fclose(fp);
-
- if (i <= 0) {
-#ifdef STDERR_MSGS
- fprintf(stderr, "nothing read from %s", filename);
-#endif
- LDNS_FREE(line);
- return NULL;
- } else {
- status = ldns_rr_new_frm_str(&r, line, 0, NULL, NULL);
- if (status == LDNS_STATUS_OK && (ldns_rr_get_type(r) == LDNS_RR_TYPE_DNSKEY || ldns_rr_get_type(r) == LDNS_RR_TYPE_DS)) {
- LDNS_FREE(line);
- return r;
- } else {
-#ifdef STDERR_MSGS
- fprintf(stderr, "Error creating DNSKEY or DS rr from %s: %s\n", filename, ldns_get_errorstr_by_id(status));
-#endif
- LDNS_FREE(line);
- return NULL;
- }
- }
-}
-
-char *
-ldns_key_get_file_base_name(const ldns_key *key)
-{
- ldns_buffer *buffer;
- char *file_base_name;
-
- buffer = ldns_buffer_new(255);
- ldns_buffer_printf(buffer, "K");
- (void)ldns_rdf2buffer_str_dname(buffer, ldns_key_pubkey_owner(key));
- ldns_buffer_printf(buffer,
- "+%03u+%05u",
- ldns_key_algorithm(key),
- ldns_key_keytag(key));
- file_base_name = ldns_buffer_export(buffer);
- ldns_buffer_free(buffer);
- return file_base_name;
-}
-
-int ldns_key_algo_supported(int algo)
-{
- ldns_lookup_table *lt = ldns_signing_algorithms;
- while(lt->name) {
- if(lt->id == algo)
- return 1;
- lt++;
- }
- return 0;
-}
-
-ldns_signing_algorithm ldns_get_signing_algorithm_by_name(const char* name)
-{
- /* list of (signing algorithm id, alias_name) */
- ldns_lookup_table aliases[] = {
- /* from bind dnssec-keygen */
- {LDNS_SIGN_HMACMD5, "HMAC-MD5"},
- {LDNS_SIGN_DSA_NSEC3, "NSEC3DSA"},
- {LDNS_SIGN_RSASHA1_NSEC3, "NSEC3RSASHA1"},
- /* old ldns usage, now RFC names */
-#ifdef USE_DSA
- {LDNS_SIGN_DSA_NSEC3, "DSA_NSEC3" },
-#endif
- {LDNS_SIGN_RSASHA1_NSEC3, "RSASHA1_NSEC3" },
-#ifdef USE_GOST
- {LDNS_SIGN_ECC_GOST, "GOST"},
-#endif
- /* compat with possible output */
- {LDNS_DH, "DH"},
- {LDNS_ECC, "ECC"},
- {LDNS_INDIRECT, "INDIRECT"},
- {LDNS_PRIVATEDNS, "PRIVATEDNS"},
- {LDNS_PRIVATEOID, "PRIVATEOID"},
- {0, NULL}};
- ldns_lookup_table* lt = ldns_signing_algorithms;
- ldns_signing_algorithm a;
- char *endptr;
-
- while(lt->name) {
- if(strcasecmp(lt->name, name) == 0)
- return lt->id;
- lt++;
- }
- lt = aliases;
- while(lt->name) {
- if(strcasecmp(lt->name, name) == 0)
- return lt->id;
- lt++;
- }
- a = strtol(name, &endptr, 10);
- if (*name && !*endptr)
- return a;
-
- return 0;
-}
diff --git a/ldns/ldns/buffer.h b/ldns/ldns/buffer.h
deleted file mode 100644
index f49a550..0000000
--- a/ldns/ldns/buffer.h
+++ /dev/null
@@ -1,645 +0,0 @@
-/*
- * buffer.h -- generic memory buffer.
- *
- * Copyright (c) 2005-2008, NLnet Labs. All rights reserved.
- *
- * See LICENSE for the license.
- *
- *
- * The buffer module implements a generic buffer. The API is based on
- * the java.nio.Buffer interface.
- */
-
-#ifndef LDNS_BUFFER_H
-#define LDNS_BUFFER_H
-
-#include <assert.h>
-#include <stdarg.h>
-#include <string.h>
-
-#include <ldns/error.h>
-#include <ldns/common.h>
-
-#include "ldns/util.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * number of initial bytes in buffer of
- * which we cannot tell the size before hand
- */
-#define LDNS_MIN_BUFLEN 512
-
-/**
- * \file buffer.h
- *
- * This file contains the definition of ldns_buffer, and functions to manipulate those.
- */
-
-/**
- * implementation of buffers to ease operations
- *
- * ldns_buffers can contain arbitrary information, per octet. You can write
- * to the current end of a buffer, read from the current position, and
- * access any data within it.
- *
- * Example use of buffers is in the source code of \ref host2str.c
- */
-struct ldns_struct_buffer
-{
- /** The current position used for reading/writing */
- size_t _position;
-
- /** The read/write limit */
- size_t _limit;
-
- /** The amount of data the buffer can contain */
- size_t _capacity;
-
- /** The data contained in the buffer */
- uint8_t *_data;
-
- /** If the buffer is fixed it cannot be resized */
- unsigned _fixed : 1;
-
- /** The current state of the buffer. If writing to the buffer fails
- * for any reason, this value is changed. This way, you can perform
- * multiple writes in sequence and check for success afterwards. */
- ldns_status _status;
-};
-typedef struct ldns_struct_buffer ldns_buffer;
-
-
-#ifdef NDEBUG
-INLINE void
-ldns_buffer_invariant(const ldns_buffer *ATTR_UNUSED(buffer))
-{
-}
-#else
-INLINE void
-ldns_buffer_invariant(const ldns_buffer *buffer)
-{
- assert(buffer != NULL);
- assert(buffer->_position <= buffer->_limit);
- assert(buffer->_limit <= buffer->_capacity);
- assert(buffer->_data != NULL);
-}
-#endif
-
-/**
- * creates a new buffer with the specified capacity.
- *
- * \param[in] capacity the size (in bytes) to allocate for the buffer
- * \return the created buffer
- */
-ldns_buffer *ldns_buffer_new(size_t capacity);
-
-/**
- * creates a buffer with the specified data. The data IS copied
- * and MEMORY allocations are done. The buffer is not fixed and can
- * be resized using buffer_reserve().
- *
- * \param[in] buffer pointer to the buffer to put the data in
- * \param[in] data the data to encapsulate in the buffer
- * \param[in] size the size of the data
- */
-void ldns_buffer_new_frm_data(ldns_buffer *buffer, const void *data, size_t size);
-
-/**
- * clears the buffer and make it ready for writing. The buffer's limit
- * is set to the capacity and the position is set to 0.
- * \param[in] buffer the buffer to clear
- */
-INLINE void ldns_buffer_clear(ldns_buffer *buffer)
-{
- ldns_buffer_invariant(buffer);
-
- /* reset status here? */
-
- buffer->_position = 0;
- buffer->_limit = buffer->_capacity;
-}
-
-/**
- * makes the buffer ready for reading the data that has been written to
- * the buffer. The buffer's limit is set to the current position and
- * the position is set to 0.
- *
- * \param[in] buffer the buffer to flip
- * \return void
- */
-INLINE void ldns_buffer_flip(ldns_buffer *buffer)
-{
- ldns_buffer_invariant(buffer);
-
- buffer->_limit = buffer->_position;
- buffer->_position = 0;
-}
-
-/**
- * make the buffer ready for re-reading the data. The buffer's
- * position is reset to 0.
- * \param[in] buffer the buffer to rewind
- */
-INLINE void ldns_buffer_rewind(ldns_buffer *buffer)
-{
- ldns_buffer_invariant(buffer);
-
- buffer->_position = 0;
-}
-
-/**
- * returns the current position in the buffer (as a number of bytes)
- * \param[in] buffer the buffer
- * \return the current position
- */
-INLINE size_t
-ldns_buffer_position(const ldns_buffer *buffer)
-{
- return buffer->_position;
-}
-
-/**
- * sets the buffer's position to MARK. The position must be less than
- * or equal to the buffer's limit.
- * \param[in] buffer the buffer
- * \param[in] mark the mark to use
- */
-INLINE void
-ldns_buffer_set_position(ldns_buffer *buffer, size_t mark)
-{
- assert(mark <= buffer->_limit);
- buffer->_position = mark;
-}
-
-/**
- * changes the buffer's position by COUNT bytes. The position must not
- * be moved behind the buffer's limit or before the beginning of the
- * buffer.
- * \param[in] buffer the buffer
- * \param[in] count the count to use
- */
-INLINE void
-ldns_buffer_skip(ldns_buffer *buffer, ssize_t count)
-{
- assert(buffer->_position + count <= buffer->_limit);
- buffer->_position += count;
-}
-
-/**
- * returns the maximum size of the buffer
- * \param[in] buffer
- * \return the size
- */
-INLINE size_t
-ldns_buffer_limit(const ldns_buffer *buffer)
-{
- return buffer->_limit;
-}
-
-/**
- * changes the buffer's limit. If the buffer's position is greater
- * than the new limit the position is set to the limit.
- * \param[in] buffer the buffer
- * \param[in] limit the new limit
- */
-INLINE void
-ldns_buffer_set_limit(ldns_buffer *buffer, size_t limit)
-{
- assert(limit <= buffer->_capacity);
- buffer->_limit = limit;
- if (buffer->_position > buffer->_limit)
- buffer->_position = buffer->_limit;
-}
-
-/**
- * returns the number of bytes the buffer can hold.
- * \param[in] buffer the buffer
- * \return the number of bytes
- */
-INLINE size_t
-ldns_buffer_capacity(const ldns_buffer *buffer)
-{
- return buffer->_capacity;
-}
-
-/**
- * changes the buffer's capacity. The data is reallocated so any
- * pointers to the data may become invalid. The buffer's limit is set
- * to the buffer's new capacity.
- * \param[in] buffer the buffer
- * \param[in] capacity the capacity to use
- * \return whether this failed or succeeded
- */
-bool ldns_buffer_set_capacity(ldns_buffer *buffer, size_t capacity);
-
-/**
- * ensures BUFFER can contain at least AMOUNT more bytes. The buffer's
- * capacity is increased if necessary using buffer_set_capacity().
- *
- * The buffer's limit is always set to the (possibly increased)
- * capacity.
- * \param[in] buffer the buffer
- * \param[in] amount amount to use
- * \return whether this failed or succeeded
- */
-bool ldns_buffer_reserve(ldns_buffer *buffer, size_t amount);
-
-/**
- * returns a pointer to the data at the indicated position.
- * \param[in] buffer the buffer
- * \param[in] at position
- * \return the pointer to the data
- */
-INLINE uint8_t *
-ldns_buffer_at(const ldns_buffer *buffer, size_t at)
-{
- assert(at <= buffer->_limit);
- return buffer->_data + at;
-}
-
-/**
- * returns a pointer to the beginning of the buffer (the data at
- * position 0).
- * \param[in] buffer the buffer
- * \return the pointer
- */
-INLINE uint8_t *
-ldns_buffer_begin(const ldns_buffer *buffer)
-{
- return ldns_buffer_at(buffer, 0);
-}
-
-/**
- * returns a pointer to the end of the buffer (the data at the buffer's
- * limit).
- * \param[in] buffer the buffer
- * \return the pointer
- */
-INLINE uint8_t *
-ldns_buffer_end(const ldns_buffer *buffer)
-{
- return ldns_buffer_at(buffer, buffer->_limit);
-}
-
-/**
- * returns a pointer to the data at the buffer's current position.
- * \param[in] buffer the buffer
- * \return the pointer
- */
-INLINE uint8_t *
-ldns_buffer_current(const ldns_buffer *buffer)
-{
- return ldns_buffer_at(buffer, buffer->_position);
-}
-
-/**
- * returns the number of bytes remaining between the indicated position and
- * the limit.
- * \param[in] buffer the buffer
- * \param[in] at indicated position
- * \return number of bytes
- */
-INLINE size_t
-ldns_buffer_remaining_at(const ldns_buffer *buffer, size_t at)
-{
- ldns_buffer_invariant(buffer);
- assert(at <= buffer->_limit);
- return buffer->_limit - at;
-}
-
-/**
- * returns the number of bytes remaining between the buffer's position and
- * limit.
- * \param[in] buffer the buffer
- * \return the number of bytes
- */
-INLINE size_t
-ldns_buffer_remaining(const ldns_buffer *buffer)
-{
- return ldns_buffer_remaining_at(buffer, buffer->_position);
-}
-
-/**
- * checks if the buffer has at least COUNT more bytes available.
- * Before reading or writing the caller needs to ensure enough space
- * is available!
- * \param[in] buffer the buffer
- * \param[in] at indicated position
- * \param[in] count how much is available
- * \return true or false (as int?)
- */
-INLINE int
-ldns_buffer_available_at(const ldns_buffer *buffer, size_t at, size_t count)
-{
- return count <= ldns_buffer_remaining_at(buffer, at);
-}
-
-/**
- * checks if the buffer has count bytes available at the current position
- * \param[in] buffer the buffer
- * \param[in] count how much is available
- * \return true or false (as int?)
- */
-INLINE int
-ldns_buffer_available(const ldns_buffer *buffer, size_t count)
-{
- return ldns_buffer_available_at(buffer, buffer->_position, count);
-}
-
-/**
- * writes the given data to the buffer at the specified position
- * \param[in] buffer the buffer
- * \param[in] at the position (in number of bytes) to write the data at
- * \param[in] data pointer to the data to write to the buffer
- * \param[in] count the number of bytes of data to write
- */
-INLINE void
-ldns_buffer_write_at(ldns_buffer *buffer, size_t at, const void *data, size_t count)
-{
- assert(ldns_buffer_available_at(buffer, at, count));
- memcpy(buffer->_data + at, data, count);
-}
-
-/**
- * writes count bytes of data to the current position of the buffer
- * \param[in] buffer the buffer
- * \param[in] data the data to write
- * \param[in] count the length of the data to write
- */
-INLINE void
-ldns_buffer_write(ldns_buffer *buffer, const void *data, size_t count)
-{
- ldns_buffer_write_at(buffer, buffer->_position, data, count);
- buffer->_position += count;
-}
-
-/**
- * copies the given (null-delimited) string to the specified position at the buffer
- * \param[in] buffer the buffer
- * \param[in] at the position in the buffer
- * \param[in] str the string to write
- */
-INLINE void
-ldns_buffer_write_string_at(ldns_buffer *buffer, size_t at, const char *str)
-{
- ldns_buffer_write_at(buffer, at, str, strlen(str));
-}
-
-/**
- * copies the given (null-delimited) string to the current position at the buffer
- * \param[in] buffer the buffer
- * \param[in] str the string to write
- */
-INLINE void
-ldns_buffer_write_string(ldns_buffer *buffer, const char *str)
-{
- ldns_buffer_write(buffer, str, strlen(str));
-}
-
-/**
- * writes the given byte of data at the given position in the buffer
- * \param[in] buffer the buffer
- * \param[in] at the position in the buffer
- * \param[in] data the 8 bits to write
- */
-INLINE void
-ldns_buffer_write_u8_at(ldns_buffer *buffer, size_t at, uint8_t data)
-{
- assert(ldns_buffer_available_at(buffer, at, sizeof(data)));
- buffer->_data[at] = data;
-}
-
-/**
- * writes the given byte of data at the current position in the buffer
- * \param[in] buffer the buffer
- * \param[in] data the 8 bits to write
- */
-INLINE void
-ldns_buffer_write_u8(ldns_buffer *buffer, uint8_t data)
-{
- ldns_buffer_write_u8_at(buffer, buffer->_position, data);
- buffer->_position += sizeof(data);
-}
-
-/**
- * writes the given 2 byte integer at the given position in the buffer
- * \param[in] buffer the buffer
- * \param[in] at the position in the buffer
- * \param[in] data the 16 bits to write
- */
-INLINE void
-ldns_buffer_write_u16_at(ldns_buffer *buffer, size_t at, uint16_t data)
-{
- assert(ldns_buffer_available_at(buffer, at, sizeof(data)));
- ldns_write_uint16(buffer->_data + at, data);
-}
-
-/**
- * writes the given 2 byte integer at the current position in the buffer
- * \param[in] buffer the buffer
- * \param[in] data the 16 bits to write
- */
-INLINE void
-ldns_buffer_write_u16(ldns_buffer *buffer, uint16_t data)
-{
- ldns_buffer_write_u16_at(buffer, buffer->_position, data);
- buffer->_position += sizeof(data);
-}
-
-/**
- * writes the given 4 byte integer at the given position in the buffer
- * \param[in] buffer the buffer
- * \param[in] at the position in the buffer
- * \param[in] data the 32 bits to write
- */
-INLINE void
-ldns_buffer_write_u32_at(ldns_buffer *buffer, size_t at, uint32_t data)
-{
- assert(ldns_buffer_available_at(buffer, at, sizeof(data)));
- ldns_write_uint32(buffer->_data + at, data);
-}
-
-/**
- * writes the given 4 byte integer at the current position in the buffer
- * \param[in] buffer the buffer
- * \param[in] data the 32 bits to write
- */
-INLINE void
-ldns_buffer_write_u32(ldns_buffer *buffer, uint32_t data)
-{
- ldns_buffer_write_u32_at(buffer, buffer->_position, data);
- buffer->_position += sizeof(data);
-}
-
-/**
- * copies count bytes of data at the given position to the given data-array
- * \param[in] buffer the buffer
- * \param[in] at the position in the buffer to start
- * \param[out] data buffer to copy to
- * \param[in] count the length of the data to copy
- */
-INLINE void
-ldns_buffer_read_at(const ldns_buffer *buffer, size_t at, void *data, size_t count)
-{
- assert(ldns_buffer_available_at(buffer, at, count));
- memcpy(data, buffer->_data + at, count);
-}
-
-/**
- * copies count bytes of data at the current position to the given data-array
- * \param[in] buffer the buffer
- * \param[out] data buffer to copy to
- * \param[in] count the length of the data to copy
- */
-INLINE void
-ldns_buffer_read(ldns_buffer *buffer, void *data, size_t count)
-{
- ldns_buffer_read_at(buffer, buffer->_position, data, count);
- buffer->_position += count;
-}
-
-/**
- * returns the byte value at the given position in the buffer
- * \param[in] buffer the buffer
- * \param[in] at the position in the buffer
- * \return 1 byte integer
- */
-INLINE uint8_t
-ldns_buffer_read_u8_at(const ldns_buffer *buffer, size_t at)
-{
- assert(ldns_buffer_available_at(buffer, at, sizeof(uint8_t)));
- return buffer->_data[at];
-}
-
-/**
- * returns the byte value at the current position in the buffer
- * \param[in] buffer the buffer
- * \return 1 byte integer
- */
-INLINE uint8_t
-ldns_buffer_read_u8(ldns_buffer *buffer)
-{
- uint8_t result = ldns_buffer_read_u8_at(buffer, buffer->_position);
- buffer->_position += sizeof(uint8_t);
- return result;
-}
-
-/**
- * returns the 2-byte integer value at the given position in the buffer
- * \param[in] buffer the buffer
- * \param[in] at position in the buffer
- * \return 2 byte integer
- */
-INLINE uint16_t
-ldns_buffer_read_u16_at(ldns_buffer *buffer, size_t at)
-{
- assert(ldns_buffer_available_at(buffer, at, sizeof(uint16_t)));
- return ldns_read_uint16(buffer->_data + at);
-}
-
-/**
- * returns the 2-byte integer value at the current position in the buffer
- * \param[in] buffer the buffer
- * \return 2 byte integer
- */
-INLINE uint16_t
-ldns_buffer_read_u16(ldns_buffer *buffer)
-{
- uint16_t result = ldns_buffer_read_u16_at(buffer, buffer->_position);
- buffer->_position += sizeof(uint16_t);
- return result;
-}
-
-/**
- * returns the 4-byte integer value at the given position in the buffer
- * \param[in] buffer the buffer
- * \param[in] at position in the buffer
- * \return 4 byte integer
- */
-INLINE uint32_t
-ldns_buffer_read_u32_at(ldns_buffer *buffer, size_t at)
-{
- assert(ldns_buffer_available_at(buffer, at, sizeof(uint32_t)));
- return ldns_read_uint32(buffer->_data + at);
-}
-
-/**
- * returns the 4-byte integer value at the current position in the buffer
- * \param[in] buffer the buffer
- * \return 4 byte integer
- */
-INLINE uint32_t
-ldns_buffer_read_u32(ldns_buffer *buffer)
-{
- uint32_t result = ldns_buffer_read_u32_at(buffer, buffer->_position);
- buffer->_position += sizeof(uint32_t);
- return result;
-}
-
-/**
- * returns the status of the buffer
- * \param[in] buffer
- * \return the status
- */
-INLINE ldns_status
-ldns_buffer_status(const ldns_buffer *buffer)
-{
- return buffer->_status;
-}
-
-/**
- * returns true if the status of the buffer is LDNS_STATUS_OK, false otherwise
- * \param[in] buffer the buffer
- * \return true or false
- */
-INLINE bool
-ldns_buffer_status_ok(const ldns_buffer *buffer)
-{
- if (buffer) {
- return ldns_buffer_status(buffer) == LDNS_STATUS_OK;
- } else {
- return false;
- }
-}
-
-/**
- * prints to the buffer, increasing the capacity if required using
- * buffer_reserve(). The buffer's position is set to the terminating '\\0'
- * Returns the number of characters written (not including the
- * terminating '\\0') or -1 on failure.
- */
-int ldns_buffer_printf(ldns_buffer *buffer, const char *format, ...);
-/* ATTR_FORMAT(printf, 2, 3);*/
-
-/**
- * frees the buffer.
- * \param[in] *buffer the buffer to be freed
- * \return void
- */
-void ldns_buffer_free(ldns_buffer *buffer);
-
-/**
- * Makes the buffer fixed and returns a pointer to the data. The
- * caller is responsible for free'ing the result.
- * \param[in] *buffer the buffer to be exported
- * \return void
- */
-void *ldns_buffer_export(ldns_buffer *buffer);
-
-/**
- * Copy contents of the from buffer to the result buffer and then flips
- * the result buffer. Data will be silently truncated if the result buffer is
- * too small.
- * \param[out] *result resulting buffer which is copied to.
- * \param[in] *from what to copy to result.
- */
-void ldns_buffer_copy(ldns_buffer* result, const ldns_buffer* from);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_BUFFER_H */
diff --git a/ldns/ldns/common.h.in b/ldns/ldns/common.h.in
deleted file mode 100644
index 805eb8b..0000000
--- a/ldns/ldns/common.h.in
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * \file common.h
- *
- * Common definitions for LDNS
- */
-
-/**
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2004-2006
- *
- * See the file LICENSE for the license
- */
-
-#ifndef LDNS_COMMON_H
-#define LDNS_COMMON_H
-
-/*
- * The build configuration that is used in the distributed headers,
- * as detected and determined by the auto configure script.
- */
-#define LDNS_BUILD_CONFIG_HAVE_SSL @ldns_build_config_have_ssl@
-#define LDNS_BUILD_CONFIG_HAVE_INTTYPES_H @ldns_build_config_have_inttypes_h@
-#define LDNS_BUILD_CONFIG_HAVE_ATTR_FORMAT @ldns_build_config_have_attr_format@
-#define LDNS_BUILD_CONFIG_HAVE_ATTR_UNUSED @ldns_build_config_have_attr_unused@
-#define LDNS_BUILD_CONFIG_HAVE_SOCKLEN_T @ldns_build_config_have_socklen_t@
-#define LDNS_BUILD_CONFIG_USE_DANE @ldns_build_config_use_dane@
-#define LDNS_BUILD_CONFIG_HAVE_B32_PTON @ldns_build_config_have_b32_pton@
-#define LDNS_BUILD_CONFIG_HAVE_B32_NTOP @ldns_build_config_have_b32_ntop@
-
-/*
- * HAVE_STDBOOL_H is not available when distributed as a library, but no build
- * configuration variables may be used (like those above) because the header
- * is sometimes only available when using special compiler flags to enable the
- * c99 environment. Because we cannot force the usage of this flag, we have to
- * provide a default type. Below what is suggested by the autoconf manual.
- */
-/*@ignore@*/
-/* splint barfs on this construct */
-#ifndef __bool_true_false_are_defined
-# ifdef HAVE_STDBOOL_H
-# include <stdbool.h>
-# else
-# ifndef HAVE__BOOL
-# ifdef __cplusplus
-typedef bool _Bool;
-# else
-# define _Bool signed char
-# endif
-# endif
-# define bool _Bool
-# define false 0
-# define true 1
-# define __bool_true_false_are_defined 1
-# endif
-#endif
-/*@end@*/
-
-#if LDNS_BUILD_CONFIG_HAVE_ATTR_FORMAT
-#define ATTR_FORMAT(archetype, string_index, first_to_check) \
- __attribute__ ((format (archetype, string_index, first_to_check)))
-#else /* !LDNS_BUILD_CONFIG_HAVE_ATTR_FORMAT */
-#define ATTR_FORMAT(archetype, string_index, first_to_check) /* empty */
-#endif /* !LDNS_BUILD_CONFIG_HAVE_ATTR_FORMAT */
-
-#if defined(__cplusplus)
-#define ATTR_UNUSED(x)
-#elif LDNS_BUILD_CONFIG_HAVE_ATTR_UNUSED
-#define ATTR_UNUSED(x) x __attribute__((unused))
-#else /* !LDNS_BUILD_CONFIG_HAVE_ATTR_UNUSED */
-#define ATTR_UNUSED(x) x
-#endif /* !LDNS_BUILD_CONFIG_HAVE_ATTR_UNUSED */
-
-#if !LDNS_BUILD_CONFIG_HAVE_SOCKLEN_T
-typedef int socklen_t;
-#endif
-
-#endif /* LDNS_COMMON_H */
diff --git a/ldns/ldns/config.h.in b/ldns/ldns/config.h.in
deleted file mode 100644
index 9ca8a05..0000000
--- a/ldns/ldns/config.h.in
+++ /dev/null
@@ -1,677 +0,0 @@
-/* ldns/config.h.in. Generated from configure.ac by autoheader. */
-
-/* Define if building universal (internal helper macro) */
-#undef AC_APPLE_UNIVERSAL_BUILD
-
-/* Define to 1 if you have the <arpa/inet.h> header file. */
-#undef HAVE_ARPA_INET_H
-
-/* Whether the C compiler accepts the "format" attribute */
-#undef HAVE_ATTR_FORMAT
-
-/* Whether the C compiler accepts the "unused" attribute */
-#undef HAVE_ATTR_UNUSED
-
-/* Define to 1 if you have the `b32_ntop' function. */
-#undef HAVE_B32_NTOP
-
-/* Define to 1 if you have the `b32_pton' function. */
-#undef HAVE_B32_PTON
-
-/* Define to 1 if you have the `b64_ntop' function. */
-#undef HAVE_B64_NTOP
-
-/* Define to 1 if you have the `b64_pton' function. */
-#undef HAVE_B64_PTON
-
-/* Define to 1 if you have the `bzero' function. */
-#undef HAVE_BZERO
-
-/* Define to 1 if you have the `calloc' function. */
-#undef HAVE_CALLOC
-
-/* Define to 1 if you have the `ctime_r' function. */
-#undef HAVE_CTIME_R
-
-/* Is a CAFILE given at configure time */
-#undef HAVE_DANE_CA_FILE
-
-/* Is a CAPATH given at configure time */
-#undef HAVE_DANE_CA_PATH
-
-/* Define to 1 if you have the declaration of `NID_ED25519', and to 0 if you
- don't. */
-#undef HAVE_DECL_NID_ED25519
-
-/* Define to 1 if you have the declaration of `NID_ED448', and to 0 if you
- don't. */
-#undef HAVE_DECL_NID_ED448
-
-/* Define to 1 if you have the declaration of `NID_secp384r1', and to 0 if you
- don't. */
-#undef HAVE_DECL_NID_SECP384R1
-
-/* Define to 1 if you have the declaration of `NID_X9_62_prime256v1', and to 0
- if you don't. */
-#undef HAVE_DECL_NID_X9_62_PRIME256V1
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#undef HAVE_DLFCN_H
-
-/* Define to 1 if you have the `DSA_get0_key' function. */
-#undef HAVE_DSA_GET0_KEY
-
-/* Define to 1 if you have the `DSA_get0_pqg' function. */
-#undef HAVE_DSA_GET0_PQG
-
-/* Define to 1 if you have the `DSA_SIG_get0' function. */
-#undef HAVE_DSA_SIG_GET0
-
-/* Define to 1 if you have the `DSA_SIG_set0' function. */
-#undef HAVE_DSA_SIG_SET0
-
-/* Define to 1 if you have the `ECDSA_SIG_get0' function. */
-#undef HAVE_ECDSA_SIG_GET0
-
-/* Define to 1 if you have the `endprotoent' function. */
-#undef HAVE_ENDPROTOENT
-
-/* Define to 1 if you have the `endservent' function. */
-#undef HAVE_ENDSERVENT
-
-/* Define to 1 if you have the `ENGINE_load_cryptodev' function. */
-#undef HAVE_ENGINE_LOAD_CRYPTODEV
-
-/* Define to 1 if you have the `ERR_load_crypto_strings' function. */
-#undef HAVE_ERR_LOAD_CRYPTO_STRINGS
-
-/* Define to 1 if you have the `EVP_dss1' function. */
-#undef HAVE_EVP_DSS1
-
-/* Define to 1 if you have the `EVP_MD_CTX_new' function. */
-#undef HAVE_EVP_MD_CTX_NEW
-
-/* Define to 1 if you have the `EVP_PKEY_base_id' function. */
-#undef HAVE_EVP_PKEY_BASE_ID
-
-/* Define to 1 if you have the `EVP_PKEY_keygen' function. */
-#undef HAVE_EVP_PKEY_KEYGEN
-
-/* Define to 1 if you have the `EVP_sha256' function. */
-#undef HAVE_EVP_SHA256
-
-/* Define to 1 if you have the `EVP_sha384' function. */
-#undef HAVE_EVP_SHA384
-
-/* Define to 1 if you have the `EVP_sha512' function. */
-#undef HAVE_EVP_SHA512
-
-/* Define to 1 if you have the `fcntl' function. */
-#undef HAVE_FCNTL
-
-/* Define to 1 if you have the `fork' function. */
-#undef HAVE_FORK
-
-/* Whether getaddrinfo is available */
-#undef HAVE_GETADDRINFO
-
-/* Define to 1 if you have the <getopt.h> header file. */
-#undef HAVE_GETOPT_H
-
-/* Define to 1 if you have the `gmtime_r' function. */
-#undef HAVE_GMTIME_R
-
-/* If you have HMAC_Update */
-#undef HAVE_HMAC_UPDATE
-
-/* Define to 1 if you have the `inet_aton' function. */
-#undef HAVE_INET_ATON
-
-/* Define to 1 if you have the `inet_ntop' function. */
-#undef HAVE_INET_NTOP
-
-/* Define to 1 if you have the `inet_pton' function. */
-#undef HAVE_INET_PTON
-
-/* define if you have inttypes.h */
-#undef HAVE_INTTYPES_H
-
-/* if the function 'ioctlsocket' is available */
-#undef HAVE_IOCTLSOCKET
-
-/* Define to 1 if you have the `isascii' function. */
-#undef HAVE_ISASCII
-
-/* Define to 1 if you have the `isblank' function. */
-#undef HAVE_ISBLANK
-
-/* Define to 1 if you have the `pcap' library (-lpcap). */
-#undef HAVE_LIBPCAP
-
-/* Define if we have LibreSSL */
-#undef HAVE_LIBRESSL
-
-/* Define to 1 if you have the `localtime_r' function. */
-#undef HAVE_LOCALTIME_R
-
-/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
- to 0 otherwise. */
-#undef HAVE_MALLOC
-
-/* Define to 1 if you have the `memmove' function. */
-#undef HAVE_MEMMOVE
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if you have the `memset' function. */
-#undef HAVE_MEMSET
-
-/* Define to 1 if you have the <netdb.h> header file. */
-#undef HAVE_NETDB_H
-
-/* Define to 1 if you have the <netinet/if_ether.h> header file. */
-#undef HAVE_NETINET_IF_ETHER_H
-
-/* Define to 1 if you have the <netinet/igmp.h> header file. */
-#undef HAVE_NETINET_IGMP_H
-
-/* Define to 1 if you have the <netinet/in.h> header file. */
-#undef HAVE_NETINET_IN_H
-
-/* Define to 1 if you have the <netinet/in_systm.h> header file. */
-#undef HAVE_NETINET_IN_SYSTM_H
-
-/* Define to 1 if you have the <netinet/ip6.h> header file. */
-#undef HAVE_NETINET_IP6_H
-
-/* Define to 1 if you have the <netinet/ip_compat.h> header file. */
-#undef HAVE_NETINET_IP_COMPAT_H
-
-/* Define to 1 if you have the <netinet/ip.h> header file. */
-#undef HAVE_NETINET_IP_H
-
-/* Define to 1 if you have the <netinet/udp.h> header file. */
-#undef HAVE_NETINET_UDP_H
-
-/* Define to 1 if you have the <net/ethernet.h> header file. */
-#undef HAVE_NET_ETHERNET_H
-
-/* Define to 1 if you have the <net/if.h> header file. */
-#undef HAVE_NET_IF_H
-
-/* Define to 1 if you have the <openssl/err.h> header file. */
-#undef HAVE_OPENSSL_ERR_H
-
-/* Define to 1 if you have the `OPENSSL_init_crypto' function. */
-#undef HAVE_OPENSSL_INIT_CRYPTO
-
-/* Define to 1 if you have the `OPENSSL_init_ssl' function. */
-#undef HAVE_OPENSSL_INIT_SSL
-
-/* Define to 1 if you have the <openssl/rand.h> header file. */
-#undef HAVE_OPENSSL_RAND_H
-
-/* Define to 1 if you have the <openssl/ssl.h> header file. */
-#undef HAVE_OPENSSL_SSL_H
-
-/* Define to 1 if you have the <pcap.h> header file. */
-#undef HAVE_PCAP_H
-
-/* This platform supports poll(7). */
-#undef HAVE_POLL
-
-/* If available, contains the Python version number currently in use. */
-#undef HAVE_PYTHON
-
-/* Define to 1 if you have the `random' function. */
-#undef HAVE_RANDOM
-
-/* Define to 1 if your system has a GNU libc compatible `realloc' function,
- and to 0 otherwise. */
-#undef HAVE_REALLOC
-
-/* Define to 1 if you have the `sleep' function. */
-#undef HAVE_SLEEP
-
-/* Define to 1 if you have the `snprintf' function. */
-#undef HAVE_SNPRINTF
-
-/* Define if you have the SSL libraries installed. */
-#undef HAVE_SSL
-
-/* Define to 1 if you have the <stdarg.h> header file. */
-#undef HAVE_STDARG_H
-
-/* Define to 1 if stdbool.h conforms to C99. */
-#undef HAVE_STDBOOL_H
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the `strlcpy' function. */
-#undef HAVE_STRLCPY
-
-/* Define to 1 if you have the `strtoul' function. */
-#undef HAVE_STRTOUL
-
-/* Define if you have SWIG libraries and header files. */
-#undef HAVE_SWIG
-
-/* Define to 1 if you have the <sys/mount.h> header file. */
-#undef HAVE_SYS_MOUNT_H
-
-/* Define to 1 if you have the <sys/param.h> header file. */
-#undef HAVE_SYS_PARAM_H
-
-/* define if you have sys/socket.h */
-#undef HAVE_SYS_SOCKET_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* define if you have sys/types.h */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the `timegm' function. */
-#undef HAVE_TIMEGM
-
-/* Define to 1 if you have the <time.h> header file. */
-#undef HAVE_TIME_H
-
-/* define if you have unistd.h */
-#undef HAVE_UNISTD_H
-
-/* Define to 1 if you have the `vfork' function. */
-#undef HAVE_VFORK
-
-/* Define to 1 if you have the <vfork.h> header file. */
-#undef HAVE_VFORK_H
-
-/* Define to 1 if you have the <winsock2.h> header file. */
-#undef HAVE_WINSOCK2_H
-
-/* Define to 1 if `fork' works. */
-#undef HAVE_WORKING_FORK
-
-/* Define to 1 if `vfork' works. */
-#undef HAVE_WORKING_VFORK
-
-/* Define to 1 if you have the <ws2tcpip.h> header file. */
-#undef HAVE_WS2TCPIP_H
-
-/* Define to 1 if the system has the type `_Bool'. */
-#undef HAVE__BOOL
-
-/* Is a CAFILE given at configure time */
-#undef LDNS_DANE_CA_FILE
-
-/* Is a CAPATH given at configure time */
-#undef LDNS_DANE_CA_PATH
-
-/* Define to the sub-directory where libtool stores uninstalled libraries. */
-#undef LT_OBJDIR
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the home page for this package. */
-#undef PACKAGE_URL
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Define this to enable RR type AMTRELAY. */
-#undef RRTYPE_AMTRELAY
-
-/* Define this to enable RR type AVC. */
-#undef RRTYPE_AVC
-
-/* Define this to enable RR type DOA. */
-#undef RRTYPE_DOA
-
-/* Define this to enable RR type NINFO. */
-#undef RRTYPE_NINFO
-
-/* Define this to enable RR type OPENPGPKEY. */
-#undef RRTYPE_OPENPGPKEY
-
-/* Define this to enable RR type RKEY. */
-#undef RRTYPE_RKEY
-
-/* Define this to enable RR type TA. */
-#undef RRTYPE_TA
-
-/* The size of `time_t', as computed by sizeof. */
-#undef SIZEOF_TIME_T
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define this to enable messages to stderr. */
-#undef STDERR_MSGS
-
-/* System configuration dir */
-#undef SYSCONFDIR
-
-/* Define this to enable DANE support. */
-#undef USE_DANE
-
-/* Define this to enable DANE-TA usage type support. */
-#undef USE_DANE_TA_USAGE
-
-/* Define this to enable DANE verify support. */
-#undef USE_DANE_VERIFY
-
-/* Define this to enable DSA support. */
-#undef USE_DSA
-
-/* Define this to enable ECDSA support. */
-#undef USE_ECDSA
-
-/* Define this to enable ED25519 support. */
-#undef USE_ED25519
-
-/* Define this to enable ED448 support. */
-#undef USE_ED448
-
-/* Define this to enable GOST support. */
-#undef USE_GOST
-
-/* Define this to enable SHA256 and SHA512 support. */
-#undef USE_SHA2
-
-/* Enable extensions on AIX 3, Interix. */
-#ifndef _ALL_SOURCE
-# undef _ALL_SOURCE
-#endif
-/* Enable GNU extensions on systems that have them. */
-#ifndef _GNU_SOURCE
-# undef _GNU_SOURCE
-#endif
-/* Enable threading extensions on Solaris. */
-#ifndef _POSIX_PTHREAD_SEMANTICS
-# undef _POSIX_PTHREAD_SEMANTICS
-#endif
-/* Enable extensions on HP NonStop. */
-#ifndef _TANDEM_SOURCE
-# undef _TANDEM_SOURCE
-#endif
-/* Enable general extensions on Solaris. */
-#ifndef __EXTENSIONS__
-# undef __EXTENSIONS__
-#endif
-
-
-/* Whether the windows socket API is used */
-#undef USE_WINSOCK
-
-/* the version of the windows API enabled */
-#undef WINVER
-
-/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
- significant byte first (like Motorola and SPARC, unlike Intel). */
-#if defined AC_APPLE_UNIVERSAL_BUILD
-# if defined __BIG_ENDIAN__
-# define WORDS_BIGENDIAN 1
-# endif
-#else
-# ifndef WORDS_BIGENDIAN
-# undef WORDS_BIGENDIAN
-# endif
-#endif
-
-/* Define to 1 if on MINIX. */
-#undef _MINIX
-
-/* Enable for compile on Minix */
-#undef _NETBSD_SOURCE
-
-/* Define to 2 if the system does not provide POSIX.1 features except with
- this defined. */
-#undef _POSIX_1_SOURCE
-
-/* Define to 1 if you need to in order for `stat' and other things to work. */
-#undef _POSIX_SOURCE
-
-/* Define to empty if `const' does not conform to ANSI C. */
-#undef const
-
-/* in_addr_t */
-#undef in_addr_t
-
-/* in_port_t */
-#undef in_port_t
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
- calls it, or to nothing if 'inline' is not supported under any name. */
-#ifndef __cplusplus
-#undef inline
-#endif
-
-/* Define to `short' if <sys/types.h> does not define. */
-#undef int16_t
-
-/* Define to `int' if <sys/types.h> does not define. */
-#undef int32_t
-
-/* Define to `long long' if <sys/types.h> does not define. */
-#undef int64_t
-
-/* Define to `char' if <sys/types.h> does not define. */
-#undef int8_t
-
-/* Define to `size_t' if <sys/types.h> does not define. */
-#undef intptr_t
-
-/* Define to rpl_malloc if the replacement function should be used. */
-#undef malloc
-
-/* Define to `int' if <sys/types.h> does not define. */
-#undef pid_t
-
-/* Define to rpl_realloc if the replacement function should be used. */
-#undef realloc
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-#undef size_t
-
-/* Define to 'int' if not defined */
-#undef socklen_t
-
-/* Fallback member name for socket family in struct sockaddr_storage */
-#undef ss_family
-
-/* Define to `int' if <sys/types.h> does not define. */
-#undef ssize_t
-
-/* Define to `unsigned short' if <sys/types.h> does not define. */
-#undef uint16_t
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-#undef uint32_t
-
-/* Define to `unsigned long long' if <sys/types.h> does not define. */
-#undef uint64_t
-
-/* Define to `unsigned char' if <sys/types.h> does not define. */
-#undef uint8_t
-
-/* Define as `fork' if `vfork' does not work. */
-#undef vfork
-
-
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <assert.h>
-
-#ifndef LITTLE_ENDIAN
-#define LITTLE_ENDIAN 1234
-#endif
-
-#ifndef BIG_ENDIAN
-#define BIG_ENDIAN 4321
-#endif
-
-#ifndef BYTE_ORDER
-#ifdef WORDS_BIGENDIAN
-#define BYTE_ORDER BIG_ENDIAN
-#else
-#define BYTE_ORDER LITTLE_ENDIAN
-#endif /* WORDS_BIGENDIAN */
-#endif /* BYTE_ORDER */
-
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-#ifdef HAVE_WINSOCK2_H
-#include <winsock2.h>
-#endif
-
-#ifdef HAVE_WS2TCPIP_H
-#include <ws2tcpip.h>
-#endif
-
-
-/* detect if we need to cast to unsigned int for FD_SET to avoid warnings */
-#ifdef HAVE_WINSOCK2_H
-#define FD_SET_T (u_int)
-#else
-#define FD_SET_T
-#endif
-
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int ldns_b64_ntop(uint8_t const *src, size_t srclength,
- char *target, size_t targsize);
-/**
- * calculates the size needed to store the result of b64_ntop
- */
-/*@unused@*/
-static inline size_t ldns_b64_ntop_calculate_size(size_t srcsize)
-{
- return ((((srcsize + 2) / 3) * 4) + 1);
-}
-int ldns_b64_pton(char const *src, uint8_t *target, size_t targsize);
-/**
- * calculates the size needed to store the result of ldns_b64_pton
- */
-/*@unused@*/
-static inline size_t ldns_b64_pton_calculate_size(size_t srcsize)
-{
- return (((((srcsize + 3) / 4) * 3)) + 1);
-}
-
-/**
- * Given in dnssec_zone.c, also used in dnssec_sign.c:w
-
- */
-int ldns_dname_compare_v(const void *a, const void *b);
-
-#ifndef HAVE_SLEEP
-/* use windows sleep, in millisecs, instead */
-#define sleep(x) Sleep((x)*1000)
-#endif
-
-#ifndef HAVE_RANDOM
-#define srandom(x) srand(x)
-#define random(x) rand(x)
-#endif
-
-#ifndef HAVE_TIMEGM
-#include <time.h>
-time_t timegm (struct tm *tm);
-#endif /* !TIMEGM */
-#ifndef HAVE_GMTIME_R
-struct tm *gmtime_r(const time_t *timep, struct tm *result);
-#endif
-#ifndef HAVE_LOCALTIME_R
-struct tm *localtime_r(const time_t *timep, struct tm *result);
-#endif
-#ifndef HAVE_ISBLANK
-int isblank(int c);
-#endif /* !HAVE_ISBLANK */
-#ifndef HAVE_ISASCII
-int isascii(int c);
-#endif /* !HAVE_ISASCII */
-#ifndef HAVE_SNPRINTF
-#include <stdarg.h>
-int snprintf (char *str, size_t count, const char *fmt, ...);
-int vsnprintf (char *str, size_t count, const char *fmt, va_list arg);
-#endif /* HAVE_SNPRINTF */
-#ifndef HAVE_INET_PTON
-int inet_pton(int af, const char* src, void* dst);
-#endif /* HAVE_INET_PTON */
-#ifndef HAVE_INET_NTOP
-const char *inet_ntop(int af, const void *src, char *dst, size_t size);
-#endif
-#ifndef HAVE_INET_ATON
-int inet_aton(const char *cp, struct in_addr *addr);
-#endif
-#ifndef HAVE_MEMMOVE
-void *memmove(void *dest, const void *src, size_t n);
-#endif
-#ifndef HAVE_STRLCPY
-size_t strlcpy(char *dst, const char *src, size_t siz);
-#endif
-
-#ifdef USE_WINSOCK
-#define SOCK_INVALID INVALID_SOCKET
-#define close_socket(_s) do { if (_s != SOCK_INVALID) {closesocket(_s); _s = -1;} } while(0)
-#else
-#define SOCK_INVALID -1
-#define close_socket(_s) do { if (_s != SOCK_INVALID) {close(_s); _s = -1;} } while(0)
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#ifndef HAVE_GETADDRINFO
-#include "compat/fake-rfc2553.h"
-#endif
-#ifndef HAVE_STRTOUL
-#define strtoul (unsigned long)strtol
-#endif
-
diff --git a/ldns/ldns/dane.h b/ldns/ldns/dane.h
deleted file mode 100644
index 3bde546..0000000
--- a/ldns/ldns/dane.h
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * dane.h -- defines for the DNS-Based Authentication of Named Entities (DANE)
- * Transport Layer Security (TLS) Protocol: TLSA
- *
- * Copyright (c) 2012, NLnet Labs. All rights reserved.
- *
- * See LICENSE for the license.
- *
- */
-
-/**
- * \file
- *
- * This module contains base functions for creating and verifying TLSA RR's
- * with PKIX certificates, certificate chains and validation stores.
- * (See RFC6394 and RFC6698).
- *
- * Since those functions heavily rely op cryptographic operations,
- * this module is dependent on openssl.
- */
-
-
-#ifndef LDNS_DANE_H
-#define LDNS_DANE_H
-
-#include <ldns/common.h>
-#include <ldns/rdata.h>
-#include <ldns/rr.h>
-#if LDNS_BUILD_CONFIG_HAVE_SSL
-#include <openssl/ssl.h>
-#include <openssl/err.h>
-#endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * The different "Certificate usage" rdata field values for a TLSA RR.
- */
-enum ldns_enum_tlsa_certificate_usage
-{
- /** CA constraint */
- LDNS_TLSA_USAGE_PKIX_TA = 0,
- LDNS_TLSA_USAGE_CA_CONSTRAINT = 0,
- /** Sevice certificate constraint */
- LDNS_TLSA_USAGE_PKIX_EE = 1,
- LDNS_TLSA_USAGE_SERVICE_CERTIFICATE_CONSTRAINT = 1,
- /** Trust anchor assertion */
- LDNS_TLSA_USAGE_DANE_TA = 2,
- LDNS_TLSA_USAGE_TRUST_ANCHOR_ASSERTION = 2,
- /** Domain issued certificate */
- LDNS_TLSA_USAGE_DANE_EE = 3,
- LDNS_TLSA_USAGE_DOMAIN_ISSUED_CERTIFICATE = 3,
- /** Reserved for Private Use */
- LDNS_TLSA_USAGE_PRIVCERT = 255
-};
-typedef enum ldns_enum_tlsa_certificate_usage ldns_tlsa_certificate_usage;
-
-/**
- * The different "Selector" rdata field values for a TLSA RR.
- */
-enum ldns_enum_tlsa_selector
-{
- /**
- * Full certificate: the Certificate binary structure
- * as defined in [RFC5280]
- */
- LDNS_TLSA_SELECTOR_CERT = 0,
- LDNS_TLSA_SELECTOR_FULL_CERTIFICATE = 0,
-
- /**
- * SubjectPublicKeyInfo: DER-encoded binary structure
- * as defined in [RFC5280]
- */
- LDNS_TLSA_SELECTOR_SPKI = 1,
- LDNS_TLSA_SELECTOR_SUBJECTPUBLICKEYINFO = 1,
-
- /** Reserved for Private Use */
- LDNS_TLSA_SELECTOR_PRIVSEL = 255
-};
-typedef enum ldns_enum_tlsa_selector ldns_tlsa_selector;
-
-/**
- * The different "Matching type" rdata field values for a TLSA RR.
- */
-enum ldns_enum_tlsa_matching_type
-{
- /** Exact match on selected content */
- LDNS_TLSA_MATCHING_TYPE_FULL = 0,
- LDNS_TLSA_MATCHING_TYPE_NO_HASH_USED = 0,
- /** SHA-256 hash of selected content [RFC6234] */
- LDNS_TLSA_MATCHING_TYPE_SHA2_256 = 1,
- LDNS_TLSA_MATCHING_TYPE_SHA256 = 1,
- /** SHA-512 hash of selected content [RFC6234] */
- LDNS_TLSA_MATCHING_TYPE_SHA2_512 = 2,
- LDNS_TLSA_MATCHING_TYPE_SHA512 = 2,
- /** Reserved for Private Use */
- LDNS_TLSA_MATCHING_TYPE_PRIVMATCH = 255
-};
-typedef enum ldns_enum_tlsa_matching_type ldns_tlsa_matching_type;
-
-/**
- * Known transports to use with TLSA owner names.
- */
-enum ldns_enum_dane_transport
-{
- /** TCP */
- LDNS_DANE_TRANSPORT_TCP = 0,
- /** UDP */
- LDNS_DANE_TRANSPORT_UDP = 1,
- /** SCTP */
- LDNS_DANE_TRANSPORT_SCTP = 2
-};
-typedef enum ldns_enum_dane_transport ldns_dane_transport;
-
-
-#if LDNS_BUILD_CONFIG_USE_DANE
-/**
- * Creates a dname consisting of the given name, prefixed by the service port
- * and type of transport: _<EM>port</EM>._<EM>transport</EM>.<EM>name</EM>.
- *
- * \param[out] tlsa_owner The created dname.
- * \param[in] name The dname that should be prefixed.
- * \param[in] port The service port number for which the name should be created.
- * \param[in] transport The transport for which the name should be created.
- * \return LDNS_STATUS_OK on success or an error code otherwise.
- */
-ldns_status ldns_dane_create_tlsa_owner(ldns_rdf** tlsa_owner,
- const ldns_rdf* name, uint16_t port,
- ldns_dane_transport transport);
-
-
-#if LDNS_BUILD_CONFIG_HAVE_SSL
-/**
- * Creates a LDNS_RDF_TYPE_HEX type rdf based on the binary data chosen by
- * the selector and encoded using matching_type.
- *
- * \param[out] rdf The created created rdf of type LDNS_RDF_TYPE_HEX.
- * \param[in] cert The certificate from which the data is selected
- * \param[in] selector The full certificate or the public key
- * \param[in] matching_type The full data or the SHA256 or SHA512 hash
- * of the selected data
- * \return LDNS_STATUS_OK on success or an error code otherwise.
- */
-ldns_status ldns_dane_cert2rdf(ldns_rdf** rdf, X509* cert,
- ldns_tlsa_selector selector,
- ldns_tlsa_matching_type matching_type);
-
-
-/**
- * Selects the certificate from cert, extra_certs or the pkix_validation_store
- * based on the value of cert_usage and index.
- *
- * \param[out] selected_cert The selected cert.
- * \param[in] cert The certificate to validate (or not)
- * \param[in] extra_certs Intermediate certificates that might be necessary
- * during validation. May be NULL, except when the certificate
- * usage is "Trust Anchor Assertion" because the trust anchor has
- * to be provided.(otherwise choose a "Domain issued certificate!"
- * \param[in] pkix_validation_store Used when the certificate usage is
- * "CA constraint" or "Service Certificate Constraint" to
- * validate the certificate and, in case of "CA constraint",
- * select the CA.
- * When pkix_validation_store is NULL, validation is explicitly
- * turned off and the behaviour is then the same as for "Trust
- * anchor assertion" and "Domain issued certificate" respectively.
- * \param[in] cert_usage Which certificate to use and how to validate.
- * \param[in] index Used to select the trust anchor when certificate usage
- * is "Trust Anchor Assertion". 0 is the last certificate in the
- * validation chain. 1 the one but last, etc. When index is -1,
- * the last certificate is used that MUST be self-signed.
- * This can help to make sure that the intended (self signed)
- * trust anchor is actually present in extra_certs (which is a
- * DANE requirement).
- *
- * \return LDNS_STATUS_OK on success or an error code otherwise.
- */
-ldns_status ldns_dane_select_certificate(X509** selected_cert,
- X509* cert, STACK_OF(X509)* extra_certs,
- X509_STORE* pkix_validation_store,
- ldns_tlsa_certificate_usage cert_usage, int index);
-
-/**
- * Creates a TLSA resource record from the certificate.
- * No PKIX validation is performed! The given certificate is used as data
- * regardless the value of certificate_usage.
- *
- * \param[out] tlsa The created TLSA resource record.
- * \param[in] certificate_usage The value for the Certificate Usage field
- * \param[in] selector The value for the Selector field
- * \param[in] matching_type The value for the Matching Type field
- * \param[in] cert The certificate which data will be represented
- *
- * \return LDNS_STATUS_OK on success or an error code otherwise.
- */
-ldns_status ldns_dane_create_tlsa_rr(ldns_rr** tlsa,
- ldns_tlsa_certificate_usage certificate_usage,
- ldns_tlsa_selector selector,
- ldns_tlsa_matching_type matching_type,
- X509* cert);
-
-/**
- * BEWARE! We strongly recommend to use OpenSSL 1.1.0 dane verification
- * functions instead of the ones provided by ldns. When OpenSSL 1.1.0 was
- * available ldns will use the OpenSSL 1.1.0 dane verification functions
- * under the hood. When ldns was linked with OpenSSL < 1.1.0, this function
- * will not be able to verify TLSA records with DANE-TA usage types.
- *
- * BEWARE! The ldns dane verification functions do *not* do server name
- * checks. The user has to perform additional server name checks themselves!
- *
- * Verify if the given TLSA resource record matches the given certificate.
- * Reporting on a TLSA rr mismatch (LDNS_STATUS_DANE_TLSA_DID_NOT_MATCH)
- * is preferred over PKIX failure (LDNS_STATUS_DANE_PKIX_DID_NOT_VALIDATE).
- * So when PKIX validation is required by the TLSA Certificate usage,
- * but the TLSA data does not match, LDNS_STATUS_DANE_TLSA_DID_NOT_MATCH
- * is returned whether the PKIX validated or not.
- *
- * When ldns is linked with OpenSSL < 1.1.0 and this function is available,
- * then the DANE-TA usage type will not be verified, and on a tlsa_rr with
- * this usage type,
- * LDNS_STATUS_DANE_NEED_OPENSSL_GE_1_1_FOR_DANE_TA will be returned.
- *
- * \param[in] tlsa_rr The resource record that specifies what and how to
- * match the certificate. With tlsa_rr == NULL, regular PKIX
- * validation is performed.
- * \param[in] cert The certificate to match (and validate)
- * \param[in] extra_certs Intermediate certificates that might be necessary
- * creating the validation chain.
- * \param[in] pkix_validation_store Used when the certificate usage is
- * "CA constraint" or "Service Certificate Constraint" to
- * validate the certificate.
- *
- * \return LDNS_STATUS_OK on success,
- * LDNS_STATUS_DANE_NEED_OPENSSL_GE_1_1_FOR_DANE_TA when the
- * provided TLSA had the DANE-TA usage type,
- * LDNS_STATUS_DANE_TLSA_DID_NOT_MATCH on TLSA data mismatch,
- * LDNS_STATUS_DANE_PKIX_DID_NOT_VALIDATE when TLSA matched,
- * but the PKIX validation failed, or other ldns_status errors.
- */
-ldns_status ldns_dane_verify_rr(const ldns_rr* tlsa_rr,
- X509* cert, STACK_OF(X509)* extra_certs,
- X509_STORE* pkix_validation_store);
-
-/**
- * BEWARE! We strongly recommend to use OpenSSL 1.1.0 dane verification
- * functions instead of the ones provided by ldns. When OpenSSL 1.1.0 was
- * available ldns will use the OpenSSL 1.1.0 dane verification functions
- * under the hood. When ldns was linked with OpenSSL < 1.1.0, this function
- * will not be able to verify TLSA records with DANE-TA usage types.
- *
- * BEWARE! The ldns dane verification functions do *not* do server name
- * checks. The user has to perform additional server name checks themselves!
- *
- * Verify if any of the given TLSA resource records matches the given
- * certificate.
- *
- * \param[in] tlsas The resource records that specify what and how to
- * match the certificate. One must match for this function
- * to succeed. With tlsas == NULL or the number of TLSA records
- * in tlsas == 0, regular PKIX validation is performed.
- * \param[in] cert The certificate to match (and validate)
- * \param[in] extra_certs Intermediate certificates that might be necessary
- * creating the validation chain.
- * \param[in] pkix_validation_store Used when the certificate usage is
- * "CA constraint" or "Service Certificate Constraint" to
- * validate the certificate.
- *
- * \return LDNS_STATUS_OK on success,
- * LDNS_STATUS_DANE_NEED_OPENSSL_GE_1_1_FOR_DANE_TA when at least one
- * of the TLSA's had usage type DANE-TA and none of the TLSA's matched
- * or PKIX validated,
- * LDNS_STATUS_DANE_PKIX_DID_NOT_VALIDATE when one of the TLSA's
- * matched but the PKIX validation failed,
- * LDNS_STATUS_DANE_TLSA_DID_NOT_MATCH when none of the TLSA's matched,
- * or other ldns_status errors.
- */
-ldns_status ldns_dane_verify(const ldns_rr_list* tlsas,
- X509* cert, STACK_OF(X509)* extra_certs,
- X509_STORE* pkix_validation_store);
-#endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
-#endif /* LDNS_BUILD_CONFIG_USE_DANE */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_DANE_H */
-
diff --git a/ldns/ldns/dname.h b/ldns/ldns/dname.h
deleted file mode 100644
index b76e823..0000000
--- a/ldns/ldns/dname.h
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * dname.h
- *
- * dname definitions
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2004-2006
- *
- * See the file LICENSE for the license
- */
-
-/**
- * \file dname.h
- *
- * dname contains function to read and manipulate domain names.
- *
- * Example domain names are "www.nlnetlabs.nl." and "." (the root)
- *
- * If a domain name ends with a dot ("."), it is called a Fully Qualified
- * Domain Name (FQDN). In certain places (for instance when reading a zone
- * file), an origin (which is just another domain name) non-FQDNs will be
- * placed after the current. For instance, if i have a zone file where the
- * origin has been set to "nl.", and my file contains the name
- * "www.nlnetlabs", it will result in "www.nlnetlabs.nl.". Internally, dnames are
- * always absolute (the dot is added when it is missing and there is no origin).
- *
- * An FQDN is also
- * known as an absolute domain name, therefore the function to check this is
- * called \ref ldns_dname_str_absolute
- *
- * Domain names are stored in \ref ldns_rdf structures, with the type
- * \ref LDNS_RDF_TYPE_DNAME
- *
- * This module is *NOT* about the RR type called DNAME.
- */
-
-
-#ifndef LDNS_DNAME_H
-#define LDNS_DNAME_H
-
-#include <ldns/common.h>
-#include <ldns/rdata.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define LDNS_DNAME_NORMALIZE tolower
-
-/**
- * concatenates two dnames together
- * \param[in] rd1 the leftside
- * \param[in] rd2 the rightside
- * \return a new rdf with leftside/rightside
- */
-ldns_rdf *ldns_dname_cat_clone(const ldns_rdf *rd1, const ldns_rdf *rd2);
-
-/**
- * concatenates rd2 after rd1 (rd2 is copied, rd1 is modified)
- * \param[in] rd1 the leftside
- * \param[in] rd2 the rightside
- * \return LDNS_STATUS_OK on success
- */
-ldns_status ldns_dname_cat(ldns_rdf *rd1, const ldns_rdf *rd2);
-
-/**
- * Returns a clone of the given dname with the labels
- * reversed
- * \param[in] d the dname to reverse
- * \return clone of the dname with the labels reversed.
- */
-ldns_rdf *ldns_dname_reverse(const ldns_rdf *d);
-
-/**
- * Clones the given dname from the nth label on
- * \param[in] d The dname to clone
- * \param[in] n the label nr to clone from, if this is 0, the complete
- * dname is cloned
- * \return A newly allocated *rdf structure, containing the cloned dname,
- * or NULL if either d was NULL, not a dname, or if n >=
- * label_count
- */
-ldns_rdf *
-ldns_dname_clone_from(const ldns_rdf *d, uint16_t n);
-
-/**
- * chop one label off the left side of a dname. so
- * wwww.nlnetlabs.nl, becomes nlnetlabs.nl
- * This new name is a clone and must be freed with ldns_deep_free()
- * \param[in] d the dname to chop
- * \return the remaining dname
- */
-ldns_rdf *ldns_dname_left_chop(const ldns_rdf *d);
-
-/**
- * count the number of labels inside a LDNS_RDF_DNAME type rdf.
- * \param[in] *r the rdf
- * \return the number of labels
- */
-uint8_t ldns_dname_label_count(const ldns_rdf *r);
-
-/**
- * creates a new dname rdf from a string.
- * \param[in] str string to use
- * \return ldns_rdf* or NULL in case of an error
- */
-ldns_rdf *ldns_dname_new_frm_str(const char *str);
-
-/**
- * Create a new dname rdf from a string. The data pointer
- * is stored in the rdf, not a copy of the data
- * \param[in] s the size of the new dname
- * \param[in] *data pointer to the actual data
- *
- * \return ldns_rdf*
- */
-ldns_rdf *ldns_dname_new(uint16_t s, void *data);
-
-/**
- * Create a new dname rdf from data (the data is copied)
- * \param[in] size the size of the data
- * \param[in] *data pointer to the actual data
- *
- * \return ldns_rdf*
- */
-ldns_rdf *ldns_dname_new_frm_data(uint16_t size, const void *data);
-
-/**
- * Put a dname into canonical fmt - ie. lowercase it
- * \param[in] rdf the dname to lowercase
- * \return void
- */
-void ldns_dname2canonical(const ldns_rdf *rdf);
-
-/**
- * test whether the name sub falls under parent (i.e. is a subdomain
- * of parent). This function will return false if the given dnames are
- * equal.
- * \param[in] sub the name to test
- * \param[in] parent the parent's name
- * \return true if sub falls under parent, otherwise false
- */
-bool ldns_dname_is_subdomain(const ldns_rdf *sub, const ldns_rdf *parent);
-
-/**
- * Compares the two dname rdf's according to the algorithm for ordering
- * in RFC4034 Section 6.
- * \param[in] dname1 First dname rdf to compare
- * \param[in] dname2 Second dname rdf to compare
- * \return -1 if dname1 comes before dname2, 1 if dname1 comes after dname2, and 0 if they are equal.
- */
-int ldns_dname_compare(const ldns_rdf *dname1, const ldns_rdf *dname2);
-int ldns_dname_compare_v(const void *, const void *);
-
-/**
- * Checks whether the dname matches the given wildcard
- * \param[in] dname The dname to check
- * \param[in] wildcard The wildcard to check with
- * \return 1 If the wildcard matches, OR if 'wildcard' is not a wildcard and
- * the names are *exactly* the same
- * 0 If the wildcard does not match, or if it is not a wildcard and
- * the names are not the same
- */
-int ldns_dname_match_wildcard(const ldns_rdf *dname, const ldns_rdf *wildcard);
-
-/**
- * check if middle lays in the interval defined by prev and next
- * prev <= middle < next. This is useful for nsec checking
- * \param[in] prev the previous dname
- * \param[in] middle the dname to check
- * \param[in] next the next dname
- * return 0 on error or unknown, -1 when middle is in the interval, +1 when not
- */
-int ldns_dname_interval(const ldns_rdf *prev, const ldns_rdf *middle, const ldns_rdf *next);
-
-/**
- * Checks whether the given dname string is absolute (i.e. ends with a '.')
- * \param[in] *dname_str a string representing the dname
- * \return true or false
- */
-bool ldns_dname_str_absolute(const char *dname_str);
-
-/**
- * Checks whether the given dname is absolute (i.e. ends with a '.')
- * \param[in] *dname a rdf representing the dname
- * \return true or false
- */
-bool ldns_dname_absolute(const ldns_rdf *dname);
-
-/**
- * look inside the rdf and if it is an LDNS_RDF_TYPE_DNAME
- * try and retrieve a specific label. The labels are numbered
- * starting from 0 (left most).
- * \param[in] rdf the rdf to look in
- * \param[in] labelpos return the label with this number
- * \return a ldns_rdf* with the label as name or NULL on error
- */
-ldns_rdf * ldns_dname_label(const ldns_rdf *rdf, uint8_t labelpos);
-
-/**
- * Check if dname is a wildcard, starts with *.
- * \param[in] dname: the rdf to look in
- * \return true if a wildcard, false if not.
- */
-int ldns_dname_is_wildcard(const ldns_rdf* dname);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_DNAME_H */
diff --git a/ldns/ldns/dnssec.h b/ldns/ldns/dnssec.h
deleted file mode 100644
index 9881fda..0000000
--- a/ldns/ldns/dnssec.h
+++ /dev/null
@@ -1,565 +0,0 @@
-/*
- * dnssec.h -- defines for the Domain Name System (SEC) (DNSSEC)
- *
- * Copyright (c) 2005-2008, NLnet Labs. All rights reserved.
- *
- * See LICENSE for the license.
- *
- * A bunch of defines that are used in the DNS
- */
-
-/**
- * \file dnssec.h
- *
- * This module contains base functions for DNSSEC operations
- * (RFC4033 t/m RFC4035).
- *
- * Since those functions heavily rely op cryptographic operations,
- * this module is dependent on openssl.
- *
- */
-
-
-#ifndef LDNS_DNSSEC_H
-#define LDNS_DNSSEC_H
-
-#include <ldns/common.h>
-#if LDNS_BUILD_CONFIG_HAVE_SSL
-#include <openssl/ssl.h>
-#include <openssl/evp.h>
-#endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
-#include <ldns/packet.h>
-#include <ldns/keys.h>
-#include <ldns/zone.h>
-#include <ldns/resolver.h>
-#include <ldns/dnssec_zone.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define LDNS_MAX_KEYLEN 2048
-#define LDNS_DNSSEC_KEYPROTO 3
-/* default time before sigs expire */
-#define LDNS_DEFAULT_EXP_TIME 2419200 /* 4 weeks */
-
-/** return values for the old-signature callback */
-#define LDNS_SIGNATURE_LEAVE_ADD_NEW 0
-#define LDNS_SIGNATURE_LEAVE_NO_ADD 1
-#define LDNS_SIGNATURE_REMOVE_ADD_NEW 2
-#define LDNS_SIGNATURE_REMOVE_NO_ADD 3
-
-/**
- * Returns the first RRSIG rr that corresponds to the rrset
- * with the given name and type
- *
- * \param[in] name The dname of the RRset covered by the RRSIG to find
- * \param[in] type The type of the RRset covered by the RRSIG to find
- * \param[in] rrs List of rrs to search in
- * \returns Pointer to the first RRsig ldns_rr found, or NULL if it is
- * not present
- */
-ldns_rr *ldns_dnssec_get_rrsig_for_name_and_type(const ldns_rdf *name,
- const ldns_rr_type type,
- const ldns_rr_list *rrs);
-
-/**
- * Returns the DNSKEY that corresponds to the given RRSIG rr from the list, if
- * any
- *
- * \param[in] rrsig The rrsig to find the DNSKEY for
- * \param[in] rrs The rr list to find the key in
- * \return The DNSKEY that corresponds to the given RRSIG, or NULL if it was
- * not found.
- */
-ldns_rr *ldns_dnssec_get_dnskey_for_rrsig(const ldns_rr *rrsig, const ldns_rr_list *rrs);
-
-/**
- * Returns the rdata field that contains the bitmap of the covered types of
- * the given NSEC record
- *
- * \param[in] nsec The nsec to get the covered type bitmap of
- * \return An ldns_rdf containing the bitmap, or NULL on error
- */
-ldns_rdf *ldns_nsec_get_bitmap(const ldns_rr *nsec);
-
-
-#define LDNS_NSEC3_MAX_ITERATIONS 65535
-
-/**
- * Returns the dname of the closest (provable) encloser
- */
-ldns_rdf *
-ldns_dnssec_nsec3_closest_encloser(const ldns_rdf *qname,
- ldns_rr_type qtype,
- const ldns_rr_list *nsec3s);
-
-/**
- * Checks whether the packet contains rrsigs
- */
-bool
-ldns_dnssec_pkt_has_rrsigs(const ldns_pkt *pkt);
-
-/**
- * Returns a ldns_rr_list containing the signatures covering the given name
- * and type
- */
-ldns_rr_list *ldns_dnssec_pkt_get_rrsigs_for_name_and_type(const ldns_pkt *pkt, const ldns_rdf *name, ldns_rr_type type);
-
-/**
- * Returns a ldns_rr_list containing the signatures covering the given type
- */
-ldns_rr_list *ldns_dnssec_pkt_get_rrsigs_for_type(const ldns_pkt *pkt, ldns_rr_type type);
-
-/**
- * calculates a keytag of a key for use in DNSSEC.
- *
- * \param[in] key the key as an RR to use for the calc.
- * \return the keytag
- */
-uint16_t ldns_calc_keytag(const ldns_rr *key);
-
-/**
- * Calculates keytag of DNSSEC key, operates on wireformat rdata.
- * \param[in] key the key as uncompressed wireformat rdata.
- * \param[in] keysize length of key data.
- * \return the keytag
- */
-uint16_t ldns_calc_keytag_raw(const uint8_t* key, size_t keysize);
-
-#if LDNS_BUILD_CONFIG_HAVE_SSL
-/**
- * converts a buffer holding key material to a DSA key in openssl.
- *
- * \param[in] key the key to convert
- * \return a DSA * structure with the key material
- */
-DSA *ldns_key_buf2dsa(const ldns_buffer *key);
-/**
- * Like ldns_key_buf2dsa, but uses raw buffer.
- * \param[in] key the uncompressed wireformat of the key.
- * \param[in] len length of key data
- * \return a DSA * structure with the key material
- */
-DSA *ldns_key_buf2dsa_raw(const unsigned char* key, size_t len);
-
-/**
- * Utility function to calculate hash using generic EVP_MD pointer.
- * \param[in] data the data to hash.
- * \param[in] len length of data.
- * \param[out] dest the destination of the hash, must be large enough.
- * \param[in] md the message digest to use.
- * \return true if worked, false on failure.
- */
-int ldns_digest_evp(const unsigned char* data, unsigned int len,
- unsigned char* dest, const EVP_MD* md);
-
-/**
- * Converts a holding buffer with key material to EVP PKEY in openssl.
- * Only available if ldns was compiled with GOST.
- * \param[in] key data to convert
- * \param[in] keylen length of the key data
- * \return the key or NULL on error.
- */
-EVP_PKEY* ldns_gost2pkey_raw(const unsigned char* key, size_t keylen);
-
-/**
- * Converts a holding buffer with key material to EVP PKEY in openssl.
- * Only available if ldns was compiled with ECDSA.
- * \param[in] key data to convert
- * \param[in] keylen length of the key data
- * \param[in] algo precise algorithm to initialize ECC group values.
- * \return the key or NULL on error.
- */
-EVP_PKEY* ldns_ecdsa2pkey_raw(const unsigned char* key, size_t keylen, uint8_t algo);
-
-/**
- * Converts a holding buffer with key material to EVP PKEY in openssl.
- * Only available if ldns was compiled with ED25519.
- * \param[in] key data to convert
- * \param[in] keylen length of the key data
- * \return the key or NULL on error.
- */
-EVP_PKEY* ldns_ed255192pkey_raw(const unsigned char* key, size_t keylen);
-
-/**
- * Converts a holding buffer with key material to EVP PKEY in openssl.
- * Only available if ldns was compiled with ED448.
- * \param[in] key data to convert
- * \param[in] keylen length of the key data
- * \return the key or NULL on error.
- */
-EVP_PKEY* ldns_ed4482pkey_raw(const unsigned char* key, size_t keylen);
-
-#endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
-
-#if LDNS_BUILD_CONFIG_HAVE_SSL
-/**
- * converts a buffer holding key material to a RSA key in openssl.
- *
- * \param[in] key the key to convert
- * \return a RSA * structure with the key material
- */
-RSA *ldns_key_buf2rsa(const ldns_buffer *key);
-
-/**
- * Like ldns_key_buf2rsa, but uses raw buffer.
- * \param[in] key the uncompressed wireformat of the key.
- * \param[in] len length of key data
- * \return a RSA * structure with the key material
- */
-RSA *ldns_key_buf2rsa_raw(const unsigned char* key, size_t len);
-#endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
-
-/**
- * returns a new DS rr that represents the given key rr.
- *
- * \param[in] *key the key to convert
- * \param[in] h the hash to use LDNS_SHA1/LDNS_SHA256
- *
- * \return ldns_rr* a new rr pointer to a DS
- */
-ldns_rr *ldns_key_rr2ds(const ldns_rr *key, ldns_hash h);
-
-/**
- * Create the type bitmap for an NSEC(3) record
- */
-ldns_rdf *
-ldns_dnssec_create_nsec_bitmap(ldns_rr_type rr_type_list[],
- size_t size,
- ldns_rr_type nsec_type);
-
-/**
- * returns whether a rrset of the given type is found in the rrsets.
- *
- * \param[in] rrsets the rrsets to be tested
- * \param[in] type the type to test for
- * \return int 1 if the type was found, 0 otherwise.
- */
-int
-ldns_dnssec_rrsets_contains_type(const ldns_dnssec_rrsets *rrsets, ldns_rr_type type);
-
-/**
- * Creates NSEC
- */
-ldns_rr *
-ldns_dnssec_create_nsec(const ldns_dnssec_name *from,
- const ldns_dnssec_name *to,
- ldns_rr_type nsec_type);
-
-
-/**
- * Creates NSEC3
- */
-ldns_rr *
-ldns_dnssec_create_nsec3(const ldns_dnssec_name *from,
- const ldns_dnssec_name *to,
- const ldns_rdf *zone_name,
- uint8_t algorithm,
- uint8_t flags,
- uint16_t iterations,
- uint8_t salt_length,
- const uint8_t *salt);
-
-/**
- * Create a NSEC record
- * \param[in] cur_owner the current owner which should be taken as the starting point
- * \param[in] next_owner the rrlist which the nsec rr should point to
- * \param[in] rrs all rrs from the zone, to find all RR types of cur_owner in
- * \return a ldns_rr with the nsec record in it
- */
-ldns_rr * ldns_create_nsec(ldns_rdf *cur_owner, ldns_rdf *next_owner, ldns_rr_list *rrs);
-
-/**
- * Calculates the hashed name using the given parameters
- * \param[in] *name The owner name to calculate the hash for
- * \param[in] algorithm The hash algorithm to use
- * \param[in] iterations The number of hash iterations to use
- * \param[in] salt_length The length of the salt in bytes
- * \param[in] salt The salt to use
- * \return The hashed owner name rdf, without the domain name
- */
-ldns_rdf *ldns_nsec3_hash_name(const ldns_rdf *name, uint8_t algorithm, uint16_t iterations, uint8_t salt_length, const uint8_t *salt);
-
-/**
- * Sets all the NSEC3 options. The rr to set them in must be initialized with _new() and
- * type LDNS_RR_TYPE_NSEC3
- * \param[in] *rr The RR to set the values in
- * \param[in] algorithm The NSEC3 hash algorithm
- * \param[in] flags The flags field
- * \param[in] iterations The number of hash iterations
- * \param[in] salt_length The length of the salt in bytes
- * \param[in] salt The salt bytes
- */
-void ldns_nsec3_add_param_rdfs(ldns_rr *rr,
- uint8_t algorithm,
- uint8_t flags,
- uint16_t iterations,
- uint8_t salt_length,
- const uint8_t *salt);
-
-/* this will NOT return the NSEC3 completed, you will have to run the
- finalize function on the rrlist later! */
-ldns_rr *
-ldns_create_nsec3(const ldns_rdf *cur_owner,
- const ldns_rdf *cur_zone,
- const ldns_rr_list *rrs,
- uint8_t algorithm,
- uint8_t flags,
- uint16_t iterations,
- uint8_t salt_length,
- const uint8_t *salt,
- bool emptynonterminal);
-
-/**
- * Returns the hash algorithm used in the given NSEC3 RR
- * \param[in] *nsec3_rr The RR to read from
- * \return The algorithm identifier, or 0 on error
- */
-uint8_t ldns_nsec3_algorithm(const ldns_rr *nsec3_rr);
-
-/**
- * Returns flags field
- */
-uint8_t
-ldns_nsec3_flags(const ldns_rr *nsec3_rr);
-
-/**
- * Returns true if the opt-out flag has been set in the given NSEC3 RR
- * \param[in] *nsec3_rr The RR to read from
- * \return true if the RR has type NSEC3 and the opt-out bit has been set, false otherwise
- */
-bool ldns_nsec3_optout(const ldns_rr *nsec3_rr);
-
-/**
- * Returns the number of hash iterations used in the given NSEC3 RR
- * \param[in] *nsec3_rr The RR to read from
- * \return The number of iterations
- */
-uint16_t ldns_nsec3_iterations(const ldns_rr *nsec3_rr);
-
-/**
- * Returns the salt used in the given NSEC3 RR
- * \param[in] *nsec3_rr The RR to read from
- * \return The salt rdf, or NULL on error
- */
-ldns_rdf *ldns_nsec3_salt(const ldns_rr *nsec3_rr);
-
-/**
- * Returns the length of the salt used in the given NSEC3 RR
- * \param[in] *nsec3_rr The RR to read from
- * \return The length of the salt in bytes
- */
-uint8_t ldns_nsec3_salt_length(const ldns_rr *nsec3_rr);
-
-/**
- * Returns the salt bytes used in the given NSEC3 RR
- * \param[in] *nsec3_rr The RR to read from
- * \return The salt in bytes, this is alloced, so you need to free it
- */
-uint8_t *ldns_nsec3_salt_data(const ldns_rr *nsec3_rr);
-
-/**
- * Returns the first label of the next ownername in the NSEC3 chain (ie. without the domain)
- * \param[in] nsec3_rr The RR to read from
- * \return The first label of the next owner name in the NSEC3 chain, or NULL on error
- */
-ldns_rdf *ldns_nsec3_next_owner(const ldns_rr *nsec3_rr);
-
-/**
- * Returns the bitmap specifying the covered types of the given NSEC3 RR
- * \param[in] *nsec3_rr The RR to read from
- * \return The covered type bitmap rdf
- */
-ldns_rdf *ldns_nsec3_bitmap(const ldns_rr *nsec3_rr);
-
-/**
- * Calculates the hashed name using the parameters of the given NSEC3 RR
- * \param[in] *nsec The RR to use the parameters from
- * \param[in] *name The owner name to calculate the hash for
- * \return The hashed owner name rdf, without the domain name
- */
-ldns_rdf *ldns_nsec3_hash_name_frm_nsec3(const ldns_rr *nsec, const ldns_rdf *name);
-
-/**
- * Check if RR type t is enumerated and set in the RR type bitmap rdf.
- * \param[in] bitmap the RR type bitmap rdf to look in
- * \param[in] type the type to check for
- * \return true when t is found and set, otherwise return false
- */
-bool ldns_nsec_bitmap_covers_type(const ldns_rdf* bitmap, ldns_rr_type type);
-
-/**
- * Checks if RR type t is enumerated in the type bitmap rdf and sets the bit.
- * \param[in] bitmap the RR type bitmap rdf to look in
- * \param[in] type the type to for which the bit to set
- * \return LDNS_STATUS_OK on success. LDNS_STATUS_TYPE_NOT_IN_BITMAP is
- * returned when the bitmap does not contain the bit to set.
- */
-ldns_status ldns_nsec_bitmap_set_type(ldns_rdf* bitmap, ldns_rr_type type);
-
-/**
- * Checks if RR type t is enumerated in the type bitmap rdf and clears the bit.
- * \param[in] bitmap the RR type bitmap rdf to look in
- * \param[in] type the type to for which the bit to clear
- * \return LDNS_STATUS_OK on success. LDNS_STATUS_TYPE_NOT_IN_BITMAP is
- * returned when the bitmap does not contain the bit to clear.
- */
-ldns_status ldns_nsec_bitmap_clear_type(ldns_rdf* bitmap, ldns_rr_type type);
-
-/**
- * Checks coverage of NSEC(3) RR name span
- * Remember that nsec and name must both be in canonical form (ie use
- * \ref ldns_rr2canonical and \ref ldns_dname2canonical prior to calling this
- * function)
- *
- * \param[in] nsec The NSEC RR to check
- * \param[in] name The owner dname to check, if the nsec record is a NSEC3 record, this should be the hashed name
- * \return true if the NSEC RR covers the owner name
- */
-bool ldns_nsec_covers_name(const ldns_rr *nsec, const ldns_rdf *name);
-
-#if LDNS_BUILD_CONFIG_HAVE_SSL
-/**
- * verify a packet
- * \param[in] p the packet
- * \param[in] t the rr set type to check
- * \param[in] o the rr set name to check
- * \param[in] k list of keys
- * \param[in] s list of sigs (may be null)
- * \param[out] good_keys keys which validated the packet
- * \return status
- *
- */
-ldns_status ldns_pkt_verify(const ldns_pkt *p, ldns_rr_type t, const ldns_rdf *o, const ldns_rr_list *k, const ldns_rr_list *s, ldns_rr_list *good_keys);
-
-/**
- * verify a packet
- * \param[in] p the packet
- * \param[in] t the rr set type to check
- * \param[in] o the rr set name to check
- * \param[in] k list of keys
- * \param[in] s list of sigs (may be null)
- * \param[in] check_time the time for which the validation is performed
- * \param[out] good_keys keys which validated the packet
- * \return status
- *
- */
-ldns_status ldns_pkt_verify_time(const ldns_pkt *p, ldns_rr_type t, const ldns_rdf *o, const ldns_rr_list *k, const ldns_rr_list *s, time_t check_time, ldns_rr_list *good_keys);
-
-#endif
-
-/**
- * chains nsec3 list
- */
-ldns_status
-ldns_dnssec_chain_nsec3_list(ldns_rr_list *nsec3_rrs);
-
-/**
- * compare for nsec3 sort
- */
-int
-qsort_rr_compare_nsec3(const void *a, const void *b);
-
-/**
- * sort nsec3 list
- */
-void
-ldns_rr_list_sort_nsec3(ldns_rr_list *unsorted);
-
-/**
- * Default callback function to always leave present signatures, and
- * add new ones
- * \param[in] sig The signature to check for removal (unused)
- * \param[in] n Optional argument (unused)
- * \return LDNS_SIGNATURE_LEAVE_ADD_NEW
- */
-int ldns_dnssec_default_add_to_signatures(ldns_rr *sig, void *n);
-/**
- * Default callback function to always leave present signatures, and
- * add no new ones for the keys of these signatures
- * \param[in] sig The signature to check for removal (unused)
- * \param[in] n Optional argument (unused)
- * \return LDNS_SIGNATURE_LEAVE_NO_ADD
- */
-int ldns_dnssec_default_leave_signatures(ldns_rr *sig, void *n);
-/**
- * Default callback function to always remove present signatures, but
- * add no new ones
- * \param[in] sig The signature to check for removal (unused)
- * \param[in] n Optional argument (unused)
- * \return LDNS_SIGNATURE_REMOVE_NO_ADD
- */
-int ldns_dnssec_default_delete_signatures(ldns_rr *sig, void *n);
-/**
- * Default callback function to always leave present signatures, and
- * add new ones
- * \param[in] sig The signature to check for removal (unused)
- * \param[in] n Optional argument (unused)
- * \return LDNS_SIGNATURE_REMOVE_ADD_NEW
- */
-int ldns_dnssec_default_replace_signatures(ldns_rr *sig, void *n);
-
-#if LDNS_BUILD_CONFIG_HAVE_SSL
-/**
- * Converts the DSA signature from ASN1 representation (RFC2459, as
- * used by OpenSSL) to raw signature data as used in DNS (rfc2536)
- *
- * \param[in] sig The signature in RFC2459 format
- * \param[in] sig_len The length of the signature
- * \return a new rdf with the signature
- */
-ldns_rdf *
-ldns_convert_dsa_rrsig_asn12rdf(const ldns_buffer *sig,
- const long sig_len);
-
-/**
- * Converts the RRSIG signature RDF (in rfc2536 format) to a buffer
- * with the signature in rfc2459 format
- *
- * \param[out] target_buffer buffer to place the signature data
- * \param[in] sig_rdf The signature rdf to convert
- * \return LDNS_STATUS_OK on success, error code otherwise
- */
-ldns_status
-ldns_convert_dsa_rrsig_rdf2asn1(ldns_buffer *target_buffer,
- const ldns_rdf *sig_rdf);
-
-/**
- * Converts the ECDSA signature from ASN1 representation (as
- * used by OpenSSL) to raw signature data as used in DNS
- * This routine is only present if ldns is compiled with ecdsa support.
- * The older ldns_convert_ecdsa_rrsig_asn12rdf routine could not (always)
- * construct a valid rdf because it did not have the num_bytes parameter.
- * The num_bytes parameter is 32 for p256 and 48 for p384 (bits/8).
- *
- * \param[in] sig The signature in ASN1 format
- * \param[in] sig_len The length of the signature
- * \param[in] num_bytes number of bytes for values in the curve, the curve
- * size divided by 8.
- * \return a new rdf with the signature
- */
-ldns_rdf *
-ldns_convert_ecdsa_rrsig_asn1len2rdf(const ldns_buffer *sig,
- const long sig_len, int num_bytes);
-
-/**
- * Converts the RRSIG signature RDF (from DNS) to a buffer with the
- * signature in ASN1 format as openssl uses it.
- * This routine is only present if ldns is compiled with ecdsa support.
- *
- * \param[out] target_buffer buffer to place the signature data in ASN1.
- * \param[in] sig_rdf The signature rdf to convert
- * \return LDNS_STATUS_OK on success, error code otherwise
- */
-ldns_status
-ldns_convert_ecdsa_rrsig_rdf2asn1(ldns_buffer *target_buffer,
- const ldns_rdf *sig_rdf);
-
-#endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_DNSSEC_H */
diff --git a/ldns/ldns/dnssec_sign.h b/ldns/ldns/dnssec_sign.h
deleted file mode 100644
index a88a46a..0000000
--- a/ldns/ldns/dnssec_sign.h
+++ /dev/null
@@ -1,384 +0,0 @@
-/** dnssec_verify */
-
-#ifndef LDNS_DNSSEC_SIGN_H
-#define LDNS_DNSSEC_SIGN_H
-
-#include <ldns/dnssec.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* sign functions */
-
-/** Sign flag that makes DNSKEY type signed by all keys, not only by SEP keys*/
-#define LDNS_SIGN_DNSKEY_WITH_ZSK 1
-#define LDNS_SIGN_WITH_ALL_ALGORITHMS 2
-
-/**
- * Create an empty RRSIG RR (i.e. without the actual signature data)
- * \param[in] rrset The RRset to create the signature for
- * \param[in] key The key that will create the signature
- * \return signature rr
- */
-ldns_rr *
-ldns_create_empty_rrsig(const ldns_rr_list *rrset,
- const ldns_key *key);
-
-/**
- * Sign the buffer which contains the wiredata of an rrset, and the
- * corresponding empty rrsig rr with the given key
- * \param[in] sign_buf the buffer with data to sign
- * \param[in] key the key to sign with
- * \return an rdata field with the signature data
- */
-ldns_rdf *
-ldns_sign_public_buffer(ldns_buffer *sign_buf, ldns_key *key);
-
-/**
- * Sign an rrset
- * \param[in] rrset the rrset
- * \param[in] keys the keys to use
- * \return a rr_list with the signatures
- */
-ldns_rr_list *ldns_sign_public(ldns_rr_list *rrset, ldns_key_list *keys);
-
-#if LDNS_BUILD_CONFIG_HAVE_SSL
-/**
- * Sign a buffer with the DSA key (hash with SHA1)
- * \param[in] to_sign buffer with the data
- * \param[in] key the key to use
- * \return a ldns_rdf with the signed data
- */
-ldns_rdf *ldns_sign_public_dsa(ldns_buffer *to_sign, DSA *key);
-
-/**
- * Sign data with EVP (general method for different algorithms)
- *
- * \param[in] to_sign The ldns_buffer containing raw data that is
- * to be signed
- * \param[in] key The EVP_PKEY key structure to sign with
- * \param[in] digest_type The digest algorithm to use in the creation of
- * the signature
- * \return ldns_rdf for the RRSIG ldns_rr
- */
-ldns_rdf *ldns_sign_public_evp(ldns_buffer *to_sign,
- EVP_PKEY *key,
- const EVP_MD *digest_type);
-
-/**
- * Sign a buffer with the RSA key (hash with SHA1)
- * \param[in] to_sign buffer with the data
- * \param[in] key the key to use
- * \return a ldns_rdf with the signed data
- */
-ldns_rdf *ldns_sign_public_rsasha1(ldns_buffer *to_sign, RSA *key);
-
-/**
- * Sign a buffer with the RSA key (hash with MD5)
- * \param[in] to_sign buffer with the data
- * \param[in] key the key to use
- * \return a ldns_rdf with the signed data
- */
-ldns_rdf *ldns_sign_public_rsamd5(ldns_buffer *to_sign, RSA *key);
-#endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
-
-/**
- * Marks the names in the zone that are occluded. Those names will be skipped
- * when walking the tree with the ldns_dnssec_name_node_next_nonglue()
- * function. But watch out! Names that are partially occluded (like glue with
- * the same name as the delegation) will not be marked and should specifically
- * be taken into account separately.
- *
- * When glue_list is given (not NULL), in the process of marking the names, all
- * glue resource records will be pushed to that list, even glue at the delegation name.
- *
- * \param[in] zone the zone in which to mark the names
- * \param[in] glue_list the list to which to push the glue rrs
- * \return LDNS_STATUS_OK on success, an error code otherwise
- */
-ldns_status
-ldns_dnssec_zone_mark_and_get_glue(
- ldns_dnssec_zone *zone, ldns_rr_list *glue_list);
-
-/**
- * Marks the names in the zone that are occluded. Those names will be skipped
- * when walking the tree with the ldns_dnssec_name_node_next_nonglue()
- * function. But watch out! Names that are partially occluded (like glue with
- * the same name as the delegation) will not be marked and should specifically
- * be taken into account separately.
- *
- * \param[in] zone the zone in which to mark the names
- * \return LDNS_STATUS_OK on succesful completion
- */
-ldns_status
-ldns_dnssec_zone_mark_glue(ldns_dnssec_zone *zone);
-
-/**
- * Finds the first dnssec_name node in the rbtree that is not occluded.
- * It *does* return names that are partially occluded.
- *
- * \param[in] node the first node to check
- * \return the first node that has not been marked as glue, or NULL
- * if not found (TODO: make that LDNS_RBTREE_NULL?)
- */
-ldns_rbnode_t *ldns_dnssec_name_node_next_nonglue(ldns_rbnode_t *node);
-
-/**
- * Adds NSEC records to the given dnssec_zone
- *
- * \param[in] zone the zone to add the records to
- * \param[in] new_rrs ldns_rr's created by this function are
- * added to this rr list, so the caller can free them later
- * \return LDNS_STATUS_OK on success, an error code otherwise
- */
-ldns_status ldns_dnssec_zone_create_nsecs(ldns_dnssec_zone *zone,
- ldns_rr_list *new_rrs);
-
-/**
- * Adds NSEC3 records to the zone
- */
-ldns_status
-ldns_dnssec_zone_create_nsec3s(ldns_dnssec_zone *zone,
- ldns_rr_list *new_rrs,
- uint8_t algorithm,
- uint8_t flags,
- uint16_t iterations,
- uint8_t salt_length,
- uint8_t *salt);
-
-/**
- * remove signatures if callback function tells to
- *
- * \param[in] signatures list of signatures to check, and
- * possibly remove, depending on the value of the
- * callback
- * \param[in] key_list these are marked to be used or not,
- * on the return value of the callback
- * \param[in] func this function is called to specify what to
- * do with each signature (and corresponding key)
- * \param[in] arg Optional argument for the callback function
- * \returns pointer to the new signatures rrs (the original
- * passed to this function may have been removed)
- */
-ldns_dnssec_rrs *ldns_dnssec_remove_signatures(ldns_dnssec_rrs *signatures,
- ldns_key_list *key_list,
- int (*func)(ldns_rr *, void *),
- void *arg);
-
-/**
- * Adds signatures to the zone
- *
- * \param[in] zone the zone to add RRSIG Resource Records to
- * \param[in] new_rrs the RRSIG RRs that are created are also
- * added to this list, so the caller can free them
- * later
- * \param[in] key_list list of keys to sign with.
- * \param[in] func Callback function to decide what keys to
- * use and what to do with old signatures
- * \param[in] arg Optional argument for the callback function
- * \param[in] flags option flags for signing process. 0 makes DNSKEY
- * RRset signed with the minimal key set, that is only SEP keys are used
- * for signing. If there are no SEP keys available, non-SEP keys will
- * be used. LDNS_SIGN_DNSKEY_WITH_ZSK makes DNSKEY type signed with all
- * keys. 0 is the default.
- * \return LDNS_STATUS_OK on success, error otherwise
- */
-ldns_status ldns_dnssec_zone_create_rrsigs_flg(ldns_dnssec_zone *zone,
- ldns_rr_list *new_rrs,
- ldns_key_list *key_list,
- int (*func)(ldns_rr *, void*),
- void *arg,
- int flags);
-
-/**
- * Adds signatures to the zone
- *
- * \param[in] zone the zone to add RRSIG Resource Records to
- * \param[in] new_rrs the RRSIG RRs that are created are also
- * added to this list, so the caller can free them
- * later
- * \param[in] key_list list of keys to sign with.
- * \param[in] func Callback function to decide what keys to
- * use and what to do with old signatures
- * \param[in] arg Optional argument for the callback function
- * \return LDNS_STATUS_OK on success, error otherwise
- */
-ldns_status ldns_dnssec_zone_create_rrsigs(ldns_dnssec_zone *zone,
- ldns_rr_list *new_rrs,
- ldns_key_list *key_list,
- int (*func)(ldns_rr *, void*),
- void *arg);
-
-/**
- * signs the given zone with the given keys
- *
- * \param[in] zone the zone to sign
- * \param[in] key_list the list of keys to sign the zone with
- * \param[in] new_rrs newly created resource records are added to this list, to free them later
- * \param[in] func callback function that decides what to do with old signatures
- * This function takes an ldns_rr* and an optional void *arg argument, and returns one of four values:
- * LDNS_SIGNATURE_LEAVE_ADD_NEW:
- * leave the signature and add a new one for the corresponding key
- * LDNS_SIGNATURE_REMOVE_ADD_NEW:
- * remove the signature and replace is with a new one from the same key
- * LDNS_SIGNATURE_LEAVE_NO_ADD:
- * leave the signature and do not add a new one with the corresponding key
- * LDNS_SIGNATURE_REMOVE_NO_ADD:
- * remove the signature and do not replace
- *
- * \param[in] arg optional argument for the callback function
- * \param[in] flags option flags for signing process. 0 makes DNSKEY
- * RRset signed with the minimal key set, that is only SEP keys are used
- * for signing. If there are no SEP keys available, non-SEP keys will
- * be used. LDNS_SIGN_DNSKEY_WITH_ZSK makes DNSKEY type signed with all
- * keys. 0 is the default.
- * \return LDNS_STATUS_OK on success, an error code otherwise
- */
-ldns_status ldns_dnssec_zone_sign_flg(ldns_dnssec_zone *zone,
- ldns_rr_list *new_rrs,
- ldns_key_list *key_list,
- int (*func)(ldns_rr *, void *),
- void *arg,
- int flags);
-
-/**
- * signs the given zone with the given new zone, with NSEC3
- *
- * \param[in] zone the zone to sign
- * \param[in] key_list the list of keys to sign the zone with
- * \param[in] new_rrs newly created resource records are added to this list, to free them later
- * \param[in] func callback function that decides what to do with old signatures
- * \param[in] arg optional argument for the callback function
- * \param[in] algorithm the NSEC3 hashing algorithm to use
- * \param[in] flags NSEC3 flags
- * \param[in] iterations the number of NSEC3 hash iterations to use
- * \param[in] salt_length the length (in octets) of the NSEC3 salt
- * \param[in] salt the NSEC3 salt data
- * \param[in] signflags option flags for signing process. 0 is the default.
- * \return LDNS_STATUS_OK on success, an error code otherwise
- */
-ldns_status ldns_dnssec_zone_sign_nsec3_flg(ldns_dnssec_zone *zone,
- ldns_rr_list *new_rrs,
- ldns_key_list *key_list,
- int (*func)(ldns_rr *, void *),
- void *arg,
- uint8_t algorithm,
- uint8_t flags,
- uint16_t iterations,
- uint8_t salt_length,
- uint8_t *salt,
- int signflags);
-
-/**
- * signs the given zone with the given new zone, with NSEC3
- *
- * \param[in] zone the zone to sign
- * \param[in] key_list the list of keys to sign the zone with
- * \param[in] new_rrs newly created resource records are added to this list, to free them later
- * \param[in] func callback function that decides what to do with old signatures
- * \param[in] arg optional argument for the callback function
- * \param[in] algorithm the NSEC3 hashing algorithm to use
- * \param[in] flags NSEC3 flags
- * \param[in] iterations the number of NSEC3 hash iterations to use
- * \param[in] salt_length the length (in octets) of the NSEC3 salt
- * \param[in] salt the NSEC3 salt data
- * \param[in] signflags option flags for signing process. 0 is the default.
- * \param[out] map a referenced rbtree pointer variable. The newly created
- * rbtree will contain mappings from hashed owner names to the
- * unhashed name.
- * \return LDNS_STATUS_OK on success, an error code otherwise
- */
-ldns_status ldns_dnssec_zone_sign_nsec3_flg_mkmap(ldns_dnssec_zone *zone,
- ldns_rr_list *new_rrs,
- ldns_key_list *key_list,
- int (*func)(ldns_rr *, void *),
- void *arg,
- uint8_t algorithm,
- uint8_t flags,
- uint16_t iterations,
- uint8_t salt_length,
- uint8_t *salt,
- int signflags,
- ldns_rbtree_t **map
- );
-
-
-/**
- * signs the given zone with the given keys
- *
- * \param[in] zone the zone to sign
- * \param[in] key_list the list of keys to sign the zone with
- * \param[in] new_rrs newly created resource records are added to this list, to free them later
- * \param[in] func callback function that decides what to do with old signatures
- * This function takes an ldns_rr* and an optional void *arg argument, and returns one of four values:
- * LDNS_SIGNATURE_LEAVE_ADD_NEW:
- * leave the signature and add a new one for the corresponding key
- * LDNS_SIGNATURE_REMOVE_ADD_NEW:
- * remove the signature and replace is with a new one from the same key
- * LDNS_SIGNATURE_LEAVE_NO_ADD:
- * leave the signature and do not add a new one with the corresponding key
- * LDNS_SIGNATURE_REMOVE_NO_ADD:
- * remove the signature and do not replace
- *
- * \param[in] arg optional argument for the callback function
- * \return LDNS_STATUS_OK on success, an error code otherwise
- */
-ldns_status ldns_dnssec_zone_sign(ldns_dnssec_zone *zone,
- ldns_rr_list *new_rrs,
- ldns_key_list *key_list,
- int (*func)(ldns_rr *, void *),
- void *arg);
-
-/**
- * signs the given zone with the given new zone, with NSEC3
- *
- * \param[in] zone the zone to sign
- * \param[in] key_list the list of keys to sign the zone with
- * \param[in] new_rrs newly created resource records are added to this list, to free them later
- * \param[in] func callback function that decides what to do with old signatures
- * \param[in] arg optional argument for the callback function
- * \param[in] algorithm the NSEC3 hashing algorithm to use
- * \param[in] flags NSEC3 flags
- * \param[in] iterations the number of NSEC3 hash iterations to use
- * \param[in] salt_length the length (in octets) of the NSEC3 salt
- * \param[in] salt the NSEC3 salt data
- * \return LDNS_STATUS_OK on success, an error code otherwise
- */
-ldns_status ldns_dnssec_zone_sign_nsec3(ldns_dnssec_zone *zone,
- ldns_rr_list *new_rrs,
- ldns_key_list *key_list,
- int (*func)(ldns_rr *, void *),
- void *arg,
- uint8_t algorithm,
- uint8_t flags,
- uint16_t iterations,
- uint8_t salt_length,
- uint8_t *salt);
-
-/**
- * Signs the zone, and returns a newly allocated signed zone
- * \param[in] zone the zone to sign
- * \param[in] key_list list of keys to sign with
- * \return signed zone
- */
-ldns_zone *ldns_zone_sign(const ldns_zone *zone, ldns_key_list *key_list);
-
-/**
- * Signs the zone with NSEC3, and returns a newly allocated signed zone
- * \param[in] zone the zone to sign
- * \param[in] key_list list of keys to sign with
- * \param[in] algorithm the NSEC3 hashing algorithm to use
- * \param[in] flags NSEC3 flags
- * \param[in] iterations the number of NSEC3 hash iterations to use
- * \param[in] salt_length the length (in octets) of the NSEC3 salt
- * \param[in] salt the NSEC3 salt data
- * \return signed zone
- */
-ldns_zone *ldns_zone_sign_nsec3(ldns_zone *zone, ldns_key_list *key_list, uint8_t algorithm, uint8_t flags, uint16_t iterations, uint8_t salt_length, uint8_t *salt);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/ldns/ldns/dnssec_verify.h b/ldns/ldns/dnssec_verify.h
deleted file mode 100644
index 80881c6..0000000
--- a/ldns/ldns/dnssec_verify.h
+++ /dev/null
@@ -1,857 +0,0 @@
-/** dnssec_verify */
-
-#ifndef LDNS_DNSSEC_VERIFY_H
-#define LDNS_DNSSEC_VERIFY_H
-
-#define LDNS_DNSSEC_TRUST_TREE_MAX_PARENTS 10
-
-#include <ldns/dnssec.h>
-#include <ldns/host2str.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Chain structure that contains all DNSSEC data needed to
- * verify an rrset
- */
-typedef struct ldns_dnssec_data_chain_struct ldns_dnssec_data_chain;
-struct ldns_dnssec_data_chain_struct
-{
- ldns_rr_list *rrset;
- ldns_rr_list *signatures;
- ldns_rr_type parent_type;
- ldns_dnssec_data_chain *parent;
- ldns_pkt_rcode packet_rcode;
- ldns_rr_type packet_qtype;
- bool packet_nodata;
-};
-
-/**
- * Creates a new dnssec_chain structure
- * \return ldns_dnssec_data_chain *
- */
-ldns_dnssec_data_chain *ldns_dnssec_data_chain_new(void);
-
-/**
- * Frees a dnssec_data_chain structure
- *
- * \param[in] *chain The chain to free
- */
-void ldns_dnssec_data_chain_free(ldns_dnssec_data_chain *chain);
-
-/**
- * Frees a dnssec_data_chain structure, and all data
- * contained therein
- *
- * \param[in] *chain The dnssec_data_chain to free
- */
-void ldns_dnssec_data_chain_deep_free(ldns_dnssec_data_chain *chain);
-
-/**
- * Prints the dnssec_data_chain to the given file stream
- *
- * \param[in] *out The file stream to print to
- * \param[in] *chain The dnssec_data_chain to print
- */
-void ldns_dnssec_data_chain_print(FILE *out, const ldns_dnssec_data_chain *chain);
-
-/**
- * Prints the dnssec_data_chain to the given file stream
- *
- * \param[in] *out The file stream to print to
- * \param[in] *fmt The format of the textual representation
- * \param[in] *chain The dnssec_data_chain to print
- */
-void ldns_dnssec_data_chain_print_fmt(FILE *out,
- const ldns_output_format *fmt,
- const ldns_dnssec_data_chain *chain);
-
-/**
- * Build an ldns_dnssec_data_chain, which contains all
- * DNSSEC data that is needed to derive the trust tree later
- *
- * The data_set will be cloned
- *
- * \param[in] *res resolver structure for further needed queries
- * \param[in] qflags resolution flags
- * \param[in] *data_set The original rrset where the chain ends
- * \param[in] *pkt optional, can contain the original packet
- * (and hence the sigs and maybe the key)
- * \param[in] *orig_rr The original Resource Record
- *
- * \return the DNSSEC data chain
- */
-ldns_dnssec_data_chain *ldns_dnssec_build_data_chain(ldns_resolver *res,
- const uint16_t qflags,
- const ldns_rr_list *data_set,
- const ldns_pkt *pkt,
- ldns_rr *orig_rr);
-
-/**
- * Tree structure that contains the relation of DNSSEC data,
- * and their cryptographic status.
- *
- * This tree is derived from a data_chain, and can be used
- * to look whether there is a connection between an RRSET
- * and a trusted key. The tree only contains pointers to the
- * data_chain, and therefore one should *never* free() the
- * data_chain when there is still a trust tree derived from
- * that chain.
- *
- * Example tree:
- * key key key
- * \ | /
- * \ | /
- * \ | /
- * ds
- * |
- * key
- * |
- * key
- * |
- * rr
- *
- * For each signature there is a parent; if the parent
- * pointer is null, it couldn't be found and there was no
- * denial; otherwise is a tree which contains either a
- * DNSKEY, a DS, or a NSEC rr
- */
-typedef struct ldns_dnssec_trust_tree_struct ldns_dnssec_trust_tree;
-struct ldns_dnssec_trust_tree_struct
-{
- ldns_rr *rr;
- /* the complete rrset this rr was in */
- ldns_rr_list *rrset;
- ldns_dnssec_trust_tree *parents[LDNS_DNSSEC_TRUST_TREE_MAX_PARENTS];
- ldns_status parent_status[LDNS_DNSSEC_TRUST_TREE_MAX_PARENTS];
- /** for debugging, add signatures too (you might want
- those if they contain errors) */
- ldns_rr *parent_signature[LDNS_DNSSEC_TRUST_TREE_MAX_PARENTS];
- size_t parent_count;
-};
-
-/**
- * Creates a new (empty) dnssec_trust_tree structure
- *
- * \return ldns_dnssec_trust_tree *
- */
-ldns_dnssec_trust_tree *ldns_dnssec_trust_tree_new(void);
-
-/**
- * Frees the dnssec_trust_tree recursively
- *
- * There is no deep free; all data in the trust tree
- * consists of pointers to a data_chain
- *
- * \param[in] tree The tree to free
- */
-void ldns_dnssec_trust_tree_free(ldns_dnssec_trust_tree *tree);
-
-/**
- * returns the depth of the trust tree
- *
- * \param[in] tree tree to calculate the depth of
- * \return The depth of the tree
- */
-size_t ldns_dnssec_trust_tree_depth(ldns_dnssec_trust_tree *tree);
-
-/**
- * Prints the dnssec_trust_tree structure to the given file
- * stream.
- *
- * If a link status is not LDNS_STATUS_OK; the status and
- * relevant signatures are printed too
- *
- * \param[in] *out The file stream to print to
- * \param[in] tree The trust tree to print
- * \param[in] tabs Prepend each line with tabs*2 spaces
- * \param[in] extended If true, add little explanation lines to the output
- */
-void ldns_dnssec_trust_tree_print(FILE *out,
- ldns_dnssec_trust_tree *tree,
- size_t tabs,
- bool extended);
-
-/**
- * Prints the dnssec_trust_tree structure to the given file
- * stream.
- *
- * If a link status is not LDNS_STATUS_OK; the status and
- * relevant signatures are printed too
- *
- * \param[in] *out The file stream to print to
- * \param[in] *fmt The format of the textual representation
- * \param[in] tree The trust tree to print
- * \param[in] tabs Prepend each line with tabs*2 spaces
- * \param[in] extended If true, add little explanation lines to the output
- */
-void ldns_dnssec_trust_tree_print_fmt(FILE *out,
- const ldns_output_format *fmt,
- ldns_dnssec_trust_tree *tree,
- size_t tabs,
- bool extended);
-
-/**
- * Adds a trust tree as a parent for the given trust tree
- *
- * \param[in] *tree The tree to add the parent to
- * \param[in] *parent The parent tree to add
- * \param[in] *parent_signature The RRSIG relevant to this parent/child
- * connection
- * \param[in] parent_status The DNSSEC status for this parent, child and RRSIG
- * \return LDNS_STATUS_OK if the addition succeeds, error otherwise
- */
-ldns_status ldns_dnssec_trust_tree_add_parent(ldns_dnssec_trust_tree *tree,
- const ldns_dnssec_trust_tree *parent,
- const ldns_rr *parent_signature,
- const ldns_status parent_status);
-
-/**
- * Generates a dnssec_trust_tree for the given rr from the
- * given data_chain
- *
- * This does not clone the actual data; Don't free the
- * data_chain before you are done with this tree
- *
- * \param[in] *data_chain The chain to derive the trust tree from
- * \param[in] *rr The RR this tree will be about
- * \return ldns_dnssec_trust_tree *
- */
-ldns_dnssec_trust_tree *ldns_dnssec_derive_trust_tree(
- ldns_dnssec_data_chain *data_chain,
- ldns_rr *rr);
-
-/**
- * Generates a dnssec_trust_tree for the given rr from the
- * given data_chain
- *
- * This does not clone the actual data; Don't free the
- * data_chain before you are done with this tree
- *
- * \param[in] *data_chain The chain to derive the trust tree from
- * \param[in] *rr The RR this tree will be about
- * \param[in] check_time the time for which the validation is performed
- * \return ldns_dnssec_trust_tree *
- */
-ldns_dnssec_trust_tree *ldns_dnssec_derive_trust_tree_time(
- ldns_dnssec_data_chain *data_chain,
- ldns_rr *rr, time_t check_time);
-
-/**
- * Sub function for derive_trust_tree that is used for a 'normal' rrset
- *
- * \param[in] new_tree The trust tree that we are building
- * \param[in] data_chain The data chain containing the data for the trust tree
- * \param[in] cur_sig_rr The currently relevant signature
- */
-void ldns_dnssec_derive_trust_tree_normal_rrset(
- ldns_dnssec_trust_tree *new_tree,
- ldns_dnssec_data_chain *data_chain,
- ldns_rr *cur_sig_rr);
-
-/**
- * Sub function for derive_trust_tree that is used for a 'normal' rrset
- *
- * \param[in] new_tree The trust tree that we are building
- * \param[in] data_chain The data chain containing the data for the trust tree
- * \param[in] cur_sig_rr The currently relevant signature
- * \param[in] check_time the time for which the validation is performed
- */
-void ldns_dnssec_derive_trust_tree_normal_rrset_time(
- ldns_dnssec_trust_tree *new_tree,
- ldns_dnssec_data_chain *data_chain,
- ldns_rr *cur_sig_rr, time_t check_time);
-
-
-/**
- * Sub function for derive_trust_tree that is used for DNSKEY rrsets
- *
- * \param[in] new_tree The trust tree that we are building
- * \param[in] data_chain The data chain containing the data for the trust tree
- * \param[in] cur_rr The currently relevant DNSKEY RR
- * \param[in] cur_sig_rr The currently relevant signature
- */
-void ldns_dnssec_derive_trust_tree_dnskey_rrset(
- ldns_dnssec_trust_tree *new_tree,
- ldns_dnssec_data_chain *data_chain,
- ldns_rr *cur_rr,
- ldns_rr *cur_sig_rr);
-
-/**
- * Sub function for derive_trust_tree that is used for DNSKEY rrsets
- *
- * \param[in] new_tree The trust tree that we are building
- * \param[in] data_chain The data chain containing the data for the trust tree
- * \param[in] cur_rr The currently relevant DNSKEY RR
- * \param[in] cur_sig_rr The currently relevant signature
- * \param[in] check_time the time for which the validation is performed
- */
-void ldns_dnssec_derive_trust_tree_dnskey_rrset_time(
- ldns_dnssec_trust_tree *new_tree,
- ldns_dnssec_data_chain *data_chain,
- ldns_rr *cur_rr, ldns_rr *cur_sig_rr,
- time_t check_time);
-
-/**
- * Sub function for derive_trust_tree that is used for DS rrsets
- *
- * \param[in] new_tree The trust tree that we are building
- * \param[in] data_chain The data chain containing the data for the trust tree
- * \param[in] cur_rr The currently relevant DS RR
- */
-void ldns_dnssec_derive_trust_tree_ds_rrset(
- ldns_dnssec_trust_tree *new_tree,
- ldns_dnssec_data_chain *data_chain,
- ldns_rr *cur_rr);
-
-/**
- * Sub function for derive_trust_tree that is used for DS rrsets
- *
- * \param[in] new_tree The trust tree that we are building
- * \param[in] data_chain The data chain containing the data for the trust tree
- * \param[in] cur_rr The currently relevant DS RR
- * \param[in] check_time the time for which the validation is performed
- */
-void ldns_dnssec_derive_trust_tree_ds_rrset_time(
- ldns_dnssec_trust_tree *new_tree,
- ldns_dnssec_data_chain *data_chain,
- ldns_rr *cur_rr, time_t check_time);
-
-/**
- * Sub function for derive_trust_tree that is used when there are no
- * signatures
- *
- * \param[in] new_tree The trust tree that we are building
- * \param[in] data_chain The data chain containing the data for the trust tree
- */
-void ldns_dnssec_derive_trust_tree_no_sig(
- ldns_dnssec_trust_tree *new_tree,
- ldns_dnssec_data_chain *data_chain);
-
-/**
- * Sub function for derive_trust_tree that is used when there are no
- * signatures
- *
- * \param[in] new_tree The trust tree that we are building
- * \param[in] data_chain The data chain containing the data for the trust tree
- * \param[in] check_time the time for which the validation is performed
- */
-void ldns_dnssec_derive_trust_tree_no_sig_time(
- ldns_dnssec_trust_tree *new_tree,
- ldns_dnssec_data_chain *data_chain,
- time_t check_time);
-
-
-/**
- * Returns OK if there is a trusted path in the tree to one of
- * the DNSKEY or DS RRs in the given list
- *
- * \param *tree The trust tree so search
- * \param *keys A ldns_rr_list of DNSKEY and DS rrs to look for
- *
- * \return LDNS_STATUS_OK if there is a trusted path to one of
- * the keys, or the *first* error encountered
- * if there were no paths
- */
-ldns_status ldns_dnssec_trust_tree_contains_keys(
- ldns_dnssec_trust_tree *tree,
- ldns_rr_list *keys);
-
-/**
- * Verifies a list of signatures for one rrset.
- *
- * \param[in] rrset the rrset to verify
- * \param[in] rrsig a list of signatures to check
- * \param[in] keys a list of keys to check with
- * \param[out] good_keys if this is a (initialized) list, the pointer to keys
- * from keys that validate one of the signatures
- * are added to it
- * \return status LDNS_STATUS_OK if there is at least one correct key
- */
-ldns_status ldns_verify(ldns_rr_list *rrset,
- ldns_rr_list *rrsig,
- const ldns_rr_list *keys,
- ldns_rr_list *good_keys);
-
-/**
- * Verifies a list of signatures for one rrset.
- *
- * \param[in] rrset the rrset to verify
- * \param[in] rrsig a list of signatures to check
- * \param[in] keys a list of keys to check with
- * \param[in] check_time the time for which the validation is performed
- * \param[out] good_keys if this is a (initialized) list, the pointer to keys
- * from keys that validate one of the signatures
- * are added to it
- * \return status LDNS_STATUS_OK if there is at least one correct key
- */
-ldns_status ldns_verify_time(const ldns_rr_list *rrset,
- const ldns_rr_list *rrsig,
- const ldns_rr_list *keys,
- time_t check_time,
- ldns_rr_list *good_keys);
-
-
-/**
- * Verifies a list of signatures for one rrset, but disregard the time.
- * Inception and Expiration are not checked.
- *
- * \param[in] rrset the rrset to verify
- * \param[in] rrsig a list of signatures to check
- * \param[in] keys a list of keys to check with
- * \param[out] good_keys if this is a (initialized) list, the pointer to keys
- * from keys that validate one of the signatures
- * are added to it
- * \return status LDNS_STATUS_OK if there is at least one correct key
- */
-ldns_status ldns_verify_notime(ldns_rr_list *rrset,
- ldns_rr_list *rrsig,
- const ldns_rr_list *keys,
- ldns_rr_list *good_keys);
-
-/**
- * Tries to build an authentication chain from the given
- * keys down to the queried domain.
- *
- * If we find a valid trust path, return the valid keys for the domain.
- *
- * \param[in] res the current resolver
- * \param[in] domain the domain we want valid keys for
- * \param[in] keys the current set of trusted keys
- * \param[out] status pointer to the status variable where the result
- * code will be stored
- * \return the set of trusted keys for the domain, or NULL if no
- * trust path could be built.
- */
-ldns_rr_list *ldns_fetch_valid_domain_keys(const ldns_resolver * res,
- const ldns_rdf * domain,
- const ldns_rr_list * keys,
- ldns_status *status);
-
-/**
- * Tries to build an authentication chain from the given
- * keys down to the queried domain.
- *
- * If we find a valid trust path, return the valid keys for the domain.
- *
- * \param[in] res the current resolver
- * \param[in] domain the domain we want valid keys for
- * \param[in] keys the current set of trusted keys
- * \param[in] check_time the time for which the validation is performed
- * \param[out] status pointer to the status variable where the result
- * code will be stored
- * \return the set of trusted keys for the domain, or NULL if no
- * trust path could be built.
- */
-ldns_rr_list *ldns_fetch_valid_domain_keys_time(const ldns_resolver * res,
- const ldns_rdf * domain, const ldns_rr_list * keys,
- time_t check_time, ldns_status *status);
-
-
-/**
- * Validates the DNSKEY RRset for the given domain using the provided
- * trusted keys.
- *
- * \param[in] res the current resolver
- * \param[in] domain the domain we want valid keys for
- * \param[in] keys the current set of trusted keys
- * \return the set of trusted keys for the domain, or NULL if the RRSET
- * could not be validated
- */
-ldns_rr_list *ldns_validate_domain_dnskey (const ldns_resolver *res,
- const ldns_rdf *domain,
- const ldns_rr_list *keys);
-
-/**
- * Validates the DNSKEY RRset for the given domain using the provided
- * trusted keys.
- *
- * \param[in] res the current resolver
- * \param[in] domain the domain we want valid keys for
- * \param[in] keys the current set of trusted keys
- * \param[in] check_time the time for which the validation is performed
- * \return the set of trusted keys for the domain, or NULL if the RRSET
- * could not be validated
- */
-ldns_rr_list *ldns_validate_domain_dnskey_time(
- const ldns_resolver *res, const ldns_rdf *domain,
- const ldns_rr_list *keys, time_t check_time);
-
-
-/**
- * Validates the DS RRset for the given domain using the provided trusted keys.
- *
- * \param[in] res the current resolver
- * \param[in] domain the domain we want valid keys for
- * \param[in] keys the current set of trusted keys
- * \return the set of trusted keys for the domain, or NULL if the RRSET could not be validated
- */
-ldns_rr_list *ldns_validate_domain_ds(const ldns_resolver *res,
- const ldns_rdf *
- domain,
- const ldns_rr_list * keys);
-
-/**
- * Validates the DS RRset for the given domain using the provided trusted keys.
- *
- * \param[in] res the current resolver
- * \param[in] domain the domain we want valid keys for
- * \param[in] keys the current set of trusted keys
- * \param[in] check_time the time for which the validation is performed
- * \return the set of trusted keys for the domain, or NULL if the RRSET could not be validated
- */
-ldns_rr_list *ldns_validate_domain_ds_time(
- const ldns_resolver *res, const ldns_rdf *domain,
- const ldns_rr_list * keys, time_t check_time);
-
-
-/**
- * Verifies a list of signatures for one RRset using a valid trust path.
- *
- * \param[in] res the current resolver
- * \param[in] rrset the rrset to verify
- * \param[in] rrsigs a list of signatures to check
- * \param[out] validating_keys if this is a (initialized) list, the
- * keys from keys that validate one of
- * the signatures are added to it
- * \return status LDNS_STATUS_OK if there is at least one correct key
- */
-ldns_status ldns_verify_trusted(ldns_resolver *res,
- ldns_rr_list *rrset,
- ldns_rr_list *rrsigs,
- ldns_rr_list *validating_keys);
-
-/**
- * Verifies a list of signatures for one RRset using a valid trust path.
- *
- * \param[in] res the current resolver
- * \param[in] rrset the rrset to verify
- * \param[in] rrsigs a list of signatures to check
- * \param[in] check_time the time for which the validation is performed
- * \param[out] validating_keys if this is a (initialized) list, the
- * keys from keys that validate one of
- * the signatures are added to it
- * \return status LDNS_STATUS_OK if there is at least one correct key
- */
-ldns_status ldns_verify_trusted_time(
- ldns_resolver *res, ldns_rr_list *rrset,
- ldns_rr_list *rrsigs, time_t check_time,
- ldns_rr_list *validating_keys);
-
-
-/**
- * denial is not just a river in egypt
- *
- * \param[in] rr The (query) RR to check the denial of existence for
- * \param[in] nsecs The list of NSEC RRs that are supposed to deny the
- * existence of the RR
- * \param[in] rrsigs The RRSIG RR covering the NSEC RRs
- * \return LDNS_STATUS_OK if the NSEC RRs deny the existence, error code
- * containing the reason they do not otherwise
- */
-ldns_status ldns_dnssec_verify_denial(ldns_rr *rr,
- ldns_rr_list *nsecs,
- ldns_rr_list *rrsigs);
-
-/**
- * Denial of existence using NSEC3 records
- * Since NSEC3 is a bit more complicated than normal denial, some
- * context arguments are needed
- *
- * \param[in] rr The (query) RR to check the denial of existence for
- * \param[in] nsecs The list of NSEC3 RRs that are supposed to deny the
- * existence of the RR
- * \param[in] rrsigs The RRSIG rr covering the NSEC RRs
- * \param[in] packet_rcode The RCODE value of the packet that provided the
- * NSEC3 RRs
- * \param[in] packet_qtype The original query RR type
- * \param[in] packet_nodata True if the providing packet had an empty ANSWER
- * section
- * \return LDNS_STATUS_OK if the NSEC3 RRs deny the existence, error code
- * containing the reason they do not otherwise
- */
-ldns_status ldns_dnssec_verify_denial_nsec3(ldns_rr *rr,
- ldns_rr_list *nsecs,
- ldns_rr_list *rrsigs,
- ldns_pkt_rcode packet_rcode,
- ldns_rr_type packet_qtype,
- bool packet_nodata);
-
-/**
- * Same as ldns_status ldns_dnssec_verify_denial_nsec3 but also returns
- * the nsec rr that matched.
- *
- * \param[in] rr The (query) RR to check the denial of existence for
- * \param[in] nsecs The list of NSEC3 RRs that are supposed to deny the
- * existence of the RR
- * \param[in] rrsigs The RRSIG rr covering the NSEC RRs
- * \param[in] packet_rcode The RCODE value of the packet that provided the
- * NSEC3 RRs
- * \param[in] packet_qtype The original query RR type
- * \param[in] packet_nodata True if the providing packet had an empty ANSWER
- * section
- * \param[in] match On match, the given (reference to a) pointer will be set
- * to point to the matching nsec resource record.
- * \return LDNS_STATUS_OK if the NSEC3 RRs deny the existence, error code
- * containing the reason they do not otherwise
- */
-ldns_status ldns_dnssec_verify_denial_nsec3_match(ldns_rr *rr,
- ldns_rr_list *nsecs,
- ldns_rr_list *rrsigs,
- ldns_pkt_rcode packet_rcode,
- ldns_rr_type packet_qtype,
- bool packet_nodata,
- ldns_rr **match);
-/**
- * Verifies the already processed data in the buffers
- * This function should probably not be used directly.
- *
- * \param[in] rawsig_buf Buffer containing signature data to use
- * \param[in] verify_buf Buffer containing data to verify
- * \param[in] key_buf Buffer containing key data to use
- * \param[in] algo Signing algorithm
- * \return status LDNS_STATUS_OK if the data verifies. Error if not.
- */
-ldns_status ldns_verify_rrsig_buffers(ldns_buffer *rawsig_buf,
- ldns_buffer *verify_buf,
- ldns_buffer *key_buf,
- uint8_t algo);
-
-/**
- * Like ldns_verify_rrsig_buffers, but uses raw data.
- *
- * \param[in] sig signature data to use
- * \param[in] siglen length of signature data to use
- * \param[in] verify_buf Buffer containing data to verify
- * \param[in] key key data to use
- * \param[in] keylen length of key data to use
- * \param[in] algo Signing algorithm
- * \return status LDNS_STATUS_OK if the data verifies. Error if not.
- */
-ldns_status ldns_verify_rrsig_buffers_raw(unsigned char* sig,
- size_t siglen,
- ldns_buffer *verify_buf,
- unsigned char* key,
- size_t keylen,
- uint8_t algo);
-
-/**
- * Verifies an rrsig. All keys in the keyset are tried.
- * \param[in] rrset the rrset to check
- * \param[in] rrsig the signature of the rrset
- * \param[in] keys the keys to try
- * \param[out] good_keys if this is a (initialized) list, the pointer to keys
- * from keys that validate one of the signatures
- * are added to it
- * \return a list of keys which validate the rrsig + rrset. Returns
- * status LDNS_STATUS_OK if at least one key matched. Else an error.
- */
-ldns_status ldns_verify_rrsig_keylist(ldns_rr_list *rrset,
- ldns_rr *rrsig,
- const ldns_rr_list *keys,
- ldns_rr_list *good_keys);
-
-/**
- * Verifies an rrsig. All keys in the keyset are tried.
- * \param[in] rrset the rrset to check
- * \param[in] rrsig the signature of the rrset
- * \param[in] keys the keys to try
- * \param[in] check_time the time for which the validation is performed
- * \param[out] good_keys if this is a (initialized) list, the pointer to keys
- * from keys that validate one of the signatures
- * are added to it
- * \return a list of keys which validate the rrsig + rrset. Returns
- * status LDNS_STATUS_OK if at least one key matched. Else an error.
- */
-ldns_status ldns_verify_rrsig_keylist_time(
- const ldns_rr_list *rrset, const ldns_rr *rrsig,
- const ldns_rr_list *keys, time_t check_time,
- ldns_rr_list *good_keys);
-
-
-/**
- * Verifies an rrsig. All keys in the keyset are tried. Time is not checked.
- * \param[in] rrset the rrset to check
- * \param[in] rrsig the signature of the rrset
- * \param[in] keys the keys to try
- * \param[out] good_keys if this is a (initialized) list, the pointer to keys
- * from keys that validate one of the signatures
- * are added to it
- * \return a list of keys which validate the rrsig + rrset. Returns
- * status LDNS_STATUS_OK if at least one key matched. Else an error.
- */
-ldns_status ldns_verify_rrsig_keylist_notime(const ldns_rr_list *rrset,
- const ldns_rr *rrsig,
- const ldns_rr_list *keys,
- ldns_rr_list *good_keys);
-
-/**
- * verify an rrsig with 1 key
- * \param[in] rrset the rrset
- * \param[in] rrsig the rrsig to verify
- * \param[in] key the key to use
- * \return status message whether verification succeeded.
- */
-ldns_status ldns_verify_rrsig(ldns_rr_list *rrset,
- ldns_rr *rrsig,
- ldns_rr *key);
-
-
-/**
- * verify an rrsig with 1 key
- * \param[in] rrset the rrset
- * \param[in] rrsig the rrsig to verify
- * \param[in] key the key to use
- * \param[in] check_time the time for which the validation is performed
- * \return status message whether verification succeeded.
- */
-ldns_status ldns_verify_rrsig_time(
- ldns_rr_list *rrset, ldns_rr *rrsig,
- ldns_rr *key, time_t check_time);
-
-
-#if LDNS_BUILD_CONFIG_HAVE_SSL
-/**
- * verifies a buffer with signature data for a buffer with rrset data
- * with an EVP_PKEY
- *
- * \param[in] sig the signature data
- * \param[in] rrset the rrset data, sorted and processed for verification
- * \param[in] key the EVP key structure
- * \param[in] digest_type The digest type of the signature
- */
-ldns_status ldns_verify_rrsig_evp(ldns_buffer *sig,
- ldns_buffer *rrset,
- EVP_PKEY *key,
- const EVP_MD *digest_type);
-
-/**
- * Like ldns_verify_rrsig_evp, but uses raw signature data.
- * \param[in] sig the signature data, wireformat uncompressed
- * \param[in] siglen length of the signature data
- * \param[in] rrset the rrset data, sorted and processed for verification
- * \param[in] key the EVP key structure
- * \param[in] digest_type The digest type of the signature
- */
-ldns_status ldns_verify_rrsig_evp_raw(const unsigned char *sig,
- size_t siglen,
- const ldns_buffer *rrset,
- EVP_PKEY *key,
- const EVP_MD *digest_type);
-#endif
-
-/**
- * verifies a buffer with signature data (DSA) for a buffer with rrset data
- * with a buffer with key data.
- *
- * \param[in] sig the signature data
- * \param[in] rrset the rrset data, sorted and processed for verification
- * \param[in] key the key data
- */
-ldns_status ldns_verify_rrsig_dsa(ldns_buffer *sig,
- ldns_buffer *rrset,
- ldns_buffer *key);
-
-/**
- * verifies a buffer with signature data (RSASHA1) for a buffer with rrset data
- * with a buffer with key data.
- *
- * \param[in] sig the signature data
- * \param[in] rrset the rrset data, sorted and processed for verification
- * \param[in] key the key data
- */
-ldns_status ldns_verify_rrsig_rsasha1(ldns_buffer *sig,
- ldns_buffer *rrset,
- ldns_buffer *key);
-
-/**
- * verifies a buffer with signature data (RSAMD5) for a buffer with rrset data
- * with a buffer with key data.
- *
- * \param[in] sig the signature data
- * \param[in] rrset the rrset data, sorted and processed for verification
- * \param[in] key the key data
- */
-ldns_status ldns_verify_rrsig_rsamd5(ldns_buffer *sig,
- ldns_buffer *rrset,
- ldns_buffer *key);
-
-/**
- * Like ldns_verify_rrsig_dsa, but uses raw signature and key data.
- * \param[in] sig raw uncompressed wireformat signature data
- * \param[in] siglen length of signature data
- * \param[in] rrset ldns buffer with prepared rrset data.
- * \param[in] key raw uncompressed wireformat key data
- * \param[in] keylen length of key data
- */
-ldns_status ldns_verify_rrsig_dsa_raw(unsigned char* sig,
- size_t siglen,
- ldns_buffer* rrset,
- unsigned char* key,
- size_t keylen);
-
-/**
- * Like ldns_verify_rrsig_rsasha1, but uses raw signature and key data.
- * \param[in] sig raw uncompressed wireformat signature data
- * \param[in] siglen length of signature data
- * \param[in] rrset ldns buffer with prepared rrset data.
- * \param[in] key raw uncompressed wireformat key data
- * \param[in] keylen length of key data
- */
-ldns_status ldns_verify_rrsig_rsasha1_raw(unsigned char* sig,
- size_t siglen,
- ldns_buffer* rrset,
- unsigned char* key,
- size_t keylen);
-
-/**
- * Like ldns_verify_rrsig_rsasha256, but uses raw signature and key data.
- * \param[in] sig raw uncompressed wireformat signature data
- * \param[in] siglen length of signature data
- * \param[in] rrset ldns buffer with prepared rrset data.
- * \param[in] key raw uncompressed wireformat key data
- * \param[in] keylen length of key data
- */
-
-ldns_status ldns_verify_rrsig_rsasha256_raw(unsigned char* sig,
- size_t siglen,
- ldns_buffer* rrset,
- unsigned char* key,
- size_t keylen);
-
-/**
- * Like ldns_verify_rrsig_rsasha512, but uses raw signature and key data.
- * \param[in] sig raw uncompressed wireformat signature data
- * \param[in] siglen length of signature data
- * \param[in] rrset ldns buffer with prepared rrset data.
- * \param[in] key raw uncompressed wireformat key data
- * \param[in] keylen length of key data
- */
-ldns_status ldns_verify_rrsig_rsasha512_raw(unsigned char* sig,
- size_t siglen,
- ldns_buffer* rrset,
- unsigned char* key,
- size_t keylen);
-
-/**
- * Like ldns_verify_rrsig_rsamd5, but uses raw signature and key data.
- * \param[in] sig raw uncompressed wireformat signature data
- * \param[in] siglen length of signature data
- * \param[in] rrset ldns buffer with prepared rrset data.
- * \param[in] key raw uncompressed wireformat key data
- * \param[in] keylen length of key data
- */
-ldns_status ldns_verify_rrsig_rsamd5_raw(unsigned char* sig,
- size_t siglen,
- ldns_buffer* rrset,
- unsigned char* key,
- size_t keylen);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/ldns/ldns/dnssec_zone.h b/ldns/ldns/dnssec_zone.h
deleted file mode 100644
index e97ea30..0000000
--- a/ldns/ldns/dnssec_zone.h
+++ /dev/null
@@ -1,483 +0,0 @@
-/*
- * special zone file structures and functions for better dnssec handling
- *
- * A zone contains a SOA dnssec_zone_rrset, and an AVL tree of 'normal'
- * dnssec_zone_rrsets, indexed by name and type
- */
-
-#ifndef LDNS_DNSSEC_ZONE_H
-#define LDNS_DNSSEC_ZONE_H
-
-#include <ldns/rbtree.h>
-#include <ldns/host2str.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Singly linked list of rrs
- */
-typedef struct ldns_struct_dnssec_rrs ldns_dnssec_rrs;
-struct ldns_struct_dnssec_rrs
-{
- ldns_rr *rr;
- ldns_dnssec_rrs *next;
-};
-
-/**
- * Singly linked list of RRsets
- */
-typedef struct ldns_struct_dnssec_rrsets ldns_dnssec_rrsets;
-struct ldns_struct_dnssec_rrsets
-{
- ldns_dnssec_rrs *rrs;
- ldns_rr_type type;
- ldns_dnssec_rrs *signatures;
- ldns_dnssec_rrsets *next;
-};
-
-/**
- * Structure containing all resource records for a domain name
- * Including the derived NSEC3, if present
- */
-typedef struct ldns_struct_dnssec_name ldns_dnssec_name;
-struct ldns_struct_dnssec_name
-{
- /**
- * pointer to a dname containing the name.
- * Usually points to the owner name of the first RR of the first RRset
- */
- ldns_rdf *name;
- /**
- * Usually, the name is a pointer to the owner name of the first rr for
- * this name, but sometimes there is no actual data to point to,
- * for instance in
- * names representing empty nonterminals. If so, set alloced to true to
- * indicate that this data must also be freed when the name is freed
- */
- bool name_alloced;
- /**
- * The rrsets for this name
- */
- ldns_dnssec_rrsets *rrsets;
- /**
- * NSEC pointing to the next name (or NSEC3 pointing to the next NSEC3)
- */
- ldns_rr *nsec;
- /**
- * signatures for the NSEC record
- */
- ldns_dnssec_rrs *nsec_signatures;
- /**
- * Unlike what the name is_glue suggests, this field is set to true by
- * ldns_dnssec_zone_mark_glue() or ldns_dnssec_zone_mark_and_get_glue()
- * when the name, this dnssec_name struct represents, is occluded.
- * Names that contain other occluded rrsets and records with glue on
- * the delegation point will NOT have this bool set to true.
- * This field should NOT be read directly, but only via the
- * ldns_dnssec_name_is_glue() function!
- */
- bool is_glue;
- /**
- * pointer to store the hashed name (only used when in an NSEC3 zone
- */
- ldns_rdf *hashed_name;
-};
-
-/**
- * Structure containing a dnssec zone
- */
-struct ldns_struct_dnssec_zone {
- /** points to the name containing the SOA RR */
- ldns_dnssec_name *soa;
- /** tree of ldns_dnssec_names */
- ldns_rbtree_t *names;
- /** tree of ldns_dnssec_names by nsec3 hashes (when applicible) */
- ldns_rbtree_t *hashed_names;
- /** points to the first added NSEC3 rr whose parameters will be
- * assumed for all subsequent NSEC3 rr's and which will be used
- * to calculate hashed names
- */
- ldns_rr *_nsec3params;
-};
-typedef struct ldns_struct_dnssec_zone ldns_dnssec_zone;
-
-/**
- * Creates a new entry for 1 pointer to an rr and 1 pointer to the next rrs
- * \return the allocated data
- */
-ldns_dnssec_rrs *ldns_dnssec_rrs_new(void);
-
-/**
- * Frees the list of rrs, but *not* the individual ldns_rr records
- * contained in the list
- *
- * \param[in] rrs the data structure to free
- */
-void ldns_dnssec_rrs_free(ldns_dnssec_rrs *rrs);
-
-/**
- * Frees the list of rrs, and the individual ldns_rr records
- * contained in the list
- *
- * \param[in] rrs the data structure to free
- */
-void ldns_dnssec_rrs_deep_free(ldns_dnssec_rrs *rrs);
-
-/**
- * Adds an RR to the list of RRs. The list will remain ordered.
- * If an equal RR already exists, this RR will not be added.
- *
- * \param[in] rrs the list to add to
- * \param[in] rr the RR to add
- * \return LDNS_STATUS_OK on success
- */
-ldns_status ldns_dnssec_rrs_add_rr(ldns_dnssec_rrs *rrs, ldns_rr *rr);
-
-/**
- * Prints the given rrs to the file descriptor
- *
- * \param[in] out the file descriptor to print to
- * \param[in] rrs the list of RRs to print
- */
-void ldns_dnssec_rrs_print(FILE *out, const ldns_dnssec_rrs *rrs);
-
-/**
- * Prints the given rrs to the file descriptor
- *
- * \param[in] out the file descriptor to print to
- * \param[in] fmt the format of the textual representation
- * \param[in] rrs the list of RRs to print
- */
-void ldns_dnssec_rrs_print_fmt(FILE *out,
- const ldns_output_format *fmt, const ldns_dnssec_rrs *rrs);
-
-/**
- * Creates a new list (entry) of RRsets
- * \return the newly allocated structure
- */
-ldns_dnssec_rrsets *ldns_dnssec_rrsets_new(void);
-
-/**
- * Frees the list of rrsets and their rrs, but *not* the ldns_rr
- * records in the sets
- *
- * \param[in] rrsets the data structure to free
- */
-void ldns_dnssec_rrsets_free(ldns_dnssec_rrsets *rrsets);
-
-/**
- * Frees the list of rrsets and their rrs, and the ldns_rr
- * records in the sets
- *
- * \param[in] rrsets the data structure to free
- */
-void ldns_dnssec_rrsets_deep_free(ldns_dnssec_rrsets *rrsets);
-
-/**
- * Returns the rr type of the rrset (that is head of the given list)
- *
- * \param[in] rrsets the rrset to get the type of
- * \return the rr type
- */
-ldns_rr_type ldns_dnssec_rrsets_type(const ldns_dnssec_rrsets *rrsets);
-
-/**
- * Sets the RR type of the rrset (that is head of the given list)
- *
- * \param[in] rrsets the rrset to set the type of
- * \param[in] type the type to set
- * \return LDNS_STATUS_OK on success
- */
-ldns_status ldns_dnssec_rrsets_set_type(ldns_dnssec_rrsets *rrsets,
- ldns_rr_type type);
-
-/**
- * Add an ldns_rr to the corresponding RRset in the given list of RRsets.
- * If it is not present, add it as a new RRset with 1 record.
- *
- * \param[in] rrsets the list of rrsets to add the RR to
- * \param[in] rr the rr to add to the list of rrsets
- * \return LDNS_STATUS_OK on success
- */
-ldns_status ldns_dnssec_rrsets_add_rr(ldns_dnssec_rrsets *rrsets, ldns_rr *rr);
-
-/**
- * Print the given list of rrsets to the fiven file descriptor
- *
- * \param[in] out the file descriptor to print to
- * \param[in] rrsets the list of RRsets to print
- * \param[in] follow if set to false, only print the first RRset
- */
-void ldns_dnssec_rrsets_print(FILE *out,
- const ldns_dnssec_rrsets *rrsets,
- bool follow);
-
-/**
- * Print the given list of rrsets to the fiven file descriptor
- *
- * \param[in] out the file descriptor to print to
- * \param[in] fmt the format of the textual representation
- * \param[in] rrsets the list of RRsets to print
- * \param[in] follow if set to false, only print the first RRset
- */
-void ldns_dnssec_rrsets_print_fmt(FILE *out,
- const ldns_output_format *fmt,
- const ldns_dnssec_rrsets *rrsets,
- bool follow);
-
-
-/**
- * Create a new data structure for a dnssec name
- * \return the allocated structure
- */
-ldns_dnssec_name *ldns_dnssec_name_new(void);
-
-/**
- * Create a new data structure for a dnssec name for the given RR
- *
- * \param[in] rr the RR to derive properties from, and to add to the name
- */
-ldns_dnssec_name *ldns_dnssec_name_new_frm_rr(ldns_rr *rr);
-
-/**
- * Frees the name structure and its rrs and rrsets.
- * Individual ldns_rr records therein are not freed
- *
- * \param[in] name the structure to free
- */
-void ldns_dnssec_name_free(ldns_dnssec_name *name);
-
-/**
- * Frees the name structure and its rrs and rrsets.
- * Individual ldns_rr records contained in the name are also freed
- *
- * \param[in] name the structure to free
- */
-void ldns_dnssec_name_deep_free(ldns_dnssec_name *name);
-
-/**
- * Returns the domain name of the given dnssec_name structure
- *
- * \param[in] name the dnssec name to get the domain name from
- * \return the domain name
- */
-ldns_rdf *ldns_dnssec_name_name(const ldns_dnssec_name *name);
-
-
-/**
- * Sets the domain name of the given dnssec_name structure
- *
- * \param[in] name the dnssec name to set the domain name of
- * \param[in] dname the domain name to set it to. This data is *not* copied.
- */
-void ldns_dnssec_name_set_name(ldns_dnssec_name *name,
- ldns_rdf *dname);
-/**
- * Returns if dnssec_name structure is marked as glue.
- * The ldns_dnssec_zone_mark_glue() function has to be called on a zone before
- * using this function.
- * Only names that have only glue rrsets will be marked.
- * Names that have other occluded rrsets and names containing glue on the
- * delegation point will NOT be marked!
- *
- * \param[in] name the dnssec name to get the domain name from
- * \return true if the structure is marked as glue, false otherwise.
- */
-bool ldns_dnssec_name_is_glue(const ldns_dnssec_name *name);
-
-/**
- * Sets the NSEC(3) RR of the given dnssec_name structure
- *
- * \param[in] name the dnssec name to set the domain name of
- * \param[in] nsec the nsec rr to set it to. This data is *not* copied.
- */
-void ldns_dnssec_name_set_nsec(ldns_dnssec_name *name, ldns_rr *nsec);
-
-/**
- * Compares the domain names of the two arguments in their
- * canonical ordening.
- *
- * \param[in] a The first dnssec_name to compare
- * \param[in] b The second dnssec_name to compare
- * \return -1 if the domain name of a comes before that of b in canonical
- * ordening, 1 if it is the other way around, and 0 if they are
- * equal
- */
-int ldns_dnssec_name_cmp(const void *a, const void *b);
-
-/**
- * Inserts the given rr at the right place in the current dnssec_name
- * No checking is done whether the name matches
- *
- * \param[in] name The ldns_dnssec_name to add the RR to
- * \param[in] rr The RR to add
- * \return LDNS_STATUS_OK on success, error code otherwise
- */
-ldns_status ldns_dnssec_name_add_rr(ldns_dnssec_name *name,
- ldns_rr *rr);
-
-/**
- * Find the RRset with the given type in within this name structure
- *
- * \param[in] name the name to find the RRset in
- * \param[in] type the type of the RRset to find
- * \return the RRset, or NULL if not present
- */
-ldns_dnssec_rrsets *ldns_dnssec_name_find_rrset(const ldns_dnssec_name *name,
- ldns_rr_type type);
-
-/**
- * Find the RRset with the given name and type in the zone
- *
- * \param[in] zone the zone structure to find the RRset in
- * \param[in] dname the domain name of the RRset to find
- * \param[in] type the type of the RRset to find
- * \return the RRset, or NULL if not present
- */
-ldns_dnssec_rrsets *ldns_dnssec_zone_find_rrset(const ldns_dnssec_zone *zone,
- const ldns_rdf *dname,
- ldns_rr_type type);
-
-/**
- * Prints the RRs in the dnssec name structure to the given
- * file descriptor
- *
- * \param[in] out the file descriptor to print to
- * \param[in] name the name structure to print the contents of
- */
-void ldns_dnssec_name_print(FILE *out, const ldns_dnssec_name *name);
-
-/**
- * Prints the RRs in the dnssec name structure to the given
- * file descriptor
- *
- * \param[in] out the file descriptor to print to
- * \param[in] fmt the format of the textual representation
- * \param[in] name the name structure to print the contents of
- */
-void ldns_dnssec_name_print_fmt(FILE *out,
- const ldns_output_format *fmt, const ldns_dnssec_name *name);
-
-/**
- * Creates a new dnssec_zone structure
- * \return the allocated structure
- */
-ldns_dnssec_zone *ldns_dnssec_zone_new(void);
-
-/**
- * Create a new dnssec zone from a file.
- * \param[out] z the new zone
- * \param[in] *fp the filepointer to use
- * \param[in] *origin the zones' origin
- * \param[in] c default class to use (IN)
- * \param[in] ttl default ttl to use
- *
- * \return ldns_status mesg with an error or LDNS_STATUS_OK
- */
-ldns_status ldns_dnssec_zone_new_frm_fp(ldns_dnssec_zone** z, FILE* fp,
- const ldns_rdf* origin, uint32_t ttl, ldns_rr_class c);
-
-/**
- * Create a new dnssec zone from a file, keep track of the line numbering
- * \param[out] z the new zone
- * \param[in] *fp the filepointer to use
- * \param[in] *origin the zones' origin
- * \param[in] ttl default ttl to use
- * \param[in] c default class to use (IN)
- * \param[out] line_nr used for error msg, to get to the line number
- *
- * \return ldns_status mesg with an error or LDNS_STATUS_OK
- */
-ldns_status ldns_dnssec_zone_new_frm_fp_l(ldns_dnssec_zone** z, FILE* fp,
- const ldns_rdf* origin, uint32_t ttl, ldns_rr_class c, int* line_nr);
-
-/**
- * Frees the given zone structure, and its rbtree of dnssec_names
- * Individual ldns_rr RRs within those names are *not* freed
- * \param[in] *zone the zone to free
- */
-void ldns_dnssec_zone_free(ldns_dnssec_zone *zone);
-
-/**
- * Frees the given zone structure, and its rbtree of dnssec_names
- * Individual ldns_rr RRs within those names are also freed
- * \param[in] *zone the zone to free
- */
-void ldns_dnssec_zone_deep_free(ldns_dnssec_zone *zone);
-
-/**
- * Adds the given RR to the zone.
- * It find whether there is a dnssec_name with that name present.
- * If so, add it to that, if not create a new one.
- * Special handling of NSEC and RRSIG provided
- *
- * \param[in] zone the zone to add the RR to
- * \param[in] rr The RR to add
- * \return LDNS_STATUS_OK on success, an error code otherwise
- */
-ldns_status ldns_dnssec_zone_add_rr(ldns_dnssec_zone *zone,
- ldns_rr *rr);
-
-/**
- * Prints the rbtree of ldns_dnssec_name structures to the file descriptor
- *
- * \param[in] out the file descriptor to print the names to
- * \param[in] tree the tree of ldns_dnssec_name structures to print
- * \param[in] print_soa if true, print SOA records, if false, skip them
- */
-void ldns_dnssec_zone_names_print(FILE *out, const ldns_rbtree_t *tree, bool print_soa);
-
-/**
- * Prints the rbtree of ldns_dnssec_name structures to the file descriptor
- *
- * \param[in] out the file descriptor to print the names to
- * \param[in] fmt the format of the textual representation
- * \param[in] tree the tree of ldns_dnssec_name structures to print
- * \param[in] print_soa if true, print SOA records, if false, skip them
- */
-void ldns_dnssec_zone_names_print_fmt(FILE *out, const ldns_output_format *fmt,
- const ldns_rbtree_t *tree, bool print_soa);
-
-/**
- * Prints the complete zone to the given file descriptor
- *
- * \param[in] out the file descriptor to print to
- * \param[in] zone the dnssec_zone to print
- */
-void ldns_dnssec_zone_print(FILE *out, const ldns_dnssec_zone *zone);
-
-/**
- * Prints the complete zone to the given file descriptor
- *
- * \param[in] out the file descriptor to print to
- * \param[in] fmt the format of the textual representation
- * \param[in] zone the dnssec_zone to print
- */
-void ldns_dnssec_zone_print_fmt(FILE *out,
- const ldns_output_format *fmt, const ldns_dnssec_zone *zone);
-
-/**
- * Adds explicit dnssec_name structures for the empty nonterminals
- * in this zone. (this is needed for NSEC3 generation)
- *
- * \param[in] zone the zone to check for empty nonterminals
- * return LDNS_STATUS_OK on success.
- */
-ldns_status ldns_dnssec_zone_add_empty_nonterminals(ldns_dnssec_zone *zone);
-
-/**
- * If a NSEC3PARAM is available in the apex, walks the zone and returns true
- * on the first optout nsec3.
- *
- * \param[in] zone the zone to check for nsec3 optout records
- * return true when the zone has at least one nsec3 optout record.
- */
-bool ldns_dnssec_zone_is_nsec3_optout(const ldns_dnssec_zone* zone);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/ldns/ldns/duration.h b/ldns/ldns/duration.h
deleted file mode 100644
index e6282ac..0000000
--- a/ldns/ldns/duration.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * $Id: duration.h 4341 2011-01-31 15:21:09Z matthijs $
- *
- * Copyright (c) 2009 NLNet Labs. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
- * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-/**
- *
- * This file is copied from the OpenDNSSEC source repository
- * and only slightly adapted to make it fit.
- */
-
-/**
- *
- * Durations.
- */
-
-#ifndef LDNS_DURATION_H
-#define LDNS_DURATION_H
-
-#include <stdint.h>
-#include <time.h>
-
-/**
- * Duration.
- *
- */
-typedef struct ldns_duration_struct ldns_duration_type;
-struct ldns_duration_struct
-{
- time_t years;
- time_t months;
- time_t weeks;
- time_t days;
- time_t hours;
- time_t minutes;
- time_t seconds;
-};
-
-/**
- * Create a new 'instant' duration.
- * \return ldns_duration_type* created duration
- *
- */
-ldns_duration_type* ldns_duration_create(void);
-
-/**
- * Compare durations.
- * \param[in] d1 one duration
- * \param[in] d2 another duration
- * \return int 0 if equal, -1 if d1 < d2, 1 if d2 < d1
- *
- */
-int ldns_duration_compare(const ldns_duration_type* d1, const ldns_duration_type* d2);
-
-/**
- * Create a duration from string.
- * \param[in] str string-format duration
- * \return ldns_duration_type* created duration
- *
- */
-ldns_duration_type* ldns_duration_create_from_string(const char* str);
-
-/**
- * Convert a duration to a string.
- * \param[in] duration duration to be converted
- * \return char* string-format duration
- *
- */
-char* ldns_duration2string(const ldns_duration_type* duration);
-
-/**
- * Convert a duration to a time.
- * \param[in] duration duration to be converted
- * \return time_t time-format duration
- *
- */
-time_t ldns_duration2time(const ldns_duration_type* duration);
-
-/**
- * Clean up duration.
- * \param[in] duration duration to be cleaned up
- *
- */
-void ldns_duration_cleanup(ldns_duration_type* duration);
-
-#endif /* LDNS_DURATION_H */
diff --git a/ldns/ldns/error.h b/ldns/ldns/error.h
deleted file mode 100644
index 15f49a2..0000000
--- a/ldns/ldns/error.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/**
- * \file error.h
- *
- * Defines error numbers and functions to translate those to a readable string.
- *
- */
-
-/**
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2005-2006
- *
- * See the file LICENSE for the license
- */
-
-#ifndef LDNS_ERROR_H
-#define LDNS_ERROR_H
-
-#include <ldns/util.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-enum ldns_enum_status {
- LDNS_STATUS_OK,
- LDNS_STATUS_EMPTY_LABEL,
- LDNS_STATUS_LABEL_OVERFLOW,
- LDNS_STATUS_DOMAINNAME_OVERFLOW,
- LDNS_STATUS_DOMAINNAME_UNDERFLOW,
- LDNS_STATUS_DDD_OVERFLOW,
- LDNS_STATUS_PACKET_OVERFLOW,
- LDNS_STATUS_INVALID_POINTER,
- LDNS_STATUS_MEM_ERR,
- LDNS_STATUS_INTERNAL_ERR,
- LDNS_STATUS_SSL_ERR,
- LDNS_STATUS_ERR,
- LDNS_STATUS_INVALID_INT,
- LDNS_STATUS_INVALID_IP4,
- LDNS_STATUS_INVALID_IP6,
- LDNS_STATUS_INVALID_STR,
- LDNS_STATUS_INVALID_B32_EXT,
- LDNS_STATUS_INVALID_B64,
- LDNS_STATUS_INVALID_HEX,
- LDNS_STATUS_INVALID_TIME,
- LDNS_STATUS_NETWORK_ERR,
- LDNS_STATUS_ADDRESS_ERR,
- LDNS_STATUS_FILE_ERR,
- LDNS_STATUS_UNKNOWN_INET,
- LDNS_STATUS_NOT_IMPL,
- LDNS_STATUS_NULL,
- LDNS_STATUS_CRYPTO_UNKNOWN_ALGO,
- LDNS_STATUS_CRYPTO_ALGO_NOT_IMPL,
- LDNS_STATUS_CRYPTO_NO_RRSIG,
- LDNS_STATUS_CRYPTO_NO_DNSKEY,
- LDNS_STATUS_CRYPTO_NO_TRUSTED_DNSKEY,
- LDNS_STATUS_CRYPTO_NO_DS,
- LDNS_STATUS_CRYPTO_NO_TRUSTED_DS,
- LDNS_STATUS_CRYPTO_NO_MATCHING_KEYTAG_DNSKEY,
- LDNS_STATUS_CRYPTO_VALIDATED,
- LDNS_STATUS_CRYPTO_BOGUS,
- LDNS_STATUS_CRYPTO_SIG_EXPIRED,
- LDNS_STATUS_CRYPTO_SIG_NOT_INCEPTED,
- LDNS_STATUS_CRYPTO_TSIG_BOGUS,
- LDNS_STATUS_CRYPTO_TSIG_ERR,
- LDNS_STATUS_CRYPTO_EXPIRATION_BEFORE_INCEPTION,
- LDNS_STATUS_CRYPTO_TYPE_COVERED_ERR,
- LDNS_STATUS_ENGINE_KEY_NOT_LOADED,
- LDNS_STATUS_NSEC3_ERR,
- LDNS_STATUS_RES_NO_NS,
- LDNS_STATUS_RES_QUERY,
- LDNS_STATUS_WIRE_INCOMPLETE_HEADER,
- LDNS_STATUS_WIRE_INCOMPLETE_QUESTION,
- LDNS_STATUS_WIRE_INCOMPLETE_ANSWER,
- LDNS_STATUS_WIRE_INCOMPLETE_AUTHORITY,
- LDNS_STATUS_WIRE_INCOMPLETE_ADDITIONAL,
- LDNS_STATUS_NO_DATA,
- LDNS_STATUS_CERT_BAD_ALGORITHM,
- LDNS_STATUS_SYNTAX_TYPE_ERR,
- LDNS_STATUS_SYNTAX_CLASS_ERR,
- LDNS_STATUS_SYNTAX_TTL_ERR,
- LDNS_STATUS_SYNTAX_INCLUDE_ERR_NOTIMPL,
- LDNS_STATUS_SYNTAX_RDATA_ERR,
- LDNS_STATUS_SYNTAX_DNAME_ERR,
- LDNS_STATUS_SYNTAX_VERSION_ERR,
- LDNS_STATUS_SYNTAX_ALG_ERR,
- LDNS_STATUS_SYNTAX_KEYWORD_ERR,
- LDNS_STATUS_SYNTAX_TTL,
- LDNS_STATUS_SYNTAX_ORIGIN,
- LDNS_STATUS_SYNTAX_INCLUDE,
- LDNS_STATUS_SYNTAX_EMPTY,
- LDNS_STATUS_SYNTAX_ITERATIONS_OVERFLOW,
- LDNS_STATUS_SYNTAX_MISSING_VALUE_ERR,
- LDNS_STATUS_SYNTAX_INTEGER_OVERFLOW,
- LDNS_STATUS_SYNTAX_BAD_ESCAPE,
- LDNS_STATUS_SOCKET_ERROR,
- LDNS_STATUS_SYNTAX_ERR,
- LDNS_STATUS_DNSSEC_EXISTENCE_DENIED,
- LDNS_STATUS_DNSSEC_NSEC_RR_NOT_COVERED,
- LDNS_STATUS_DNSSEC_NSEC_WILDCARD_NOT_COVERED,
- LDNS_STATUS_DNSSEC_NSEC3_ORIGINAL_NOT_FOUND,
- LDNS_STATUS_MISSING_RDATA_FIELDS_RRSIG,
- LDNS_STATUS_MISSING_RDATA_FIELDS_KEY,
- LDNS_STATUS_CRYPTO_SIG_EXPIRED_WITHIN_MARGIN,
- LDNS_STATUS_CRYPTO_SIG_NOT_INCEPTED_WITHIN_MARGIN,
- LDNS_STATUS_DANE_STATUS_MESSAGES,
- LDNS_STATUS_DANE_UNKNOWN_CERTIFICATE_USAGE,
- LDNS_STATUS_DANE_UNKNOWN_SELECTOR,
- LDNS_STATUS_DANE_UNKNOWN_MATCHING_TYPE,
- LDNS_STATUS_DANE_UNKNOWN_PROTOCOL,
- LDNS_STATUS_DANE_UNKNOWN_TRANSPORT,
- LDNS_STATUS_DANE_MISSING_EXTRA_CERTS,
- LDNS_STATUS_DANE_EXTRA_CERTS_NOT_USED,
- LDNS_STATUS_DANE_OFFSET_OUT_OF_RANGE,
- LDNS_STATUS_DANE_INSECURE,
- LDNS_STATUS_DANE_BOGUS,
- LDNS_STATUS_DANE_TLSA_DID_NOT_MATCH,
- LDNS_STATUS_DANE_NON_CA_CERTIFICATE,
- LDNS_STATUS_DANE_PKIX_DID_NOT_VALIDATE,
- LDNS_STATUS_DANE_PKIX_NO_SELF_SIGNED_TRUST_ANCHOR,
- LDNS_STATUS_EXISTS_ERR,
- LDNS_STATUS_INVALID_ILNP64,
- LDNS_STATUS_INVALID_EUI48,
- LDNS_STATUS_INVALID_EUI64,
- LDNS_STATUS_WIRE_RDATA_ERR,
- LDNS_STATUS_INVALID_TAG,
- LDNS_STATUS_TYPE_NOT_IN_BITMAP,
- LDNS_STATUS_INVALID_RDF_TYPE,
- LDNS_STATUS_RDATA_OVERFLOW,
- LDNS_STATUS_SYNTAX_SUPERFLUOUS_TEXT_ERR,
- LDNS_STATUS_NSEC3_DOMAINNAME_OVERFLOW,
- LDNS_STATUS_DANE_NEED_OPENSSL_GE_1_1_FOR_DANE_TA
-};
-typedef enum ldns_enum_status ldns_status;
-
-extern ldns_lookup_table ldns_error_str[];
-
-/**
- * look up a descriptive text by each error. This function
- * could use a better name
- * \param[in] err ldns_status number
- * \return the string for that error
- */
-const char *ldns_get_errorstr_by_id(ldns_status err);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_ERROR_H */
diff --git a/ldns/ldns/higher.h b/ldns/ldns/higher.h
deleted file mode 100644
index 59c2802..0000000
--- a/ldns/ldns/higher.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/**
- * \file higher.h
- *
- * Specifies some higher level functions that could
- * be useful for certain applications
- */
-
-/*
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2005-2006
- *
- * See the file LICENSE for the license
- */
-
-#ifndef LDNS_HIGHER_H
-#define LDNS_HIGHER_H
-
-#include <ldns/resolver.h>
-#include <ldns/rdata.h>
-#include <ldns/rr.h>
-#include <ldns/host2str.h>
-#include <ldns/tsig.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Ask the resolver about name
- * and return all address records
- * \param[in] r the resolver to use
- * \param[in] name the name to look for
- * \param[in] c the class to use
- * \param[in] flags give some optional flags to the query
- */
-ldns_rr_list *ldns_get_rr_list_addr_by_name(ldns_resolver *r, const ldns_rdf *name, ldns_rr_class c, uint16_t flags);
-
-/**
- * ask the resolver about the address
- * and return the name
- * \param[in] r the resolver to use
- * \param[in] addr the addr to look for
- * \param[in] c the class to use
- * \param[in] flags give some optional flags to the query
- */
-ldns_rr_list *ldns_get_rr_list_name_by_addr(ldns_resolver *r, const ldns_rdf *addr, ldns_rr_class c, uint16_t flags);
-
-/**
- * wade through fp (a /etc/hosts like file)
- * and return a rr_list containing all the
- * defined hosts in there
- * \param[in] fp the file pointer to use
- * \return ldns_rr_list * with the names
- */
-ldns_rr_list *ldns_get_rr_list_hosts_frm_fp(FILE *fp);
-
-/**
- * wade through fp (a /etc/hosts like file)
- * and return a rr_list containing all the
- * defined hosts in there
- * \param[in] fp the file pointer to use
- * \param[in] line_nr pointer to an integer containing the current line number (for debugging purposes)
- * \return ldns_rr_list * with the names
- */
-ldns_rr_list *ldns_get_rr_list_hosts_frm_fp_l(FILE *fp, int *line_nr);
-
-/**
- * wade through fp (a /etc/hosts like file)
- * and return a rr_list containing all the
- * defined hosts in there
- * \param[in] filename the filename to use (NULL for /etc/hosts)
- * \return ldns_rr_list * with the names
- */
-ldns_rr_list *ldns_get_rr_list_hosts_frm_file(char *filename);
-
-/**
- * This function is a wrapper function for ldns_get_rr_list_name_by_addr
- * and ldns_get_rr_list_addr_by_name. It's name is from the getaddrinfo()
- * library call. It tries to mimic that call, but without the lowlevel
- * stuff.
- * \param[in] res The resolver. If this value is NULL then a resolver will
- * be created by ldns_getaddrinfo.
- * \param[in] node the name or ip address to look up
- * \param[in] c the class to look in
- * \param[out] list put the found RR's in this list
- * \return the number of RR found.
- */
-uint16_t ldns_getaddrinfo(ldns_resolver *res, const ldns_rdf *node, ldns_rr_class c, ldns_rr_list **list);
-
-/**
- * Check if t is enumerated in the nsec type rdata
- * \param[in] nsec the NSEC Record to look in
- * \param[in] t the type to check for
- * \return true when t is found, otherwise return false
- */
-bool ldns_nsec_type_check(const ldns_rr *nsec, ldns_rr_type t);
-
-/**
- * Print a number of rdf's of the RR. The rdfnum-list must
- * be ended by -1, otherwise unpredictable things might happen.
- * rdfs may be printed multiple times
- * \param[in] fp FILE * to write to
- * \param[in] r RR to write
- * \param[in] rdfnum a list of rdf to print.
- */
-void ldns_print_rr_rdf(FILE *fp, ldns_rr *r, int rdfnum, ...);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_HIGHER_H */
diff --git a/ldns/ldns/host2str.h b/ldns/ldns/host2str.h
deleted file mode 100644
index 4b443d0..0000000
--- a/ldns/ldns/host2str.h
+++ /dev/null
@@ -1,902 +0,0 @@
-/**
- * host2str.h - txt presentation of RRs
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2005-2006
- *
- * See the file LICENSE for the license
- */
-
-/**
- * \file
- *
- * Contains functions to translate the main structures to their text
- * representation, as well as functions to print them.
- */
-
-#ifndef LDNS_HOST2STR_H
-#define LDNS_HOST2STR_H
-
-#include <ldns/common.h>
-#include <ldns/error.h>
-#include <ldns/rr.h>
-#include <ldns/rdata.h>
-#include <ldns/packet.h>
-#include <ldns/buffer.h>
-#include <ldns/resolver.h>
-#include <ldns/zone.h>
-#include <ctype.h>
-
-#include "ldns/util.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define LDNS_APL_IP4 1
-#define LDNS_APL_IP6 2
-#define LDNS_APL_MASK 0x7f
-#define LDNS_APL_NEGATION 0x80
-
-/**
- * Represent a NULL pointer (instead of a pointer to a ldns_rr as "; (null)"
- * as opposed to outputting nothing at all in such a case.
- */
-/* Flag Name Flag Nr. Has data associated
- ---------------------------------------------------------------------*/
-#define LDNS_COMMENT_NULLS (1 << 0)
-/** Show key id with DNSKEY RR's as comment */
-#define LDNS_COMMENT_KEY_ID (1 << 1)
-/** Show if a DNSKEY is a ZSK or KSK as comment */
-#define LDNS_COMMENT_KEY_TYPE (1 << 2)
-/** Show DNSKEY key size as comment */
-#define LDNS_COMMENT_KEY_SIZE (1 << 3)
-/** Provide bubblebabble representation for DS RR's as comment */
-#define LDNS_COMMENT_BUBBLEBABBLE (1 << 4)
-/** Show when a NSEC3 RR has the optout flag set as comment */
-#define LDNS_COMMENT_FLAGS (1 << 5)
-/** Show the unhashed owner and next owner names for NSEC3 RR's as comment */
-#define LDNS_COMMENT_NSEC3_CHAIN (1 << 6) /* yes */
-/** Print mark up */
-#define LDNS_COMMENT_LAYOUT (1 << 7)
-/** Also comment KEY_ID with RRSIGS **/
-#define LDNS_COMMENT_RRSIGS (1 << 8)
-#define LDNS_FMT_ZEROIZE_RRSIGS (1 << 9)
-#define LDNS_FMT_PAD_SOA_SERIAL (1 << 10)
-#define LDNS_FMT_RFC3597 (1 << 11) /* yes */
-
-#define LDNS_FMT_FLAGS_WITH_DATA 2
-
-/** Show key id, type and size as comment for DNSKEY RR's */
-#define LDNS_COMMENT_KEY (LDNS_COMMENT_KEY_ID \
- |LDNS_COMMENT_KEY_TYPE\
- |LDNS_COMMENT_KEY_SIZE)
-
-/**
- * Output format specifier
- *
- * Determines how Packets, Resource Records and Resource record data fiels are
- * formatted when printing or converting to string.
- * Currently it is only used to specify what aspects of a Resource Record are
- * annotated in the comment section of the textual representation the record.
- * This is speciefed with flags and potential exra data (such as for example
- * a lookup map of hashes to real names for annotation NSEC3 records).
- */
-struct ldns_struct_output_format
-{
- /** Specification of how RR's should be formatted in text */
- int flags;
- /** Potential extra data to be used with formatting RR's in text */
- void *data;
-};
-typedef struct ldns_struct_output_format ldns_output_format;
-
-/**
- * Output format struct with additional data for flags that use them.
- * This struct may not be initialized directly. Use ldns_output_format_init
- * to initialize.
- */
-struct ldns_struct_output_format_storage
-{ int flags;
- ldns_rbtree_t* hashmap; /* for LDNS_COMMENT_NSEC3_CHAIN */
- ldns_rdf* bitmap; /* for LDNS_FMT_RFC3597 */
-};
-typedef struct ldns_struct_output_format_storage ldns_output_format_storage;
-
-/**
- * Standard output format record that disables commenting in the textual
- * representation of Resource Records completely.
- */
-extern const ldns_output_format *ldns_output_format_nocomments;
-/**
- * Standard output format record that annotated only DNSKEY RR's with commenti
- * text.
- */
-extern const ldns_output_format *ldns_output_format_onlykeyids;
-/**
- * The default output format record. Same as ldns_output_format_onlykeyids.
- */
-extern const ldns_output_format *ldns_output_format_default;
-/**
- * Standard output format record that shows all DNSKEY related information in
- * the comment text, plus the optout flag when set with NSEC3's, plus the
- * bubblebabble representation of DS RR's.
- */
-extern const ldns_output_format *ldns_output_format_bubblebabble;
-
-/**
- * Initialize output format storage to the default value.
- * \param[in] fmt A reference to an output_format_ storage struct
- * \return The initialized storage struct typecasted to ldns_output_format
- */
-INLINE
-ldns_output_format* ldns_output_format_init(ldns_output_format_storage* fmt) {
- fmt->flags = ldns_output_format_default->flags;
- fmt->hashmap = NULL;
- fmt->bitmap = NULL;
- return (ldns_output_format*)fmt;
-}
-
-/**
- * Set an output format flag.
- */
-INLINE void ldns_output_format_set(ldns_output_format* fmt, int flag) {
- fmt->flags |= flag;
-}
-
-/**
- * Clear an output format flag.
- */
-INLINE void ldns_output_format_clear(ldns_output_format* fmt, int flag) {
- fmt->flags &= !flag;
-}
-
-/**
- * Makes sure the LDNS_FMT_RFC3597 is set in the output format.
- * Marks the type to be printed in RFC3597 format.
- * /param[in] fmt the output format to update
- * /param[in] the type to be printed in RFC3597 format
- * /return LDNS_STATUS_OK on success
- */
-ldns_status
-ldns_output_format_set_type(ldns_output_format* fmt, ldns_rr_type type);
-
-/**
- * Makes sure the LDNS_FMT_RFC3597 is set in the output format.
- * Marks the type to not be printed in RFC3597 format. When no other types
- * have been marked before, all known types (except the given one) will be
- * marked for printing in RFC3597 format.
- * /param[in] fmt the output format to update
- * /param[in] the type not to be printed in RFC3597 format
- * /return LDNS_STATUS_OK on success
- */
-ldns_status
-ldns_output_format_clear_type(ldns_output_format* fmt, ldns_rr_type type);
-
-/**
- * Converts an ldns packet opcode value to its mnemonic, and adds that
- * to the output buffer
- * \param[in] *output the buffer to add the data to
- * \param[in] opcode to find the string representation of
- * \return LDNS_STATUS_OK on success, or a buffer failure mode on error
- */
-ldns_status
-ldns_pkt_opcode2buffer_str(ldns_buffer *output, ldns_pkt_opcode opcode);
-
-/**
- * Converts an ldns packet rcode value to its mnemonic, and adds that
- * to the output buffer
- * \param[in] *output the buffer to add the data to
- * \param[in] rcode to find the string representation of
- * \return LDNS_STATUS_OK on success, or a buffer failure mode on error
- */
-ldns_status
-ldns_pkt_rcode2buffer_str(ldns_buffer *output, ldns_pkt_rcode rcode);
-
-/**
- * Converts an ldns algorithm type to its mnemonic, and adds that
- * to the output buffer
- * \param[in] *output the buffer to add the data to
- * \param[in] algorithm to find the string representation of
- * \return LDNS_STATUS_OK on success, or a buffer failure mode on error
- */
-ldns_status
-ldns_algorithm2buffer_str(ldns_buffer *output,
- ldns_algorithm algorithm);
-
-/**
- * Converts an ldns certificate algorithm type to its mnemonic,
- * and adds that to the output buffer
- * \param[in] *output the buffer to add the data to
- * \param[in] cert_algorithm to find the string representation of
- * \return LDNS_STATUS_OK on success, or a buffer failure mode on error
- */
-ldns_status
-ldns_cert_algorithm2buffer_str(ldns_buffer *output,
- ldns_cert_algorithm cert_algorithm);
-
-
-/**
- * Converts a packet opcode to its mnemonic and returns that as
- * an allocated null-terminated string.
- * Remember to free it.
- *
- * \param[in] opcode the opcode to convert to text
- * \return null terminated char * data, or NULL on error
- */
-char *ldns_pkt_opcode2str(ldns_pkt_opcode opcode);
-
-/**
- * Converts a packet rcode to its mnemonic and returns that as
- * an allocated null-terminated string.
- * Remember to free it.
- *
- * \param[in] rcode the rcode to convert to text
- * \return null terminated char * data, or NULL on error
- */
-char *ldns_pkt_rcode2str(ldns_pkt_rcode rcode);
-
-/**
- * Converts a signing algorithms to its mnemonic and returns that as
- * an allocated null-terminated string.
- * Remember to free it.
- *
- * \param[in] algorithm the algorithm to convert to text
- * \return null terminated char * data, or NULL on error
- */
-char *ldns_pkt_algorithm2str(ldns_algorithm algorithm);
-
-/**
- * Converts a cert algorithm to its mnemonic and returns that as
- * an allocated null-terminated string.
- * Remember to free it.
- *
- * \param[in] cert_algorithm to convert to text
- * \return null terminated char * data, or NULL on error
- */
-char *ldns_pkt_cert_algorithm2str(ldns_cert_algorithm cert_algorithm);
-
-/**
- * Converts an LDNS_RDF_TYPE_A rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_a(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_AAAA rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_aaaa(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_STR rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_str(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_B64 rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_b64(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_B32_EXT rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_b32_ext(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_HEX rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_hex(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_TYPE rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_type(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_CLASS rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_class(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_ALG rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_alg(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an ldns_rr_type value to its string representation,
- * and places it in the given buffer
- * \param[in] *output The buffer to add the data to
- * \param[in] type the ldns_rr_type to convert
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rr_type2buffer_str(ldns_buffer *output,
- const ldns_rr_type type);
-
-/**
- * Converts an ldns_rr_type value to its string representation,
- * and returns that string. For unknown types, the string
- * "TYPE<id>" is returned. This function allocates data that must be
- * freed by the caller
- * \param[in] type the ldns_rr_type to convert
- * \return a newly allocated string
- */
-char *ldns_rr_type2str(const ldns_rr_type type);
-
-/**
- * Converts an ldns_rr_class value to its string representation,
- * and places it in the given buffer
- * \param[in] *output The buffer to add the data to
- * \param[in] klass the ldns_rr_class to convert
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rr_class2buffer_str(ldns_buffer *output,
- const ldns_rr_class klass);
-
-/**
- * Converts an ldns_rr_class value to its string representation,
- * and returns that string. For unknown types, the string
- * "CLASS<id>" is returned. This function allocates data that must be
- * freed by the caller
- * \param[in] klass the ldns_rr_class to convert
- * \return a newly allocated string
- */
-char *ldns_rr_class2str(const ldns_rr_class klass);
-
-
-/**
- * Converts an LDNS_RDF_TYPE_CERT rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_cert_alg(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_LOC rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_loc(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_UNKNOWN rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_unknown(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_NSAP rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_nsap(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_ATMA rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_atma(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_WKS rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_wks(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_NSEC rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_nsec(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_PERIOD rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_period(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_TSIGTIME rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_tsigtime(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_APL rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_apl(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_INT16_DATA rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_int16_data(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_IPSECKEY rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_ipseckey(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts the data in the rdata field to presentation
- * format (as char *) and appends it to the given buffer
- *
- * \param[in] output pointer to the buffer to append the data to
- * \param[in] rdf the pointer to the rdafa field containing the data
- * \return status
- */
-ldns_status ldns_rdf2buffer_str(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts the data in the resource record to presentation
- * format (as char *) and appends it to the given buffer.
- * The presentation format of DNSKEY record is annotated with comments giving
- * the id, type and size of the key.
- *
- * \param[in] output pointer to the buffer to append the data to
- * \param[in] rr the pointer to the rr field to convert
- * \return status
- */
-ldns_status ldns_rr2buffer_str(ldns_buffer *output, const ldns_rr *rr);
-
-/**
- * Converts the data in the resource record to presentation
- * format (as char *) and appends it to the given buffer.
- * The presentation format is annotated with comments giving
- * additional information on the record.
- *
- * \param[in] output pointer to the buffer to append the data to
- * \param[in] fmt how to format the textual representation of the
- * resource record.
- * \param[in] rr the pointer to the rr field to convert
- * \return status
- */
-ldns_status ldns_rr2buffer_str_fmt(ldns_buffer *output,
- const ldns_output_format *fmt, const ldns_rr *rr);
-
-/**
- * Converts the data in the DNS packet to presentation
- * format (as char *) and appends it to the given buffer
- *
- * \param[in] output pointer to the buffer to append the data to
- * \param[in] pkt the pointer to the packet to convert
- * \return status
- */
-ldns_status ldns_pkt2buffer_str(ldns_buffer *output, const ldns_pkt *pkt);
-
-/**
- * Converts the data in the DNS packet to presentation
- * format (as char *) and appends it to the given buffer
- *
- * \param[in] output pointer to the buffer to append the data to
- * \param[in] fmt how to format the textual representation of the packet
- * \param[in] pkt the pointer to the packet to convert
- * \return status
- */
-ldns_status ldns_pkt2buffer_str_fmt(ldns_buffer *output,
- const ldns_output_format *fmt, const ldns_pkt *pkt);
-
-/**
- * Converts an LDNS_RDF_TYPE_NSEC3_SALT rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_nsec3_salt(ldns_buffer *output, const ldns_rdf *rdf);
-
-
-/**
- * Converts the data in the DNS packet to presentation
- * format (as char *) and appends it to the given buffer
- *
- * \param[in] output pointer to the buffer to append the data to
- * \param[in] k the pointer to the private key to convert
- * \return status
- */
-ldns_status ldns_key2buffer_str(ldns_buffer *output, const ldns_key *k);
-
-/**
- * Converts an LDNS_RDF_TYPE_INT8 rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_int8(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_INT16 rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_int16(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_INT32 rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_int32(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_TIME rdata element to string format and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_time(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_ILNP64 rdata element to 4 hexadecimal numbers
- * separated by colons and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_ilnp64(ldns_buffer *output,
- const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_EUI48 rdata element to 6 hexadecimal numbers
- * separated by dashes and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_eui48(ldns_buffer *output,
- const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_EUI64 rdata element to 8 hexadecimal numbers
- * separated by dashes and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_eui64(ldns_buffer *output,
- const ldns_rdf *rdf);
-
-/**
- * Adds the LDNS_RDF_TYPE_TAG rdata to the output buffer,
- * provided it contains only alphanumeric characters.
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_tag(ldns_buffer *output,
- const ldns_rdf *rdf);
-
-/**
- * Adds the LDNS_RDF_TYPE_LONG_STR rdata to the output buffer, in-between
- * double quotes and all non printable characters properly escaped.
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_long_str(ldns_buffer *output,
- const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_HIP rdata element to presentation format for
- * the algorithm, HIT and Public Key and adds it the output buffer .
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_hip(ldns_buffer *output,
- const ldns_rdf *rdf);
-
-/**
- * Converts an LDNS_RDF_TYPE_AMTRELAY rdata element to presentation format for
- * the precedence, D-bit, type and relay and adds it to the output buffer
- * \param[in] *rdf The rdata to convert
- * \param[in] *output The buffer to add the data to
- * \return LDNS_STATUS_OK on success, and error status on failure
- */
-ldns_status ldns_rdf2buffer_str_amtrelay(ldns_buffer *output,
- const ldns_rdf *rdf);
-
-
-/**
- * Converts the data in the rdata field to presentation format and
- * returns that as a char *.
- * Remember to free it.
- *
- * \param[in] rdf The rdata field to convert
- * \return null terminated char * data, or NULL on error
- */
-char *ldns_rdf2str(const ldns_rdf *rdf);
-
-/**
- * Converts the data in the resource record to presentation format and
- * returns that as a char *.
- * Remember to free it.
- *
- * \param[in] rr The rdata field to convert
- * \return null terminated char * data, or NULL on error
- */
-char *ldns_rr2str(const ldns_rr *rr);
-
-/**
- * Converts the data in the resource record to presentation format and
- * returns that as a char *.
- * Remember to free it.
- *
- * \param[in] fmt how to format the resource record
- * \param[in] rr The rdata field to convert
- * \return null terminated char * data, or NULL on error
- */
-char *ldns_rr2str_fmt(const ldns_output_format *fmt, const ldns_rr *rr);
-
-/**
- * Converts the data in the DNS packet to presentation format and
- * returns that as a char *.
- * Remember to free it.
- *
- * \param[in] pkt The rdata field to convert
- * \return null terminated char * data, or NULL on error
- */
-char *ldns_pkt2str(const ldns_pkt *pkt);
-
-/**
- * Converts the data in the DNS packet to presentation format and
- * returns that as a char *.
- * Remember to free it.
- *
- * \param[in] fmt how to format the packet
- * \param[in] pkt The rdata field to convert
- * \return null terminated char * data, or NULL on error
- */
-char *ldns_pkt2str_fmt(const ldns_output_format *fmt, const ldns_pkt *pkt);
-
-/**
- * Converts a private key to the test presentation fmt and
- * returns that as a char *.
- * Remember to free it.
- *
- * \param[in] k the key to convert to text
- * \return null terminated char * data, or NULL on error
- */
-char *ldns_key2str(const ldns_key *k);
-
-/**
- * Converts a list of resource records to presentation format
- * and returns that as a char *.
- * Remember to free it.
- *
- * \param[in] rr_list the rr_list to convert to text
- * \return null terminated char * data, or NULL on error
- */
-char *ldns_rr_list2str(const ldns_rr_list *rr_list);
-
-/**
- * Converts a list of resource records to presentation format
- * and returns that as a char *.
- * Remember to free it.
- *
- * \param[in] fmt how to format the list of resource records
- * \param[in] rr_list the rr_list to convert to text
- * \return null terminated char * data, or NULL on error
- */
-char *ldns_rr_list2str_fmt(
- const ldns_output_format *fmt, const ldns_rr_list *rr_list);
-
-/**
- * Returns a copy of the data in the buffer as a null terminated
- * char * string. The returned string must be freed by the caller.
- * The buffer must be in write modus and may thus not have been flipped.
- *
- * \param[in] buffer buffer containing char * data
- * \return null terminated char * data, or NULL on error
- */
-char *ldns_buffer2str(ldns_buffer *buffer);
-
-/**
- * Exports and returns the data in the buffer as a null terminated
- * char * string. The returned string must be freed by the caller.
- * The buffer must be in write modus and may thus not have been flipped.
- * The buffer is fixed after this function returns.
- *
- * \param[in] buffer buffer containing char * data
- * \return null terminated char * data, or NULL on error
- */
-char *ldns_buffer_export2str(ldns_buffer *buffer);
-
-/**
- * Prints the data in the rdata field to the given file stream
- * (in presentation format)
- *
- * \param[in] output the file stream to print to
- * \param[in] rdf the rdata field to print
- * \return void
- */
-void ldns_rdf_print(FILE *output, const ldns_rdf *rdf);
-
-/**
- * Prints the data in the resource record to the given file stream
- * (in presentation format)
- *
- * \param[in] output the file stream to print to
- * \param[in] rr the resource record to print
- * \return void
- */
-void ldns_rr_print(FILE *output, const ldns_rr *rr);
-
-/**
- * Prints the data in the resource record to the given file stream
- * (in presentation format)
- *
- * \param[in] output the file stream to print to
- * \param[in] fmt format of the textual representation
- * \param[in] rr the resource record to print
- * \return void
- */
-void ldns_rr_print_fmt(FILE *output,
- const ldns_output_format *fmt, const ldns_rr *rr);
-
-/**
- * Prints the data in the DNS packet to the given file stream
- * (in presentation format)
- *
- * \param[in] output the file stream to print to
- * \param[in] pkt the packet to print
- * \return void
- */
-void ldns_pkt_print(FILE *output, const ldns_pkt *pkt);
-
-/**
- * Prints the data in the DNS packet to the given file stream
- * (in presentation format)
- *
- * \param[in] output the file stream to print to
- * \param[in] fmt format of the textual representation
- * \param[in] pkt the packet to print
- * \return void
- */
-void ldns_pkt_print_fmt(FILE *output,
- const ldns_output_format *fmt, const ldns_pkt *pkt);
-
-/**
- * Converts a rr_list to presentation format and appends it to
- * the output buffer
- * \param[in] output the buffer to append output to
- * \param[in] list the ldns_rr_list to print
- * \return ldns_status
- */
-ldns_status ldns_rr_list2buffer_str(ldns_buffer *output, const ldns_rr_list *list);
-
-/**
- * Converts a rr_list to presentation format and appends it to
- * the output buffer
- * \param[in] output the buffer to append output to
- * \param[in] fmt format of the textual representation
- * \param[in] list the ldns_rr_list to print
- * \return ldns_status
- */
-ldns_status ldns_rr_list2buffer_str_fmt(ldns_buffer *output,
- const ldns_output_format *fmt, const ldns_rr_list *list);
-
-/**
- * Converts the header of a packet to presentation format and appends it to
- * the output buffer
- * \param[in] output the buffer to append output to
- * \param[in] pkt the packet to convert the header of
- * \return ldns_status
- */
-ldns_status ldns_pktheader2buffer_str(ldns_buffer *output, const ldns_pkt *pkt);
-
-/**
- * print a rr_list to output
- * \param[in] output the fd to print to
- * \param[in] list the rr_list to print
- */
-void ldns_rr_list_print(FILE *output, const ldns_rr_list *list);
-
-/**
- * print a rr_list to output
- * \param[in] output the fd to print to
- * \param[in] fmt format of the textual representation
- * \param[in] list the rr_list to print
- */
-void ldns_rr_list_print_fmt(FILE *output,
- const ldns_output_format *fmt, const ldns_rr_list *list);
-
-/**
- * Print a resolver (in sofar that is possible) state
- * to output.
- * \param[in] output the fd to print to
- * \param[in] r the resolver to print
- */
-void ldns_resolver_print(FILE *output, const ldns_resolver *r);
-
-/**
- * Print a resolver (in sofar that is possible) state
- * to output.
- * \param[in] output the fd to print to
- * \param[in] fmt format of the textual representation
- * \param[in] r the resolver to print
- */
-void ldns_resolver_print_fmt(FILE *output,
- const ldns_output_format *fmt, const ldns_resolver *r);
-
-/**
- * Print a zone structure * to output. Note the SOA record
- * is included in this output
- * \param[in] output the fd to print to
- * \param[in] z the zone to print
- */
-void ldns_zone_print(FILE *output, const ldns_zone *z);
-
-/**
- * Print a zone structure * to output. Note the SOA record
- * is included in this output
- * \param[in] output the fd to print to
- * \param[in] fmt format of the textual representation
- * \param[in] z the zone to print
- */
-void ldns_zone_print_fmt(FILE *output,
- const ldns_output_format *fmt, const ldns_zone *z);
-
-/**
- * Print the ldns_rdf containing a dname to the buffer
- * \param[in] output the buffer to print to
- * \param[in] dname the dname to print
- * \return ldns_status message if the printing succeeded
- */
-ldns_status ldns_rdf2buffer_str_dname(ldns_buffer *output, const ldns_rdf *dname);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_HOST2STR_H */
diff --git a/ldns/ldns/host2wire.h b/ldns/ldns/host2wire.h
deleted file mode 100644
index 94693cd..0000000
--- a/ldns/ldns/host2wire.h
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * host2wire.h - 2wire conversion routines
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2005-2006
- *
- * See the file LICENSE for the license
- */
-
-/**
- * \file
- *
- * Contains all functions to translate the main structures to wire format
- */
-
-#ifndef LDNS_HOST2WIRE_H
-#define LDNS_HOST2WIRE_H
-
-#include <ldns/common.h>
-#include <ldns/error.h>
-#include <ldns/rr.h>
-#include <ldns/rdata.h>
-#include <ldns/packet.h>
-#include <ldns/buffer.h>
-#include <ctype.h>
-
-#include "ldns/util.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Copies the dname data to the buffer in wire format
- * \param[out] *buffer buffer to append the result to
- * \param[in] *name rdata dname to convert
- * \return ldns_status
- */
-ldns_status ldns_dname2buffer_wire(ldns_buffer *buffer, const ldns_rdf *name);
-
-/**
- * Copies the dname data to the buffer in wire format
- * \param[out] *buffer buffer to append the result to
- * \param[in] *name rdata dname to convert
- * \param[out] *compression_data data structure holding state for compression
- * \return ldns_status
- */
-ldns_status ldns_dname2buffer_wire_compress(ldns_buffer *buffer, const ldns_rdf *name, ldns_rbtree_t *compression_data);
-
-/**
- * Copies the rdata data to the buffer in wire format
- * \param[out] *output buffer to append the result to
- * \param[in] *rdf rdata to convert
- * \return ldns_status
- */
-ldns_status ldns_rdf2buffer_wire(ldns_buffer *output, const ldns_rdf *rdf);
-
-/**
- * Copies the rdata data to the buffer in wire format
- * \param[out] *output buffer to append the result to
- * \param[in] *rdf rdata to convert
- * \param[out] *compression_data data structure holding state for compression
- * \return ldns_status
- */
-ldns_status ldns_rdf2buffer_wire_compress(ldns_buffer *output, const ldns_rdf *rdf, ldns_rbtree_t *compression_data);
-
-/**
- * Copies the rdata data to the buffer in wire format
- * If the rdata is a dname, the letters will be lowercased
- * during the conversion
- * \param[out] *output buffer to append the result to
- * \param[in] *rdf rdata to convert
- * \return ldns_status
- */
-ldns_status ldns_rdf2buffer_wire_canonical(ldns_buffer *output,
- const ldns_rdf *rdf);
-
-/**
- * Copies the rr data to the buffer in wire format
- * \param[out] *output buffer to append the result to
- * \param[in] *rr resource record to convert
- * \param[in] section the section in the packet this rr is supposed to be in
- * (to determine whether to add rdata or not)
- * \return ldns_status
- */
-ldns_status ldns_rr2buffer_wire(ldns_buffer *output,
- const ldns_rr *rr,
- int section);
-
-/**
- * Copies the rr data to the buffer in wire format while doing DNAME compression
- * \param[out] *output buffer to append the result to
- * \param[in] *rr resource record to convert
- * \param[in] section the section in the packet this rr is supposed to be in
- * (to determine whether to add rdata or not)
- * \param[out] *compression_data data structure holding state information for compression
- * \return ldns_status
- */
-ldns_status ldns_rr2buffer_wire_compress(ldns_buffer *output,
- const ldns_rr *rr,
- int section,
- ldns_rbtree_t *compression_data);
-
-/**
- * Copies the rr data to the buffer in wire format, in canonical format
- * according to RFC3597 (every dname in rdata fields of RR's mentioned in
- * that RFC will be lowercased)
- * \param[out] *output buffer to append the result to
- * \param[in] *rr resource record to convert
- * \param[in] section the section in the packet this rr is supposed to be in
- * (to determine whether to add rdata or not)
- * \return ldns_status
- */
-ldns_status ldns_rr2buffer_wire_canonical(ldns_buffer *output,
- const ldns_rr *rr,
- int section);
-
-
-/**
- * Converts a rrsig to wireformat BUT EXCLUDE the rrsig rdata
- * This is needed in DNSSEC verification
- * \param[out] output buffer to append the result to
- * \param[in] sigrr signature rr to operate on
- * \return ldns_status
- */
-ldns_status ldns_rrsig2buffer_wire(ldns_buffer *output, const ldns_rr *sigrr);
-
-/**
- * Converts an rr's rdata to wireformat, while excluding
- * the ownername and all the stuff before the rdata.
- * This is needed in DNSSEC keytag calculation, the ds
- * calcalution from the key and maybe elsewhere.
- *
- * \param[out] *output buffer where to put the result
- * \param[in] *rr rr to operate on
- * \return ldns_status
- */
-ldns_status ldns_rr_rdata2buffer_wire(ldns_buffer *output, const ldns_rr *rr);
-
-/**
- * Copies the packet data to the buffer in wire format
- * \param[out] *output buffer to append the result to
- * \param[in] *pkt packet to convert
- * \return ldns_status
- */
-ldns_status ldns_pkt2buffer_wire(ldns_buffer *output, const ldns_pkt *pkt);
-
-/**
- * Copies the rr_list data to the buffer in wire format
- * \param[out] *output buffer to append the result to
- * \param[in] *rrlist rr_list to to convert
- * \return ldns_status
- */
-ldns_status ldns_rr_list2buffer_wire(ldns_buffer *output, const ldns_rr_list *rrlist);
-
-/**
- * Allocates an array of uint8_t at dest, and puts the wireformat of the
- * given rdf in that array. The result_size value contains the
- * length of the array, if it succeeds, and 0 otherwise (in which case
- * the function also returns NULL)
- *
- * \param[out] dest pointer to the array of bytes to be created
- * \param[in] rdf the rdata field to convert
- * \param[out] size the size of the converted result
- */
-ldns_status ldns_rdf2wire(uint8_t **dest, const ldns_rdf *rdf, size_t *size);
-
-/**
- * Allocates an array of uint8_t at dest, and puts the wireformat of the
- * given rr in that array. The result_size value contains the
- * length of the array, if it succeeds, and 0 otherwise (in which case
- * the function also returns NULL)
- *
- * If the section argument is LDNS_SECTION_QUESTION, data like ttl and rdata
- * are not put into the result
- *
- * \param[out] dest pointer to the array of bytes to be created
- * \param[in] rr the rr to convert
- * \param[in] section the rr section, determines how the rr is written.
- * \param[out] size the size of the converted result
- */
-ldns_status ldns_rr2wire(uint8_t **dest, const ldns_rr *rr, int section, size_t *size);
-
-/**
- * Allocates an array of uint8_t at dest, and puts the wireformat of the
- * given packet in that array. The result_size value contains the
- * length of the array, if it succeeds, and 0 otherwise (in which case
- * the function also returns NULL)
- */
-ldns_status ldns_pkt2wire(uint8_t **dest, const ldns_pkt *p, size_t *size);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_HOST2WIRE_H */
diff --git a/ldns/ldns/keys.h b/ldns/ldns/keys.h
deleted file mode 100644
index df4bb22..0000000
--- a/ldns/ldns/keys.h
+++ /dev/null
@@ -1,640 +0,0 @@
-/*
- *
- * keys.h
- *
- * priv key definitions
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2005-2006
- *
- * See the file LICENSE for the license
- */
-
-/**
- * \file
- *
- * Addendum to \ref dnssec.h, this module contains key and algorithm definitions and functions.
- */
-
-
-#ifndef LDNS_KEYS_H
-#define LDNS_KEYS_H
-
-#include <ldns/common.h>
-#if LDNS_BUILD_CONFIG_HAVE_SSL
-#include <openssl/ssl.h>
-#endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
-#include <ldns/util.h>
-#include <errno.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern ldns_lookup_table ldns_signing_algorithms[];
-
-#define LDNS_KEY_ZONE_KEY 0x0100 /* rfc 4034 */
-#define LDNS_KEY_SEP_KEY 0x0001 /* rfc 4034 */
-#define LDNS_KEY_REVOKE_KEY 0x0080 /* rfc 5011 */
-
-/**
- * Algorithms used in dns
- */
-enum ldns_enum_algorithm
-{
- LDNS_RSAMD5 = 1, /* RFC 4034,4035 */
- LDNS_DH = 2,
- LDNS_DSA = 3,
- LDNS_ECC = 4,
- LDNS_RSASHA1 = 5,
- LDNS_DSA_NSEC3 = 6,
- LDNS_RSASHA1_NSEC3 = 7,
- LDNS_RSASHA256 = 8, /* RFC 5702 */
- LDNS_RSASHA512 = 10, /* RFC 5702 */
- LDNS_ECC_GOST = 12, /* RFC 5933 */
- LDNS_ECDSAP256SHA256 = 13, /* RFC 6605 */
- LDNS_ECDSAP384SHA384 = 14, /* RFC 6605 */
-#ifdef USE_ED25519
- /* this ifdef is internal to ldns, because we do not want to export
- * the symbol. Users can define it if they want access,
- * the feature is not fully implemented at this time and openssl
- * does not support it fully either (also for ED448). */
- LDNS_ED25519 = 15, /* draft-ietf-curdle-dnskey-ed25519 */
-#endif
-#ifdef USE_ED448
- LDNS_ED448 = 16, /* draft-ietf-curdle-dnskey-ed448 */
-#endif
- LDNS_INDIRECT = 252,
- LDNS_PRIVATEDNS = 253,
- LDNS_PRIVATEOID = 254
-};
-typedef enum ldns_enum_algorithm ldns_algorithm;
-
-/**
- * Hashing algorithms used in the DS record
- */
-enum ldns_enum_hash
-{
- LDNS_SHA1 = 1, /* RFC 4034 */
- LDNS_SHA256 = 2, /* RFC 4509 */
- LDNS_HASH_GOST = 3, /* RFC 5933 */
- LDNS_SHA384 = 4 /* RFC 6605 */
-};
-typedef enum ldns_enum_hash ldns_hash;
-
-/**
- * Algorithms used in dns for signing
- */
-enum ldns_enum_signing_algorithm
-{
- LDNS_SIGN_RSAMD5 = LDNS_RSAMD5,
- LDNS_SIGN_RSASHA1 = LDNS_RSASHA1,
- LDNS_SIGN_DSA = LDNS_DSA,
- LDNS_SIGN_RSASHA1_NSEC3 = LDNS_RSASHA1_NSEC3,
- LDNS_SIGN_RSASHA256 = LDNS_RSASHA256,
- LDNS_SIGN_RSASHA512 = LDNS_RSASHA512,
- LDNS_SIGN_DSA_NSEC3 = LDNS_DSA_NSEC3,
- LDNS_SIGN_ECC_GOST = LDNS_ECC_GOST,
- LDNS_SIGN_ECDSAP256SHA256 = LDNS_ECDSAP256SHA256,
- LDNS_SIGN_ECDSAP384SHA384 = LDNS_ECDSAP384SHA384,
-#ifdef USE_ED25519
- LDNS_SIGN_ED25519 = LDNS_ED25519,
-#endif
-#ifdef USE_ED448
- LDNS_SIGN_ED448 = LDNS_ED448,
-#endif
- LDNS_SIGN_HMACMD5 = 157, /* not official! This type is for TSIG, not DNSSEC */
- LDNS_SIGN_HMACSHA1 = 158, /* not official! This type is for TSIG, not DNSSEC */
- LDNS_SIGN_HMACSHA256 = 159, /* ditto */
- LDNS_SIGN_HMACSHA224 = 162, /* ditto */
- LDNS_SIGN_HMACSHA384 = 164, /* ditto */
- LDNS_SIGN_HMACSHA512 = 165 /* ditto */
-};
-typedef enum ldns_enum_signing_algorithm ldns_signing_algorithm;
-
-/**
- * General key structure, can contain all types of keys that
- * are used in DNSSEC. Mostly used to store private keys, since
- * public keys can also be stored in a \ref ldns_rr with type
- * \ref LDNS_RR_TYPE_DNSKEY.
- *
- * This structure can also store some variables that influence the
- * signatures generated by signing with this key, for instance the
- * inception date.
- */
-struct ldns_struct_key {
- ldns_signing_algorithm _alg;
- /** Whether to use this key when signing */
- bool _use;
- /** Storage pointers for the types of keys supported */
- /* TODO remove unions? */
- struct {
-#if LDNS_BUILD_CONFIG_HAVE_SSL
-#ifndef S_SPLINT_S
- /* The key can be an OpenSSL EVP Key
- */
- EVP_PKEY *key;
-#endif
-#endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
- /**
- * The key can be an HMAC key
- */
- struct {
- unsigned char *key;
- size_t size;
- } hmac;
- /** the key structure can also just point to some external
- * key data
- */
- void *external_key;
- } _key;
- /** Depending on the key we can have extra data */
- union {
- /** Some values that influence generated signatures */
- struct {
- /** The TTL of the rrset that is currently signed */
- uint32_t orig_ttl;
- /** The inception date of signatures made with this key. */
- uint32_t inception;
- /** The expiration date of signatures made with this key. */
- uint32_t expiration;
- /** The keytag of this key. */
- uint16_t keytag;
- /** The dnssec key flags as specified in RFC4035, like ZSK and KSK */
- uint16_t flags;
- } dnssec;
- } _extra;
- /** Owner name of the key */
- ldns_rdf *_pubkey_owner;
-};
-typedef struct ldns_struct_key ldns_key;
-
-/**
- * Same as rr_list, but now for keys
- */
-struct ldns_struct_key_list
-{
- size_t _key_count;
- ldns_key **_keys;
-};
-typedef struct ldns_struct_key_list ldns_key_list;
-
-
-/**
- * Creates a new empty key list
- * \return a new ldns_key_list structure pointer
- */
-ldns_key_list *ldns_key_list_new(void);
-
-/**
- * Creates a new empty key structure
- * \return a new ldns_key * structure
- */
-ldns_key *ldns_key_new(void);
-
-/**
- * Creates a new key based on the algorithm
- *
- * \param[in] a The algorithm to use
- * \param[in] size the number of bytes for the keysize
- * \return a new ldns_key structure with the key
- */
-ldns_key *ldns_key_new_frm_algorithm(ldns_signing_algorithm a, uint16_t size);
-
-/**
- * Creates a new priv key based on the
- * contents of the file pointed by fp.
- *
- * The file should be in Private-key-format v1.x.
- *
- * \param[out] k the new ldns_key structure
- * \param[in] fp the file pointer to use
- * \return an error or LDNS_STATUS_OK
- */
-ldns_status ldns_key_new_frm_fp(ldns_key **k, FILE *fp);
-
-/**
- * Creates a new private key based on the
- * contents of the file pointed by fp
- *
- * The file should be in Private-key-format v1.x.
- *
- * \param[out] k the new ldns_key structure
- * \param[in] fp the file pointer to use
- * \param[in] line_nr pointer to an integer containing the current line number (for debugging purposes)
- * \return an error or LDNS_STATUS_OK
- */
-ldns_status ldns_key_new_frm_fp_l(ldns_key **k, FILE *fp, int *line_nr);
-
-#if LDNS_BUILD_CONFIG_HAVE_SSL
-/**
- * Read the key with the given id from the given engine and store it
- * in the given ldns_key structure. The algorithm type is set
- */
-ldns_status ldns_key_new_frm_engine(ldns_key **key, ENGINE *e, char *key_id, ldns_algorithm);
-
-
-/**
- * frm_fp helper function. This function parses the
- * remainder of the (RSA) priv. key file generated from bind9
- * \param[in] fp the file to parse
- * \return NULL on failure otherwise a RSA structure
- */
-RSA *ldns_key_new_frm_fp_rsa(FILE *fp);
-#endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
-
-#if LDNS_BUILD_CONFIG_HAVE_SSL
-/**
- * frm_fp helper function. This function parses the
- * remainder of the (RSA) priv. key file generated from bind9
- * \param[in] fp the file to parse
- * \param[in] line_nr pointer to an integer containing the current line number (for debugging purposes)
- * \return NULL on failure otherwise a RSA structure
- */
-RSA *ldns_key_new_frm_fp_rsa_l(FILE *fp, int *line_nr);
-#endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
-
-#if LDNS_BUILD_CONFIG_HAVE_SSL
-/**
- * frm_fp helper function. This function parses the
- * remainder of the (DSA) priv. key file
- * \param[in] fp the file to parse
- * \return NULL on failure otherwise a RSA structure
- */
-DSA *ldns_key_new_frm_fp_dsa(FILE *fp);
-#endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
-
-#if LDNS_BUILD_CONFIG_HAVE_SSL
-/**
- * frm_fp helper function. This function parses the
- * remainder of the (DSA) priv. key file
- * \param[in] fp the file to parse
- * \param[in] line_nr pointer to an integer containing the current line number (for debugging purposes)
- * \return NULL on failure otherwise a RSA structure
- */
-DSA *ldns_key_new_frm_fp_dsa_l(FILE *fp, int *line_nr);
-#endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
-
-#if LDNS_BUILD_CONFIG_HAVE_SSL
-/**
- * frm_fp helper function. This function parses the
- * remainder of the (HMAC-MD5) key file
- * This function allocated a buffer that needs to be freed
- * \param[in] fp the file to parse
- * \param[out] hmac_size the number of bits in the resulting buffer
- * \return NULL on failure otherwise a newly allocated char buffer
- */
-unsigned char *ldns_key_new_frm_fp_hmac(FILE *fp, size_t *hmac_size);
-#endif
-
-#if LDNS_BUILD_CONFIG_HAVE_SSL
-/**
- * frm_fp helper function. This function parses the
- * remainder of the (HMAC-MD5) key file
- * This function allocated a buffer that needs to be freed
- * \param[in] fp the file to parse
- * \param[in] line_nr pointer to an integer containing the current line number (for error reporting purposes)
- * \param[out] hmac_size the number of bits in the resulting buffer
- * \return NULL on failure otherwise a newly allocated char buffer
- */
-unsigned char *ldns_key_new_frm_fp_hmac_l(FILE *fp, int *line_nr, size_t *hmac_size);
-#endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
-
-/* acces write functions */
-/**
- * Set the key's algorithm
- * \param[in] k the key
- * \param[in] l the algorithm
- */
-void ldns_key_set_algorithm(ldns_key *k, ldns_signing_algorithm l);
-#if LDNS_BUILD_CONFIG_HAVE_SSL
-/**
- * Set the key's evp key
- * \param[in] k the key
- * \param[in] e the evp key
- */
-void ldns_key_set_evp_key(ldns_key *k, EVP_PKEY *e);
-
-/**
- * Set the key's rsa data.
- * The rsa data should be freed by the user.
- * \param[in] k the key
- * \param[in] r the rsa data
- */
-void ldns_key_set_rsa_key(ldns_key *k, RSA *r);
-
-/**
- * Set the key's dsa data
- * The dsa data should be freed by the user.
- * \param[in] k the key
- * \param[in] d the dsa data
- */
-void ldns_key_set_dsa_key(ldns_key *k, DSA *d);
-
-/**
- * Assign the key's rsa data
- * The rsa data will be freed automatically when the key is freed.
- * \param[in] k the key
- * \param[in] r the rsa data
- */
-void ldns_key_assign_rsa_key(ldns_key *k, RSA *r);
-
-/**
- * Assign the key's dsa data
- * The dsa data will be freed automatically when the key is freed.
- * \param[in] k the key
- * \param[in] d the dsa data
- */
-void ldns_key_assign_dsa_key(ldns_key *k, DSA *d);
-
-/**
- * Get the PKEY id for GOST, loads GOST into openssl as a side effect.
- * Only available if GOST is compiled into the library and openssl.
- * \return the gost id for EVP_CTX creation.
- */
-int ldns_key_EVP_load_gost_id(void);
-
-/** Release the engine reference held for the GOST engine. */
-void ldns_key_EVP_unload_gost(void);
-#endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
-
-/**
- * Set the key's hmac data
- * \param[in] k the key
- * \param[in] hmac the raw key data
- */
-void ldns_key_set_hmac_key(ldns_key *k, unsigned char *hmac);
-
-/**
- * Set the key id data. This is used if the key points to
- * some externally stored key data
- *
- * Only the pointer is set, the data there is not copied,
- * and must be freed manually; ldns_key_deep_free() does
- * *not* free this data
- * \param[in] key the key
- * \param[in] external_key key id data
- */
-void ldns_key_set_external_key(ldns_key *key, void *external_key);
-
-/**
- * Set the key's hmac size
- * \param[in] k the key
- * \param[in] hmac_size the size of the hmac data
- */
-void ldns_key_set_hmac_size(ldns_key *k, size_t hmac_size);
-/**
- * Set the key's original ttl
- * \param[in] k the key
- * \param[in] t the ttl
- */
-void ldns_key_set_origttl(ldns_key *k, uint32_t t);
-/**
- * Set the key's inception date (seconds after epoch)
- * \param[in] k the key
- * \param[in] i the inception
- */
-void ldns_key_set_inception(ldns_key *k, uint32_t i);
-/**
- * Set the key's expiration date (seconds after epoch)
- * \param[in] k the key
- * \param[in] e the expiration
- */
-void ldns_key_set_expiration(ldns_key *k, uint32_t e);
-/**
- * Set the key's pubkey owner
- * \param[in] k the key
- * \param[in] r the owner
- */
-void ldns_key_set_pubkey_owner(ldns_key *k, ldns_rdf *r);
-/**
- * Set the key's key tag
- * \param[in] k the key
- * \param[in] tag the keytag
- */
-void ldns_key_set_keytag(ldns_key *k, uint16_t tag);
-/**
- * Set the key's flags
- * \param[in] k the key
- * \param[in] flags the flags
- */
-void ldns_key_set_flags(ldns_key *k, uint16_t flags);
-/**
- * Set the keylist's key count to count
- * \param[in] key the key
- * \param[in] count the cuont
- */
-void ldns_key_list_set_key_count(ldns_key_list *key, size_t count);
-
-/**
- * pushes a key to a keylist
- * \param[in] key_list the key_list to push to
- * \param[in] key the key to push
- * \return false on error, otherwise true
- */
-bool ldns_key_list_push_key(ldns_key_list *key_list, ldns_key *key);
-
-/**
- * returns the number of keys in the key list
- * \param[in] key_list the key_list
- * \return the numbers of keys in the list
- */
-size_t ldns_key_list_key_count(const ldns_key_list *key_list);
-
-/**
- * returns a pointer to the key in the list at the given position
- * \param[in] key the key
- * \param[in] nr the position in the list
- * \return the key
- */
-ldns_key *ldns_key_list_key(const ldns_key_list *key, size_t nr);
-
-#if LDNS_BUILD_CONFIG_HAVE_SSL
-/**
- * returns the (openssl) RSA struct contained in the key
- * \param[in] k the key to look in
- * \return the RSA * structure in the key
- */
-RSA *ldns_key_rsa_key(const ldns_key *k);
-/**
- * returns the (openssl) EVP struct contained in the key
- * \param[in] k the key to look in
- * \return the RSA * structure in the key
- */
-EVP_PKEY *ldns_key_evp_key(const ldns_key *k);
-#endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
-
-/**
- * returns the (openssl) DSA struct contained in the key
- */
-#if LDNS_BUILD_CONFIG_HAVE_SSL
-DSA *ldns_key_dsa_key(const ldns_key *k);
-#endif /* LDNS_BUILD_CONFIG_HAVE_SSL */
-
-/**
- * return the signing alg of the key
- * \param[in] k the key
- * \return the algorithm
- */
-ldns_signing_algorithm ldns_key_algorithm(const ldns_key *k);
-/**
- * set the use flag
- * \param[in] k the key
- * \param[in] v the boolean value to set the _use field to
- */
-void ldns_key_set_use(ldns_key *k, bool v);
-/**
- * return the use flag
- * \param[in] k the key
- * \return the boolean value of the _use field
- */
-bool ldns_key_use(const ldns_key *k);
-/**
- * return the hmac key data
- * \param[in] k the key
- * \return the hmac key data
- */
-unsigned char *ldns_key_hmac_key(const ldns_key *k);
-/**
- * return the key id key data
- * \param[in] k the key
- * \return the key id data
- */
-void *ldns_key_external_key(const ldns_key *k);
-/**
- * return the hmac key size
- * \param[in] k the key
- * \return the hmac key size
- */
-size_t ldns_key_hmac_size(const ldns_key *k);
-/**
- * return the original ttl of the key
- * \param[in] k the key
- * \return the original ttl
- */
-uint32_t ldns_key_origttl(const ldns_key *k);
-/**
- * return the key's inception date
- * \param[in] k the key
- * \return the inception date
- */
-uint32_t ldns_key_inception(const ldns_key *k);
-/**
- * return the key's expiration date
- * \param[in] k the key
- * \return the experiration date
- */
-uint32_t ldns_key_expiration(const ldns_key *k);
-/**
- * return the keytag
- * \param[in] k the key
- * \return the keytag
- */
-uint16_t ldns_key_keytag(const ldns_key *k);
-/**
- * return the public key's owner
- * \param[in] k the key
- * \return the owner
- */
-ldns_rdf *ldns_key_pubkey_owner(const ldns_key *k);
-/**
- * Set the 'use' flag for all keys in the list
- * \param[in] keys The key_list
- * \param[in] v The value to set the use flags to
- */
-void
-ldns_key_list_set_use(ldns_key_list *keys, bool v);
-
-/**
- * return the flag of the key
- * \param[in] k the key
- * \return the flag
- */
-uint16_t ldns_key_flags(const ldns_key *k);
-
-/**
- * pops the last rr from a keylist
- * \param[in] key_list the rr_list to pop from
- * \return NULL if nothing to pop. Otherwise the popped RR
- */
-ldns_key *ldns_key_list_pop_key(ldns_key_list *key_list);
-
-/**
- * converts a ldns_key to a public key rr
- * If the key data exists at an external point, the corresponding
- * rdata field must still be added with ldns_rr_rdf_push() to the
- * result rr of this function
- *
- * \param[in] k the ldns_key to convert
- * \return ldns_rr representation of the key
- */
-ldns_rr *ldns_key2rr(const ldns_key *k);
-
-/**
- * print a private key to the file output
- *
- * \param[in] output the FILE descriptor where to print to
- * \param[in] k the ldns_key to print
- */
-void ldns_key_print(FILE *output, const ldns_key *k);
-
-/**
- * frees a key structure, but not its internal data structures
- *
- * \param[in] key the key object to free
- */
-void ldns_key_free(ldns_key *key);
-
-/**
- * frees a key structure and all its internal data structures, except
- * the data set by ldns_key_set_external_key()
- *
- * \param[in] key the key object to free
- */
-void ldns_key_deep_free(ldns_key *key);
-
-/**
- * Frees a key list structure
- * \param[in] key_list the key list object to free
- */
-void ldns_key_list_free(ldns_key_list *key_list);
-
-/**
- * Instantiates a DNSKEY or DS RR from file.
- * \param[in] filename the file to read the record from
- * \return the corresponding RR, or NULL if the parsing failed
- */
-ldns_rr * ldns_read_anchor_file(const char *filename);
-
-/**
- * Returns the 'default base name' for key files;
- * IE. K\<zone\>+\<alg\>+\<keytag\>
- * (without the .key or .private)
- * The memory for this is allocated by this function,
- * and should be freed by the caller
- *
- * \param[in] key the key to get the file name from
- * \returns A string containing the file base name
- */
-char *ldns_key_get_file_base_name(const ldns_key *key);
-
-/**
- * See if a key algorithm is supported
- * \param[in] algo the signing algorithm number.
- * \returns true if supported.
- */
-int ldns_key_algo_supported(int algo);
-
-/**
- * Get signing algorithm by name. Comparison is case insensitive.
- * \param[in] name string with the name.
- * \returns 0 on parse failure or the algorithm number.
- */
-ldns_signing_algorithm ldns_get_signing_algorithm_by_name(const char* name);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_KEYS_H */
diff --git a/ldns/ldns/ldns.h b/ldns/ldns/ldns.h
deleted file mode 100644
index 60663ef..0000000
--- a/ldns/ldns/ldns.h
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * dns.h -- defines for the Domain Name System
- *
- * Copyright (c) 2005-2008, NLnet Labs. All rights reserved.
- *
- * See LICENSE for the license.
- *
- * This library was created by:
- * Jelte Jansen, Erik Rozendaal and Miek Gieben
- *
- * A bunch of defines that are used in the DNS.
- */
-
-
-/**
-\mainpage LDNS Documentation
-
-\section introduction Introduction
-
-The goal of ldns is to simplify DNS programming, it supports recent RFCs
-like the DNSSEC documents, and allow developers to easily create software
-conforming to current RFCs, and experimental software for current Internet
-drafts. A secondary benefit of using ldns is speed, because ldns is written
-in C, and although it is not optimized for performance, it should be a lot
-faster than Perl.
-
-The first main tool to use ldns is Drill, from which part of the library was
-derived. From version 1.0.0 on, drill is included in the ldns release
-and will not be distributed separately anymore. The library also includes some
-other examples and tools to show how it can be used. These can be found in the
-examples/ directory in the tarball.
-
-ldns depends on OpenSSL for it's cryptographic functions.
-Feature list
-
- - Transparent IPv4 and IPv6 support (overridable if necessary),
- - TSIG support,
- - DNSSEC support; signing and verification,
- - small size,
- - online documentation as well as manual pages.
-
-If you want to send us patches please use the code from git.
-
-\section using_ldns Using ldns
-
-Almost all interaction between an application and ldns goes through the ldns
-data structures (\ref ldns_rr, \ref ldns_pkt, etc.). These are input or
-output to the functions of ldns. For example, \ref ldns_zone_new_frm_fp
-reads a zone from a \c FILE pointer, and returns an \ref ldns_zone
-structure.
-
-
-Let's use Drill as an example. Drill is a tool much like dig, whose most
-basic function is to send 1 query to a nameserver and print the response.
-
-To be able to do this, drill uses the resolver module of ldns, which acts as
-a stub resolver. The resolver module uses the net module to actually send
-the query that drill requested. It then uses the wire2host module to
-translate the response and place it in ldns' internal structures. These are
-passed back to drill, which then uses the host2str module to print the
-response in presentation format.
-
-\section gettingstarted Getting Started
-
-See the \ref design page for a very high level description of the design
-choices made for ldns.
-
-For an overview of the functions and types ldns provides, you can check out
-the \ref ldns ldns header file descriptions.
-
-If you want to see some libdns action, you can read our tutorials:
- - \ref tutorial1_mx
- - \ref tutorial2_zone
- - \ref tutorial3_signzone
-
-Or you can just use the menu above to browse through the API docs.
-
-<div style="visibility:hidden;">
-\image html LogoInGradientBar2-y100.png
-</div>
-*/
-
-/**
- * \file ldns.h
- *
- * Including this file will include all ldns files, and define some lookup tables.
- */
-
-#ifndef LDNS_DNS_H
-#define LDNS_DNS_H
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <ldns/util.h>
-#include <ldns/buffer.h>
-#include <ldns/common.h>
-#include <ldns/dane.h>
-#include <ldns/dname.h>
-#include <ldns/dnssec.h>
-#include <ldns/dnssec_verify.h>
-#include <ldns/dnssec_sign.h>
-#include <ldns/duration.h>
-#include <ldns/error.h>
-#include <ldns/higher.h>
-#include <ldns/host2str.h>
-#include <ldns/host2wire.h>
-#include <ldns/net.h>
-#include <ldns/packet.h>
-#include <ldns/rdata.h>
-#include <ldns/resolver.h>
-#include <ldns/rr.h>
-#include <ldns/str2host.h>
-#include <ldns/tsig.h>
-#include <ldns/update.h>
-#include <ldns/wire2host.h>
-#include <ldns/rr_functions.h>
-#include <ldns/keys.h>
-#include <ldns/parse.h>
-#include <ldns/zone.h>
-#include <ldns/dnssec_zone.h>
-#include <ldns/radix.h>
-#include <ldns/rbtree.h>
-#include <ldns/sha1.h>
-#include <ldns/sha2.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define LDNS_IP4ADDRLEN (32/8)
-#define LDNS_IP6ADDRLEN (128/8)
-#define LDNS_PORT 53
-#define LDNS_ROOT_LABEL_STR "."
-#define LDNS_DEFAULT_TTL 3600
-
-/* lookup tables for standard DNS stuff */
-
-/** Taken from RFC 2538, section 2.1. */
-extern ldns_lookup_table ldns_certificate_types[];
-/** Taken from RFC 2535, section 7. */
-extern ldns_lookup_table ldns_algorithms[];
-/** Taken from RFC 2538. */
-extern ldns_lookup_table ldns_cert_algorithms[];
-/** rr types */
-extern ldns_lookup_table ldns_rr_classes[];
-/** Response codes */
-extern ldns_lookup_table ldns_rcodes[];
-/** Operation codes */
-extern ldns_lookup_table ldns_opcodes[];
-/** EDNS flags */
-extern ldns_lookup_table ldns_edns_flags[];
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_DNS_H */
diff --git a/ldns/ldns/net.h.in b/ldns/ldns/net.h.in
deleted file mode 100644
index 2591258..0000000
--- a/ldns/ldns/net.h.in
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * net.h
- *
- * DNS Resolver definitions
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2005-2006
- *
- * See the file LICENSE for the license
- */
-
-#ifndef LDNS_NET_H
-#define LDNS_NET_H
-
-#include <ldns/ldns.h>
-@include_sys_socket_h@
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define LDNS_DEFAULT_TIMEOUT_SEC 5
-#define LDNS_DEFAULT_TIMEOUT_USEC 0
-
-/**
- * \file
- *
- * Contains functions to send and receive packets over a network.
- */
-
-/**
- * Sends a buffer to an ip using udp and return the respons as a ldns_pkt
- * \param[in] qbin the ldns_buffer to be send
- * \param[in] to the ip addr to send to
- * \param[in] tolen length of the ip addr
- * \param[in] timeout the timeout value for the network
- * \param[out] answersize size of the packet
- * \param[out] result packet with the answer
- * \return status
- */
-ldns_status ldns_udp_send(uint8_t **result, ldns_buffer *qbin, const struct sockaddr_storage *to, socklen_t tolen, struct timeval timeout, size_t *answersize);
-
-/**
- * Send an udp query and don't wait for an answer but return
- * the socket
- * \param[in] qbin the ldns_buffer to be send
- * \param[in] to the ip addr to send to
- * \param[in] tolen length of the ip addr
- * \param[in] timeout *unused*, was the timeout value for the network
- * \return the socket used or -1 on failure
- */
-int ldns_udp_bgsend2(ldns_buffer *qbin, const struct sockaddr_storage *to, socklen_t tolen, struct timeval timeout);
-
-/**
- * Send an udp query and don't wait for an answer but return
- * the socket
- * This function has the flaw that it returns 0 on failure, but 0 could be a
- * valid socket. Please use ldns_udp_bgsend2 instead of this function.
- * \param[in] qbin the ldns_buffer to be send
- * \param[in] to the ip addr to send to
- * \param[in] tolen length of the ip addr
- * \param[in] timeout *unused*, was the timeout value for the network
- * \return the socket used or 0 on failure
- */
-int ldns_udp_bgsend(ldns_buffer *qbin, const struct sockaddr_storage *to, socklen_t tolen, struct timeval timeout);
-
-/**
- * Send an tcp query and don't wait for an answer but return
- * the socket
- * \param[in] qbin the ldns_buffer to be send
- * \param[in] to the ip addr to send to
- * \param[in] tolen length of the ip addr
- * \param[in] timeout the timeout value for the connect attempt
- * \return the socket used or -1 on failure
- */
-int ldns_tcp_bgsend2(ldns_buffer *qbin, const struct sockaddr_storage *to, socklen_t tolen, struct timeval timeout);
-
-/**
- * Send an tcp query and don't wait for an answer but return
- * the socket
- * This function has the flaw that it returns 0 on failure, but 0 could be a
- * valid socket. Please use ldns_tcp_bgsend2 instead of this function.
- * \param[in] qbin the ldns_buffer to be send
- * \param[in] to the ip addr to send to
- * \param[in] tolen length of the ip addr
- * \param[in] timeout the timeout value for the connect attempt
- * \return the socket used or 0 on failure
- */
-int ldns_tcp_bgsend(ldns_buffer *qbin, const struct sockaddr_storage *to, socklen_t tolen, struct timeval timeout);
-
-/**
- * Sends a buffer to an ip using tcp and return the respons as a ldns_pkt
- * \param[in] qbin the ldns_buffer to be send
- * \param[in] qbin the ldns_buffer to be send
- * \param[in] to the ip addr to send to
- * \param[in] tolen length of the ip addr
- * \param[in] timeout the timeout value for the network
- * \param[out] answersize size of the packet
- * \param[out] result packet with the answer
- * \return status
- */
-ldns_status ldns_tcp_send(uint8_t **result, ldns_buffer *qbin, const struct sockaddr_storage *to, socklen_t tolen, struct timeval timeout, size_t *answersize);
-
-/**
- * Sends ptk to the nameserver at the resolver object. Returns the data
- * as a ldns_pkt
- *
- * \param[out] pkt packet received from the nameserver
- * \param[in] r the resolver to use
- * \param[in] query_pkt the query to send
- * \return status
- */
-ldns_status ldns_send(ldns_pkt **pkt, ldns_resolver *r, const ldns_pkt *query_pkt);
-
-/**
- * Sends and ldns_buffer (presumably containing a packet to the nameserver at the resolver object. Returns the data
- * as a ldns_pkt
- *
- * \param[out] pkt packet received from the nameserver
- * \param[in] r the resolver to use
- * \param[in] qb the buffer to send
- * \param[in] tsig_mac the tsig MAC to authenticate the response with (NULL to do no TSIG authentication)
- * \return status
- */
-ldns_status ldns_send_buffer(ldns_pkt **pkt, ldns_resolver *r, ldns_buffer *qb, ldns_rdf *tsig_mac);
-
-/**
- * Create a tcp socket to the specified address
- * \param[in] to ip and family
- * \param[in] tolen length of to
- * \param[in] timeout timeout for the connect attempt
- * \return a socket descriptor or -1 on failure
- */
-int ldns_tcp_connect2(const struct sockaddr_storage *to, socklen_t tolen, struct timeval timeout);
-
-/**
- * Create a tcp socket to the specified address
- * This function has the flaw that it returns 0 on failure, but 0 could be a
- * valid socket. Please use ldns_tcp_connect2 instead of this function.
- * \param[in] to ip and family
- * \param[in] tolen length of to
- * \param[in] timeout timeout for the connect attempt
- * \return a socket descriptor or 0 on failure
- */
-int ldns_tcp_connect(const struct sockaddr_storage *to, socklen_t tolen, struct timeval timeout);
-
-/**
- * Create a udp socket to the specified address
- * \param[in] to ip and family
- * \param[in] timeout *unused*, was timeout for the socket
- * \return a socket descriptor or -1 on failure
- */
-int ldns_udp_connect2(const struct sockaddr_storage *to, struct timeval timeout);
-
-/**
- * Create a udp socket to the specified address
- * This function has the flaw that it returns 0 on failure, but 0 could be a
- * valid socket. Please use ldns_udp_connect2 instead of this function.
- * \param[in] to ip and family
- * \param[in] timeout *unused*, was timeout for the socket
- * \return a socket descriptor or 0 on failure
- */
-int ldns_udp_connect(const struct sockaddr_storage *to, struct timeval timeout);
-
-/**
- * send a query via tcp to a server. Don't want for the answer
- *
- * \param[in] qbin the buffer to send
- * \param[in] sockfd the socket to use
- * \param[in] to which ip to send it
- * \param[in] tolen socketlen
- * \return number of bytes sent
- */
-ssize_t ldns_tcp_send_query(ldns_buffer *qbin, int sockfd, const struct sockaddr_storage *to, socklen_t tolen);
-
-/**
- * send a query via udp to a server. Don;t want for the answer
- *
- * \param[in] qbin the buffer to send
- * \param[in] sockfd the socket to use
- * \param[in] to which ip to send it
- * \param[in] tolen socketlen
- * \return number of bytes sent
- */
-ssize_t ldns_udp_send_query(ldns_buffer *qbin, int sockfd, const struct sockaddr_storage *to, socklen_t tolen);
-
-/**
- * Gives back a raw packet from the wire and reads the header data from the given
- * socket. Allocates the data (of size size) itself, so don't forget to free
- *
- * \param[in] sockfd the socket to read from
- * \param[out] size the number of bytes that are read
- * \param[in] timeout the time allowed between packets.
- * \return the data read
- */
-uint8_t *ldns_tcp_read_wire_timeout(int sockfd, size_t *size, struct timeval timeout);
-
-/**
- * This routine may block. Use ldns_tcp_read_wire_timeout, it checks timeouts.
- * Gives back a raw packet from the wire and reads the header data from the given
- * socket. Allocates the data (of size size) itself, so don't forget to free
- *
- * \param[in] sockfd the socket to read from
- * \param[out] size the number of bytes that are read
- * \return the data read
- */
-uint8_t *ldns_tcp_read_wire(int sockfd, size_t *size);
-
-/**
- * Gives back a raw packet from the wire and reads the header data from the given
- * socket. Allocates the data (of size size) itself, so don't forget to free
- *
- * \param[in] sockfd the socket to read from
- * \param[in] fr the address of the client (if applicable)
- * \param[in] *frlen the length of the client's addr (if applicable)
- * \param[out] size the number of bytes that are read
- * \return the data read
- */
-uint8_t *ldns_udp_read_wire(int sockfd, size_t *size, struct sockaddr_storage *fr, socklen_t *frlen);
-
-/**
- * returns the native sockaddr representation from the rdf.
- * \param[in] rd the ldns_rdf to operate on
- * \param[in] port what port to use. 0 means; use default (53)
- * \param[out] size what is the size of the sockaddr_storage
- * \return struct sockaddr* the address in the format so other
- * functions can use it (sendto)
- */
-struct sockaddr_storage * ldns_rdf2native_sockaddr_storage(const ldns_rdf *rd, uint16_t port, size_t *size);
-
-/**
- * returns an rdf with the sockaddr info. works for ip4 and ip6
- * \param[in] sock the struct sockaddr_storage to convert
- * \param[in] port what port was used. When NULL this is not set
- * \return ldns_rdf* wth the address
- */
-ldns_rdf * ldns_sockaddr_storage2rdf(const struct sockaddr_storage *sock, uint16_t *port);
-
-/**
- * Prepares the resolver for an axfr query
- * The query is sent and the answers can be read with ldns_axfr_next
- * \param[in] resolver the resolver to use
- * \param[in] domain the domain to exfr
- * \param[in] c the class to use
- * \return ldns_status the status of the transfer
- */
-ldns_status ldns_axfr_start(ldns_resolver *resolver, const ldns_rdf *domain, ldns_rr_class c);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_NET_H */
diff --git a/ldns/ldns/packet.h b/ldns/ldns/packet.h
deleted file mode 100644
index 2e5ee8b..0000000
--- a/ldns/ldns/packet.h
+++ /dev/null
@@ -1,905 +0,0 @@
-/*
- * packet.h
- *
- * DNS packet definitions
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2005-2006
- *
- * See the file LICENSE for the license
- */
-
-/**
- * \file
- *
- * Contains the definition of ldns_pkt and its parts, as well
- * as functions to manipulate those.
- */
-
-
-#ifndef LDNS_PACKET_H
-#define LDNS_PACKET_H
-
-#define LDNS_MAX_PACKETLEN 65535
-
-/* allow flags to be given to ldns_pkt_query_new */
-#define LDNS_QR 1 /* Query Response flag */
-#define LDNS_AA 2 /* Authoritative Answer - server flag */
-#define LDNS_TC 4 /* TrunCated - server flag */
-#define LDNS_RD 8 /* Recursion Desired - query flag */
-#define LDNS_CD 16 /* Checking Disabled - query flag */
-#define LDNS_RA 32 /* Recursion Available - server flag */
-#define LDNS_AD 64 /* Authenticated Data - server flag */
-
-#include <ldns/error.h>
-#include <ldns/common.h>
-#include <ldns/rr.h>
-#include <sys/time.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* opcodes for pkt's */
-enum ldns_enum_pkt_opcode {
- LDNS_PACKET_QUERY = 0,
- LDNS_PACKET_IQUERY = 1,
- LDNS_PACKET_STATUS = 2, /* there is no 3?? DNS is weird */
- LDNS_PACKET_NOTIFY = 4,
- LDNS_PACKET_UPDATE = 5
-};
-typedef enum ldns_enum_pkt_opcode ldns_pkt_opcode;
-
-/* rcodes for pkts */
-enum ldns_enum_pkt_rcode {
- LDNS_RCODE_NOERROR = 0,
- LDNS_RCODE_FORMERR = 1,
- LDNS_RCODE_SERVFAIL = 2,
- LDNS_RCODE_NXDOMAIN = 3,
- LDNS_RCODE_NOTIMPL = 4,
- LDNS_RCODE_REFUSED = 5,
- LDNS_RCODE_YXDOMAIN = 6,
- LDNS_RCODE_YXRRSET = 7,
- LDNS_RCODE_NXRRSET = 8,
- LDNS_RCODE_NOTAUTH = 9,
- LDNS_RCODE_NOTZONE = 10
-};
-typedef enum ldns_enum_pkt_rcode ldns_pkt_rcode;
-
-/**
- * Header of a dns packet
- *
- * Contains the information about the packet itself, as specified in RFC1035
-<pre>
-4.1.1. Header section format
-
-The header contains the following fields:
-
- 1 1 1 1 1 1
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- | ID |
- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- |QR| Opcode |AA|TC|RD|RA| Z | RCODE |
- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- | QDCOUNT |
- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- | ANCOUNT |
- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- | NSCOUNT |
- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- | ARCOUNT |
- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
-
-where:
-
-ID A 16 bit identifier assigned by the program that
- generates any kind of query. This identifier is copied
- the corresponding reply and can be used by the requester
- to match up replies to outstanding queries.
-
-QR A one bit field that specifies whether this message is a
- query (0), or a response (1).
-
-OPCODE A four bit field that specifies kind of query in this
- message. This value is set by the originator of a query
- and copied into the response. The values are:
-
- 0 a standard query (QUERY)
-
- 1 an inverse query (IQUERY)
-
- 2 a server status request (STATUS)
-
- 3-15 reserved for future use
-
-AA Authoritative Answer - this bit is valid in responses,
- and specifies that the responding name server is an
- authority for the domain name in question section.
-
- Note that the contents of the answer section may have
- multiple owner names because of aliases. The AA bit
-
- corresponds to the name which matches the query name, or
- the first owner name in the answer section.
-
-TC TrunCation - specifies that this message was truncated
- due to length greater than that permitted on the
- transmission channel.
-
-RD Recursion Desired - this bit may be set in a query and
- is copied into the response. If RD is set, it directs
- the name server to pursue the query recursively.
- Recursive query support is optional.
-
-RA Recursion Available - this be is set or cleared in a
- response, and denotes whether recursive query support is
- available in the name server.
-
-Z Reserved for future use. Must be zero in all queries
- and responses.
-
-RCODE Response code - this 4 bit field is set as part of
- responses. The values have the following
- interpretation:
-
- 0 No error condition
-
- 1 Format error - The name server was
- unable to interpret the query.
-
- 2 Server failure - The name server was
- unable to process this query due to a
- problem with the name server.
-
- 3 Name Error - Meaningful only for
- responses from an authoritative name
- server, this code signifies that the
- domain name referenced in the query does
- not exist.
-
- 4 Not Implemented - The name server does
- not support the requested kind of query.
-
- 5 Refused - The name server refuses to
- perform the specified operation for
- policy reasons. For example, a name
- server may not wish to provide the
- information to the particular requester,
- or a name server may not wish to perform
- a particular operation (e.g., zone
-
- transfer) for particular data.
-
- 6-15 Reserved for future use.
-
-QDCOUNT an unsigned 16 bit integer specifying the number of
- entries in the question section.
-
-ANCOUNT an unsigned 16 bit integer specifying the number of
- resource records in the answer section.
-
-NSCOUNT an unsigned 16 bit integer specifying the number of name
- server resource records in the authority records
- section.
-
-ARCOUNT an unsigned 16 bit integer specifying the number of
- resource records in the additional records section.
-
-</pre>
- */
-struct ldns_struct_hdr
-{
- /** Id of a packet */
- uint16_t _id;
- /** Query bit (0=query, 1=answer) */
- bool _qr;
- /** Authoritative answer */
- bool _aa;
- /** Packet truncated */
- bool _tc;
- /** Recursion desired */
- bool _rd;
- /** Checking disabled */
- bool _cd;
- /** Recursion available */
- bool _ra;
- /** Authentic data */
- bool _ad;
- /** Query type */
- ldns_pkt_opcode _opcode; /* XXX 8 bits? */
- /** Response code */
- uint8_t _rcode;
- /** question sec */
- uint16_t _qdcount;
- /** answer sec */
- uint16_t _ancount;
- /** auth sec */
- uint16_t _nscount;
- /** add sec */
- uint16_t _arcount;
-};
-typedef struct ldns_struct_hdr ldns_hdr;
-
-/**
- * DNS packet
- *
- * This structure contains a complete DNS packet (either a query or an answer)
- *
- * It is the complete representation of what you actually send to a
- * nameserver, and what it sends back (assuming you are the client here).
- */
-struct ldns_struct_pkt
-{
- /** Header section */
- ldns_hdr *_header;
- /* extra items needed in a packet */
- /** an rdf (A or AAAA) with the IP address of the server it is from */
- ldns_rdf *_answerfrom;
- /** Timestamp of the time the packet was sent or created */
- struct timeval timestamp;
- /** The duration of the query this packet is an answer to */
- uint32_t _querytime;
- /** The size of the wire format of the packet in octets */
- size_t _size;
- /** Optional tsig rr */
- ldns_rr *_tsig_rr;
- /** EDNS0 available buffer size, see RFC2671 */
- uint16_t _edns_udp_size;
- /** EDNS0 Extended rcode */
- uint8_t _edns_extended_rcode;
- /** EDNS Version */
- uint8_t _edns_version;
- /* OPT pseudo-RR presence flag */
- uint8_t _edns_present;
- /** Reserved EDNS data bits */
- uint16_t _edns_z;
- /** Arbitrary EDNS rdata */
- ldns_rdf *_edns_data;
- /** Question section */
- ldns_rr_list *_question;
- /** Answer section */
- ldns_rr_list *_answer;
- /** Authority section */
- ldns_rr_list *_authority;
- /** Additional section */
- ldns_rr_list *_additional;
-};
-typedef struct ldns_struct_pkt ldns_pkt;
-
-/**
- * The sections of a packet
- */
-enum ldns_enum_pkt_section {
- LDNS_SECTION_QUESTION = 0,
- LDNS_SECTION_ANSWER = 1,
- LDNS_SECTION_AUTHORITY = 2,
- LDNS_SECTION_ADDITIONAL = 3,
- /** bogus section, if not interested */
- LDNS_SECTION_ANY = 4,
- /** used to get all non-question rrs from a packet */
- LDNS_SECTION_ANY_NOQUESTION = 5
-};
-typedef enum ldns_enum_pkt_section ldns_pkt_section;
-
-/**
- * The different types of packets
- */
-enum ldns_enum_pkt_type {
- LDNS_PACKET_QUESTION,
- LDNS_PACKET_REFERRAL,
- LDNS_PACKET_ANSWER,
- LDNS_PACKET_NXDOMAIN,
- LDNS_PACKET_NODATA,
- LDNS_PACKET_UNKNOWN
-};
-typedef enum ldns_enum_pkt_type ldns_pkt_type;
-
-/* prototypes */
-
-/* read */
-
-/**
- * Read the packet id
- * \param[in] p the packet
- * \return the packet id
- */
-uint16_t ldns_pkt_id(const ldns_pkt *p);
-/**
- * Read the packet's qr bit
- * \param[in] p the packet
- * \return value of the bit
- */
-bool ldns_pkt_qr(const ldns_pkt *p);
-/**
- * Read the packet's aa bit
- * \param[in] p the packet
- * \return value of the bit
- */
-bool ldns_pkt_aa(const ldns_pkt *p);
-/**
- * Read the packet's tc bit
- * \param[in] p the packet
- * \return value of the bit
- */
-bool ldns_pkt_tc(const ldns_pkt *p);
-/**
- * Read the packet's rd bit
- * \param[in] p the packet
- * \return value of the bit
- */
-bool ldns_pkt_rd(const ldns_pkt *p);
-/**
- * Read the packet's cd bit
- * \param[in] p the packet
- * \return value of the bit
- */
-bool ldns_pkt_cd(const ldns_pkt *p);
-/**
- * Read the packet's ra bit
- * \param[in] p the packet
- * \return value of the bit
- */
-bool ldns_pkt_ra(const ldns_pkt *p);
-/**
- * Read the packet's ad bit
- * \param[in] p the packet
- * \return value of the bit
- */
-bool ldns_pkt_ad(const ldns_pkt *p);
-/**
- * Read the packet's code
- * \param[in] p the packet
- * \return the opcode
- */
-ldns_pkt_opcode ldns_pkt_get_opcode(const ldns_pkt *p);
-/**
- * Return the packet's respons code
- * \param[in] p the packet
- * \return the respons code
- */
-ldns_pkt_rcode ldns_pkt_get_rcode(const ldns_pkt *p);
-/**
- * Return the packet's qd count
- * \param[in] p the packet
- * \return the qd count
- */
-uint16_t ldns_pkt_qdcount(const ldns_pkt *p);
-/**
- * Return the packet's an count
- * \param[in] p the packet
- * \return the an count
- */
-uint16_t ldns_pkt_ancount(const ldns_pkt *p);
-/**
- * Return the packet's ns count
- * \param[in] p the packet
- * \return the ns count
- */
-uint16_t ldns_pkt_nscount(const ldns_pkt *p);
-/**
- * Return the packet's ar count
- * \param[in] p the packet
- * \return the ar count
- */
-uint16_t ldns_pkt_arcount(const ldns_pkt *p);
-
-/**
- * Return the packet's answerfrom
- * \param[in] p packet
- * \return the name of the server
- */
-ldns_rdf *ldns_pkt_answerfrom(const ldns_pkt *p);
-
-/**
- * Return the packet's timestamp
- * \param[in] p the packet
- * \return the timestamp
- */
-struct timeval ldns_pkt_timestamp(const ldns_pkt *p);
-/**
- * Return the packet's querytime
- * \param[in] p the packet
- * \return the querytime
- */
-uint32_t ldns_pkt_querytime(const ldns_pkt *p);
-
-/**
- * Return the packet's size in bytes
- * \param[in] p the packet
- * \return the size
- */
-size_t ldns_pkt_size(const ldns_pkt *p);
-
-/**
- * Return the number of RRs in the given section.
- * Returns the sum of all RRs when LDNS_SECTION_ANY is given.
- * Returns the sum of all non-question RRs when LDNS_SECTION_ANY_NOQUESTION
- * is given.
- * \param[in] p the packet
- * \param[in] s the section
- * \return the number of RRs in the given section
- */
-uint16_t ldns_pkt_section_count(const ldns_pkt *p, ldns_pkt_section s);
-
-/**
- * Return the packet's tsig pseudo rr's
- * \param[in] p the packet
- * \return the tsig rr
- */
-ldns_rr *ldns_pkt_tsig(const ldns_pkt *p);
-
-/**
- * Return the packet's question section
- * \param[in] p the packet
- * \return the section
- */
-ldns_rr_list *ldns_pkt_question(const ldns_pkt *p);
-/**
- * Return the packet's answer section
- * \param[in] p the packet
- * \return the section
- */
-ldns_rr_list *ldns_pkt_answer(const ldns_pkt *p);
-/**
- * Return the packet's authority section
- * \param[in] p the packet
- * \return the section
- */
-ldns_rr_list *ldns_pkt_authority(const ldns_pkt *p);
-/**
- * Return the packet's additional section
- * \param[in] p the packet
- * \return the section
- */
-ldns_rr_list *ldns_pkt_additional(const ldns_pkt *p);
-/**
- * Return the packet's question, answer, authority and additional sections
- * concatenated, in a new rr_list clone.
- * \param[in] p the packet
- * \return the rrs
- */
-ldns_rr_list *ldns_pkt_all(const ldns_pkt *p);
-/**
- * Return the packet's answer, authority and additional sections concatenated,
- * in a new rr_list clone. Like ldns_pkt_all but without the questions.
- * \param[in] p the packet
- * \return the rrs except the question rrs
- */
-ldns_rr_list *ldns_pkt_all_noquestion(const ldns_pkt *p);
-
-/**
- * return all the rr_list's in the packet. Clone the lists, instead
- * of returning pointers.
- * \param[in] p the packet to look in
- * \param[in] s what section(s) to return
- * \return ldns_rr_list with the rr's or NULL if none were found
- */
-ldns_rr_list *ldns_pkt_get_section_clone(const ldns_pkt *p, ldns_pkt_section s);
-
-/**
- * return all the rr with a specific name from a packet. Optionally
- * specify from which section in the packet
- * \param[in] p the packet
- * \param[in] r the name
- * \param[in] s the packet's section
- * \return a list with the rr's or NULL if none were found
- */
-ldns_rr_list *ldns_pkt_rr_list_by_name(const ldns_pkt *p, const ldns_rdf *r, ldns_pkt_section s);
-/**
- * return all the rr with a specific type from a packet. Optionally
- * specify from which section in the packet
- * \param[in] p the packet
- * \param[in] t the type
- * \param[in] s the packet's section
- * \return a list with the rr's or NULL if none were found
- */
-ldns_rr_list *ldns_pkt_rr_list_by_type(const ldns_pkt *p, ldns_rr_type t, ldns_pkt_section s);
-/**
- * return all the rr with a specific type and type from a packet. Optionally
- * specify from which section in the packet
- * \param[in] packet the packet
- * \param[in] ownername the name
- * \param[in] type the type
- * \param[in] sec the packet's section
- * \return a list with the rr's or NULL if none were found
- */
-ldns_rr_list *ldns_pkt_rr_list_by_name_and_type(const ldns_pkt *packet, const ldns_rdf *ownername, ldns_rr_type type, ldns_pkt_section sec);
-
-
-/**
- * check to see if an rr exist in the packet
- * \param[in] pkt the packet to examine
- * \param[in] sec in which section to look
- * \param[in] rr the rr to look for
- */
-bool ldns_pkt_rr(const ldns_pkt *pkt, ldns_pkt_section sec, const ldns_rr *rr);
-
-
-/**
- * sets the flags in a packet.
- * \param[in] pkt the packet to operate on
- * \param[in] flags ORed values: LDNS_QR| LDNS_AR for instance
- * \return true on success otherwise false
- */
-bool ldns_pkt_set_flags(ldns_pkt *pkt, uint16_t flags);
-
-/**
- * Set the packet's id
- * \param[in] p the packet
- * \param[in] id the id to set
- */
-void ldns_pkt_set_id(ldns_pkt *p, uint16_t id);
-/**
- * Set the packet's id to a random value
- * \param[in] p the packet
- */
-void ldns_pkt_set_random_id(ldns_pkt *p);
-/**
- * Set the packet's qr bit
- * \param[in] p the packet
- * \param[in] b the value to set (boolean)
- */
-void ldns_pkt_set_qr(ldns_pkt *p, bool b);
-/**
- * Set the packet's aa bit
- * \param[in] p the packet
- * \param[in] b the value to set (boolean)
- */
-void ldns_pkt_set_aa(ldns_pkt *p, bool b);
-/**
- * Set the packet's tc bit
- * \param[in] p the packet
- * \param[in] b the value to set (boolean)
- */
-void ldns_pkt_set_tc(ldns_pkt *p, bool b);
-/**
- * Set the packet's rd bit
- * \param[in] p the packet
- * \param[in] b the value to set (boolean)
- */
-void ldns_pkt_set_rd(ldns_pkt *p, bool b);
-/**
- * Set the packet's cd bit
- * \param[in] p the packet
- * \param[in] b the value to set (boolean)
- */
-void ldns_pkt_set_cd(ldns_pkt *p, bool b);
-/**
- * Set the packet's ra bit
- * \param[in] p the packet
- * \param[in] b the value to set (boolean)
- */
-void ldns_pkt_set_ra(ldns_pkt *p, bool b);
-/**
- * Set the packet's ad bit
- * \param[in] p the packet
- * \param[in] b the value to set (boolean)
- */
-void ldns_pkt_set_ad(ldns_pkt *p, bool b);
-
-/**
- * Set the packet's opcode
- * \param[in] p the packet
- * \param[in] c the opcode
- */
-void ldns_pkt_set_opcode(ldns_pkt *p, ldns_pkt_opcode c);
-/**
- * Set the packet's respons code
- * \param[in] p the packet
- * \param[in] c the rcode
- */
-void ldns_pkt_set_rcode(ldns_pkt *p, uint8_t c);
-/**
- * Set the packet's qd count
- * \param[in] p the packet
- * \param[in] c the count
- */
-void ldns_pkt_set_qdcount(ldns_pkt *p, uint16_t c);
-/**
- * Set the packet's an count
- * \param[in] p the packet
- * \param[in] c the count
- */
-void ldns_pkt_set_ancount(ldns_pkt *p, uint16_t c);
-/**
- * Set the packet's ns count
- * \param[in] p the packet
- * \param[in] c the count
- */
-void ldns_pkt_set_nscount(ldns_pkt *p, uint16_t c);
-/**
- * Set the packet's arcount
- * \param[in] p the packet
- * \param[in] c the count
- */
-void ldns_pkt_set_arcount(ldns_pkt *p, uint16_t c);
-/**
- * Set the packet's answering server
- * \param[in] p the packet
- * \param[in] r the address
- */
-void ldns_pkt_set_answerfrom(ldns_pkt *p, ldns_rdf *r);
-/**
- * Set the packet's query time
- * \param[in] p the packet
- * \param[in] t the querytime in msec
- */
-void ldns_pkt_set_querytime(ldns_pkt *p, uint32_t t);
-/**
- * Set the packet's size
- * \param[in] p the packet
- * \param[in] s the size
- */
-void ldns_pkt_set_size(ldns_pkt *p, size_t s);
-
-/**
- * Set the packet's timestamp
- * \param[in] p the packet
- * \param[in] timeval the timestamp
- */
-void ldns_pkt_set_timestamp(ldns_pkt *p, struct timeval timeval);
-/**
- * Set a packet's section count to x
- * \param[in] p the packet
- * \param[in] s the section
- * \param[in] x the section count
- */
-void ldns_pkt_set_section_count(ldns_pkt *p, ldns_pkt_section s, uint16_t x);
-/**
- * Set the packet's tsig rr
- * \param[in] p the packet
- * \param[in] t the tsig rr
- */
-void ldns_pkt_set_tsig(ldns_pkt *p, ldns_rr *t);
-
-/**
- * looks inside the packet to determine
- * what kind of packet it is, AUTH, NXDOMAIN, REFERRAL, etc.
- * \param[in] p the packet to examine
- * \return the type of packet
- */
-ldns_pkt_type ldns_pkt_reply_type(const ldns_pkt *p);
-
-/**
- * return the packet's edns udp size
- * \param[in] packet the packet
- * \return the size
- */
-uint16_t ldns_pkt_edns_udp_size(const ldns_pkt *packet);
-/**
- * return the packet's edns extended rcode
- * \param[in] packet the packet
- * \return the rcode
- */
-uint8_t ldns_pkt_edns_extended_rcode(const ldns_pkt *packet);
-/**
- * return the packet's edns version
- * \param[in] packet the packet
- * \return the version
- */
-uint8_t ldns_pkt_edns_version(const ldns_pkt *packet);
-/**
- * return the packet's edns z value
- * \param[in] packet the packet
- * \return the z value
- */
-uint16_t ldns_pkt_edns_z(const ldns_pkt *packet);
-/**
- * return the packet's edns data
- * \param[in] packet the packet
- * \return the data
- */
-ldns_rdf *ldns_pkt_edns_data(const ldns_pkt *packet);
-
-/**
- * return the packet's edns do bit
- * \param[in] packet the packet
- * \return the bit's value
- */
-bool ldns_pkt_edns_do(const ldns_pkt *packet);
-/**
- * Set the packet's edns do bit
- * \param[in] packet the packet
- * \param[in] value the bit's new value
- */
-void ldns_pkt_set_edns_do(ldns_pkt *packet, bool value);
-
-/**
- * return the packet's EDNS header bits that are unassigned.
- */
-uint16_t ldns_pkt_edns_unassigned(const ldns_pkt *packet);
-
-/**
- * Set the packet's EDNS header bits that are unassigned.
- * \param[in] packet the packet
- * \param[in] value the value
- */
-void ldns_pkt_set_edns_unassigned(ldns_pkt *packet, uint16_t value);
-
-/**
- * returns true if this packet needs and EDNS rr to be sent.
- * At the moment the only reason is an expected packet
- * size larger than 512 bytes, but for instance dnssec would
- * be a good reason too.
- *
- * \param[in] packet the packet to check
- * \return true if packet needs edns rr
- */
-bool ldns_pkt_edns(const ldns_pkt *packet);
-
-/**
- * Set the packet's edns udp size
- * \param[in] packet the packet
- * \param[in] s the size
- */
-void ldns_pkt_set_edns_udp_size(ldns_pkt *packet, uint16_t s);
-/**
- * Set the packet's edns extended rcode
- * \param[in] packet the packet
- * \param[in] c the code
- */
-void ldns_pkt_set_edns_extended_rcode(ldns_pkt *packet, uint8_t c);
-/**
- * Set the packet's edns version
- * \param[in] packet the packet
- * \param[in] v the version
- */
-void ldns_pkt_set_edns_version(ldns_pkt *packet, uint8_t v);
-/**
- * Set the packet's edns z value
- * \param[in] packet the packet
- * \param[in] z the value
- */
-void ldns_pkt_set_edns_z(ldns_pkt *packet, uint16_t z);
-/**
- * Set the packet's edns data
- * \param[in] packet the packet
- * \param[in] data the data
- */
-void ldns_pkt_set_edns_data(ldns_pkt *packet, ldns_rdf *data);
-
-/**
- * allocates and initializes a ldns_pkt structure.
- * \return pointer to the new packet
- */
-ldns_pkt *ldns_pkt_new(void);
-
-/**
- * frees the packet structure and all data that it contains.
- * \param[in] packet The packet structure to free
- * \return void
- */
-void ldns_pkt_free(ldns_pkt *packet);
-
-/**
- * creates a query packet for the given name, type, class.
- * \param[out] p the packet to be returned
- * \param[in] rr_name the name to query for (as string)
- * \param[in] rr_type the type to query for
- * \param[in] rr_class the class to query for
- * \param[in] flags packet flags
- * \return LDNS_STATUS_OK or a ldns_status mesg with the error
- */
-ldns_status ldns_pkt_query_new_frm_str(ldns_pkt **p, const char *rr_name, ldns_rr_type rr_type, ldns_rr_class rr_class , uint16_t flags);
-
-/**
- * creates an IXFR request packet for the given name, class.
- * adds the SOA record to the authority section.
- * \param[out] p the packet to be returned
- * \param[in] rr_name the name to query for (as string)
- * \param[in] rr_class the class to query for
- * \param[in] flags packet flags
- * \param[in] soa soa record to be added to the authority section (not copied).
- * \return LDNS_STATUS_OK or a ldns_status mesg with the error
- */
-ldns_status ldns_pkt_ixfr_request_new_frm_str(ldns_pkt **p, const char *rr_name, ldns_rr_class rr_class, uint16_t flags, ldns_rr* soa);
-
-/**
- * creates a packet with a query in it for the given name, type and class.
- * \param[in] rr_name the name to query for (not copied).
- * The returned packet will take ownership of rr_name, so the caller should not free it.
- * \param[in] rr_type the type to query for
- * \param[in] rr_class the class to query for
- * \param[in] flags packet flags
- * \return ldns_pkt* a pointer to the new pkt
- */
-ldns_pkt *ldns_pkt_query_new(ldns_rdf *rr_name, ldns_rr_type rr_type, ldns_rr_class rr_class, uint16_t flags);
-
-/**
- * creates an IXFR request packet for the given name, type and class.
- * adds the SOA record to the authority section.
- * \param[in] rr_name the name to query for (not copied).
- * The returned packet will take ownership of rr_name, so the caller should not free it.
- * \param[in] rr_class the class to query for
- * \param[in] flags packet flags
- * \param[in] soa soa record to be added to the authority section (not copied).
- * \return ldns_pkt* a pointer to the new pkt
- */
-ldns_pkt *ldns_pkt_ixfr_request_new(ldns_rdf *rr_name, ldns_rr_class rr_class, uint16_t flags, ldns_rr* soa);
-
-/**
- * clones the given packet, creating a fully allocated copy
- *
- * \param[in] pkt the packet to clone
- * \return ldns_pkt* pointer to the new packet
- */
-ldns_pkt *ldns_pkt_clone(const ldns_pkt *pkt);
-
-/**
- * directly set the additional section
- * \param[in] p packet to operate on
- * \param[in] rr rrlist to set
- */
-void ldns_pkt_set_additional(ldns_pkt *p, ldns_rr_list *rr);
-
-/**
- * directly set the answer section
- * \param[in] p packet to operate on
- * \param[in] rr rrlist to set
- */
-void ldns_pkt_set_answer(ldns_pkt *p, ldns_rr_list *rr);
-
-/**
- * directly set the question section
- * \param[in] p packet to operate on
- * \param[in] rr rrlist to set
- */
-void ldns_pkt_set_question(ldns_pkt *p, ldns_rr_list *rr);
-
-/**
- * directly set the auhority section
- * \param[in] p packet to operate on
- * \param[in] rr rrlist to set
- */
-void ldns_pkt_set_authority(ldns_pkt *p, ldns_rr_list *rr);
-
-/**
- * push an rr on a packet
- * \param[in] packet packet to operate on
- * \param[in] section where to put it
- * \param[in] rr rr to push
- * \return a boolean which is true when the rr was added
- */
-bool ldns_pkt_push_rr(ldns_pkt *packet, ldns_pkt_section section, ldns_rr *rr);
-
-/**
- * push an rr on a packet, provided the RR is not there.
- * \param[in] pkt packet to operate on
- * \param[in] sec where to put it
- * \param[in] rr rr to push
- * \return a boolean which is true when the rr was added
- */
-bool ldns_pkt_safe_push_rr(ldns_pkt *pkt, ldns_pkt_section sec, ldns_rr *rr);
-
-/**
- * push a rr_list on a packet
- * \param[in] packet packet to operate on
- * \param[in] section where to put it
- * \param[in] list the rr_list to push
- * \return a boolean which is true when the rr was added
- */
-bool ldns_pkt_push_rr_list(ldns_pkt *packet, ldns_pkt_section section, ldns_rr_list *list);
-
-/**
- * push an rr_list to a packet, provided the RRs are not already there.
- * \param[in] pkt packet to operate on
- * \param[in] sec where to put it
- * \param[in] list the rr_list to push
- * \return a boolean which is true when the rr was added
- */
-bool ldns_pkt_safe_push_rr_list(ldns_pkt *pkt, ldns_pkt_section sec, ldns_rr_list *list);
-
-/**
- * check if a packet is empty
- * \param[in] p packet
- * \return true: empty, false: not empty
- */
-bool ldns_pkt_empty(ldns_pkt *p);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_PACKET_H */
diff --git a/ldns/ldns/parse.h b/ldns/ldns/parse.h
deleted file mode 100644
index 0e9034c..0000000
--- a/ldns/ldns/parse.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * parse.h
- *
- * a Net::DNS like library for C
- * LibDNS Team @ NLnet Labs
- * (c) NLnet Labs, 2005-2006
- * See the file LICENSE for the license
- */
-
-#ifndef LDNS_PARSE_H
-#define LDNS_PARSE_H
-
-#include <ldns/common.h>
-#include <ldns/buffer.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define LDNS_PARSE_SKIP_SPACE "\f\n\r\v"
-#define LDNS_PARSE_NORMAL " \f\n\r\t\v"
-#define LDNS_PARSE_NO_NL " \t"
-#define LDNS_MAX_LINELEN 10230
-#define LDNS_MAX_KEYWORDLEN 32
-
-
-/**
- * \file
- *
- * Contains some low-level parsing functions, mostly used in the _frm_str
- * family of functions.
- */
-
-/**
- * different type of directives in zone files
- * We now deal with $TTL, $ORIGIN and $INCLUDE.
- * The latter is not implemented in ldns (yet)
- */
-enum ldns_enum_directive
-{
- LDNS_DIR_TTL,
- LDNS_DIR_ORIGIN,
- LDNS_DIR_INCLUDE
-};
-typedef enum ldns_enum_directive ldns_directive;
-
-/**
- * returns a token/char from the stream F.
- * This function deals with ( and ) in the stream,
- * and ignores them when encountered
- * \param[in] *f the file to read from
- * \param[out] *token the read token is put here
- * \param[in] *delim chars at which the parsing should stop
- * \param[in] *limit how much to read. If 0 the builtin maximum is used
- * \return 0 on error of EOF of the stream F. Otherwise return the length of what is read
- */
-ssize_t ldns_fget_token(FILE *f, char *token, const char *delim, size_t limit);
-
-/**
- * returns a token/char from the stream F.
- * This function deals with ( and ) in the stream,
- * and ignores when it finds them.
- * \param[in] *f the file to read from
- * \param[out] *token the token is put here
- * \param[in] *delim chars at which the parsing should stop
- * \param[in] *limit how much to read. If 0 use builtin maximum
- * \param[in] line_nr pointer to an integer containing the current line number (for debugging purposes)
- * \return 0 on error of EOF of F otherwise return the length of what is read
- */
-ssize_t ldns_fget_token_l(FILE *f, char *token, const char *delim, size_t limit, int *line_nr);
-
-/**
- * returns a token/char from the buffer b.
- * This function deals with ( and ) in the buffer,
- * and ignores when it finds them.
- * \param[in] *b the buffer to read from
- * \param[out] *token the token is put here
- * \param[in] *delim chars at which the parsing should stop
- * \param[in] *limit how much to read. If 0 the builtin maximum is used
- * \returns 0 on error of EOF of b. Otherwise return the length of what is read
- */
-ssize_t ldns_bget_token(ldns_buffer *b, char *token, const char *delim, size_t limit);
-
-/*
- * searches for keyword and delim in a file. Gives everything back
- * after the keyword + k_del until we hit d_del
- * \param[in] f file pointer to read from
- * \param[in] keyword keyword to look for
- * \param[in] k_del keyword delimeter
- * \param[out] data the data found
- * \param[in] d_del the data delimeter
- * \param[in] data_limit maximum size the the data buffer
- * \return the number of character read
- */
-ssize_t ldns_fget_keyword_data(FILE *f, const char *keyword, const char *k_del, char *data, const char *d_del, size_t data_limit);
-
-/*
- * searches for keyword and delim. Gives everything back
- * after the keyword + k_del until we hit d_del
- * \param[in] f file pointer to read from
- * \param[in] keyword keyword to look for
- * \param[in] k_del keyword delimeter
- * \param[out] data the data found
- * \param[in] d_del the data delimeter
- * \param[in] data_limit maximum size the the data buffer
- * \param[in] line_nr pointer to an integer containing the current line number (for
-debugging purposes)
- * \return the number of character read
- */
-ssize_t ldns_fget_keyword_data_l(FILE *f, const char *keyword, const char *k_del, char *data, const char *d_del, size_t data_limit, int *line_nr);
-
-/*
- * searches for keyword and delim in a buffer. Gives everything back
- * after the keyword + k_del until we hit d_del
- * \param[in] b buffer pointer to read from
- * \param[in] keyword keyword to look for
- * \param[in] k_del keyword delimeter
- * \param[out] data the data found
- * \param[in] d_del the data delimeter
- * \param[in] data_limit maximum size the the data buffer
- * \return the number of character read
- */
-ssize_t ldns_bget_keyword_data(ldns_buffer *b, const char *keyword, const char *k_del, char *data, const char *d_del, size_t data_limit);
-
-/**
- * returns the next character from a buffer. Advances the position pointer with 1.
- * When end of buffer is reached returns EOF. This is the buffer's equivalent
- * for getc().
- * \param[in] *buffer buffer to read from
- * \return EOF on failure otherwise return the character
- */
-int ldns_bgetc(ldns_buffer *buffer);
-
-/**
- * skips all of the characters in the given string in the buffer, moving
- * the position to the first character that is not in *s.
- * \param[in] *buffer buffer to use
- * \param[in] *s characters to skip
- * \return void
- */
-void ldns_bskipcs(ldns_buffer *buffer, const char *s);
-
-/**
- * skips all of the characters in the given string in the fp, moving
- * the position to the first character that is not in *s.
- * \param[in] *fp file to use
- * \param[in] *s characters to skip
- * \return void
- */
-void ldns_fskipcs(FILE *fp, const char *s);
-
-
-/**
- * skips all of the characters in the given string in the fp, moving
- * the position to the first character that is not in *s.
- * \param[in] *fp file to use
- * \param[in] *s characters to skip
- * \param[in] line_nr pointer to an integer containing the current line number (for debugging purposes)
- * \return void
- */
-void ldns_fskipcs_l(FILE *fp, const char *s, int *line_nr);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_PARSE_H */
diff --git a/ldns/ldns/radix.h b/ldns/ldns/radix.h
deleted file mode 100644
index ec70565..0000000
--- a/ldns/ldns/radix.h
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * radix.h -- generic radix tree
- *
- * Copyright (c) 2012, NLnet Labs. All rights reserved.
- *
- * This software is open source.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * Neither the name of the NLNET LABS nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-/**
- * \file
- * Radix tree. Implementation taken from NSD 4, adjusted for use in ldns.
- *
- */
-
-#ifndef LDNS_RADIX_H_
-#define LDNS_RADIX_H_
-
-#include <ldns/error.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef uint16_t radix_strlen_t;
-typedef struct ldns_radix_array_t ldns_radix_array_t;
-typedef struct ldns_radix_node_t ldns_radix_node_t;
-typedef struct ldns_radix_t ldns_radix_t;
-
-/** Radix node select edge array */
-struct ldns_radix_array_t {
- /** Additional string after the selection byte for this edge. */
- uint8_t* str;
- /** Length of additional string for this edge. */
- radix_strlen_t len;
- /** Node that deals with byte+str. */
- ldns_radix_node_t* edge;
-};
-
-/** A node in a radix tree */
-struct ldns_radix_node_t {
- /** Key corresponding to this node. */
- uint8_t* key;
- /** Key length corresponding to this node. */
- radix_strlen_t klen;
- /** Data corresponding to this node. */
- void* data;
- /** Parent node. */
- ldns_radix_node_t* parent;
- /** Index in the the parent node select edge array. */
- uint8_t parent_index;
- /** Length of the array. */
- uint16_t len;
- /** Offset of the array. */
- uint16_t offset;
- /** Capacity of the array. */
- uint16_t capacity;
- /** Select edge array. */
- ldns_radix_array_t* array;
-};
-
-/** An entire radix tree */
-struct ldns_radix_t {
- /** Root. */
- ldns_radix_node_t* root;
- /** Number of nodes in tree. */
- size_t count;
-};
-
-/**
- * Create a new radix tree.
- * @return: new radix tree.
- *
- */
-ldns_radix_t* ldns_radix_create(void);
-
-/**
- * Initialize radix tree.
- * @param tree: uninitialized radix tree.
- *
- */
-void ldns_radix_init(ldns_radix_t* tree);
-
-/**
- * Free the radix tree.
- * @param tree: radix tree.
- *
- */
-void ldns_radix_free(ldns_radix_t* tree);
-
-/**
- * Insert data into the tree.
- * @param tree: tree to insert to.
- * @param key: key.
- * @param len: length of key.
- * @param data: data.
- * @return: status.
- *
- */
-ldns_status ldns_radix_insert(ldns_radix_t* tree, uint8_t* key,
- radix_strlen_t len, void* data);
-
-/**
- * Delete data from the tree.
- * @param tree: tree to insert to.
- * @param key: key.
- * @param len: length of key.
- * @return: unlinked data or NULL if not present.
- *
- */
-void* ldns_radix_delete(ldns_radix_t* tree, const uint8_t* key, radix_strlen_t len);
-
-/**
- * Search data in the tree.
- * @param tree: tree to insert to.
- * @param key: key.
- * @param len: length of key.
- * @return: the radix node or NULL if not found.
- *
- */
-ldns_radix_node_t* ldns_radix_search(ldns_radix_t* tree, const uint8_t* key,
- radix_strlen_t len);
-
-/**
- * Search data in the tree, and if not found, find the closest smaller
- * element in the tree.
- * @param tree: tree to insert to.
- * @param key: key.
- * @param len: length of key.
- * @param result: the radix node with the exact or closest match. NULL if
- * the key is smaller than the smallest key in the tree.
- * @return 1 if exact match, 0 otherwise.
- *
- */
-int ldns_radix_find_less_equal(ldns_radix_t* tree, const uint8_t* key,
- radix_strlen_t len, ldns_radix_node_t** result);
-
-/**
- * Get the first element in the tree.
- * @param tree: tree.
- * @return: the radix node with the first element.
- *
- */
-ldns_radix_node_t* ldns_radix_first(const ldns_radix_t* tree);
-
-/**
- * Get the last element in the tree.
- * @param tree: tree.
- * @return: the radix node with the last element.
- *
- */
-ldns_radix_node_t* ldns_radix_last(const ldns_radix_t* tree);
-
-/**
- * Next element.
- * @param node: node.
- * @return: node with next element.
- *
- */
-ldns_radix_node_t* ldns_radix_next(ldns_radix_node_t* node);
-
-/**
- * Previous element.
- * @param node: node.
- * @return: node with previous element.
- *
- */
-ldns_radix_node_t* ldns_radix_prev(ldns_radix_node_t* node);
-
-/**
- * Split radix tree intwo.
- * @param tree1: one tree.
- * @param num: number of elements to split off.
- * @param tree2: another tree.
- * @return: status.
- *
- */
-ldns_status ldns_radix_split(ldns_radix_t* tree1, size_t num,
- ldns_radix_t** tree2);
-
-/**
- * Join two radix trees.
- * @param tree1: one tree.
- * @param tree2: another tree.
- * @return: status.
- *
- */
-ldns_status ldns_radix_join(ldns_radix_t* tree1, ldns_radix_t* tree2);
-
-/**
- * Call function for all nodes in the tree, such that leaf nodes are
- * called before parent nodes.
- * @param node: start node.
- * @param func: function.
- * @param arg: user argument.
- *
- */
-void ldns_radix_traverse_postorder(ldns_radix_node_t* node,
- void (*func)(ldns_radix_node_t*, void*), void* arg);
-
-/**
- * Print radix tree (for debugging purposes).
- * @param fd: file descriptor.
- * @param tree: tree.
- *
- */
-void ldns_radix_printf(FILE* fd, const ldns_radix_t* tree);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_RADIX_H_ */
diff --git a/ldns/ldns/rbtree.h b/ldns/ldns/rbtree.h
deleted file mode 100644
index 0747a8e..0000000
--- a/ldns/ldns/rbtree.h
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * rbtree.h -- generic red-black tree
- *
- * Copyright (c) 2001-2008, NLnet Labs. All rights reserved.
- *
- * This software is open source.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * Neither the name of the NLNET LABS nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-/**
- * \file
- * Red black tree. Implementation taken from NSD 3.0.5, adjusted for use
- * in unbound (memory allocation, logging and so on).
- */
-
-#ifndef LDNS_RBTREE_H_
-#define LDNS_RBTREE_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * This structure must be the first member of the data structure in
- * the rbtree. This allows easy casting between an rbnode_t and the
- * user data (poor man's inheritance).
- * Or you can use the data pointer member to get to your data item.
- */
-typedef struct ldns_rbnode_t ldns_rbnode_t;
-/**
- * The rbnode_t struct definition.
- */
-struct ldns_rbnode_t {
- /** parent in rbtree, RBTREE_NULL for root */
- ldns_rbnode_t *parent;
- /** left node (smaller items) */
- ldns_rbnode_t *left;
- /** right node (larger items) */
- ldns_rbnode_t *right;
- /** pointer to sorting key */
- const void *key;
- /** pointer to data */
- const void *data;
- /** colour of this node */
- uint8_t color;
-};
-
-/** The nullpointer, points to empty node */
-#define LDNS_RBTREE_NULL &ldns_rbtree_null_node
-/** the global empty node */
-extern ldns_rbnode_t ldns_rbtree_null_node;
-
-/** An entire red black tree */
-typedef struct ldns_rbtree_t ldns_rbtree_t;
-/** definition for tree struct */
-struct ldns_rbtree_t {
- /** The root of the red-black tree */
- ldns_rbnode_t *root;
-
- /** The number of the nodes in the tree */
- size_t count;
-
- /**
- * Key compare function. <0,0,>0 like strcmp.
- * Return 0 on two NULL ptrs.
- */
- int (*cmp) (const void *, const void *);
-};
-
-/**
- * Create new tree (malloced) with given key compare function.
- * @param cmpf: compare function (like strcmp) takes pointers to two keys.
- * @return: new tree, empty.
- */
-ldns_rbtree_t *ldns_rbtree_create(int (*cmpf)(const void *, const void *));
-
-/**
- * Free the complete tree (but not its keys)
- * @param rbtree The tree to free
- */
-void ldns_rbtree_free(ldns_rbtree_t *rbtree);
-
-/**
- * Init a new tree (malloced by caller) with given key compare function.
- * @param rbtree: uninitialised memory for new tree, returned empty.
- * @param cmpf: compare function (like strcmp) takes pointers to two keys.
- */
-void ldns_rbtree_init(ldns_rbtree_t *rbtree, int (*cmpf)(const void *, const void *));
-
-/**
- * Insert data into the tree.
- * @param rbtree: tree to insert to.
- * @param data: element to insert.
- * @return: data ptr or NULL if key already present.
- */
-ldns_rbnode_t *ldns_rbtree_insert(ldns_rbtree_t *rbtree, ldns_rbnode_t *data);
-
-/**
- * Insert data into the tree (reversed arguments, for use as callback)
- * \param[in] data element to insert
- * \param[out] rbtree tree to insert in to
- * \return data ptr or NULL if key is already present
- */
-void ldns_rbtree_insert_vref(ldns_rbnode_t *data, void *rbtree);
-
-/**
- * Delete element from tree.
- * @param rbtree: tree to delete from.
- * @param key: key of item to delete.
- * @return: node that is now unlinked from the tree. User to delete it.
- * returns 0 if node not present
- */
-ldns_rbnode_t *ldns_rbtree_delete(ldns_rbtree_t *rbtree, const void *key);
-
-/**
- * Find key in tree. Returns NULL if not found.
- * @param rbtree: tree to find in.
- * @param key: key that must match.
- * @return: node that fits or NULL.
- */
-ldns_rbnode_t *ldns_rbtree_search(ldns_rbtree_t *rbtree, const void *key);
-
-/**
- * Find, but match does not have to be exact.
- * @param rbtree: tree to find in.
- * @param key: key to find position of.
- * @param result: set to the exact node if present, otherwise to element that
- * precedes the position of key in the tree. NULL if no smaller element.
- * @return: true if exact match in result. Else result points to <= element,
- * or NULL if key is smaller than the smallest key.
- */
-int ldns_rbtree_find_less_equal(ldns_rbtree_t *rbtree, const void *key,
- ldns_rbnode_t **result);
-
-/**
- * Returns first (smallest) node in the tree
- * @param rbtree: tree
- * @return: smallest element or NULL if tree empty.
- */
-ldns_rbnode_t *ldns_rbtree_first(const ldns_rbtree_t *rbtree);
-
-/**
- * Returns last (largest) node in the tree
- * @param rbtree: tree
- * @return: largest element or NULL if tree empty.
- */
-ldns_rbnode_t *ldns_rbtree_last(const ldns_rbtree_t *rbtree);
-
-/**
- * Returns next larger node in the tree
- * @param rbtree: tree
- * @return: next larger element or NULL if no larger in tree.
- */
-ldns_rbnode_t *ldns_rbtree_next(ldns_rbnode_t *rbtree);
-
-/**
- * Returns previous smaller node in the tree
- * @param rbtree: tree
- * @return: previous smaller element or NULL if no previous in tree.
- */
-ldns_rbnode_t *ldns_rbtree_previous(ldns_rbnode_t *rbtree);
-
-/**
- * split off 'elements' number of elements from the start
- * of the name tree and return a new tree containing those
- * elements
- */
-ldns_rbtree_t *ldns_rbtree_split(ldns_rbtree_t *tree, size_t elements);
-
-/**
- * add all node from the second tree to the first (removing them from the
- * second), and fix up nsec(3)s if present
- */
-void ldns_rbtree_join(ldns_rbtree_t *tree1, ldns_rbtree_t *tree2);
-
-/**
- * Call with node=variable of struct* with rbnode_t as first element.
- * with type is the type of a pointer to that struct.
- */
-#define LDNS_RBTREE_FOR(node, type, rbtree) \
- for(node=(type)ldns_rbtree_first(rbtree); \
- (ldns_rbnode_t*)node != LDNS_RBTREE_NULL; \
- node = (type)ldns_rbtree_next((ldns_rbnode_t*)node))
-
-/**
- * Call function for all elements in the redblack tree, such that
- * leaf elements are called before parent elements. So that all
- * elements can be safely free()d.
- * Note that your function must not remove the nodes from the tree.
- * Since that may trigger rebalances of the rbtree.
- * @param tree: the tree
- * @param func: function called with element and user arg.
- * The function must not alter the rbtree.
- * @param arg: user argument.
- */
-void ldns_traverse_postorder(ldns_rbtree_t* tree,
- void (*func)(ldns_rbnode_t*, void*), void* arg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* UTIL_RBTREE_H_ */
diff --git a/ldns/ldns/rdata.h b/ldns/ldns/rdata.h
deleted file mode 100644
index 2767e8b..0000000
--- a/ldns/ldns/rdata.h
+++ /dev/null
@@ -1,454 +0,0 @@
-/*
- * rdata.h
- *
- * rdata definitions
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2005-2006
- *
- * See the file LICENSE for the license
- */
-
-
-/**
- * \file
- *
- * Defines ldns_rdf and functions to manipulate those.
- */
-
-
-#ifndef LDNS_RDATA_H
-#define LDNS_RDATA_H
-
-#include <ldns/common.h>
-#include <ldns/error.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define LDNS_MAX_RDFLEN 65535
-
-#define LDNS_RDF_SIZE_BYTE 1
-#define LDNS_RDF_SIZE_WORD 2
-#define LDNS_RDF_SIZE_DOUBLEWORD 4
-#define LDNS_RDF_SIZE_6BYTES 6
-#define LDNS_RDF_SIZE_8BYTES 8
-#define LDNS_RDF_SIZE_16BYTES 16
-
-#define LDNS_NSEC3_VARS_OPTOUT_MASK 0x01
-
-/**
- * The different types of RDATA fields.
- */
-enum ldns_enum_rdf_type
-{
- /** none */
- LDNS_RDF_TYPE_NONE,
- /** domain name */
- LDNS_RDF_TYPE_DNAME,
- /** 8 bits */
- LDNS_RDF_TYPE_INT8,
- /** 16 bits */
- LDNS_RDF_TYPE_INT16,
- /** 32 bits */
- LDNS_RDF_TYPE_INT32,
- /** A record */
- LDNS_RDF_TYPE_A,
- /** AAAA record */
- LDNS_RDF_TYPE_AAAA,
- /** txt string */
- LDNS_RDF_TYPE_STR,
- /** apl data */
- LDNS_RDF_TYPE_APL,
- /** b32 string */
- LDNS_RDF_TYPE_B32_EXT,
- /** b64 string */
- LDNS_RDF_TYPE_B64,
- /** hex string */
- LDNS_RDF_TYPE_HEX,
- /** nsec type codes */
- LDNS_RDF_TYPE_NSEC,
- /** a RR type */
- LDNS_RDF_TYPE_TYPE,
- /** a class */
- LDNS_RDF_TYPE_CLASS,
- /** certificate algorithm */
- LDNS_RDF_TYPE_CERT_ALG,
- /** a key algorithm */
- LDNS_RDF_TYPE_ALG,
- /** unknown types */
- LDNS_RDF_TYPE_UNKNOWN,
- /** time (32 bits) */
- LDNS_RDF_TYPE_TIME,
- /** period */
- LDNS_RDF_TYPE_PERIOD,
- /** tsig time 48 bits */
- LDNS_RDF_TYPE_TSIGTIME,
- /** Represents the Public Key Algorithm, HIT and Public Key fields
- for the HIP RR types. A HIP specific rdf type is used because of
- the unusual layout in wireformat (see RFC 5205 Section 5) */
- LDNS_RDF_TYPE_HIP,
- /** variable length any type rdata where the length
- is specified by the first 2 bytes */
- LDNS_RDF_TYPE_INT16_DATA,
- /** protocol and port bitmaps */
- LDNS_RDF_TYPE_SERVICE,
- /** location data */
- LDNS_RDF_TYPE_LOC,
- /** well known services */
- LDNS_RDF_TYPE_WKS,
- /** NSAP */
- LDNS_RDF_TYPE_NSAP,
- /** ATMA */
- LDNS_RDF_TYPE_ATMA,
- /** IPSECKEY */
- LDNS_RDF_TYPE_IPSECKEY,
- /** nsec3 hash salt */
- LDNS_RDF_TYPE_NSEC3_SALT,
- /** nsec3 base32 string (with length byte on wire */
- LDNS_RDF_TYPE_NSEC3_NEXT_OWNER,
-
- /** 4 shorts represented as 4 * 16 bit hex numbers
- * separated by colons. For NID and L64.
- */
- LDNS_RDF_TYPE_ILNP64,
-
- /** 6 * 8 bit hex numbers separated by dashes. For EUI48. */
- LDNS_RDF_TYPE_EUI48,
- /** 8 * 8 bit hex numbers separated by dashes. For EUI64. */
- LDNS_RDF_TYPE_EUI64,
-
- /** A non-zero sequence of US-ASCII letters and numbers in lower case.
- * For CAA.
- */
- LDNS_RDF_TYPE_TAG,
-
- /** A <character-string> encoding of the value field as specified
- * [RFC1035], Section 5.1., encoded as remaining rdata.
- * For CAA.
- */
- LDNS_RDF_TYPE_LONG_STR,
-
- /** Since RFC7218 TLSA records can be given with mnemonics,
- * hence these rdata field types. But as with DNSKEYs, the output
- * is always numeric.
- */
- LDNS_RDF_TYPE_CERTIFICATE_USAGE,
- LDNS_RDF_TYPE_SELECTOR,
- LDNS_RDF_TYPE_MATCHING_TYPE,
-
- /** draft-ietf-mboned-driad-amt-discovery **/
- LDNS_RDF_TYPE_AMTRELAY,
-
- /* Aliases */
- LDNS_RDF_TYPE_BITMAP = LDNS_RDF_TYPE_NSEC
-};
-typedef enum ldns_enum_rdf_type ldns_rdf_type;
-
-/**
- * algorithms used in CERT rrs
- */
-enum ldns_enum_cert_algorithm
-{
- LDNS_CERT_PKIX = 1,
- LDNS_CERT_SPKI = 2,
- LDNS_CERT_PGP = 3,
- LDNS_CERT_IPKIX = 4,
- LDNS_CERT_ISPKI = 5,
- LDNS_CERT_IPGP = 6,
- LDNS_CERT_ACPKIX = 7,
- LDNS_CERT_IACPKIX = 8,
- LDNS_CERT_URI = 253,
- LDNS_CERT_OID = 254
-};
-typedef enum ldns_enum_cert_algorithm ldns_cert_algorithm;
-
-
-
-/**
- * Resource record data field.
- *
- * The data is a network ordered array of bytes, which size is specified by
- * the (16-bit) size field. To correctly parse it, use the type
- * specified in the (16-bit) type field with a value from \ref ldns_rdf_type.
- */
-struct ldns_struct_rdf
-{
- /** The size of the data (in octets) */
- size_t _size;
- /** The type of the data */
- ldns_rdf_type _type;
- /** Pointer to the data (raw octets) */
- void *_data;
-};
-typedef struct ldns_struct_rdf ldns_rdf;
-
-/* prototypes */
-
-/* write access functions */
-
-/**
- * sets the size of the rdf.
- * \param[in] *rd the rdf to operate on
- * \param[in] size the new size
- * \return void
- */
-void ldns_rdf_set_size(ldns_rdf *rd, size_t size);
-
-/**
- * sets the size of the rdf.
- * \param[in] *rd the rdf to operate on
- * \param[in] type the new type
- * \return void
- */
-void ldns_rdf_set_type(ldns_rdf *rd, ldns_rdf_type type);
-
-/**
- * sets the size of the rdf.
- * \param[in] *rd the rdf to operate on
- * \param[in] *data pointer to the new data
- * \return void
- */
-void ldns_rdf_set_data(ldns_rdf *rd, void *data);
-
-/* read access */
-
-/**
- * returns the size of the rdf.
- * \param[in] *rd the rdf to read from
- * \return uint16_t with the size
- */
-size_t ldns_rdf_size(const ldns_rdf *rd);
-
-/**
- * returns the type of the rdf. We need to insert _get_
- * here to prevent conflict the the rdf_type TYPE.
- * \param[in] *rd the rdf to read from
- * \return ldns_rdf_type with the type
- */
-ldns_rdf_type ldns_rdf_get_type(const ldns_rdf *rd);
-
-/**
- * returns the data of the rdf.
- * \param[in] *rd the rdf to read from
- *
- * \return uint8_t* pointer to the rdf's data
- */
-uint8_t *ldns_rdf_data(const ldns_rdf *rd);
-
-/* creator functions */
-
-/**
- * allocates a new rdf structure and fills it.
- * This function DOES NOT copy the contents from
- * the buffer, unlinke ldns_rdf_new_frm_data()
- * \param[in] type type of the rdf
- * \param[in] size size of the buffer
- * \param[in] data pointer to the buffer to be copied
- * \return the new rdf structure or NULL on failure
- */
-ldns_rdf *ldns_rdf_new(ldns_rdf_type type, size_t size, void *data);
-
-/**
- * allocates a new rdf structure and fills it.
- * This function _does_ copy the contents from
- * the buffer, unlinke ldns_rdf_new()
- * \param[in] type type of the rdf
- * \param[in] size size of the buffer
- * \param[in] data pointer to the buffer to be copied
- * \return the new rdf structure or NULL on failure
- */
-ldns_rdf *ldns_rdf_new_frm_data(ldns_rdf_type type, size_t size, const void *data);
-
-/**
- * creates a new rdf from a string.
- * \param[in] type type to use
- * \param[in] str string to use
- * \return ldns_rdf* or NULL in case of an error
- */
-ldns_rdf *ldns_rdf_new_frm_str(ldns_rdf_type type, const char *str);
-
-/**
- * creates a new rdf from a file containing a string.
- * \param[out] r the new rdf
- * \param[in] type type to use
- * \param[in] fp the file pointer to use
- * \return LDNS_STATUS_OK or the error
- */
-ldns_status ldns_rdf_new_frm_fp(ldns_rdf **r, ldns_rdf_type type, FILE *fp);
-
-/**
- * creates a new rdf from a file containing a string.
- * \param[out] r the new rdf
- * \param[in] type type to use
- * \param[in] fp the file pointer to use
- * \param[in] line_nr pointer to an integer containing the current line number (for debugging purposes)
- * \return LDNS_STATUS_OK or the error
- */
-ldns_status ldns_rdf_new_frm_fp_l(ldns_rdf **r, ldns_rdf_type type, FILE *fp, int *line_nr);
-
-/* destroy functions */
-
-/**
- * frees a rdf structure, leaving the
- * data pointer intact.
- * \param[in] rd the pointer to be freed
- * \return void
- */
-void ldns_rdf_free(ldns_rdf *rd);
-
-/**
- * frees a rdf structure _and_ frees the
- * data. rdf should be created with _new_frm_data
- * \param[in] rd the rdf structure to be freed
- * \return void
- */
-void ldns_rdf_deep_free(ldns_rdf *rd);
-
-/* conversion functions */
-
-/**
- * returns the rdf containing the native uint8_t repr.
- * \param[in] type the ldns_rdf type to use
- * \param[in] value the uint8_t to use
- * \return ldns_rdf* with the converted value
- */
-ldns_rdf *ldns_native2rdf_int8(ldns_rdf_type type, uint8_t value);
-
-/**
- * returns the rdf containing the native uint16_t representation.
- * \param[in] type the ldns_rdf type to use
- * \param[in] value the uint16_t to use
- * \return ldns_rdf* with the converted value
- */
-ldns_rdf *ldns_native2rdf_int16(ldns_rdf_type type, uint16_t value);
-
-/**
- * returns an rdf that contains the given int32 value.
- *
- * Because multiple rdf types can contain an int32, the
- * type must be specified
- * \param[in] type the ldns_rdf type to use
- * \param[in] value the uint32_t to use
- * \return ldns_rdf* with the converted value
- */
-ldns_rdf *ldns_native2rdf_int32(ldns_rdf_type type, uint32_t value);
-
-/**
- * returns an int16_data rdf that contains the data in the
- * given array, preceded by an int16 specifying the length.
- *
- * The memory is copied, and an LDNS_RDF_TYPE_INT16DATA is returned
- * \param[in] size the size of the data
- * \param[in] *data pointer to the actual data
- *
- * \return ldns_rd* the rdf with the data
- */
-ldns_rdf *ldns_native2rdf_int16_data(size_t size, uint8_t *data);
-
-/**
- * reverses an rdf, only actually useful for AAAA and A records.
- * The returned rdf has the type LDNS_RDF_TYPE_DNAME!
- * \param[in] *rd rdf to be reversed
- * \return the reversed rdf (a newly created rdf)
- */
-ldns_rdf *ldns_rdf_address_reverse(const ldns_rdf *rd);
-
-/**
- * returns the native uint8_t representation from the rdf.
- * \param[in] rd the ldns_rdf to operate on
- * \return uint8_t the value extracted
- */
-uint8_t ldns_rdf2native_int8(const ldns_rdf *rd);
-
-/**
- * returns the native uint16_t representation from the rdf.
- * \param[in] rd the ldns_rdf to operate on
- * \return uint16_t the value extracted
- */
-uint16_t ldns_rdf2native_int16(const ldns_rdf *rd);
-
-/**
- * returns the native uint32_t representation from the rdf.
- * \param[in] rd the ldns_rdf to operate on
- * \return uint32_t the value extracted
- */
-uint32_t ldns_rdf2native_int32(const ldns_rdf *rd);
-
-/**
- * returns the native time_t representation from the rdf.
- * \param[in] rd the ldns_rdf to operate on
- * \return time_t the value extracted (32 bits currently)
- */
-time_t ldns_rdf2native_time_t(const ldns_rdf *rd);
-
-/**
- * converts a ttl value (like 5d2h) to a long.
- * \param[in] nptr the start of the string
- * \param[out] endptr points to the last char in case of error
- * \return the convert duration value
- */
-uint32_t ldns_str2period(const char *nptr, const char **endptr);
-
-/**
- * removes \\DDD, \\[space] and other escapes from the input.
- * See RFC 1035, section 5.1.
- * \param[in] word what to check
- * \param[in] length the string
- * \return ldns_status mesg
- */
-ldns_status ldns_octet(char *word, size_t *length);
-
-/**
- * clones a rdf structure. The data is copied.
- * \param[in] rd rdf to be copied
- * \return a new rdf structure
- */
-ldns_rdf *ldns_rdf_clone(const ldns_rdf *rd);
-
-/**
- * compares two rdf's on their wire formats.
- * (To order dnames according to rfc4034, use ldns_dname_compare)
- * \param[in] rd1 the first one
- * \param[in] rd2 the second one
- * \return 0 if equal
- * \return -1 if rd1 comes before rd2
- * \return +1 if rd2 comes before rd1
- */
-int ldns_rdf_compare(const ldns_rdf *rd1, const ldns_rdf *rd2);
-
-/**
- * Gets the algorithm value, the HIT and Public Key data from the rdf with
- * type LDNS_RDF_TYPE_HIP.
- * \param[in] rdf the rdf with type LDNS_RDF_TYPE_HIP
- * \param[out] alg the algorithm
- * \param[out] hit_size the size of the HIT data
- * \param[out] hit the hit data
- * \param[out] pk_size the size of the Public Key data
- * \param[out] pk the Public Key data
- * \return LDNS_STATUS_OK on success, and the error otherwise
- */
-ldns_status ldns_rdf_hip_get_alg_hit_pk(ldns_rdf *rdf, uint8_t* alg,
- uint8_t *hit_size, uint8_t** hit,
- uint16_t *pk_size, uint8_t** pk);
-
-/**
- * Creates a new LDNS_RDF_TYPE_HIP rdf from given data.
- * \param[out] rdf the newly created LDNS_RDF_TYPE_HIP rdf
- * \param[in] alg the algorithm
- * \param[in] hit_size the size of the HIT data
- * \param[in] hit the hit data
- * \param[in] pk_size the size of the Public Key data
- * \param[in] pk the Public Key data
- * \return LDNS_STATUS_OK on success, and the error otherwise
- */
-ldns_status ldns_rdf_hip_new_frm_alg_hit_pk(ldns_rdf** rdf, uint8_t alg,
- uint8_t hit_size, uint8_t *hit, uint16_t pk_size, uint8_t *pk);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_RDATA_H */
diff --git a/ldns/ldns/resolver.h b/ldns/ldns/resolver.h
deleted file mode 100644
index 84128df..0000000
--- a/ldns/ldns/resolver.h
+++ /dev/null
@@ -1,808 +0,0 @@
-/*
- * resolver.h
- *
- * DNS Resolver definitions
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2005-2006
- *
- * See the file LICENSE for the license
- */
-
-/**
- * \file
- *
- * Defines the ldns_resolver structure, a stub resolver that can send queries and parse answers.
- *
- */
-
-#ifndef LDNS_RESOLVER_H
-#define LDNS_RESOLVER_H
-
-#include <ldns/error.h>
-#include <ldns/common.h>
-#include <ldns/rr.h>
-#include <ldns/tsig.h>
-#include <ldns/rdata.h>
-#include <ldns/packet.h>
-#include <sys/time.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** Default location of the resolv.conf file */
-#define LDNS_RESOLV_CONF "/etc/resolv.conf"
-/** Default location of the hosts file */
-#define LDNS_RESOLV_HOSTS "/etc/hosts"
-
-#define LDNS_RESOLV_KEYWORD -1
-#define LDNS_RESOLV_DEFDOMAIN 0
-#define LDNS_RESOLV_NAMESERVER 1
-#define LDNS_RESOLV_SEARCH 2
-#define LDNS_RESOLV_SORTLIST 3
-#define LDNS_RESOLV_OPTIONS 4
-#define LDNS_RESOLV_ANCHOR 5
-#define LDNS_RESOLV_KEYWORDS 6
-
-#define LDNS_RESOLV_INETANY 0
-#define LDNS_RESOLV_INET 1
-#define LDNS_RESOLV_INET6 2
-
-#define LDNS_RESOLV_RTT_INF 0 /* infinity */
-#define LDNS_RESOLV_RTT_MIN 1 /* reachable */
-
-/**
- * DNS stub resolver structure
- */
-struct ldns_struct_resolver
-{
- /** Port to send queries to */
- uint16_t _port;
-
- /** Array of nameservers to query (IP addresses or dnames) */
- ldns_rdf **_nameservers;
- /** Number of nameservers in \c _nameservers */
- size_t _nameserver_count; /* how many do we have */
-
- /** Round trip time; 0 -> infinity. Unit: ms? */
- size_t *_rtt;
-
- /** Whether or not to be recursive */
- bool _recursive;
-
- /** Print debug information */
- bool _debug;
-
- /** Default domain to add to non fully qualified domain names */
- ldns_rdf *_domain;
-
- /** Searchlist array, add the names in this array if a query cannot be found */
- ldns_rdf **_searchlist;
-
- /** Number of entries in the searchlist array */
- size_t _searchlist_count;
-
- /** Number of times to retry before giving up */
- uint8_t _retry;
- /** Time to wait before retrying */
- uint8_t _retrans;
- /** Use new fallback mechanism (try EDNS, then do TCP) */
- bool _fallback;
-
- /** Whether to do DNSSEC */
- bool _dnssec;
- /** Whether to set the CD bit on DNSSEC requests */
- bool _dnssec_cd;
- /** Optional trust anchors for complete DNSSEC validation */
- ldns_rr_list * _dnssec_anchors;
- /** Whether to use tcp or udp (tcp if the value is true)*/
- bool _usevc;
- /** Whether to ignore the tc bit */
- bool _igntc;
- /** Whether to use ip6: 0->does not matter, 1 is IPv4, 2 is IPv6 */
- uint8_t _ip6;
- /** If true append the default domain */
- bool _defnames;
- /** If true apply the search list */
- bool _dnsrch;
- /** Timeout for socket connections */
- struct timeval _timeout;
- /** Only try the first nameserver, and return with an error directly if it fails */
- bool _fail;
- /** Randomly choose a nameserver */
- bool _random;
- /** Keep some things to make AXFR possible */
- int _socket;
- /** Count the number of LDNS_RR_TYPE_SOA RRs we have seen so far
- * (the second one signifies the end of the AXFR)
- */
- int _axfr_soa_count;
- /* when axfring we get complete packets from the server
- but we want to give the caller 1 rr at a time, so
- keep the current pkt */
- /** Packet currently handled when doing part of an AXFR */
- ldns_pkt *_cur_axfr_pkt;
- /** Counter for within the AXFR packets */
- uint16_t _axfr_i;
- /* EDNS0 available buffer size */
- uint16_t _edns_udp_size;
- /* serial for IXFR */
- uint32_t _serial;
-
- /* Optional tsig key for signing queries,
- outgoing messages are signed if and only if both are set
- */
- /** Name of the key to use with TSIG, if _tsig_keyname and _tsig_keydata both contain values, outgoing messages are automatically signed with TSIG. */
- char *_tsig_keyname;
- /** Secret key data to use with TSIG, if _tsig_keyname and _tsig_keydata both contain values, outgoing messages are automatically signed with TSIG. */
- char *_tsig_keydata;
- /** TSIG signing algorithm */
- char *_tsig_algorithm;
-
- /** Source address to query from */
- ldns_rdf *_source;
-};
-typedef struct ldns_struct_resolver ldns_resolver;
-
-/* prototypes */
-/* read access functions */
-
-/**
- * Get the port the resolver should use
- * \param[in] r the resolver
- * \return the port number
- */
-uint16_t ldns_resolver_port(const ldns_resolver *r);
-
-/**
- * Get the source address the resolver should use
- * \param[in] r the resolver
- * \return the source rdf
- */
-ldns_rdf *ldns_resolver_source(const ldns_resolver *r);
-
-/**
- * Is the resolver set to recurse
- * \param[in] r the resolver
- * \return true if so, otherwise false
- */
-bool ldns_resolver_recursive(const ldns_resolver *r);
-
-/**
- * Get the debug status of the resolver
- * \param[in] r the resolver
- * \return true if so, otherwise false
- */
-bool ldns_resolver_debug(const ldns_resolver *r);
-
-/**
- * Get the number of retries
- * \param[in] r the resolver
- * \return the number of retries
- */
-uint8_t ldns_resolver_retry(const ldns_resolver *r);
-
-/**
- * Get the retransmit interval
- * \param[in] r the resolver
- * \return the retransmit interval
- */
-uint8_t ldns_resolver_retrans(const ldns_resolver *r);
-
-/**
- * Get the truncation fallback status
- * \param[in] r the resolver
- * \return whether the truncation fallback mechanism is used
- */
-bool ldns_resolver_fallback(const ldns_resolver *r);
-
-/**
- * Does the resolver use ip6 or ip4
- * \param[in] r the resolver
- * \return 0: both, 1: ip4, 2:ip6
- */
-uint8_t ldns_resolver_ip6(const ldns_resolver *r);
-
-/**
- * Get the resolver's udp size
- * \param[in] r the resolver
- * \return the udp mesg size
- */
-uint16_t ldns_resolver_edns_udp_size(const ldns_resolver *r);
-/**
- * Does the resolver use tcp or udp
- * \param[in] r the resolver
- * \return true: tcp, false: udp
- */
-bool ldns_resolver_usevc(const ldns_resolver *r);
-/**
- * Does the resolver only try the first nameserver
- * \param[in] r the resolver
- * \return true: yes, fail, false: no, try the others
- */
-bool ldns_resolver_fail(const ldns_resolver *r);
-/**
- * Does the resolver apply default domain name
- * \param[in] r the resolver
- * \return true: yes, false: no
- */
-bool ldns_resolver_defnames(const ldns_resolver *r);
-/**
- * Does the resolver apply search list
- * \param[in] r the resolver
- * \return true: yes, false: no
- */
-bool ldns_resolver_dnsrch(const ldns_resolver *r);
-/**
- * Does the resolver do DNSSEC
- * \param[in] r the resolver
- * \return true: yes, false: no
- */
-bool ldns_resolver_dnssec(const ldns_resolver *r);
-/**
- * Does the resolver set the CD bit
- * \param[in] r the resolver
- * \return true: yes, false: no
- */
-bool ldns_resolver_dnssec_cd(const ldns_resolver *r);
-/**
- * Get the resolver's DNSSEC anchors
- * \param[in] r the resolver
- * \return an rr_list containg trusted DNSSEC anchors
- */
-ldns_rr_list * ldns_resolver_dnssec_anchors(const ldns_resolver *r);
-/**
- * Does the resolver ignore the TC bit (truncated)
- * \param[in] r the resolver
- * \return true: yes, false: no
- */
-bool ldns_resolver_igntc(const ldns_resolver *r);
-/**
- * Does the resolver randomize the nameserver before usage
- * \param[in] r the resolver
- * \return true: yes, false: no
- */
-bool ldns_resolver_random(const ldns_resolver *r);
-/**
- * How many nameserver are configured in the resolver
- * \param[in] r the resolver
- * \return number of nameservers
- */
-size_t ldns_resolver_nameserver_count(const ldns_resolver *r);
-/**
- * What is the default dname to add to relative queries
- * \param[in] r the resolver
- * \return the dname which is added
- */
-ldns_rdf *ldns_resolver_domain(const ldns_resolver *r);
-/**
- * What is the timeout on socket connections
- * \param[in] r the resolver
- * \return the timeout as struct timeval
- */
-struct timeval ldns_resolver_timeout(const ldns_resolver *r);
-/**
- * What is the searchlist as used by the resolver
- * \param[in] r the resolver
- * \return a ldns_rdf pointer to a list of the addresses
- */
-ldns_rdf** ldns_resolver_searchlist(const ldns_resolver *r);
-/**
- * Return the configured nameserver ip address
- * \param[in] r the resolver
- * \return a ldns_rdf pointer to a list of the addresses
- */
-ldns_rdf** ldns_resolver_nameservers(const ldns_resolver *r);
-/**
- * Return the used round trip times for the nameservers
- * \param[in] r the resolver
- * \return a size_t* pointer to the list.
- * yet)
- */
-size_t * ldns_resolver_rtt(const ldns_resolver *r);
-/**
- * Return the used round trip time for a specific nameserver
- * \param[in] r the resolver
- * \param[in] pos the index to the nameserver
- * \return the rrt, 0: infinite, >0: undefined (as of * yet)
- */
-size_t ldns_resolver_nameserver_rtt(const ldns_resolver *r, size_t pos);
-/**
- * Return the tsig keyname as used by the nameserver
- * \param[in] r the resolver
- * \return the name used. Still owned by the resolver - change using
- * ldns_resolver_set_tsig_keyname().
- */
-const char *ldns_resolver_tsig_keyname(const ldns_resolver *r);
-/**
- * Return the tsig algorithm as used by the nameserver
- * \param[in] r the resolver
- * \return the algorithm used. Still owned by the resolver - change using
- * ldns_resolver_set_tsig_algorithm().
- */
-const char *ldns_resolver_tsig_algorithm(const ldns_resolver *r);
-/**
- * Return the tsig keydata as used by the nameserver
- * \param[in] r the resolver
- * \return the keydata used. Still owned by the resolver - change using
- * ldns_resolver_set_tsig_keydata().
- */
-const char *ldns_resolver_tsig_keydata(const ldns_resolver *r);
-/**
- * pop the last nameserver from the resolver.
- * \param[in] r the resolver
- * \return the popped address or NULL if empty
- */
-ldns_rdf* ldns_resolver_pop_nameserver(ldns_resolver *r);
-
-/**
- * Return the resolver's searchlist count
- * \param[in] r the resolver
- * \return the searchlist count
- */
-size_t ldns_resolver_searchlist_count(const ldns_resolver *r);
-
-/* write access function */
-/**
- * Set the port the resolver should use
- * \param[in] r the resolver
- * \param[in] p the port number
- */
-void ldns_resolver_set_port(ldns_resolver *r, uint16_t p);
-
-/**
- * Set the source rdf (address) the resolver should use
- * \param[in] r the resolver
- * \param[in] s the source address
- */
-void ldns_resolver_set_source(ldns_resolver *r, ldns_rdf *s);
-
-/**
- * Set the resolver recursion
- * \param[in] r the resolver
- * \param[in] b true: set to recurse, false: unset
- */
-void ldns_resolver_set_recursive(ldns_resolver *r, bool b);
-
-/**
- * Set the resolver debugging
- * \param[in] r the resolver
- * \param[in] b true: debug on: false debug off
- */
-void ldns_resolver_set_debug(ldns_resolver *r, bool b);
-
-/**
- * Incremental the resolver's nameserver count.
- * \param[in] r the resolver
- */
-void ldns_resolver_incr_nameserver_count(ldns_resolver *r);
-
-/**
- * Decrement the resolver's nameserver count.
- * \param[in] r the resolver
- */
-void ldns_resolver_dec_nameserver_count(ldns_resolver *r);
-
-/**
- * Set the resolver's nameserver count directly.
- * \param[in] r the resolver
- * \param[in] c the nameserver count
- */
-void ldns_resolver_set_nameserver_count(ldns_resolver *r, size_t c);
-
-/**
- * Set the resolver's nameserver count directly by using an rdf list
- * \param[in] r the resolver
- * \param[in] rd the resolver addresses
- */
-void ldns_resolver_set_nameservers(ldns_resolver *r, ldns_rdf **rd);
-
-/**
- * Set the resolver's default domain. This gets appended when no
- * absolute name is given
- * \param[in] r the resolver
- * \param[in] rd the name to append
- */
-void ldns_resolver_set_domain(ldns_resolver *r, ldns_rdf *rd);
-
-/**
- * Set the resolver's socket time out when talking to remote hosts
- * \param[in] r the resolver
- * \param[in] timeout the timeout to use
- */
-void ldns_resolver_set_timeout(ldns_resolver *r, struct timeval timeout);
-
-/**
- * Push a new rd to the resolver's searchlist
- * \param[in] r the resolver
- * \param[in] rd to push
- */
-void ldns_resolver_push_searchlist(ldns_resolver *r, ldns_rdf *rd);
-
-/**
- * Whether the resolver uses the name set with _set_domain
- * \param[in] r the resolver
- * \param[in] b true: use the defaults, false: don't use them
- */
-void ldns_resolver_set_defnames(ldns_resolver *r, bool b);
-
-/**
- * Whether the resolver uses a virtual circuit (TCP)
- * \param[in] r the resolver
- * \param[in] b true: use TCP, false: don't use TCP
- */
-void ldns_resolver_set_usevc(ldns_resolver *r, bool b);
-
-/**
- * Whether the resolver uses the searchlist
- * \param[in] r the resolver
- * \param[in] b true: use the list, false: don't use the list
- */
-void ldns_resolver_set_dnsrch(ldns_resolver *r, bool b);
-
-/**
- * Whether the resolver uses DNSSEC
- * \param[in] r the resolver
- * \param[in] b true: use DNSSEC, false: don't use DNSSEC
- */
-void ldns_resolver_set_dnssec(ldns_resolver *r, bool b);
-
-/**
- * Whether the resolver uses the checking disable bit
- * \param[in] r the resolver
- * \param[in] b true: enable , false: don't use TCP
- */
-void ldns_resolver_set_dnssec_cd(ldns_resolver *r, bool b);
-/**
- * Set the resolver's DNSSEC anchor list directly. RRs should be of type DS or DNSKEY.
- * \param[in] r the resolver
- * \param[in] l the list of RRs to use as trust anchors
- */
-void ldns_resolver_set_dnssec_anchors(ldns_resolver *r, ldns_rr_list * l);
-
-/**
- * Push a new trust anchor to the resolver. It must be a DS or DNSKEY rr
- * \param[in] r the resolver.
- * \param[in] rr the RR to add as a trust anchor.
- * \return a status
- */
-ldns_status ldns_resolver_push_dnssec_anchor(ldns_resolver *r, ldns_rr *rr);
-
-/**
- * Set the resolver retrans timeout (in seconds)
- * \param[in] r the resolver
- * \param[in] re the retransmission interval in seconds
- */
-void ldns_resolver_set_retrans(ldns_resolver *r, uint8_t re);
-
-/**
- * Set whether the resolvers truncation fallback mechanism is used
- * when ldns_resolver_query() is called.
- * \param[in] r the resolver
- * \param[in] fallback whether to use the fallback mechanism
- */
-void ldns_resolver_set_fallback(ldns_resolver *r, bool fallback);
-
-/**
- * Set the number of times a resolver should retry a nameserver before the
- * next one is tried.
- * \param[in] r the resolver
- * \param[in] re the number of retries
- */
-void ldns_resolver_set_retry(ldns_resolver *r, uint8_t re);
-
-/**
- * Whether the resolver uses ip6
- * \param[in] r the resolver
- * \param[in] i 0: no pref, 1: ip4, 2: ip6
- */
-void ldns_resolver_set_ip6(ldns_resolver *r, uint8_t i);
-
-/**
- * Whether or not to fail after one failed query
- * \param[in] r the resolver
- * \param[in] b true: yes fail, false: continue with next nameserver
- */
-void ldns_resolver_set_fail(ldns_resolver *r, bool b);
-
-/**
- * Whether or not to ignore the TC bit
- * \param[in] r the resolver
- * \param[in] b true: yes ignore, false: don't ignore
- */
-void ldns_resolver_set_igntc(ldns_resolver *r, bool b);
-
-/**
- * Set maximum udp size
- * \param[in] r the resolver
- * \param[in] s the udp max size
- */
-void ldns_resolver_set_edns_udp_size(ldns_resolver *r, uint16_t s);
-
-/**
- * Set the tsig key name
- * \param[in] r the resolver
- * \param[in] tsig_keyname the tsig key name (copied into resolver)
- */
-void ldns_resolver_set_tsig_keyname(ldns_resolver *r, const char *tsig_keyname);
-
-/**
- * Set the tsig algorithm
- * \param[in] r the resolver
- * \param[in] tsig_algorithm the tsig algorithm (copied into resolver)
- */
-void ldns_resolver_set_tsig_algorithm(ldns_resolver *r, const char *tsig_algorithm);
-
-/**
- * Set the tsig key data
- * \param[in] r the resolver
- * \param[in] tsig_keydata the key data (copied into resolver)
- */
-void ldns_resolver_set_tsig_keydata(ldns_resolver *r, const char *tsig_keydata);
-
-/**
- * Set round trip time for all nameservers. Note this currently
- * differentiates between: unreachable and reachable.
- * \param[in] r the resolver
- * \param[in] rtt a list with the times
- */
-void ldns_resolver_set_rtt(ldns_resolver *r, size_t *rtt);
-
-/**
- * Set round trip time for a specific nameserver. Note this
- * currently differentiates between: unreachable and reachable.
- * \param[in] r the resolver
- * \param[in] pos the nameserver position
- * \param[in] value the rtt
- */
-void ldns_resolver_set_nameserver_rtt(ldns_resolver *r, size_t pos, size_t value);
-
-/**
- * Should the nameserver list be randomized before each use
- * \param[in] r the resolver
- * \param[in] b: true: randomize, false: don't
- */
-void ldns_resolver_set_random(ldns_resolver *r, bool b);
-
-/**
- * Push a new nameserver to the resolver. It must be an IP
- * address v4 or v6.
- * \param[in] r the resolver
- * \param[in] n the ip address
- * \return ldns_status a status
- */
-ldns_status ldns_resolver_push_nameserver(ldns_resolver *r, const ldns_rdf *n);
-
-/**
- * Push a new nameserver to the resolver. It must be an
- * A or AAAA RR record type
- * \param[in] r the resolver
- * \param[in] rr the resource record
- * \return ldns_status a status
- */
-ldns_status ldns_resolver_push_nameserver_rr(ldns_resolver *r, const ldns_rr *rr);
-
-/**
- * Push a new nameserver rr_list to the resolver.
- * \param[in] r the resolver
- * \param[in] rrlist the rr_list to push
- * \return ldns_status a status
- */
-ldns_status ldns_resolver_push_nameserver_rr_list(ldns_resolver *r, const ldns_rr_list *rrlist);
-
-/**
- * Send the query for using the resolver and take the search list into account
- * The search algorithm is as follows:
- * If the name is absolute, try it as-is, otherwise apply the search list
- * \param[in] *r operate using this resolver
- * \param[in] *rdf query for this name
- * \param[in] t query for this type (may be 0, defaults to A)
- * \param[in] c query for this class (may be 0, default to IN)
- * \param[in] flags the query flags
- *
- * \return ldns_pkt* a packet with the reply from the nameserver
- */
-ldns_pkt* ldns_resolver_search(const ldns_resolver *r, const ldns_rdf *rdf, ldns_rr_type t, ldns_rr_class c, uint16_t flags);
-
-
-/**
- * Send the query for using the resolver and take the search list into account
- * The search algorithm is as follows:
- * If the name is absolute, try it as-is, otherwise apply the search list
- * \param[out] pkt a packet with the reply from the nameserver
- * \param[in] *r operate using this resolver
- * \param[in] *rdf query for this name
- * \param[in] t query for this type (may be 0, defaults to A)
- * \param[in] c query for this class (may be 0, default to IN)
- * \param[in] flags the query flags
- *
- * \return ldns_status LDNS_STATUS_OK on success
- */
-ldns_status ldns_resolver_search_status(ldns_pkt** pkt, ldns_resolver *r, const ldns_rdf *rdf, ldns_rr_type t, ldns_rr_class c, uint16_t flags);
-
-/**
- * Form a query packet from a resolver and name/type/class combo
- * \param[out] **q a pointer to a ldns_pkt pointer (initialized by this function)
- * \param[in] *r operate using this resolver
- * \param[in] *name query for this name
- * \param[in] t query for this type (may be 0, defaults to A)
- * \param[in] c query for this class (may be 0, default to IN)
- * \param[in] f the query flags
- *
- * \return ldns_pkt* a packet with the reply from the nameserver
- */
-ldns_status ldns_resolver_prepare_query_pkt(ldns_pkt **q, ldns_resolver *r, const ldns_rdf *name, ldns_rr_type t, ldns_rr_class c, uint16_t f);
-
-/**
- * Send the query for name as-is
- * \param[out] **answer a pointer to a ldns_pkt pointer (initialized by this function)
- * \param[in] *r operate using this resolver
- * \param[in] *name query for this name
- * \param[in] t query for this type (may be 0, defaults to A)
- * \param[in] c query for this class (may be 0, default to IN)
- * \param[in] flags the query flags
- *
- * \return ldns_status LDNS_STATUS_OK on success
- */
-ldns_status ldns_resolver_send(ldns_pkt **answer, ldns_resolver *r, const ldns_rdf *name, ldns_rr_type t, ldns_rr_class c, uint16_t flags);
-
-/**
- * Send the given packet to a nameserver
- * \param[out] **answer a pointer to a ldns_pkt pointer (initialized by this function)
- * \param[in] *r operate using this resolver
- * \param[in] *query_pkt query
- */
-ldns_status ldns_resolver_send_pkt(ldns_pkt **answer, ldns_resolver *r, ldns_pkt *query_pkt);
-
-/**
- * Send a query to a nameserver
- * \param[out] pkt a packet with the reply from the nameserver
- * \param[in] *r operate using this resolver
- * \param[in] *name query for this name
- * \param[in] *t query for this type (may be 0, defaults to A)
- * \param[in] *c query for this class (may be 0, default to IN)
- * \param[in] flags the query flags
- *
- * \return ldns_status LDNS_STATUS_OK on success
- * if _defnames is true the default domain will be added
- */
-ldns_status ldns_resolver_query_status(ldns_pkt** pkt, ldns_resolver *r, const ldns_rdf *name, ldns_rr_type t, ldns_rr_class c, uint16_t flags);
-
-
-/**
- * Send a query to a nameserver
- * \param[in] *r operate using this resolver
- * (despite the const in the declaration,
- * the struct is altered as a side-effect)
- * \param[in] *name query for this name
- * \param[in] *t query for this type (may be 0, defaults to A)
- * \param[in] *c query for this class (may be 0, default to IN)
- * \param[in] flags the query flags
- *
- * \return ldns_pkt* a packet with the reply from the nameserver
- * if _defnames is true the default domain will be added
- */
-ldns_pkt* ldns_resolver_query(const ldns_resolver *r, const ldns_rdf *name, ldns_rr_type t, ldns_rr_class c, uint16_t flags);
-
-
-/**
- * Create a new resolver structure
- * \return ldns_resolver* pointer to new structure
- */
-ldns_resolver* ldns_resolver_new(void);
-
-/**
- * Clone a resolver
- * \param[in] r the resolver to clone
- * \return ldns_resolver* pointer to new structure
- */
-ldns_resolver* ldns_resolver_clone(ldns_resolver *r);
-
-/**
- * Create a resolver structure from a file like /etc/resolv.conf
- * \param[out] r the new resolver
- * \param[in] fp file pointer to create new resolver from
- * if NULL use /etc/resolv.conf
- * \return LDNS_STATUS_OK or the error
- */
-ldns_status ldns_resolver_new_frm_fp(ldns_resolver **r, FILE *fp);
-
-/**
- * Create a resolver structure from a file like /etc/resolv.conf
- * \param[out] r the new resolver
- * \param[in] fp file pointer to create new resolver from
- * if NULL use /etc/resolv.conf
- * \param[in] line_nr pointer to an integer containing the current line number (for debugging purposes)
- * \return LDNS_STATUS_OK or the error
- */
-ldns_status ldns_resolver_new_frm_fp_l(ldns_resolver **r, FILE *fp, int *line_nr);
-
-/**
- * Configure a resolver by means of a resolv.conf file
- * The file may be NULL in which case there will be
- * looked the RESOLV_CONF (defaults to /etc/resolv.conf)
- * \param[out] r the new resolver
- * \param[in] filename the filename to use
- * \return LDNS_STATUS_OK or the error
- */
-ldns_status ldns_resolver_new_frm_file(ldns_resolver **r, const char *filename);
-
-/**
- * Frees the allocated space for this resolver. Only frees the resolver pionter! You should probably be using _deep_free.
- * \param res resolver to free
- */
-void ldns_resolver_free(ldns_resolver *res);
-
-/**
- * Frees the allocated space for this resolver and all it's data
- * \param res resolver to free
- */
-void ldns_resolver_deep_free(ldns_resolver *res);
-
-/**
- * Get the next stream of RRs in a AXFR
- * \param[in] resolver the resolver to use. First ldns_axfr_start() must be
- * called
- * \return ldns_rr the next RR from the AXFR stream
- * After you get this returned RR (not NULL: on error), then check if
- * ldns_axfr_complete() is true to see if the zone transfer has completed.
- */
-ldns_rr* ldns_axfr_next(ldns_resolver *resolver);
-
-/**
- * Abort a transfer that is in progress
- * \param[in] resolver the resolver that is used
- */
-void ldns_axfr_abort(ldns_resolver *resolver);
-
-/**
- * Returns true if the axfr transfer has completed (i.e. 2 SOA RRs and no errors were encountered
- * \param[in] resolver the resolver that is used
- * \return bool true if axfr transfer was completed without error
- */
-bool ldns_axfr_complete(const ldns_resolver *resolver);
-
-/**
- * Returns a pointer to the last ldns_pkt that was sent by the server in the AXFR transfer
- * uasable for instance to get the error code on failure
- * \param[in] res the resolver that was used in the axfr transfer
- * \return ldns_pkt the last packet sent
- */
-ldns_pkt *ldns_axfr_last_pkt(const ldns_resolver *res);
-
-/**
- * Get the serial for requesting IXFR.
- * \param[in] r the resolver
- * \param[in] serial serial
- */
-void ldns_resolver_set_ixfr_serial(ldns_resolver *r, uint32_t serial);
-
-/**
- * Get the serial for requesting IXFR.
- * \param[in] res the resolver
- * \return uint32_t serial
- */
-uint32_t ldns_resolver_get_ixfr_serial(const ldns_resolver *res);
-
-/**
- * Randomize the nameserver list in the resolver
- * \param[in] r the resolver
- */
-void ldns_resolver_nameservers_randomize(ldns_resolver *r);
-
-/**
- * Returns true if at least one of the provided keys is a trust anchor
- * \param[in] r the current resolver
- * \param[in] keys the keyset to check
- * \param[out] trusted_keys the subset of trusted keys in the 'keys' rrset
- * \return true if at least one of the provided keys is a configured trust anchor
- */
-bool ldns_resolver_trusted_key(const ldns_resolver *r, ldns_rr_list * keys, ldns_rr_list * trusted_keys);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_RESOLVER_H */
diff --git a/ldns/ldns/rr.h b/ldns/ldns/rr.h
deleted file mode 100644
index 89cc0b6..0000000
--- a/ldns/ldns/rr.h
+++ /dev/null
@@ -1,935 +0,0 @@
-/*
- * rr.h - resource record definitions
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2005-2006
- *
- * See the file LICENSE for the license
- */
-
-/**
- * \file
- *
- * Contains the definition of ldns_rr and functions to manipulate those.
- */
-
-
-#ifndef LDNS_RR_H
-#define LDNS_RR_H
-
-#include <ldns/common.h>
-#include <ldns/rdata.h>
-#include <ldns/buffer.h>
-#include <ldns/error.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** Maximum length of a dname label */
-#define LDNS_MAX_LABELLEN 63
-/** Maximum length of a complete dname */
-#define LDNS_MAX_DOMAINLEN 255
-/** Maximum number of pointers in 1 dname */
-#define LDNS_MAX_POINTERS 65535
-/** The bytes TTL, CLASS and length use up in an rr */
-#define LDNS_RR_OVERHEAD 10
-
-
-
-/**
- * The different RR classes.
- */
-enum ldns_enum_rr_class
-{
- /** the Internet */
- LDNS_RR_CLASS_IN = 1,
- /** Chaos class */
- LDNS_RR_CLASS_CH = 3,
- /** Hesiod (Dyer 87) */
- LDNS_RR_CLASS_HS = 4,
- /** None class, dynamic update */
- LDNS_RR_CLASS_NONE = 254,
- /** Any class */
- LDNS_RR_CLASS_ANY = 255,
-
- LDNS_RR_CLASS_FIRST = 0,
- LDNS_RR_CLASS_LAST = 65535,
- LDNS_RR_CLASS_COUNT = LDNS_RR_CLASS_LAST - LDNS_RR_CLASS_FIRST + 1
-};
-typedef enum ldns_enum_rr_class ldns_rr_class;
-
-/**
- * Used to specify whether compression is allowed.
- */
-enum ldns_enum_rr_compress
-{
- /** compression is allowed */
- LDNS_RR_COMPRESS,
- LDNS_RR_NO_COMPRESS
-};
-typedef enum ldns_enum_rr_compress ldns_rr_compress;
-
-/**
- * The different RR types.
- */
-enum ldns_enum_rr_type
-{
- /** a host address */
- LDNS_RR_TYPE_A = 1,
- /** an authoritative name server */
- LDNS_RR_TYPE_NS = 2,
- /** a mail destination (Obsolete - use MX) */
- LDNS_RR_TYPE_MD = 3,
- /** a mail forwarder (Obsolete - use MX) */
- LDNS_RR_TYPE_MF = 4,
- /** the canonical name for an alias */
- LDNS_RR_TYPE_CNAME = 5,
- /** marks the start of a zone of authority */
- LDNS_RR_TYPE_SOA = 6,
- /** a mailbox domain name (EXPERIMENTAL) */
- LDNS_RR_TYPE_MB = 7,
- /** a mail group member (EXPERIMENTAL) */
- LDNS_RR_TYPE_MG = 8,
- /** a mail rename domain name (EXPERIMENTAL) */
- LDNS_RR_TYPE_MR = 9,
- /** a null RR (EXPERIMENTAL) */
- LDNS_RR_TYPE_NULL = 10,
- /** a well known service description */
- LDNS_RR_TYPE_WKS = 11,
- /** a domain name pointer */
- LDNS_RR_TYPE_PTR = 12,
- /** host information */
- LDNS_RR_TYPE_HINFO = 13,
- /** mailbox or mail list information */
- LDNS_RR_TYPE_MINFO = 14,
- /** mail exchange */
- LDNS_RR_TYPE_MX = 15,
- /** text strings */
- LDNS_RR_TYPE_TXT = 16,
- /** RFC1183 */
- LDNS_RR_TYPE_RP = 17,
- /** RFC1183 */
- LDNS_RR_TYPE_AFSDB = 18,
- /** RFC1183 */
- LDNS_RR_TYPE_X25 = 19,
- /** RFC1183 */
- LDNS_RR_TYPE_ISDN = 20,
- /** RFC1183 */
- LDNS_RR_TYPE_RT = 21,
- /** RFC1706 */
- LDNS_RR_TYPE_NSAP = 22,
- /** RFC1348 */
- LDNS_RR_TYPE_NSAP_PTR = 23,
- /** 2535typecode */
- LDNS_RR_TYPE_SIG = 24,
- /** 2535typecode */
- LDNS_RR_TYPE_KEY = 25,
- /** RFC2163 */
- LDNS_RR_TYPE_PX = 26,
- /** RFC1712 */
- LDNS_RR_TYPE_GPOS = 27,
- /** ipv6 address */
- LDNS_RR_TYPE_AAAA = 28,
- /** LOC record RFC1876 */
- LDNS_RR_TYPE_LOC = 29,
- /** 2535typecode */
- LDNS_RR_TYPE_NXT = 30,
- /** draft-ietf-nimrod-dns-01.txt */
- LDNS_RR_TYPE_EID = 31,
- /** draft-ietf-nimrod-dns-01.txt */
- LDNS_RR_TYPE_NIMLOC = 32,
- /** SRV record RFC2782 */
- LDNS_RR_TYPE_SRV = 33,
- /** http://www.jhsoft.com/rfc/af-saa-0069.000.rtf */
- LDNS_RR_TYPE_ATMA = 34,
- /** RFC2915 */
- LDNS_RR_TYPE_NAPTR = 35,
- /** RFC2230 */
- LDNS_RR_TYPE_KX = 36,
- /** RFC2538 */
- LDNS_RR_TYPE_CERT = 37,
- /** RFC2874 */
- LDNS_RR_TYPE_A6 = 38,
- /** RFC2672 */
- LDNS_RR_TYPE_DNAME = 39,
- /** dnsind-kitchen-sink-02.txt */
- LDNS_RR_TYPE_SINK = 40,
- /** Pseudo OPT record... */
- LDNS_RR_TYPE_OPT = 41,
- /** RFC3123 */
- LDNS_RR_TYPE_APL = 42,
- /** RFC4034, RFC3658 */
- LDNS_RR_TYPE_DS = 43,
- /** SSH Key Fingerprint */
- LDNS_RR_TYPE_SSHFP = 44, /* RFC 4255 */
- /** IPsec Key */
- LDNS_RR_TYPE_IPSECKEY = 45, /* RFC 4025 */
- /** DNSSEC */
- LDNS_RR_TYPE_RRSIG = 46, /* RFC 4034 */
- LDNS_RR_TYPE_NSEC = 47, /* RFC 4034 */
- LDNS_RR_TYPE_DNSKEY = 48, /* RFC 4034 */
-
- LDNS_RR_TYPE_DHCID = 49, /* RFC 4701 */
- /* NSEC3 */
- LDNS_RR_TYPE_NSEC3 = 50, /* RFC 5155 */
- LDNS_RR_TYPE_NSEC3PARAM = 51, /* RFC 5155 */
- LDNS_RR_TYPE_NSEC3PARAMS = 51,
- LDNS_RR_TYPE_TLSA = 52, /* RFC 6698 */
- LDNS_RR_TYPE_SMIMEA = 53, /* RFC 8162 */
-
- LDNS_RR_TYPE_HIP = 55, /* RFC 5205 */
-
- /** draft-reid-dnsext-zs */
- LDNS_RR_TYPE_NINFO = 56,
- /** draft-reid-dnsext-rkey */
- LDNS_RR_TYPE_RKEY = 57,
- /** draft-ietf-dnsop-trust-history */
- LDNS_RR_TYPE_TALINK = 58,
- LDNS_RR_TYPE_CDS = 59, /* RFC 7344 */
- LDNS_RR_TYPE_CDNSKEY = 60, /* RFC 7344 */
- LDNS_RR_TYPE_OPENPGPKEY = 61, /* RFC 7929 */
- LDNS_RR_TYPE_CSYNC = 62, /* RFC 7477 */
- LDNS_RR_TYPE_ZONEMD = 63, /* draft-wessels-dns-zone-digest */
-
- LDNS_RR_TYPE_SPF = 99, /* RFC 4408 */
-
- LDNS_RR_TYPE_UINFO = 100,
- LDNS_RR_TYPE_UID = 101,
- LDNS_RR_TYPE_GID = 102,
- LDNS_RR_TYPE_UNSPEC = 103,
-
- LDNS_RR_TYPE_NID = 104, /* RFC 6742 */
- LDNS_RR_TYPE_L32 = 105, /* RFC 6742 */
- LDNS_RR_TYPE_L64 = 106, /* RFC 6742 */
- LDNS_RR_TYPE_LP = 107, /* RFC 6742 */
-
- LDNS_RR_TYPE_EUI48 = 108, /* RFC 7043 */
- LDNS_RR_TYPE_EUI64 = 109, /* RFC 7043 */
-
- LDNS_RR_TYPE_TKEY = 249, /* RFC 2930 */
- LDNS_RR_TYPE_TSIG = 250,
- LDNS_RR_TYPE_IXFR = 251,
- LDNS_RR_TYPE_AXFR = 252,
- /** A request for mailbox-related records (MB, MG or MR) */
- LDNS_RR_TYPE_MAILB = 253,
- /** A request for mail agent RRs (Obsolete - see MX) */
- LDNS_RR_TYPE_MAILA = 254,
- /** any type (wildcard) */
- LDNS_RR_TYPE_ANY = 255,
- LDNS_RR_TYPE_URI = 256, /* RFC 7553 */
- LDNS_RR_TYPE_CAA = 257, /* RFC 6844 */
- LDNS_RR_TYPE_AVC = 258, /* Cisco's DNS-AS RR, see www.dns-as.org */
- LDNS_RR_TYPE_DOA = 259, /* draft-durand-doa-over-dns */
-
- /** draft-ietf-mboned-driad-amt-discovery **/
- LDNS_RR_TYPE_AMTRELAY = 260,
-
- /** DNSSEC Trust Authorities */
- LDNS_RR_TYPE_TA = 32768,
- /* RFC 4431, 5074, DNSSEC Lookaside Validation */
- LDNS_RR_TYPE_DLV = 32769,
-
- /* type codes from nsec3 experimental phase
- LDNS_RR_TYPE_NSEC3 = 65324,
- LDNS_RR_TYPE_NSEC3PARAMS = 65325, */
- LDNS_RR_TYPE_FIRST = 0,
- LDNS_RR_TYPE_LAST = 65535,
- LDNS_RR_TYPE_COUNT = LDNS_RR_TYPE_LAST - LDNS_RR_TYPE_FIRST + 1
-};
-typedef enum ldns_enum_rr_type ldns_rr_type;
-
-/* The first fields are contiguous and can be referenced instantly */
-#define LDNS_RDATA_FIELD_DESCRIPTORS_COMMON (LDNS_RR_TYPE_AMTRELAY + 1)
-
-/**
- * Resource Record
- *
- * This is the basic DNS element that contains actual data
- *
- * From RFC1035:
- * <pre>
-3.2.1. Format
-
-All RRs have the same top level format shown below:
-
- 1 1 1 1 1 1
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- | |
- / /
- / NAME /
- | |
- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- | TYPE |
- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- | CLASS |
- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- | TTL |
- | |
- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- | RDLENGTH |
- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
- / RDATA /
- / /
- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
-
-where:
-
-NAME an owner name, i.e., the name of the node to which this
- resource record pertains.
-
-TYPE two octets containing one of the RR TYPE codes.
-
-CLASS two octets containing one of the RR CLASS codes.
-
-TTL a 32 bit signed integer that specifies the time interval
- that the resource record may be cached before the source
- of the information should again be consulted. Zero
- values are interpreted to mean that the RR can only be
- used for the transaction in progress, and should not be
- cached. For example, SOA records are always distributed
- with a zero TTL to prohibit caching. Zero values can
- also be used for extremely volatile data.
-
-RDLENGTH an unsigned 16 bit integer that specifies the length in
- octets of the RDATA field.
-
-RDATA a variable length string of octets that describes the
- resource. The format of this information varies
- according to the TYPE and CLASS of the resource record.
- * </pre>
- *
- * The actual amount and type of rdata fields depend on the RR type of the
- * RR, and can be found by using \ref ldns_rr_descriptor functions.
- */
-struct ldns_struct_rr
-{
- /** Owner name, uncompressed */
- ldns_rdf *_owner;
- /** Time to live */
- uint32_t _ttl;
- /** Number of data fields */
- size_t _rd_count;
- /** the type of the RR. A, MX etc. */
- ldns_rr_type _rr_type;
- /** Class of the resource record. */
- ldns_rr_class _rr_class;
- /* everything in the rdata is in network order */
- /** The array of rdata's */
- ldns_rdf **_rdata_fields;
- /** question rr [it would be nicer if thous is after _rd_count]
- ABI change: Fix this in next major release
- */
- bool _rr_question;
-};
-typedef struct ldns_struct_rr ldns_rr;
-
-/**
- * List or Set of Resource Records
- *
- * Contains a list of rr's <br>
- * No official RFC-like checks are made
- */
-struct ldns_struct_rr_list
-{
- size_t _rr_count;
- size_t _rr_capacity;
- ldns_rr **_rrs;
-};
-typedef struct ldns_struct_rr_list ldns_rr_list;
-
-/**
- * Contains all information about resource record types.
- *
- * This structure contains, for all rr types, the rdata fields that are defined.
- */
-struct ldns_struct_rr_descriptor
-{
- /** Type of the RR that is described here */
- ldns_rr_type _type;
- /** Textual name of the RR type. */
- const char *_name;
- /** Minimum number of rdata fields in the RRs of this type. */
- uint8_t _minimum;
- /** Maximum number of rdata fields in the RRs of this type. */
- uint8_t _maximum;
- /** Wireformat specification for the rr, i.e. the types of rdata fields in their respective order. */
- const ldns_rdf_type *_wireformat;
- /** Special rdf types */
- ldns_rdf_type _variable;
- /** Specifies whether compression can be used for dnames in this RR type. */
- ldns_rr_compress _compress;
- /** The number of DNAMEs in the _wireformat string, for parsing. */
- uint8_t _dname_count;
-};
-typedef struct ldns_struct_rr_descriptor ldns_rr_descriptor;
-
-
-/**
- * Create a rr type bitmap rdf providing enough space to set all
- * known (to ldns) rr types.
- * \param[out] rdf the constructed rdf
- * \return LDNS_STATUS_OK if all went well.
- */
-ldns_status ldns_rdf_bitmap_known_rr_types_space(ldns_rdf** rdf);
-
-/**
- * Create a rr type bitmap rdf with at least all known (to ldns) rr types set.
- * \param[out] rdf the constructed rdf
- * \return LDNS_STATUS_OK if all went well.
- */
-ldns_status ldns_rdf_bitmap_known_rr_types(ldns_rdf** rdf);
-
-
-/**
- * creates a new rr structure.
- * \return ldns_rr *
- */
-ldns_rr* ldns_rr_new(void);
-
-/**
- * creates a new rr structure, based on the given type.
- * alloc enough space to hold all the rdf's
- */
-ldns_rr* ldns_rr_new_frm_type(ldns_rr_type t);
-
-/**
- * frees an RR structure
- * \param[in] *rr the RR to be freed
- * \return void
- */
-void ldns_rr_free(ldns_rr *rr);
-
-/**
- * creates an rr from a string.
- * The string should be a fully filled-in rr, like
- * ownername &lt;space&gt; TTL &lt;space&gt; CLASS &lt;space&gt;
- * TYPE &lt;space&gt; RDATA.
- * \param[out] n the rr to return
- * \param[in] str the string to convert
- * \param[in] default_ttl default ttl value for the rr.
- * If 0 DEF_TTL will be used
- * \param[in] origin when the owner is relative add this.
- * The caller must ldns_rdf_deep_free it.
- * \param[out] prev the previous ownername. if this value is not NULL,
- * the function overwrites this with the ownername found in this
- * string. The caller must then ldns_rdf_deep_free it.
- * \return a status msg describing an error or LDNS_STATUS_OK
- */
-ldns_status ldns_rr_new_frm_str(ldns_rr **n, const char *str,
- uint32_t default_ttl, const ldns_rdf *origin,
- ldns_rdf **prev);
-
-/**
- * creates an rr for the question section from a string, i.e.
- * without RDATA fields
- * Origin and previous RR functionality are the same as in
- * ldns_rr_new_frm_str()
- * \param[out] n the rr to return
- * \param[in] str the string to convert
- * \param[in] origin when the owner is relative add this.
- * The caller must ldns_rdf_deep_free it.
- * \param prev the previous ownername. the function overwrite this with
- * the current found ownername. The caller must ldns_rdf_deep_free it.
- * \return a status msg describing an error or LDNS_STATUS_OK
- */
-ldns_status ldns_rr_new_question_frm_str(ldns_rr **n, const char *str,
- const ldns_rdf *origin, ldns_rdf **prev);
-
-/**
- * creates a new rr from a file containing a string.
- * \param[out] rr the new rr
- * \param[in] fp the file pointer to use
- * \param[in] default_ttl pointer to a default ttl for the rr. If NULL DEF_TTL will be used
- * the pointer will be updated if the file contains a $TTL directive
- * \param[in] origin when the owner is relative add this
- * the pointer will be updated if the file contains a $ORIGIN directive
- * The caller must ldns_rdf_deep_free it.
- * \param[in] prev when the owner is whitespaces use this as the * ownername
- * the pointer will be updated after the call
- * The caller must ldns_rdf_deep_free it.
- * \return a ldns_status with an error or LDNS_STATUS_OK
- */
-ldns_status ldns_rr_new_frm_fp(ldns_rr **rr, FILE *fp, uint32_t *default_ttl, ldns_rdf **origin, ldns_rdf **prev);
-
-/**
- * creates a new rr from a file containing a string.
- * \param[out] rr the new rr
- * \param[in] fp the file pointer to use
- * \param[in] default_ttl a default ttl for the rr. If NULL DEF_TTL will be used
- * the pointer will be updated if the file contains a $TTL directive
- * \param[in] origin when the owner is relative add this
- * the pointer will be updated if the file contains a $ORIGIN directive
- * The caller must ldns_rdf_deep_free it.
- * \param[in] line_nr pointer to an integer containing the current line number (for debugging purposes)
- * \param[in] prev when the owner is whitespaces use this as the * ownername
- * the pointer will be updated after the call
- * The caller must ldns_rdf_deep_free it.
- * \return a ldns_status with an error or LDNS_STATUS_OK
- */
-ldns_status ldns_rr_new_frm_fp_l(ldns_rr **rr, FILE *fp, uint32_t *default_ttl, ldns_rdf **origin, ldns_rdf **prev, int *line_nr);
-
-/**
- * sets the owner in the rr structure.
- * \param[in] *rr rr to operate on
- * \param[in] *owner set to this owner
- * \return void
- */
-void ldns_rr_set_owner(ldns_rr *rr, ldns_rdf *owner);
-
-/**
- * sets the question flag in the rr structure.
- * \param[in] *rr rr to operate on
- * \param[in] question question flag
- * \return void
- */
-void ldns_rr_set_question(ldns_rr *rr, bool question);
-
-/**
- * sets the ttl in the rr structure.
- * \param[in] *rr rr to operate on
- * \param[in] ttl set to this ttl
- * \return void
- */
-void ldns_rr_set_ttl(ldns_rr *rr, uint32_t ttl);
-
-/**
- * sets the rd_count in the rr.
- * \param[in] *rr rr to operate on
- * \param[in] count set to this count
- * \return void
- */
-void ldns_rr_set_rd_count(ldns_rr *rr, size_t count);
-
-/**
- * sets the type in the rr.
- * \param[in] *rr rr to operate on
- * \param[in] rr_type set to this type
- * \return void
- */
-void ldns_rr_set_type(ldns_rr *rr, ldns_rr_type rr_type);
-
-/**
- * sets the class in the rr.
- * \param[in] *rr rr to operate on
- * \param[in] rr_class set to this class
- * \return void
- */
-void ldns_rr_set_class(ldns_rr *rr, ldns_rr_class rr_class);
-
-/**
- * sets a rdf member, it will be set on the
- * position given. The old value is returned, like pop.
- * \param[in] *rr the rr to operate on
- * \param[in] *f the rdf to set
- * \param[in] position the position the set the rdf
- * \return the old value in the rr, NULL on failyre
- */
-ldns_rdf* ldns_rr_set_rdf(ldns_rr *rr, const ldns_rdf *f, size_t position);
-
-/**
- * sets rd_field member, it will be
- * placed in the next available spot.
- * \param[in] *rr rr to operate on
- * \param[in] *f the data field member to set
- * \return bool
- */
-bool ldns_rr_push_rdf(ldns_rr *rr, const ldns_rdf *f);
-
-/**
- * removes a rd_field member, it will be
- * popped from the last position.
- * \param[in] *rr rr to operate on
- * \return rdf which was popped (null if nothing)
- */
-ldns_rdf* ldns_rr_pop_rdf(ldns_rr *rr);
-
-/**
- * returns the rdata field member counter.
- * \param[in] *rr rr to operate on
- * \param[in] nr the number of the rdf to return
- * \return ldns_rdf *
- */
-ldns_rdf* ldns_rr_rdf(const ldns_rr *rr, size_t nr);
-
-/**
- * returns the owner name of an rr structure.
- * \param[in] *rr rr to operate on
- * \return ldns_rdf *
- */
-ldns_rdf* ldns_rr_owner(const ldns_rr *rr);
-
-/**
- * returns the question flag of an rr structure.
- * \param[in] *rr rr to operate on
- * \return bool true if question
- */
-bool ldns_rr_is_question(const ldns_rr *rr);
-
-/**
- * returns the ttl of an rr structure.
- * \param[in] *rr the rr to read from
- * \return the ttl of the rr
- */
-uint32_t ldns_rr_ttl(const ldns_rr *rr);
-
-/**
- * returns the rd_count of an rr structure.
- * \param[in] *rr the rr to read from
- * \return the rd count of the rr
- */
-size_t ldns_rr_rd_count(const ldns_rr *rr);
-
-/**
- * returns the type of the rr.
- * \param[in] *rr the rr to read from
- * \return the type of the rr
- */
-ldns_rr_type ldns_rr_get_type(const ldns_rr *rr);
-
-/**
- * returns the class of the rr.
- * \param[in] *rr the rr to read from
- * \return the class of the rr
- */
-ldns_rr_class ldns_rr_get_class(const ldns_rr *rr);
-
-/* rr_lists */
-
-/**
- * returns the number of rr's in an rr_list.
- * \param[in] rr_list the rr_list to read from
- * \return the number of rr's
- */
-size_t ldns_rr_list_rr_count(const ldns_rr_list *rr_list);
-
-/**
- * sets the number of rr's in an rr_list.
- * \param[in] rr_list the rr_list to set the count on
- * \param[in] count the number of rr in this list
- * \return void
- */
-void ldns_rr_list_set_rr_count(ldns_rr_list *rr_list, size_t count);
-
-/**
- * set a rr on a specific index in a ldns_rr_list
- * \param[in] rr_list the rr_list to use
- * \param[in] r the rr to set
- * \param[in] count index into the rr_list
- * \return the old rr which was stored in the rr_list, or
- * NULL is the index was too large
- * set a specific rr */
-ldns_rr * ldns_rr_list_set_rr(ldns_rr_list *rr_list, const ldns_rr *r, size_t count);
-
-/**
- * returns a specific rr of an rrlist.
- * \param[in] rr_list the rr_list to read from
- * \param[in] nr return this rr
- * \return the rr at position nr
- */
-ldns_rr* ldns_rr_list_rr(const ldns_rr_list *rr_list, size_t nr);
-
-/**
- * creates a new rr_list structure.
- * \return a new rr_list structure
- */
-ldns_rr_list* ldns_rr_list_new(void);
-
-/**
- * frees an rr_list structure.
- * \param[in] rr_list the list to free
- */
-void ldns_rr_list_free(ldns_rr_list *rr_list);
-
-/**
- * frees an rr_list structure and all rrs contained therein.
- * \param[in] rr_list the list to free
- */
-void ldns_rr_list_deep_free(ldns_rr_list *rr_list);
-
-/**
- * concatenates two ldns_rr_lists together. This modifies
- * *left (to extend it and add the pointers from *right).
- * \param[in] left the leftside
- * \param[in] right the rightside
- * \return a left with right concatenated to it
- */
-bool ldns_rr_list_cat(ldns_rr_list *left, const ldns_rr_list *right);
-
-/**
- * concatenates two ldns_rr_lists together, but makes clones of the rr's
- * (instead of pointer copying).
- * \param[in] left the leftside
- * \param[in] right the rightside
- * \return a new rr_list with leftside/rightside concatenated
- */
-ldns_rr_list* ldns_rr_list_cat_clone(const ldns_rr_list *left, const ldns_rr_list *right);
-
-/**
- * pushes an rr to an rrlist.
- * \param[in] rr_list the rr_list to push to
- * \param[in] rr the rr to push
- * \return false on error, otherwise true
- */
-bool ldns_rr_list_push_rr(ldns_rr_list *rr_list, const ldns_rr *rr);
-
-/**
- * pushes an rr_list to an rrlist.
- * \param[in] rr_list the rr_list to push to
- * \param[in] push_list the rr_list to push
- * \return false on error, otherwise true
- */
-bool ldns_rr_list_push_rr_list(ldns_rr_list *rr_list, const ldns_rr_list *push_list);
-
-/**
- * pops the last rr from an rrlist.
- * \param[in] rr_list the rr_list to pop from
- * \return NULL if nothing to pop. Otherwise the popped RR
- */
-ldns_rr* ldns_rr_list_pop_rr(ldns_rr_list *rr_list);
-
-/**
- * pops an rr_list of size s from an rrlist.
- * \param[in] rr_list the rr_list to pop from
- * \param[in] size the number of rr's to pop
- * \return NULL if nothing to pop. Otherwise the popped rr_list
- */
-ldns_rr_list* ldns_rr_list_pop_rr_list(ldns_rr_list *rr_list, size_t size);
-
-/**
- * returns true if the given rr is one of the rrs in the
- * list, or if it is equal to one
- * \param[in] rr_list the rr_list to check
- * \param[in] rr the rr to check
- * \return true if rr_list contains rr, false otherwise
- */
-bool ldns_rr_list_contains_rr(const ldns_rr_list *rr_list, const ldns_rr *rr);
-
-/**
- * checks if an rr_list is a rrset.
- * \param[in] rr_list the rr_list to check
- * \return true if it is an rrset otherwise false
- */
-bool ldns_is_rrset(const ldns_rr_list *rr_list);
-
-/**
- * pushes an rr to an rrset (which really are rr_list's).
- * \param[in] *rr_list the rrset to push the rr to
- * \param[in] *rr the rr to push
- * \return true if the push succeeded otherwise false
- */
-bool ldns_rr_set_push_rr(ldns_rr_list *rr_list, ldns_rr *rr);
-
-/**
- * pops the last rr from an rrset. This function is there only
- * for the symmetry.
- * \param[in] rr_list the rr_list to pop from
- * \return NULL if nothing to pop. Otherwise the popped RR
- *
- */
-ldns_rr* ldns_rr_set_pop_rr(ldns_rr_list *rr_list);
-
-/**
- * pops the first rrset from the list,
- * the list must be sorted, so that all rr's from each rrset
- * are next to each other
- */
-ldns_rr_list *ldns_rr_list_pop_rrset(ldns_rr_list *rr_list);
-
-
-/**
- * retrieves a rrtype by looking up its name.
- * \param[in] name a string with the name
- * \return the type which corresponds with the name
- */
-ldns_rr_type ldns_get_rr_type_by_name(const char *name);
-
-/**
- * retrieves a class by looking up its name.
- * \param[in] name string with the name
- * \return the cass which corresponds with the name
- */
-ldns_rr_class ldns_get_rr_class_by_name(const char *name);
-
-/**
- * clones a rr and all its data
- * \param[in] rr the rr to clone
- * \return the new rr or NULL on failure
- */
-ldns_rr* ldns_rr_clone(const ldns_rr *rr);
-
-/**
- * clones an rrlist.
- * \param[in] rrlist the rrlist to clone
- * \return the cloned rr list
- */
-ldns_rr_list* ldns_rr_list_clone(const ldns_rr_list *rrlist);
-
-/**
- * sorts an rr_list (canonical wire format). the sorting is done inband.
- * \param[in] unsorted the rr_list to be sorted
- * \return void
- */
-void ldns_rr_list_sort(ldns_rr_list *unsorted);
-
-/**
- * compares two rrs. The TTL is not looked at.
- * \param[in] rr1 the first one
- * \param[in] rr2 the second one
- * \return 0 if equal
- * -1 if rr1 comes before rr2
- * +1 if rr2 comes before rr1
- */
-int ldns_rr_compare(const ldns_rr *rr1, const ldns_rr *rr2);
-
-/**
- * compares two rrs, up to the rdata.
- * \param[in] rr1 the first one
- * \param[in] rr2 the second one
- * \return 0 if equal
- * -1 if rr1 comes before rr2
- * +1 if rr2 comes before rr1
- */
-int ldns_rr_compare_no_rdata(const ldns_rr *rr1, const ldns_rr *rr2);
-
-/**
- * compares the wireformat of two rrs, contained in the given buffers.
- * \param[in] rr1_buf the first one
- * \param[in] rr2_buf the second one
- * \return 0 if equal
- * -1 if rr1_buf comes before rr2_buf
- * +1 if rr2_buf comes before rr1_buf
- */
-int ldns_rr_compare_wire(const ldns_buffer *rr1_buf, const ldns_buffer *rr2_buf);
-
-/**
- * returns true of the given rr's are equal.
- * Also returns true if one record is a DS that represents the
- * same DNSKEY record as the other record
- * \param[in] rr1 the first rr
- * \param[in] rr2 the second rr
- * \return true if equal otherwise false
- */
-bool ldns_rr_compare_ds(const ldns_rr *rr1, const ldns_rr *rr2);
-
-/**
- * compares two rr listss.
- * \param[in] rrl1 the first one
- * \param[in] rrl2 the second one
- * \return 0 if equal
- * -1 if rrl1 comes before rrl2
- * +1 if rrl2 comes before rrl1
- */
-int ldns_rr_list_compare(const ldns_rr_list *rrl1, const ldns_rr_list *rrl2);
-
-/**
- * calculates the uncompressed size of an RR.
- * \param[in] r the rr to operate on
- * \return size of the rr
- */
-size_t ldns_rr_uncompressed_size(const ldns_rr *r);
-
-/**
- * converts each dname in a rr to its canonical form.
- * \param[in] rr the rr to work on
- * \return void
- */
-void ldns_rr2canonical(ldns_rr *rr);
-
-/**
- * converts each dname in each rr in a rr_list to its canonical form.
- * \param[in] rr_list the rr_list to work on
- * \return void
- */
-void ldns_rr_list2canonical(const ldns_rr_list *rr_list);
-
-/**
- * counts the number of labels of the ownername.
- * \param[in] rr count the labels of this rr
- * \return the number of labels
- */
-uint8_t ldns_rr_label_count(const ldns_rr *rr);
-
-/**
- * returns the resource record descriptor for the given rr type.
- *
- * \param[in] type the type value of the rr type
- *\return the ldns_rr_descriptor for this type
- */
-const ldns_rr_descriptor *ldns_rr_descript(uint16_t type);
-
-/**
- * returns the minimum number of rdata fields of the rr type this descriptor describes.
- *
- * \param[in] descriptor for an rr type
- * \return the minimum number of rdata fields
- */
-size_t ldns_rr_descriptor_minimum(const ldns_rr_descriptor *descriptor);
-
-/**
- * returns the maximum number of rdata fields of the rr type this descriptor describes.
- *
- * \param[in] descriptor for an rr type
- * \return the maximum number of rdata fields
- */
-size_t ldns_rr_descriptor_maximum(const ldns_rr_descriptor *descriptor);
-
-/**
- * returns the rdf type for the given rdata field number of the rr type for the given descriptor.
- *
- * \param[in] descriptor for an rr type
- * \param[in] field the field number
- * \return the rdf type for the field
- */
-ldns_rdf_type ldns_rr_descriptor_field_type(const ldns_rr_descriptor *descriptor, size_t field);
-
-/**
- * Return the rr_list which matches the rdf at position field. Think
- * type-covered stuff for RRSIG
- *
- * \param[in] l the rr_list to look in
- * \param[in] r the rdf to use for the comparison
- * \param[in] pos at which position can we find the rdf
- *
- * \return a new rr list with only the RRs that match
- *
- */
-ldns_rr_list *ldns_rr_list_subtype_by_rdf(const ldns_rr_list *l, const ldns_rdf *r, size_t pos);
-
-/**
- * convert an rdf of type LDNS_RDF_TYPE_TYPE to an actual
- * LDNS_RR_TYPE. This is useful in the case when inspecting
- * the rrtype covered field of an RRSIG.
- * \param[in] rd the rdf to look at
- * \return a ldns_rr_type with equivalent LDNS_RR_TYPE
- *
- */
-ldns_rr_type ldns_rdf2rr_type(const ldns_rdf *rd);
-
-/**
- * Returns the type of the first element of the RR
- * If there are no elements present, 0 is returned
- *
- * \param[in] rr_list The rr list
- * \return rr_type of the first element, or 0 if the list is empty
- */
-ldns_rr_type
-ldns_rr_list_type(const ldns_rr_list *rr_list);
-
-/**
- * Returns the owner domain name rdf of the first element of the RR
- * If there are no elements present, NULL is returned
- *
- * \param[in] rr_list The rr list
- * \return dname of the first element, or NULL if the list is empty
- */
-ldns_rdf *
-ldns_rr_list_owner(const ldns_rr_list *rr_list);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_RR_H */
diff --git a/ldns/ldns/rr_functions.h b/ldns/ldns/rr_functions.h
deleted file mode 100644
index 09a28dd..0000000
--- a/ldns/ldns/rr_functions.h
+++ /dev/null
@@ -1,363 +0,0 @@
-/*
- * rr_functions.h
- *
- * the .h file with defs for the per rr
- * functions
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2005-2006
- *
- * See the file LICENSE for the license
- */
-#ifndef LDNS_RR_FUNCTIONS_H
-#define LDNS_RR_FUNCTIONS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \file
- *
- * Defines some extra convenience functions for ldns_rr structures
- */
-
-/* A / AAAA */
-/**
- * returns the address of a LDNS_RR_TYPE_A rr
- * \param[in] r the resource record
- * \return a ldns_rdf* with the address or NULL on failure
- */
-ldns_rdf* ldns_rr_a_address(const ldns_rr *r);
-
-/**
- * sets the address of a LDNS_RR_TYPE_A rr
- * \param[in] r the rr to use
- * \param[in] f the address to set
- * \return true on success, false otherwise
- */
-bool ldns_rr_a_set_address(ldns_rr *r, ldns_rdf *f);
-
-/* NS */
-/**
- * returns the name of a LDNS_RR_TYPE_NS rr
- * \param[in] r the resource record
- * \return a ldns_rdf* with the name or NULL on failure
- */
-ldns_rdf* ldns_rr_ns_nsdname(const ldns_rr *r);
-
-/* MX */
-/**
- * returns the mx pref. of a LDNS_RR_TYPE_MX rr
- * \param[in] r the resource record
- * \return a ldns_rdf* with the preference or NULL on failure
- */
-ldns_rdf* ldns_rr_mx_preference(const ldns_rr *r);
-/**
- * returns the mx host of a LDNS_RR_TYPE_MX rr
- * \param[in] r the resource record
- * \return a ldns_rdf* with the name of the MX host or NULL on failure
- */
-ldns_rdf* ldns_rr_mx_exchange(const ldns_rr *r);
-
-/* RRSIG */
-/**
- * returns the type covered of a LDNS_RR_TYPE_RRSIG rr
- * \param[in] r the resource record
- * \return a ldns_rdf* with the type covered or NULL on failure
- */
-ldns_rdf* ldns_rr_rrsig_typecovered(const ldns_rr *r);
-/**
- * sets the typecovered of a LDNS_RR_TYPE_RRSIG rr
- * \param[in] r the rr to use
- * \param[in] f the typecovered to set
- * \return true on success, false otherwise
- */
-bool ldns_rr_rrsig_set_typecovered(ldns_rr *r, ldns_rdf *f);
-/**
- * returns the algorithm of a LDNS_RR_TYPE_RRSIG RR
- * \param[in] r the resource record
- * \return a ldns_rdf* with the algorithm or NULL on failure
- */
-ldns_rdf* ldns_rr_rrsig_algorithm(const ldns_rr *r);
-/**
- * sets the algorithm of a LDNS_RR_TYPE_RRSIG rr
- * \param[in] r the rr to use
- * \param[in] f the algorithm to set
- * \return true on success, false otherwise
- */
-bool ldns_rr_rrsig_set_algorithm(ldns_rr *r, ldns_rdf *f);
-/**
- * returns the number of labels of a LDNS_RR_TYPE_RRSIG RR
- * \param[in] r the resource record
- * \return a ldns_rdf* with the number of labels or NULL on failure
- */
-ldns_rdf *ldns_rr_rrsig_labels(const ldns_rr *r);
-/**
- * sets the number of labels of a LDNS_RR_TYPE_RRSIG rr
- * \param[in] r the rr to use
- * \param[in] f the number of labels to set
- * \return true on success, false otherwise
- */
-bool ldns_rr_rrsig_set_labels(ldns_rr *r, ldns_rdf *f);
-/**
- * returns the original TTL of a LDNS_RR_TYPE_RRSIG RR
- * \param[in] r the resource record
- * \return a ldns_rdf* with the original TTL or NULL on failure
- */
-ldns_rdf* ldns_rr_rrsig_origttl(const ldns_rr *r);
-/**
- * sets the original TTL of a LDNS_RR_TYPE_RRSIG rr
- * \param[in] r the rr to use
- * \param[in] f the original TTL to set
- * \return true on success, false otherwise
- */
-bool ldns_rr_rrsig_set_origttl(ldns_rr *r, ldns_rdf *f);
-/**
- * returns the expiration time of a LDNS_RR_TYPE_RRSIG RR
- * \param[in] r the resource record
- * \return a ldns_rdf* with the expiration time or NULL on failure
- */
-ldns_rdf* ldns_rr_rrsig_expiration(const ldns_rr *r);
-/**
- * sets the expireation date of a LDNS_RR_TYPE_RRSIG rr
- * \param[in] r the rr to use
- * \param[in] f the expireation date to set
- * \return true on success, false otherwise
- */
-bool ldns_rr_rrsig_set_expiration(ldns_rr *r, ldns_rdf *f);
-/**
- * returns the inception time of a LDNS_RR_TYPE_RRSIG RR
- * \param[in] r the resource record
- * \return a ldns_rdf* with the inception time or NULL on failure
- */
-ldns_rdf* ldns_rr_rrsig_inception(const ldns_rr *r);
-/**
- * sets the inception date of a LDNS_RR_TYPE_RRSIG rr
- * \param[in] r the rr to use
- * \param[in] f the inception date to set
- * \return true on success, false otherwise
- */
-bool ldns_rr_rrsig_set_inception(ldns_rr *r, ldns_rdf *f);
-/**
- * returns the keytag of a LDNS_RR_TYPE_RRSIG RR
- * \param[in] r the resource record
- * \return a ldns_rdf* with the keytag or NULL on failure
- */
-ldns_rdf* ldns_rr_rrsig_keytag(const ldns_rr *r);
-/**
- * sets the keytag of a LDNS_RR_TYPE_RRSIG rr
- * \param[in] r the rr to use
- * \param[in] f the keytag to set
- * \return true on success, false otherwise
- */
-bool ldns_rr_rrsig_set_keytag(ldns_rr *r, ldns_rdf *f);
-/**
- * returns the signers name of a LDNS_RR_TYPE_RRSIG RR
- * \param[in] r the resource record
- * \return a ldns_rdf* with the signers name or NULL on failure
- */
-ldns_rdf* ldns_rr_rrsig_signame(const ldns_rr *r);
-/**
- * sets the signers name of a LDNS_RR_TYPE_RRSIG rr
- * \param[in] r the rr to use
- * \param[in] f the signers name to set
- * \return true on success, false otherwise
- */
-bool ldns_rr_rrsig_set_signame(ldns_rr *r, ldns_rdf *f);
-/**
- * returns the signature data of a LDNS_RR_TYPE_RRSIG RR
- * \param[in] r the resource record
- * \return a ldns_rdf* with the signature data or NULL on failure
- */
-ldns_rdf* ldns_rr_rrsig_sig(const ldns_rr *r);
-/**
- * sets the signature data of a LDNS_RR_TYPE_RRSIG rr
- * \param[in] r the rr to use
- * \param[in] f the signature data to set
- * \return true on success, false otherwise
- */
-bool ldns_rr_rrsig_set_sig(ldns_rr *r, ldns_rdf *f);
-
-/* DNSKEY */
-/**
- * returns the flags of a LDNS_RR_TYPE_DNSKEY rr
- * \param[in] r the resource record
- * \return a ldns_rdf* with the flags or NULL on failure
- */
-ldns_rdf* ldns_rr_dnskey_flags(const ldns_rr *r);
-/**
- * sets the flags of a LDNS_RR_TYPE_DNSKEY rr
- * \param[in] r the rr to use
- * \param[in] f the flags to set
- * \return true on success, false otherwise
- */
-bool ldns_rr_dnskey_set_flags(ldns_rr *r, ldns_rdf *f);
-/**
- * returns the protocol of a LDNS_RR_TYPE_DNSKEY rr
- * \param[in] r the resource record
- * \return a ldns_rdf* with the protocol or NULL on failure
- */
-ldns_rdf* ldns_rr_dnskey_protocol(const ldns_rr *r);
-/**
- * sets the protocol of a LDNS_RR_TYPE_DNSKEY rr
- * \param[in] r the rr to use
- * \param[in] f the protocol to set
- * \return true on success, false otherwise
- */
-bool ldns_rr_dnskey_set_protocol(ldns_rr *r, ldns_rdf *f);
-/**
- * returns the algorithm of a LDNS_RR_TYPE_DNSKEY rr
- * \param[in] r the resource record
- * \return a ldns_rdf* with the algorithm or NULL on failure
- */
-ldns_rdf* ldns_rr_dnskey_algorithm(const ldns_rr *r);
-/**
- * sets the algorithm of a LDNS_RR_TYPE_DNSKEY rr
- * \param[in] r the rr to use
- * \param[in] f the algorithm to set
- * \return true on success, false otherwise
- */
-bool ldns_rr_dnskey_set_algorithm(ldns_rr *r, ldns_rdf *f);
-/**
- * returns the key data of a LDNS_RR_TYPE_DNSKEY rr
- * \param[in] r the resource record
- * \return a ldns_rdf* with the key data or NULL on failure
- */
-ldns_rdf* ldns_rr_dnskey_key(const ldns_rr *r);
-/**
- * sets the key data of a LDNS_RR_TYPE_DNSKEY rr
- * \param[in] r the rr to use
- * \param[in] f the key data to set
- * \return true on success, false otherwise
- */
-bool ldns_rr_dnskey_set_key(ldns_rr *r, ldns_rdf *f);
-
-/**
- * get the length of the keydata in bits
- * \param[in] keydata the raw key data
- * \param[in] len the length of the keydata
- * \param[in] alg the cryptographic algorithm this is a key for
- * \return the keysize in bits, or 0 on error
- */
-size_t ldns_rr_dnskey_key_size_raw(const unsigned char *keydata,
- const size_t len,
- const ldns_algorithm alg);
-
-/**
- * get the length of the keydata in bits
- * \param[in] key the key rr to use
- * \return the keysize in bits
- */
-size_t ldns_rr_dnskey_key_size(const ldns_rr *key);
-
-/**
- * The type of function to be passed to ldns_rr_soa_increment_func,
- * ldns_rr_soa_increment_func_data or ldns_rr_soa_increment_int.
- * The function will be called with as the first argument the current serial
- * number of the SOA RR to be updated, and as the second argument a value
- * given when calling ldns_rr_soa_increment_func_data or
- * ldns_rr_soa_increment_int. With ldns_rr_soa_increment_int the pointer
- * value holds the integer value passed to ldns_rr_soa_increment_int,
- * and it should be cast to intptr_t to be used as an integer by the
- * serial modifying function.
- */
-typedef uint32_t (*ldns_soa_serial_increment_func_t)(uint32_t, void*);
-
-/**
- * Function to be used with dns_rr_soa_increment_func_int, to set the soa
- * serial number.
- * \param[in] unused the (unused) current serial number.
- * \param[in] data the serial number to be set.
- */
-uint32_t ldns_soa_serial_identity(uint32_t unused, void *data);
-
-/**
- * Function to be used with dns_rr_soa_increment_func, to increment the soa
- * serial number with one.
- * \param[in] s the current serial number.
- * \param[in] unused unused.
- */
-uint32_t ldns_soa_serial_increment(uint32_t s, void *unused);
-
-/**
- * Function to be used with dns_rr_soa_increment_func_int, to increment the soa
- * serial number with a certain amount.
- * \param[in] s the current serial number.
- * \param[in] data the amount to add to the current serial number.
- */
-uint32_t ldns_soa_serial_increment_by(uint32_t s, void *data);
-
-/**
- * Function to be used with ldns_rr_soa_increment_func or
- * ldns_rr_soa_increment_func_int to set the soa serial to the number of
- * seconds since unix epoch (1-1-1970 00:00).
- * When data is given (i.e. the function is called via
- * ldns_rr_soa_increment_func_int), it is used as the current time.
- * When the resulting serial number is smaller than the current serial number,
- * the current serial number is increased by one.
- * \param[in] s the current serial number.
- * \param[in] data the time in seconds since 1-1-1970 00:00
- */
-uint32_t ldns_soa_serial_unixtime(uint32_t s, void *data);
-
-/**
- * Function to be used with ldns_rr_soa_increment_func or
- * ldns_rr_soa_increment_func_int to set the soa serial to the current date
- * succeeded by a two digit iteration (datecounter).
- * When data is given (i.e. the function is called via
- * ldns_rr_soa_increment_func_int), it is used as the current time.
- * When the resulting serial number is smaller than the current serial number,
- * the current serial number is increased by one.
- * \param[in] s the current serial number.
- * \param[in] data the time in seconds since 1-1-1970 00:00
- */
-uint32_t ldns_soa_serial_datecounter(uint32_t s, void *data);
-
-/**
- * Increment the serial number of the given SOA by one.
- * \param[in] soa The soa rr to be incremented
- */
-void ldns_rr_soa_increment(
- ldns_rr *soa);
-
-/**
- * Increment the serial number of the given SOA with the given function.
- * Included functions to be used here are: ldns_rr_soa_increment,
- * ldns_soa_serial_unixtime and ldns_soa_serial_datecounter.
- * \param[in] soa The soa rr to be incremented
- * \param[in] f the function to use to increment the soa rr.
- */
-void ldns_rr_soa_increment_func(
- ldns_rr *soa, ldns_soa_serial_increment_func_t f);
-
-/**
- * Increment the serial number of the given SOA with the given function
- * passing it the given data argument.
- * \param[in] soa The soa rr to be incremented
- * \param[in] f the function to use to increment the soa rr.
- * \param[in] data this argument will be passed to f as the second argument.
- */
-void ldns_rr_soa_increment_func_data(
- ldns_rr *soa, ldns_soa_serial_increment_func_t f, void *data);
-
-/**
- * Increment the serial number of the given SOA with the given function
- * using data as an argument for the function.
- * Included functions to be used here are: ldns_soa_serial_identity,
- * ldns_rr_soa_increment_by, ldns_soa_serial_unixtime and
- * ldns_soa_serial_datecounter.
- * \param[in] soa The soa rr to be incremented
- * \param[in] f the function to use to increment the soa rr.
- * \param[in] data this argument will be passed to f as the second argument
- * (by casting it to void*).
- */
-void ldns_rr_soa_increment_func_int(
- ldns_rr *soa, ldns_soa_serial_increment_func_t f, int data);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_RR_FUNCTIONS_H */
diff --git a/ldns/ldns/sha1.h b/ldns/ldns/sha1.h
deleted file mode 100644
index d5b1082..0000000
--- a/ldns/ldns/sha1.h
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef LDNS_SHA1_H
-#define LDNS_SHA1_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define LDNS_SHA1_BLOCK_LENGTH 64
-#define LDNS_SHA1_DIGEST_LENGTH 20
-
-typedef struct {
- uint32_t state[5];
- uint64_t count;
- unsigned char buffer[LDNS_SHA1_BLOCK_LENGTH];
-} ldns_sha1_ctx;
-
-void ldns_sha1_init(ldns_sha1_ctx * context);
-void ldns_sha1_transform(uint32_t state[5], const unsigned char buffer[LDNS_SHA1_BLOCK_LENGTH]);
-void ldns_sha1_update(ldns_sha1_ctx *context, const unsigned char *data, unsigned int len);
-void ldns_sha1_final(unsigned char digest[LDNS_SHA1_DIGEST_LENGTH], ldns_sha1_ctx *context);
-
-/**
- * Convenience function to digest a fixed block of data at once.
- *
- * \param[in] data the data to digest
- * \param[in] data_len the length of data in bytes
- * \param[out] digest the length of data in bytes
- * This pointer MUST have LDNS_SHA1_DIGEST_LENGTH bytes
- * available
- * \return the SHA1 digest of the given data
- */
-unsigned char *ldns_sha1(unsigned char *data, unsigned int data_len, unsigned char *digest);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_SHA1_H */
diff --git a/ldns/ldns/sha2.h b/ldns/ldns/sha2.h
deleted file mode 100644
index 238767a..0000000
--- a/ldns/ldns/sha2.h
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * FILE: sha2.h
- * AUTHOR: Aaron D. Gifford - http://www.aarongifford.com/
- *
- * Copyright (c) 2000-2001, Aaron D. Gifford
- * All rights reserved.
- *
- * Modified by Jelte Jansen to fit in ldns, and not clash with any
- * system-defined SHA code.
- * Changes:
- * - Renamed (external) functions and constants to fit ldns style
- * - Removed uintXX vs. u_intXX smartness, since ldns needs uintXX
- * anyway
- * - BYTE ORDER check replaced by simple ifdef as defined or not by
- * configure.ac
- * - Removed _End and _Data functions
- * - Added ldns_shaX(data, len, digest) functions
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holder nor the names of contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $Id: sha2.h,v 1.1 2001/11/08 00:02:01 adg Exp adg $
- */
-
-#ifndef __LDNS_SHA2_H__
-#define __LDNS_SHA2_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/*
- * Import u_intXX_t size_t type definitions from system headers. You
- * may need to change this, or define these things yourself in this
- * file.
- */
-#include <sys/types.h>
-
-#if LDNS_BUILD_CONFIG_HAVE_INTTYPES_H
-
-#include <inttypes.h>
-
-#endif /* LDNS_BUILD_CONFIG_HAVE_INTTYPES_H */
-
-
-/*** SHA-256/384/512 Various Length Definitions ***********************/
-#define LDNS_SHA256_BLOCK_LENGTH 64
-#define LDNS_SHA256_DIGEST_LENGTH 32
-#define LDNS_SHA256_DIGEST_STRING_LENGTH (LDNS_SHA256_DIGEST_LENGTH * 2 + 1)
-#define LDNS_SHA384_BLOCK_LENGTH 128
-#define LDNS_SHA384_DIGEST_LENGTH 48
-#define LDNS_SHA384_DIGEST_STRING_LENGTH (LDNS_SHA384_DIGEST_LENGTH * 2 + 1)
-#define LDNS_SHA512_BLOCK_LENGTH 128
-#define LDNS_SHA512_DIGEST_LENGTH 64
-#define LDNS_SHA512_DIGEST_STRING_LENGTH (LDNS_SHA512_DIGEST_LENGTH * 2 + 1)
-
-
-/*** SHA-256/384/512 Context Structures *******************************/
-
-typedef struct _ldns_sha256_CTX {
- uint32_t state[8];
- uint64_t bitcount;
- uint8_t buffer[LDNS_SHA256_BLOCK_LENGTH];
-} ldns_sha256_CTX;
-typedef struct _ldns_sha512_CTX {
- uint64_t state[8];
- uint64_t bitcount[2];
- uint8_t buffer[LDNS_SHA512_BLOCK_LENGTH];
-} ldns_sha512_CTX;
-
-typedef ldns_sha512_CTX ldns_sha384_CTX;
-
-
-/*** SHA-256/384/512 Function Prototypes ******************************/
-void ldns_sha256_init(ldns_sha256_CTX *);
-void ldns_sha256_update(ldns_sha256_CTX*, const uint8_t*, size_t);
-void ldns_sha256_final(uint8_t[LDNS_SHA256_DIGEST_LENGTH], ldns_sha256_CTX*);
-
-void ldns_sha384_init(ldns_sha384_CTX*);
-void ldns_sha384_update(ldns_sha384_CTX*, const uint8_t*, size_t);
-void ldns_sha384_final(uint8_t[LDNS_SHA384_DIGEST_LENGTH], ldns_sha384_CTX*);
-
-void ldns_sha512_init(ldns_sha512_CTX*);
-void ldns_sha512_update(ldns_sha512_CTX*, const uint8_t*, size_t);
-void ldns_sha512_final(uint8_t[LDNS_SHA512_DIGEST_LENGTH], ldns_sha512_CTX*);
-
-/**
- * Convenience function to digest a fixed block of data at once.
- *
- * \param[in] data the data to digest
- * \param[in] data_len the length of data in bytes
- * \param[out] digest the length of data in bytes
- * This pointer MUST have LDNS_SHA256_DIGEST_LENGTH bytes
- * available
- * \return the SHA1 digest of the given data
- */
-unsigned char *ldns_sha256(unsigned char *data, unsigned int data_len, unsigned char *digest);
-
-/**
- * Convenience function to digest a fixed block of data at once.
- *
- * \param[in] data the data to digest
- * \param[in] data_len the length of data in bytes
- * \param[out] digest the length of data in bytes
- * This pointer MUST have LDNS_SHA384_DIGEST_LENGTH bytes
- * available
- * \return the SHA1 digest of the given data
- */
-unsigned char *ldns_sha384(unsigned char *data, unsigned int data_len, unsigned char *digest);
-
-/**
- * Convenience function to digest a fixed block of data at once.
- *
- * \param[in] data the data to digest
- * \param[in] data_len the length of data in bytes
- * \param[out] digest the length of data in bytes
- * This pointer MUST have LDNS_SHA512_DIGEST_LENGTH bytes
- * available
- * \return the SHA1 digest of the given data
- */
-unsigned char *ldns_sha512(unsigned char *data, unsigned int data_len, unsigned char *digest);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __LDNS_SHA2_H__ */
diff --git a/ldns/ldns/str2host.h b/ldns/ldns/str2host.h
deleted file mode 100644
index e6f7004..0000000
--- a/ldns/ldns/str2host.h
+++ /dev/null
@@ -1,329 +0,0 @@
-/**
- * str2host.h - conversion from str to the host fmt
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2005-2006
- *
- * See the file LICENSE for the license
- */
-
-#ifndef LDNS_2HOST_H
-#define LDNS_2HOST_H
-
-#include <ldns/common.h>
-#include <ldns/error.h>
-#include <ldns/rr.h>
-#include <ldns/rdata.h>
-#include <ldns/packet.h>
-#include <ldns/buffer.h>
-#include <ctype.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \file
- *
- * Defines functions to convert dns data in presentation format or text files
- * to internal structures.
- */
-
-/**
- * convert a byte into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] bytestr the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_int8(ldns_rdf **rd, const char *bytestr);
-
-/**
- * convert a string to a int16 in wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] shortstr the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_int16(ldns_rdf **rd, const char *shortstr);
-
-/**
- * convert a strings into a 4 byte int in wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] longstr the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_int32(ldns_rdf **rd, const char *longstr);
-
-/**
- * convert a time string to a time value in wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] time the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_time(ldns_rdf **rd, const char *time);
-
-/* convert string with NSEC3 salt to wireformat)
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * return ldns_status
- */
-ldns_status ldns_str2rdf_nsec3_salt(ldns_rdf **rd, const char *nsec3_salt);
-
-/* convert a time period (think TTL's) to wireformat)
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * return ldns_status
- */
-ldns_status ldns_str2rdf_period(ldns_rdf **rd, const char *str);
-
-/**
- * convert str with an A record into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_a(ldns_rdf **rd, const char *str);
-
-/**
- * convert the str with an AAAA record into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_aaaa(ldns_rdf **rd, const char *str);
-
-/**
- * convert a string into wireformat (think txt record)
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted (NULL terminated)
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_str(ldns_rdf **rd, const char *str);
-
-/**
- * convert str with the apl record into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_apl(ldns_rdf **rd, const char *str);
-
-/**
- * convert the string with the b64 data into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_b64(ldns_rdf **rd, const char *str);
-
-/**
- * convert the string with the b32 ext hex data into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_b32_ext(ldns_rdf **rd, const char *str);
-
-/**
- * convert a hex value into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_hex(ldns_rdf **rd, const char *str);
-
-/**
- * convert string with nsec into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_nsec(ldns_rdf **rd, const char *str);
-
-/**
- * convert a rrtype into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_type(ldns_rdf **rd, const char *str);
-
-/**
- * convert string with a classname into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_class(ldns_rdf **rd, const char *str);
-
-/**
- * convert an certificate algorithm value into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_cert_alg(ldns_rdf **rd, const char *str);
-
-/**
- * convert an algorithm value into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_alg(ldns_rdf **rd, const char *str);
-
-/**
- * convert a tlsa certificate usage value into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_certificate_usage(ldns_rdf **rd, const char *str);
-
-/**
- * convert a tlsa selector value into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_selector(ldns_rdf **rd, const char *str);
-
-/**
- * convert a tlsa matching type value into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_matching_type(ldns_rdf **rd, const char *str);
-
-/**
- * convert a string with a unknown RR into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_unknown(ldns_rdf **rd, const char *str);
-
-/**
- * convert string with a protocol service into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_service(ldns_rdf **rd, const char *str);
-
-/**
- * convert a string with a LOC RR into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_loc(ldns_rdf **rd, const char *str);
-
-/**
- * convert string with a WKS RR into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_wks(ldns_rdf **rd, const char *str);
-
-/**
- * convert a str with a NSAP RR into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_nsap(ldns_rdf **rd, const char *str);
-
-/**
- * convert a str with a ATMA RR into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_atma(ldns_rdf **rd, const char *str);
-
-/**
- * convert a str with a IPSECKEY RR into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_ipseckey(ldns_rdf **rd, const char *str);
-
-/**
- * convert a dname string into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_dname(ldns_rdf **rd, const char *str);
-
-/**
- * convert 4 * 16bit hex separated by colons into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_ilnp64(ldns_rdf **rd, const char *str);
-
-/**
- * convert 6 hex bytes separated by dashes into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_eui48(ldns_rdf **rd, const char *str);
-
-/**
- * convert 8 hex bytes separated by dashes into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_eui64(ldns_rdf **rd, const char *str);
-
-/**
- * Convert a non-zero sequence of US-ASCII letters and numbers into wireformat
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_tag(ldns_rdf **rd, const char *str);
-
-/**
- * Convert a <character-string> encoding of the value field as specified
- * [RFC1035], Section 5.1., encoded as one bug chunk of data.
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_long_str(ldns_rdf **rd, const char *str);
-
-/**
- * Convert a "<algorithm> <hit> <pk>" encoding of the value field as specified
- * in Section 6. of [RFC5205], encoded as wireformat as specified in Section 5.
- * of [RFC5205].
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_hip(ldns_rdf **rd, const char *str);
-
-/**
- * Concert a"<precedence> <D-bit> <type> <relay>" encoding
- * of the value field as specified in Section 4.3.1 of
- * [draft-ietf-mboned-driad-amt-discovery], encoded as wireformat as specified in
- * ection 4.2 of [draft-ietf-mboned-driad-amt-discovery]
- * \param[in] rd the rdf where to put the data
- * \param[in] str the string to be converted
- * \return ldns_status
- */
-ldns_status ldns_str2rdf_amtrelay(ldns_rdf **rd, const char *str);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_2HOST_H */
diff --git a/ldns/ldns/tsig.h b/ldns/ldns/tsig.h
deleted file mode 100644
index bba06ea..0000000
--- a/ldns/ldns/tsig.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * tsig.h -- defines for TSIG [RFC2845]
- *
- * Copyright (c) 2005-2008, NLnet Labs. All rights reserved.
- *
- * See LICENSE for the license.
- */
-
-#ifndef LDNS_TSIG_H
-#define LDNS_TSIG_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \file
- *
- * Defines functions for TSIG usage
- */
-
-
-/**
- * Contains credentials for TSIG
-*/
-typedef struct ldns_tsig_credentials_struct
-{
- const char *algorithm;
- const char *keyname;
- const char *keydata;
- /* XXX More eventually. */
-} ldns_tsig_credentials;
-
-const char *ldns_tsig_algorithm(const ldns_tsig_credentials *);
-const char *ldns_tsig_keyname(const ldns_tsig_credentials *);
-const char *ldns_tsig_keydata(const ldns_tsig_credentials *);
-char *ldns_tsig_keyname_clone(const ldns_tsig_credentials *);
-char *ldns_tsig_keydata_clone(const ldns_tsig_credentials *);
-
-/**
- * verifies the tsig rr for the given packet and key.
- * The wire must be given too because tsig does not sign normalized packets.
- * \param[in] pkt the packet to verify
- * \param[in] wire needed to verify the mac
- * \param[in] wire_size size of wire
- * \param[in] key_name the name of the shared key
- * \param[in] key_data the key in base 64 format
- * \param[in] mac original mac
- * \return true if tsig is correct, false if not, or if tsig is not set
- */
-bool ldns_pkt_tsig_verify(ldns_pkt *pkt, const uint8_t *wire, size_t wire_size, const char *key_name, const char *key_data, const ldns_rdf *mac);
-
-/**
- * verifies the tsig rr for the given packet and key.
- * The wire must be given too because tsig does not sign normalized packets.
- * \param[in] pkt the packet to verify
- * \param[in] wire needed to verify the mac
- * \param[in] wire_size size of wire
- * \param[in] key_name the name of the shared key
- * \param[in] key_data the key in base 64 format
- * \param[in] mac original mac
- * \param[in] tsig_timers_only must be zero for the first packet and positive for subsequent packets. If zero, all digest
- components are used to verify the _mac. If non-zero, only the TSIG timers are used to verify the mac.
- * \return true if tsig is correct, false if not, or if tsig is not set
- */
-bool ldns_pkt_tsig_verify_next(ldns_pkt *pkt, const uint8_t *wire, size_t wire_size, const char *key_name, const char *key_data, const ldns_rdf *mac,
- int tsig_timers_only);
-
-/**
- * creates a tsig rr for the given packet and key.
- * \param[in] pkt the packet to sign
- * \param[in] key_name the name of the shared key
- * \param[in] key_data the key in base 64 format
- * \param[in] fudge seconds of error permitted in time signed
- * \param[in] algorithm_name the name of the algorithm used
- * \param[in] query_mac is added to the digest if not NULL (so NULL is for signing queries, not NULL is for signing answers)
- * \return status (OK if success)
- */
-ldns_status ldns_pkt_tsig_sign(ldns_pkt *pkt, const char *key_name, const char *key_data, uint16_t fudge,
- const char *algorithm_name, const ldns_rdf *query_mac);
-
-/**
- * creates a tsig rr for the given packet and key.
- * \param[in] pkt the packet to sign
- * \param[in] key_name the name of the shared key
- * \param[in] key_data the key in base 64 format
- * \param[in] fudge seconds of error permitted in time signed
- * \param[in] algorithm_name the name of the algorithm used
- * \param[in] query_mac is added to the digest if not NULL (so NULL is for signing queries, not NULL is for signing answers)
- * \param[in] tsig_timers_only must be zero for the first packet and positive for subsequent packets. If zero, all digest
- components are used to create the query_mac. If non-zero, only the TSIG timers are used to create the query_mac.
- * \return status (OK if success)
- */
-ldns_status ldns_pkt_tsig_sign_next(ldns_pkt *pkt, const char *key_name, const char *key_data, uint16_t fudge,
- const char *algorithm_name, const ldns_rdf *query_mac, int tsig_timers_only);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_TSIG_H */
diff --git a/ldns/ldns/update.h b/ldns/ldns/update.h
deleted file mode 100644
index 8840d38..0000000
--- a/ldns/ldns/update.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * update.h
- *
- * Functions for RFC 2136 Dynamic Update
- *
- * Copyright (c) 2005-2008, NLnet Labs. All rights reserved.
- *
- * See LICENSE for the license.
- */
-
-/**
- * \file
- *
- * Defines functions to perform UPDATE queries
- */
-
-
-#ifndef LDNS_UPDATE_H
-#define LDNS_UPDATE_H
-
-#include <ldns/resolver.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * create an update packet from zone name, class and the rr lists
- * \param[in] zone_rdf name of the zone
- * The returned packet will take ownership of zone_rdf, so the caller should not free it
- * \param[in] clas zone class
- * \param[in] pr_rrlist list of Prerequisite Section RRs
- * \param[in] up_rrlist list of Updates Section RRs
- * \param[in] ad_rrlist list of Additional Data Section RRs (currently unused)
- * \return the new packet
- */
-ldns_pkt *ldns_update_pkt_new(ldns_rdf *zone_rdf, ldns_rr_class clas, const ldns_rr_list *pr_rrlist, const ldns_rr_list *up_rrlist, const ldns_rr_list *ad_rrlist);
-
-/**
- * add tsig credentials to
- * a packet from a resolver
- * \param[in] p packet to copy to
- * \param[in] r resolver to copy from
- *
- * \return status whether successful or not
- */
-ldns_status ldns_update_pkt_tsig_add(ldns_pkt *p, const ldns_resolver *r);
-
-/* access functions */
-
-/**
- * Get the zo count
- * \param[in] p the packet
- * \return the zo count
- */
-uint16_t ldns_update_zocount(const ldns_pkt *p);
-/**
- * Get the zo count
- * \param[in] p the packet
- * \return the pr count
- */
-uint16_t ldns_update_prcount(const ldns_pkt *p);
-/**
- * Get the zo count
- * \param[in] p the packet
- * \return the up count
- */
-uint16_t ldns_update_upcount(const ldns_pkt *p);
-/**
- * Get the zo count
- * \param[in] p the packet
- * \return the ad count
- */
-uint16_t ldns_update_ad(const ldns_pkt *p);
-/**
- * Set the zo count
- * \param[in] p the packet
- * \param[in] c the zo count to set
- */
-void ldns_update_set_zo(ldns_pkt *p, uint16_t c);
-/**
- * Set the pr count
- * \param[in] p the packet
- * \param[in] c the pr count to set
- */
-void ldns_update_set_prcount(ldns_pkt *p, uint16_t c);
-/**
- * Set the up count
- * \param[in] p the packet
- * \param[in] c the up count to set
- */
-void ldns_update_set_upcount(ldns_pkt *p, uint16_t c);
-/**
- * Set the ad count
- * \param[in] p the packet
- * \param[in] c the ad count to set
- */
-void ldns_update_set_adcount(ldns_pkt *p, uint16_t c);
-
-/* soa functions that need to be configured */
-/*
- * Not sure if we want to keep these like this, therefore
- * not documented
- */
-ldns_status ldns_update_soa_mname(ldns_rdf *zone, ldns_resolver *r, ldns_rr_class c, ldns_rdf **mname);
-/*
- * Not sure if we want to keep these like this, therefore
- * not documented
- */
-ldns_status ldns_update_soa_zone_mname(const char *fqdn, ldns_resolver *r, ldns_rr_class c, ldns_rdf **zone_rdf, ldns_rdf **mname_rdf);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_UPDATE_H */
diff --git a/ldns/ldns/util.h.in b/ldns/ldns/util.h.in
deleted file mode 100644
index 514fcf3..0000000
--- a/ldns/ldns/util.h.in
+++ /dev/null
@@ -1,393 +0,0 @@
-/*
- * util.h
- *
- * helper function header file
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2004
- *
- * See the file LICENSE for the license
- */
-
-#ifndef _UTIL_H
-#define _UTIL_H
-
-@include_inttypes_h@
-@include_systypes_h@
-@include_unistd_h@
-#include <ldns/common.h>
-#include <time.h>
-#include <stdio.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define dprintf(X,Y) fprintf(stderr, (X), (Y))
-/* #define dprintf(X, Y) */
-
-#define LDNS_VERSION "@PACKAGE_VERSION@"
-#define LDNS_REVISION ((@LDNS_VERSION_MAJOR@<<16)|(@LDNS_VERSION_MINOR@<<8)|(@LDNS_VERSION_MICRO@))
-
-/**
- * splint static inline workaround
- */
-#ifdef S_SPLINT_S
-# define INLINE
-#else
-# ifdef SWIG
-# define INLINE static
-# else
-# define INLINE static inline
-# endif
-#endif
-
-/**
- * Memory management macros
- */
-#define LDNS_MALLOC(type) LDNS_XMALLOC(type, 1)
-
-#define LDNS_XMALLOC(type, count) ((type *) malloc((count) * sizeof(type)))
-
-#define LDNS_CALLOC(type, count) ((type *) calloc((count), sizeof(type)))
-
-#define LDNS_REALLOC(ptr, type) LDNS_XREALLOC((ptr), type, 1)
-
-#define LDNS_XREALLOC(ptr, type, count) \
- ((type *) realloc((ptr), (count) * sizeof(type)))
-
-#define LDNS_FREE(ptr) \
- do { free((ptr)); (ptr) = NULL; } while (0)
-
-#define LDNS_DEP printf("DEPRECATED FUNCTION!\n");
-
-/*
- * Copy data allowing for unaligned accesses in network byte order
- * (big endian).
- */
-INLINE uint16_t
-ldns_read_uint16(const void *src)
-{
-#ifdef ALLOW_UNALIGNED_ACCESSES
- return ntohs(*(const uint16_t *) src);
-#else
- const uint8_t *p = (const uint8_t *) src;
- return ((uint16_t) p[0] << 8) | (uint16_t) p[1];
-#endif
-}
-
-INLINE uint32_t
-ldns_read_uint32(const void *src)
-{
-#ifdef ALLOW_UNALIGNED_ACCESSES
- return ntohl(*(const uint32_t *) src);
-#else
- const uint8_t *p = (const uint8_t *) src;
- return ( ((uint32_t) p[0] << 24)
- | ((uint32_t) p[1] << 16)
- | ((uint32_t) p[2] << 8)
- | (uint32_t) p[3]);
-#endif
-}
-
-/*
- * Copy data allowing for unaligned accesses in network byte order
- * (big endian).
- */
-INLINE void
-ldns_write_uint16(void *dst, uint16_t data)
-{
-#ifdef ALLOW_UNALIGNED_ACCESSES
- * (uint16_t *) dst = htons(data);
-#else
- uint8_t *p = (uint8_t *) dst;
- p[0] = (uint8_t) ((data >> 8) & 0xff);
- p[1] = (uint8_t) (data & 0xff);
-#endif
-}
-
-INLINE void
-ldns_write_uint32(void *dst, uint32_t data)
-{
-#ifdef ALLOW_UNALIGNED_ACCESSES
- * (uint32_t *) dst = htonl(data);
-#else
- uint8_t *p = (uint8_t *) dst;
- p[0] = (uint8_t) ((data >> 24) & 0xff);
- p[1] = (uint8_t) ((data >> 16) & 0xff);
- p[2] = (uint8_t) ((data >> 8) & 0xff);
- p[3] = (uint8_t) (data & 0xff);
-#endif
-}
-
-/* warning. */
-INLINE void
-ldns_write_uint64_as_uint48(void *dst, uint64_t data)
-{
- uint8_t *p = (uint8_t *) dst;
- p[0] = (uint8_t) ((data >> 40) & 0xff);
- p[1] = (uint8_t) ((data >> 32) & 0xff);
- p[2] = (uint8_t) ((data >> 24) & 0xff);
- p[3] = (uint8_t) ((data >> 16) & 0xff);
- p[4] = (uint8_t) ((data >> 8) & 0xff);
- p[5] = (uint8_t) (data & 0xff);
-}
-
-
-/**
- * Structure to do a Schwartzian-like transformation, for instance when
- * sorting. If you need a transformation on the objects that are sorted,
- * you can sue this to store the transformed values, so you do not
- * need to do the transformation again for each comparison
- */
-struct ldns_schwartzian_compare_struct {
- void *original_object;
- void *transformed_object;
-};
-
-/** A general purpose lookup table
- *
- * Lookup tables are arrays of (id, name) pairs,
- * So you can for instance lookup the RCODE 3, which is "NXDOMAIN",
- * and vice versa. The lookup tables themselves are defined wherever needed,
- * for instance in \ref host2str.c
- */
-struct ldns_struct_lookup_table {
- int id;
- const char *name;
-};
-typedef struct ldns_struct_lookup_table ldns_lookup_table;
-
-/**
- * Looks up the table entry by name, returns NULL if not found.
- * \param[in] table the lookup table to search in
- * \param[in] name what to search for
- * \return the item found
- */
-ldns_lookup_table *ldns_lookup_by_name(ldns_lookup_table table[],
- const char *name);
-
-/**
- * Looks up the table entry by id, returns NULL if not found.
- * \param[in] table the lookup table to search in
- * \param[in] id what to search for
- * \return the item found
- */
-ldns_lookup_table *ldns_lookup_by_id(ldns_lookup_table table[], int id);
-
-/**
- * Returns the value of the specified bit
- * The bits are counted from left to right, so bit #0 is the
- * left most bit.
- * \param[in] bits array holding the bits
- * \param[in] index to the wanted bit
- * \return
- */
-int ldns_get_bit(uint8_t bits[], size_t index);
-
-
-/**
- * Returns the value of the specified bit
- * The bits are counted from right to left, so bit #0 is the
- * right most bit.
- * \param[in] bits array holding the bits
- * \param[in] index to the wanted bit
- * \return 1 or 0 depending no the bit state
- */
-int ldns_get_bit_r(uint8_t bits[], size_t index);
-
-/**
- * sets the specified bit in the specified byte to
- * 1 if value is true, 0 if false
- * The bits are counted from right to left, so bit #0 is the
- * right most bit.
- * \param[in] byte the bit to set the bit in
- * \param[in] bit_nr the bit to set (0 <= n <= 7)
- * \param[in] value whether to set the bit to 1 or 0
- * \return 1 or 0 depending no the bit state
- */
-void ldns_set_bit(uint8_t *byte, int bit_nr, bool value);
-
-/**
- * Returns the value of a to the power of b
- * (or 1 of b < 1)
- */
-/*@unused@*/
-INLINE long
-ldns_power(long a, long b) {
- long result = 1;
- while (b > 0) {
- if (b & 1) {
- result *= a;
- if (b == 1) {
- return result;
- }
- }
- a *= a;
- b /= 2;
- }
- return result;
-}
-
-/**
- * Returns the int value of the given (hex) digit
- * \param[in] ch the hex char to convert
- * \return the converted decimal value
- */
-int ldns_hexdigit_to_int(char ch);
-
-/**
- * Returns the char (hex) representation of the given int
- * \param[in] ch the int to convert
- * \return the converted hex char
- */
-char ldns_int_to_hexdigit(int ch);
-
-/**
- * Converts a hex string to binary data
- *
- * \param[out] data The binary result is placed here.
- * At least strlen(str)/2 bytes should be allocated
- * \param[in] str The hex string to convert.
- * This string should not contain spaces
- * \return The number of bytes of converted data, or -1 if one of the arguments * is NULL, or -2 if the string length is not an even number
- */
-int
-ldns_hexstring_to_data(uint8_t *data, const char *str);
-
-/**
- * Show the internal library version
- * \return a string with the version in it
- */
-const char * ldns_version(void);
-
-/**
- * Convert TM to seconds since epoch (midnight, January 1st, 1970).
- * Like timegm(3), which is not always available.
- * \param[in] tm a struct tm* with the date
- * \return the seconds since epoch
- */
-time_t ldns_mktime_from_utc(const struct tm *tm);
-
-time_t mktime_from_utc(const struct tm *tm);
-
-/**
- * The function interprets time as the number of seconds since epoch
- * with respect to now using serial arithmitics (rfc1982).
- * That number of seconds is then converted to broken-out time information.
- * This is especially useful when converting the inception and expiration
- * fields of RRSIG records.
- *
- * \param[in] time number of seconds since epoch (midnight, January 1st, 1970)
- * to be intepreted as a serial arithmitics number relative to now.
- * \param[in] now number of seconds since epoch (midnight, January 1st, 1970)
- * to which the time value is compared to determine the final value.
- * \param[out] result the struct with the broken-out time information
- * \return result on success or NULL on error
- */
-struct tm * ldns_serial_arithmitics_gmtime_r(int32_t time, time_t now, struct tm *result);
-
-/**
- * Seed the random function.
- * If the file descriptor is specified, the random generator is seeded with
- * data from that file. If not, /dev/urandom is used.
- *
- * applications should call this if they need entropy data within ldns
- * If openSSL is available, it is automatically seeded from /dev/urandom
- * or /dev/random.
- *
- * If you need more entropy, or have no openssl available, this function
- * MUST be called at the start of the program
- *
- * If openssl *is* available, this function just adds more entropy
- *
- * \param[in] fd a file providing entropy data for the seed
- * \param[in] size the number of bytes to use as entropy data. If this is 0,
- * only the minimal amount is taken (usually 4 bytes)
- * \return 0 if seeding succeeds, 1 if it fails
- */
-int ldns_init_random(FILE *fd, unsigned int size);
-
-/**
- * Get random number.
- * \return random number.
- *
- */
-uint16_t ldns_get_random(void);
-
-/**
- * Encode data as BubbleBabble
- *
- * \param[in] data a pointer to data to be encoded
- * \param[in] len size the number of bytes of data
- * \return a string of BubbleBabble
- */
-char *ldns_bubblebabble(uint8_t *data, size_t len);
-
-
-INLINE time_t ldns_time(time_t *t) { return time(t); }
-
-
-/**
- * calculates the size needed to store the result of b32_ntop
- */
-/*@unused@*/
-INLINE size_t ldns_b32_ntop_calculate_size(size_t src_data_length)
-{
- return src_data_length == 0 ? 0 : ((src_data_length - 1) / 5 + 1) * 8;
-}
-
-INLINE size_t ldns_b32_ntop_calculate_size_no_padding(size_t src_data_length)
-{
- return ((src_data_length + 3) * 8 / 5) - 4;
-}
-
-int ldns_b32_ntop(const uint8_t* src_data, size_t src_data_length,
- char* target_text_buffer, size_t target_text_buffer_size);
-
-int ldns_b32_ntop_extended_hex(const uint8_t* src_data, size_t src_data_length,
- char* target_text_buffer, size_t target_text_buffer_size);
-
-#if ! LDNS_BUILD_CONFIG_HAVE_B32_NTOP
-
-int b32_ntop(const uint8_t* src_data, size_t src_data_length,
- char* target_text_buffer, size_t target_text_buffer_size);
-
-int b32_ntop_extended_hex(const uint8_t* src_data, size_t src_data_length,
- char* target_text_buffer, size_t target_text_buffer_size);
-
-#endif /* ! LDNS_BUILD_CONFIG_HAVE_B32_NTOP */
-
-
-/**
- * calculates the size needed to store the result of b32_pton
- */
-/*@unused@*/
-INLINE size_t ldns_b32_pton_calculate_size(size_t src_text_length)
-{
- return src_text_length * 5 / 8;
-}
-
-int ldns_b32_pton(const char* src_text, size_t src_text_length,
- uint8_t* target_data_buffer, size_t target_data_buffer_size);
-
-int ldns_b32_pton_extended_hex(const char* src_text, size_t src_text_length,
- uint8_t* target_data_buffer, size_t target_data_buffer_size);
-
-#if ! LDNS_BUILD_CONFIG_HAVE_B32_PTON
-
-int b32_pton(const char* src_text, size_t src_text_length,
- uint8_t* target_data_buffer, size_t target_data_buffer_size);
-
-int b32_pton_extended_hex(const char* src_text, size_t src_text_length,
- uint8_t* target_data_buffer, size_t target_data_buffer_size);
-
-#endif /* ! LDNS_BUILD_CONFIG_HAVE_B32_PTON */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !_UTIL_H */
diff --git a/ldns/ldns/wire2host.h b/ldns/ldns/wire2host.h
deleted file mode 100644
index 6a7999c..0000000
--- a/ldns/ldns/wire2host.h
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * wire2host.h - from wire conversion routines
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2005-2006
- *
- * See the file LICENSE for the license
- */
-
-/**
- * \file
- *
- * Contains functions that translate dns data from the wire format (as sent
- * by servers and clients) to the internal structures.
- */
-
-#ifndef LDNS_WIRE2HOST_H
-#define LDNS_WIRE2HOST_H
-
-#include <ldns/rdata.h>
-#include <ldns/common.h>
-#include <ldns/error.h>
-#include <ldns/rr.h>
-#include <ldns/packet.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* The length of the header */
-#define LDNS_HEADER_SIZE 12
-
-/* First octet of flags */
-#define LDNS_RD_MASK 0x01U
-#define LDNS_RD_SHIFT 0
-#define LDNS_RD_WIRE(wirebuf) (*(wirebuf+2) & LDNS_RD_MASK)
-#define LDNS_RD_SET(wirebuf) (*(wirebuf+2) |= LDNS_RD_MASK)
-#define LDNS_RD_CLR(wirebuf) (*(wirebuf+2) &= ~LDNS_RD_MASK)
-
-#define LDNS_TC_MASK 0x02U
-#define LDNS_TC_SHIFT 1
-#define LDNS_TC_WIRE(wirebuf) (*(wirebuf+2) & LDNS_TC_MASK)
-#define LDNS_TC_SET(wirebuf) (*(wirebuf+2) |= LDNS_TC_MASK)
-#define LDNS_TC_CLR(wirebuf) (*(wirebuf+2) &= ~LDNS_TC_MASK)
-
-#define LDNS_AA_MASK 0x04U
-#define LDNS_AA_SHIFT 2
-#define LDNS_AA_WIRE(wirebuf) (*(wirebuf+2) & LDNS_AA_MASK)
-#define LDNS_AA_SET(wirebuf) (*(wirebuf+2) |= LDNS_AA_MASK)
-#define LDNS_AA_CLR(wirebuf) (*(wirebuf+2) &= ~LDNS_AA_MASK)
-
-#define LDNS_OPCODE_MASK 0x78U
-#define LDNS_OPCODE_SHIFT 3
-#define LDNS_OPCODE_WIRE(wirebuf) ((*(wirebuf+2) & LDNS_OPCODE_MASK) >> LDNS_OPCODE_SHIFT)
-#define LDNS_OPCODE_SET(wirebuf, opcode) \
- (*(wirebuf+2) = ((*(wirebuf+2)) & ~LDNS_OPCODE_MASK) | ((opcode) << LDNS_OPCODE_SHIFT))
-
-#define LDNS_QR_MASK 0x80U
-#define LDNS_QR_SHIFT 7
-#define LDNS_QR_WIRE(wirebuf) (*(wirebuf+2) & LDNS_QR_MASK)
-#define LDNS_QR_SET(wirebuf) (*(wirebuf+2) |= LDNS_QR_MASK)
-#define LDNS_QR_CLR(wirebuf) (*(wirebuf+2) &= ~LDNS_QR_MASK)
-
-/* Second octet of flags */
-#define LDNS_RCODE_MASK 0x0fU
-#define LDNS_RCODE_SHIFT 0
-#define LDNS_RCODE_WIRE(wirebuf) (*(wirebuf+3) & LDNS_RCODE_MASK)
-#define LDNS_RCODE_SET(wirebuf, rcode) \
- (*(wirebuf+3) = ((*(wirebuf+3)) & ~LDNS_RCODE_MASK) | (rcode))
-
-#define LDNS_CD_MASK 0x10U
-#define LDNS_CD_SHIFT 4
-#define LDNS_CD_WIRE(wirebuf) (*(wirebuf+3) & LDNS_CD_MASK)
-#define LDNS_CD_SET(wirebuf) (*(wirebuf+3) |= LDNS_CD_MASK)
-#define LDNS_CD_CLR(wirebuf) (*(wirebuf+3) &= ~LDNS_CD_MASK)
-
-#define LDNS_AD_MASK 0x20U
-#define LDNS_AD_SHIFT 5
-#define LDNS_AD_WIRE(wirebuf) (*(wirebuf+3) & LDNS_AD_MASK)
-#define LDNS_AD_SET(wirebuf) (*(wirebuf+3) |= LDNS_AD_MASK)
-#define LDNS_AD_CLR(wirebuf) (*(wirebuf+3) &= ~LDNS_AD_MASK)
-
-#define LDNS_Z_MASK 0x40U
-#define LDNS_Z_SHIFT 6
-#define LDNS_Z_WIRE(wirebuf) (*(wirebuf+3) & LDNS_Z_MASK)
-#define LDNS_Z_SET(wirebuf) (*(wirebuf+3) |= LDNS_Z_MASK)
-#define LDNS_Z_CLR(wirebuf) (*(wirebuf+3) &= ~LDNS_Z_MASK)
-
-#define LDNS_RA_MASK 0x80U
-#define LDNS_RA_SHIFT 7
-#define LDNS_RA_WIRE(wirebuf) (*(wirebuf+3) & LDNS_RA_MASK)
-#define LDNS_RA_SET(wirebuf) (*(wirebuf+3) |= LDNS_RA_MASK)
-#define LDNS_RA_CLR(wirebuf) (*(wirebuf+3) &= ~LDNS_RA_MASK)
-
-/* Query ID */
-#define LDNS_ID_WIRE(wirebuf) (ldns_read_uint16(wirebuf))
-#define LDNS_ID_SET(wirebuf, id) (ldns_write_uint16(wirebuf, id))
-
-/* Counter of the question section */
-#define LDNS_QDCOUNT_OFF 4
-#define LDNS_QDCOUNT(wirebuf) (ldns_read_uint16(wirebuf+LDNS_QDCOUNT_OFF))
-
-/* Counter of the answer section */
-#define LDNS_ANCOUNT_OFF 6
-#define LDNS_ANCOUNT(wirebuf) (ldns_read_uint16(wirebuf+LDNS_ANCOUNT_OFF))
-
-/* Counter of the authority section */
-#define LDNS_NSCOUNT_OFF 8
-#define LDNS_NSCOUNT(wirebuf) (ldns_read_uint16(wirebuf+LDNS_NSCOUNT_OFF))
-
-/* Counter of the additional section */
-#define LDNS_ARCOUNT_OFF 10
-#define LDNS_ARCOUNT(wirebuf) (ldns_read_uint16(wirebuf+LDNS_ARCOUNT_OFF))
-
-/**
- * converts the data on the uint8_t bytearray (in wire format) to a DNS packet.
- * This function will initialize and allocate memory space for the packet
- * structure.
- *
- * \param[in] packet pointer to the structure to hold the packet
- * \param[in] data pointer to the buffer with the data
- * \param[in] len the length of the data buffer (in bytes)
- * \return LDNS_STATUS_OK if everything succeeds, error otherwise
- */
-ldns_status ldns_wire2pkt(ldns_pkt **packet, const uint8_t *data, size_t len);
-
-/**
- * converts the data in the ldns_buffer (in wire format) to a DNS packet.
- * This function will initialize and allocate memory space for the packet
- * structure.
- *
- * \param[in] packet pointer to the structure to hold the packet
- * \param[in] buffer the buffer with the data
- * \return LDNS_STATUS_OK if everything succeeds, error otherwise
- */
-ldns_status ldns_buffer2pkt_wire(ldns_pkt **packet, const ldns_buffer *buffer);
-
-/**
- * converts the data on the uint8_t bytearray (in wire format) to a DNS
- * dname rdata field. This function will initialize and allocate memory
- * space for the dname structure. The length of the wiredata of this rdf
- * is added to the *pos value.
- *
- * \param[in] dname pointer to the structure to hold the rdata value
- * \param[in] wire pointer to the buffer with the data
- * \param[in] max the length of the data buffer (in bytes)
- * \param[in] pos the position of the rdf in the buffer (ie. the number of bytes
- * from the start of the buffer)
- * \return LDNS_STATUS_OK if everything succeeds, error otherwise
- */
-ldns_status ldns_wire2dname(ldns_rdf **dname, const uint8_t *wire, size_t max, size_t *pos);
-
-/**
- * converts the data on the uint8_t bytearray (in wire format) to DNS
- * rdata fields, and adds them to the list of rdfs of the given rr.
- * This function will initialize and allocate memory space for the dname
- * structures.
- * The length of the wiredata of these rdfs is added to the *pos value.
- *
- * All rdfs belonging to the RR are read; the rr should have no rdfs
- * yet. An error is returned if the format cannot be parsed.
- *
- * \param[in] rr pointer to the ldns_rr structure to hold the rdata value
- * \param[in] wire pointer to the buffer with the data
- * \param[in] max the length of the data buffer (in bytes)
- * \param[in] pos the position of the rdf in the buffer (ie. the number of bytes
- * from the start of the buffer)
- * \return LDNS_STATUS_OK if everything succeeds, error otherwise
- */
-ldns_status ldns_wire2rdf(ldns_rr *rr, const uint8_t *wire, size_t max, size_t *pos);
-
-/**
- * converts the data on the uint8_t bytearray (in wire format) to a DNS
- * resource record.
- * This function will initialize and allocate memory space for the rr
- * structure.
- * The length of the wiredata of this rr is added to the *pos value.
- *
- * \param[in] rr pointer to the structure to hold the rdata value
- * \param[in] wire pointer to the buffer with the data
- * \param[in] max the length of the data buffer (in bytes)
- * \param[in] pos the position of the rr in the buffer (ie. the number of bytes
- * from the start of the buffer)
- * \param[in] section the section in the packet the rr is meant for
- * \return LDNS_STATUS_OK if everything succeeds, error otherwise
- */
-ldns_status ldns_wire2rr(ldns_rr **rr, const uint8_t *wire, size_t max, size_t *pos, ldns_pkt_section section);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_WIRE2HOST_H */
diff --git a/ldns/ldns/zone.h b/ldns/ldns/zone.h
deleted file mode 100644
index f30d7c4..0000000
--- a/ldns/ldns/zone.h
+++ /dev/null
@@ -1,176 +0,0 @@
-/**
- * zone.h
- *
- * zone definitions
- * - what is it
- * - get_glue function
- * - search etc
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2005-2006
- *
- * See the file LICENSE for the license
- */
-
-/**
- * \file
- *
- * Defines the ldns_zone structure and functions to manipulate it.
- */
-
-
-#ifndef LDNS_ZONE_H
-#define LDNS_ZONE_H
-
-#include <ldns/common.h>
-#include <ldns/rdata.h>
-#include <ldns/rr.h>
-#include <ldns/error.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * DNS Zone
- *
- * A list of RR's with some
- * extra information which comes from the SOA RR
- * Note: nothing has been done to make this efficient (yet).
- */
-struct ldns_struct_zone
-{
- /** the soa defines a zone */
- ldns_rr *_soa;
- /* basically a zone is a list of rr's */
- ldns_rr_list *_rrs;
- /* we could change this to be a b-tree etc etc todo */
-};
-typedef struct ldns_struct_zone ldns_zone;
-
-/**
- * create a new ldns_zone structure
- * \return a pointer to a ldns_zone structure
- */
-ldns_zone * ldns_zone_new(void);
-
-/**
- * Return the soa record of a zone
- * \param[in] z the zone to read from
- * \return the soa record in the zone
- */
-ldns_rr * ldns_zone_soa(const ldns_zone *z);
-
-/**
- * Returns the number of resource records in the zone, NOT counting the SOA record
- * \param[in] z the zone to read from
- * \return the number of rr's in the zone
- */
-size_t ldns_zone_rr_count(const ldns_zone *z);
-
-/**
- * Set the zone's soa record
- * \param[in] z the zone to put the new soa in
- * \param[in] soa the soa to set
- */
-void ldns_zone_set_soa(ldns_zone *z, ldns_rr *soa);
-
-/**
- * Get a list of a zone's content. Note that the SOA
- * isn't included in this list. You need to get the
- * with ldns_zone_soa.
- * \param[in] z the zone to read from
- * \return the rrs from this zone
- */
-ldns_rr_list * ldns_zone_rrs(const ldns_zone *z);
-
-/**
- * Set the zone's contents
- * \param[in] z the zone to put the new soa in
- * \param[in] rrlist the rrlist to use
- */
-void ldns_zone_set_rrs(ldns_zone *z, ldns_rr_list *rrlist);
-
-/**
- * push an rrlist to a zone structure. This function use pointer
- * copying, so the rr_list structure inside z is modified!
- * \param[in] z the zone to add to
- * \param[in] list the list to add
- * \return a true on succes otherwise falsed
- */
-bool ldns_zone_push_rr_list(ldns_zone *z, const ldns_rr_list *list);
-
-/**
- * push an single rr to a zone structure. This function use pointer
- * copying, so the rr_list structure inside z is modified!
- * \param[in] z the zone to add to
- * \param[in] rr the rr to add
- * \return a true on succes otherwise falsed
- */
-bool ldns_zone_push_rr(ldns_zone *z, ldns_rr *rr);
-
-/**
- * Retrieve all resource records from the zone that are glue
- * records. The resulting list does are pointer references
- * to the zone's data.
- *
- * Due to the current zone implementation (as a list of rr's), this
- * function is extremely slow. Another (probably better) way to do this
- * is to use an ldns_dnssec_zone structure and the
- * ldns_dnssec_mark_and_get_glue() function.
- *
- * \param[in] z the zone to look for glue
- * \return the rr_list with the glue
- */
-ldns_rr_list *ldns_zone_glue_rr_list(const ldns_zone *z);
-
-/**
- * Create a new zone from a file
- * \param[out] z the new zone
- * \param[in] *fp the filepointer to use
- * \param[in] *origin the zones' origin
- * \param[in] ttl default ttl to use
- * \param[in] c default class to use (IN)
- *
- * \return ldns_status mesg with an error or LDNS_STATUS_OK
- */
-ldns_status ldns_zone_new_frm_fp(ldns_zone **z, FILE *fp, const ldns_rdf *origin, uint32_t ttl, ldns_rr_class c);
-
-/**
- * Create a new zone from a file, keep track of the line numbering
- * \param[out] z the new zone
- * \param[in] *fp the filepointer to use
- * \param[in] *origin the zones' origin
- * \param[in] ttl default ttl to use
- * \param[in] c default class to use (IN)
- * \param[out] line_nr used for error msg, to get to the line number
- *
- * \return ldns_status mesg with an error or LDNS_STATUS_OK
- */
-ldns_status ldns_zone_new_frm_fp_l(ldns_zone **z, FILE *fp, const ldns_rdf *origin, uint32_t ttl, ldns_rr_class c, int *line_nr);
-
-/**
- * Frees the allocated memory for the zone, and the rr_list structure in it
- * \param[in] zone the zone to free
- */
-void ldns_zone_free(ldns_zone *zone);
-
-/**
- * Frees the allocated memory for the zone, the soa rr in it,
- * and the rr_list structure in it, including the rr's in that. etc.
- * \param[in] zone the zone to free
- */
-void ldns_zone_deep_free(ldns_zone *zone);
-
-/**
- * Sort the rrs in a zone, with the current impl. this is slow
- * \param[in] zone the zone to sort
- */
-void ldns_zone_sort(ldns_zone *zone);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LDNS_ZONE_H */
diff --git a/ldns/ltmain.sh b/ldns/ltmain.sh
deleted file mode 100644
index 2a50d7f..0000000
--- a/ldns/ltmain.sh
+++ /dev/null
@@ -1,11436 +0,0 @@
-#! /usr/bin/env sh
-## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
-## by inline-source v2019-02-19.15
-
-# libtool (GNU libtool) 2.4.7
-# Provide generalized library-building support services.
-# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-
-# Copyright (C) 1996-2019, 2021-2022 Free Software Foundation, Inc.
-# This is free software; see the source for copying conditions. There is NO
-# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-# GNU Libtool is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# As a special exception to the GNU General Public License,
-# if you distribute this file as part of a program or library that
-# is built using GNU Libtool, you may include this file under the
-# same distribution terms that you use for the rest of that program.
-#
-# GNU Libtool is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-
-PROGRAM=libtool
-PACKAGE=libtool
-VERSION=2.4.7
-package_revision=2.4.7
-
-
-## ------ ##
-## Usage. ##
-## ------ ##
-
-# Run './libtool --help' for help with using this script from the
-# command line.
-
-
-## ------------------------------- ##
-## User overridable command paths. ##
-## ------------------------------- ##
-
-# After configure completes, it has a better idea of some of the
-# shell tools we need than the defaults used by the functions shared
-# with bootstrap, so set those here where they can still be over-
-# ridden by the user, but otherwise take precedence.
-
-: ${AUTOCONF="autoconf"}
-: ${AUTOMAKE="automake"}
-
-
-## -------------------------- ##
-## Source external libraries. ##
-## -------------------------- ##
-
-# Much of our low-level functionality needs to be sourced from external
-# libraries, which are installed to $pkgauxdir.
-
-# Set a version string for this script.
-scriptversion=2019-02-19.15; # UTC
-
-# General shell script boiler plate, and helper functions.
-# Written by Gary V. Vaughan, 2004
-
-# This is free software. There is NO warranty; not even for
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-#
-# Copyright (C) 2004-2019, 2021 Bootstrap Authors
-#
-# This file is dual licensed under the terms of the MIT license
-# <https://opensource.org/license/MIT>, and GPL version 2 or later
-# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
-# these licenses when using or redistributing this software or any of
-# the files within it. See the URLs above, or the file `LICENSE`
-# included in the Bootstrap distribution for the full license texts.
-
-# Please report bugs or propose patches to:
-# <https://github.com/gnulib-modules/bootstrap/issues>
-
-
-## ------ ##
-## Usage. ##
-## ------ ##
-
-# Evaluate this file near the top of your script to gain access to
-# the functions and variables defined here:
-#
-# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
-#
-# If you need to override any of the default environment variable
-# settings, do that before evaluating this file.
-
-
-## -------------------- ##
-## Shell normalisation. ##
-## -------------------- ##
-
-# Some shells need a little help to be as Bourne compatible as possible.
-# Before doing anything else, make sure all that help has been provided!
-
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
-fi
-
-# NLS nuisances: We save the old values in case they are required later.
-_G_user_locale=
-_G_safe_locale=
-for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
-do
- eval "if test set = \"\${$_G_var+set}\"; then
- save_$_G_var=\$$_G_var
- $_G_var=C
- export $_G_var
- _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
- _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
- fi"
-done
-# These NLS vars are set unconditionally (bootstrap issue #24). Unset those
-# in case the environment reset is needed later and the $save_* variant is not
-# defined (see the code above).
-LC_ALL=C
-LANGUAGE=C
-export LANGUAGE LC_ALL
-
-# Make sure IFS has a sensible default
-sp=' '
-nl='
-'
-IFS="$sp $nl"
-
-# There are apparently some retarded systems that use ';' as a PATH separator!
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# func_unset VAR
-# --------------
-# Portably unset VAR.
-# In some shells, an 'unset VAR' statement leaves a non-zero return
-# status if VAR is already unset, which might be problematic if the
-# statement is used at the end of a function (thus poisoning its return
-# value) or when 'set -e' is active (causing even a spurious abort of
-# the script in this case).
-func_unset ()
-{
- { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; }
-}
-
-
-# Make sure CDPATH doesn't cause `cd` commands to output the target dir.
-func_unset CDPATH
-
-# Make sure ${,E,F}GREP behave sanely.
-func_unset GREP_OPTIONS
-
-
-## ------------------------- ##
-## Locate command utilities. ##
-## ------------------------- ##
-
-
-# func_executable_p FILE
-# ----------------------
-# Check that FILE is an executable regular file.
-func_executable_p ()
-{
- test -f "$1" && test -x "$1"
-}
-
-
-# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
-# --------------------------------------------
-# Search for either a program that responds to --version with output
-# containing "GNU", or else returned by CHECK_FUNC otherwise, by
-# trying all the directories in PATH with each of the elements of
-# PROGS_LIST.
-#
-# CHECK_FUNC should accept the path to a candidate program, and
-# set $func_check_prog_result if it truncates its output less than
-# $_G_path_prog_max characters.
-func_path_progs ()
-{
- _G_progs_list=$1
- _G_check_func=$2
- _G_PATH=${3-"$PATH"}
-
- _G_path_prog_max=0
- _G_path_prog_found=false
- _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
- for _G_dir in $_G_PATH; do
- IFS=$_G_save_IFS
- test -z "$_G_dir" && _G_dir=.
- for _G_prog_name in $_G_progs_list; do
- for _exeext in '' .EXE; do
- _G_path_prog=$_G_dir/$_G_prog_name$_exeext
- func_executable_p "$_G_path_prog" || continue
- case `"$_G_path_prog" --version 2>&1` in
- *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
- *) $_G_check_func $_G_path_prog
- func_path_progs_result=$func_check_prog_result
- ;;
- esac
- $_G_path_prog_found && break 3
- done
- done
- done
- IFS=$_G_save_IFS
- test -z "$func_path_progs_result" && {
- echo "no acceptable sed could be found in \$PATH" >&2
- exit 1
- }
-}
-
-
-# We want to be able to use the functions in this file before configure
-# has figured out where the best binaries are kept, which means we have
-# to search for them ourselves - except when the results are already set
-# where we skip the searches.
-
-# Unless the user overrides by setting SED, search the path for either GNU
-# sed, or the sed that truncates its output the least.
-test -z "$SED" && {
- _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
- for _G_i in 1 2 3 4 5 6 7; do
- _G_sed_script=$_G_sed_script$nl$_G_sed_script
- done
- echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
- _G_sed_script=
-
- func_check_prog_sed ()
- {
- _G_path_prog=$1
-
- _G_count=0
- printf 0123456789 >conftest.in
- while :
- do
- cat conftest.in conftest.in >conftest.tmp
- mv conftest.tmp conftest.in
- cp conftest.in conftest.nl
- echo '' >> conftest.nl
- "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
- diff conftest.out conftest.nl >/dev/null 2>&1 || break
- _G_count=`expr $_G_count + 1`
- if test "$_G_count" -gt "$_G_path_prog_max"; then
- # Best one so far, save it but keep looking for a better one
- func_check_prog_result=$_G_path_prog
- _G_path_prog_max=$_G_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test 10 -lt "$_G_count" && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out
- }
-
- func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin"
- rm -f conftest.sed
- SED=$func_path_progs_result
-}
-
-
-# Unless the user overrides by setting GREP, search the path for either GNU
-# grep, or the grep that truncates its output the least.
-test -z "$GREP" && {
- func_check_prog_grep ()
- {
- _G_path_prog=$1
-
- _G_count=0
- _G_path_prog_max=0
- printf 0123456789 >conftest.in
- while :
- do
- cat conftest.in conftest.in >conftest.tmp
- mv conftest.tmp conftest.in
- cp conftest.in conftest.nl
- echo 'GREP' >> conftest.nl
- "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
- diff conftest.out conftest.nl >/dev/null 2>&1 || break
- _G_count=`expr $_G_count + 1`
- if test "$_G_count" -gt "$_G_path_prog_max"; then
- # Best one so far, save it but keep looking for a better one
- func_check_prog_result=$_G_path_prog
- _G_path_prog_max=$_G_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test 10 -lt "$_G_count" && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out
- }
-
- func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin"
- GREP=$func_path_progs_result
-}
-
-
-## ------------------------------- ##
-## User overridable command paths. ##
-## ------------------------------- ##
-
-# All uppercase variable names are used for environment variables. These
-# variables can be overridden by the user before calling a script that
-# uses them if a suitable command of that name is not already available
-# in the command search PATH.
-
-: ${CP="cp -f"}
-: ${ECHO="printf %s\n"}
-: ${EGREP="$GREP -E"}
-: ${FGREP="$GREP -F"}
-: ${LN_S="ln -s"}
-: ${MAKE="make"}
-: ${MKDIR="mkdir"}
-: ${MV="mv -f"}
-: ${RM="rm -f"}
-: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
-
-
-## -------------------- ##
-## Useful sed snippets. ##
-## -------------------- ##
-
-sed_dirname='s|/[^/]*$||'
-sed_basename='s|^.*/||'
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='s|\([`"$\\]\)|\\\1|g'
-
-# Same as above, but do not quote variable references.
-sed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
-
-# Sed substitution that turns a string into a regex matching for the
-# string literally.
-sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
-
-# Sed substitution that converts a w32 file name or path
-# that contains forward slashes, into one that contains
-# (escaped) backslashes. A very naive implementation.
-sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
-
-# Re-'\' parameter expansions in output of sed_double_quote_subst that
-# were '\'-ed in input to the same. If an odd number of '\' preceded a
-# '$' in input to sed_double_quote_subst, that '$' was protected from
-# expansion. Since each input '\' is now two '\'s, look for any number
-# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'.
-_G_bs='\\'
-_G_bs2='\\\\'
-_G_bs4='\\\\\\\\'
-_G_dollar='\$'
-sed_double_backslash="\
- s/$_G_bs4/&\\
-/g
- s/^$_G_bs2$_G_dollar/$_G_bs&/
- s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
- s/\n//g"
-
-# require_check_ifs_backslash
-# ---------------------------
-# Check if we can use backslash as IFS='\' separator, and set
-# $check_ifs_backshlash_broken to ':' or 'false'.
-require_check_ifs_backslash=func_require_check_ifs_backslash
-func_require_check_ifs_backslash ()
-{
- _G_save_IFS=$IFS
- IFS='\'
- _G_check_ifs_backshlash='a\\b'
- for _G_i in $_G_check_ifs_backshlash
- do
- case $_G_i in
- a)
- check_ifs_backshlash_broken=false
- ;;
- '')
- break
- ;;
- *)
- check_ifs_backshlash_broken=:
- break
- ;;
- esac
- done
- IFS=$_G_save_IFS
- require_check_ifs_backslash=:
-}
-
-
-## ----------------- ##
-## Global variables. ##
-## ----------------- ##
-
-# Except for the global variables explicitly listed below, the following
-# functions in the '^func_' namespace, and the '^require_' namespace
-# variables initialised in the 'Resource management' section, sourcing
-# this file will not pollute your global namespace with anything
-# else. There's no portable way to scope variables in Bourne shell
-# though, so actually running these functions will sometimes place
-# results into a variable named after the function, and often use
-# temporary variables in the '^_G_' namespace. If you are careful to
-# avoid using those namespaces casually in your sourcing script, things
-# should continue to work as you expect. And, of course, you can freely
-# overwrite any of the functions or variables defined here before
-# calling anything to customize them.
-
-EXIT_SUCCESS=0
-EXIT_FAILURE=1
-EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.
-EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake.
-
-# Allow overriding, eg assuming that you follow the convention of
-# putting '$debug_cmd' at the start of all your functions, you can get
-# bash to show function call trace with:
-#
-# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
-debug_cmd=${debug_cmd-":"}
-exit_cmd=:
-
-# By convention, finish your script with:
-#
-# exit $exit_status
-#
-# so that you can set exit_status to non-zero if you want to indicate
-# something went wrong during execution without actually bailing out at
-# the point of failure.
-exit_status=$EXIT_SUCCESS
-
-# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
-# is ksh but when the shell is invoked as "sh" and the current value of
-# the _XPG environment variable is not equal to 1 (one), the special
-# positional parameter $0, within a function call, is the name of the
-# function.
-progpath=$0
-
-# The name of this program.
-progname=`$ECHO "$progpath" |$SED "$sed_basename"`
-
-# Make sure we have an absolute progpath for reexecution:
-case $progpath in
- [\\/]*|[A-Za-z]:\\*) ;;
- *[\\/]*)
- progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
- progdir=`cd "$progdir" && pwd`
- progpath=$progdir/$progname
- ;;
- *)
- _G_IFS=$IFS
- IFS=${PATH_SEPARATOR-:}
- for progdir in $PATH; do
- IFS=$_G_IFS
- test -x "$progdir/$progname" && break
- done
- IFS=$_G_IFS
- test -n "$progdir" || progdir=`pwd`
- progpath=$progdir/$progname
- ;;
-esac
-
-
-## ----------------- ##
-## Standard options. ##
-## ----------------- ##
-
-# The following options affect the operation of the functions defined
-# below, and should be set appropriately depending on run-time para-
-# meters passed on the command line.
-
-opt_dry_run=false
-opt_quiet=false
-opt_verbose=false
-
-# Categories 'all' and 'none' are always available. Append any others
-# you will pass as the first argument to func_warning from your own
-# code.
-warning_categories=
-
-# By default, display warnings according to 'opt_warning_types'. Set
-# 'warning_func' to ':' to elide all warnings, or func_fatal_error to
-# treat the next displayed warning as a fatal error.
-warning_func=func_warn_and_continue
-
-# Set to 'all' to display all warnings, 'none' to suppress all
-# warnings, or a space delimited list of some subset of
-# 'warning_categories' to display only the listed warnings.
-opt_warning_types=all
-
-
-## -------------------- ##
-## Resource management. ##
-## -------------------- ##
-
-# This section contains definitions for functions that each ensure a
-# particular resource (a file, or a non-empty configuration variable for
-# example) is available, and if appropriate to extract default values
-# from pertinent package files. Call them using their associated
-# 'require_*' variable to ensure that they are executed, at most, once.
-#
-# It's entirely deliberate that calling these functions can set
-# variables that don't obey the namespace limitations obeyed by the rest
-# of this file, in order that that they be as useful as possible to
-# callers.
-
-
-# require_term_colors
-# -------------------
-# Allow display of bold text on terminals that support it.
-require_term_colors=func_require_term_colors
-func_require_term_colors ()
-{
- $debug_cmd
-
- test -t 1 && {
- # COLORTERM and USE_ANSI_COLORS environment variables take
- # precedence, because most terminfo databases neglect to describe
- # whether color sequences are supported.
- test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
-
- if test 1 = "$USE_ANSI_COLORS"; then
- # Standard ANSI escape sequences
- tc_reset=''
- tc_bold=''; tc_standout=''
- tc_red=''; tc_green=''
- tc_blue=''; tc_cyan=''
- else
- # Otherwise trust the terminfo database after all.
- test -n "`tput sgr0 2>/dev/null`" && {
- tc_reset=`tput sgr0`
- test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
- tc_standout=$tc_bold
- test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
- test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
- test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
- test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
- test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
- }
- fi
- }
-
- require_term_colors=:
-}
-
-
-## ----------------- ##
-## Function library. ##
-## ----------------- ##
-
-# This section contains a variety of useful functions to call in your
-# scripts. Take note of the portable wrappers for features provided by
-# some modern shells, which will fall back to slower equivalents on
-# less featureful shells.
-
-
-# func_append VAR VALUE
-# ---------------------
-# Append VALUE onto the existing contents of VAR.
-
- # We should try to minimise forks, especially on Windows where they are
- # unreasonably slow, so skip the feature probes when bash or zsh are
- # being used:
- if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
- : ${_G_HAVE_ARITH_OP="yes"}
- : ${_G_HAVE_XSI_OPS="yes"}
- # The += operator was introduced in bash 3.1
- case $BASH_VERSION in
- [12].* | 3.0 | 3.0*) ;;
- *)
- : ${_G_HAVE_PLUSEQ_OP="yes"}
- ;;
- esac
- fi
-
- # _G_HAVE_PLUSEQ_OP
- # Can be empty, in which case the shell is probed, "yes" if += is
- # useable or anything else if it does not work.
- test -z "$_G_HAVE_PLUSEQ_OP" \
- && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
- && _G_HAVE_PLUSEQ_OP=yes
-
-if test yes = "$_G_HAVE_PLUSEQ_OP"
-then
- # This is an XSI compatible shell, allowing a faster implementation...
- eval 'func_append ()
- {
- $debug_cmd
-
- eval "$1+=\$2"
- }'
-else
- # ...otherwise fall back to using expr, which is often a shell builtin.
- func_append ()
- {
- $debug_cmd
-
- eval "$1=\$$1\$2"
- }
-fi
-
-
-# func_append_quoted VAR VALUE
-# ----------------------------
-# Quote VALUE and append to the end of shell variable VAR, separated
-# by a space.
-if test yes = "$_G_HAVE_PLUSEQ_OP"; then
- eval 'func_append_quoted ()
- {
- $debug_cmd
-
- func_quote_arg pretty "$2"
- eval "$1+=\\ \$func_quote_arg_result"
- }'
-else
- func_append_quoted ()
- {
- $debug_cmd
-
- func_quote_arg pretty "$2"
- eval "$1=\$$1\\ \$func_quote_arg_result"
- }
-fi
-
-
-# func_append_uniq VAR VALUE
-# --------------------------
-# Append unique VALUE onto the existing contents of VAR, assuming
-# entries are delimited by the first character of VALUE. For example:
-#
-# func_append_uniq options " --another-option option-argument"
-#
-# will only append to $options if " --another-option option-argument "
-# is not already present somewhere in $options already (note spaces at
-# each end implied by leading space in second argument).
-func_append_uniq ()
-{
- $debug_cmd
-
- eval _G_current_value='`$ECHO $'$1'`'
- _G_delim=`expr "$2" : '\(.\)'`
-
- case $_G_delim$_G_current_value$_G_delim in
- *"$2$_G_delim"*) ;;
- *) func_append "$@" ;;
- esac
-}
-
-
-# func_arith TERM...
-# ------------------
-# Set func_arith_result to the result of evaluating TERMs.
- test -z "$_G_HAVE_ARITH_OP" \
- && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
- && _G_HAVE_ARITH_OP=yes
-
-if test yes = "$_G_HAVE_ARITH_OP"; then
- eval 'func_arith ()
- {
- $debug_cmd
-
- func_arith_result=$(( $* ))
- }'
-else
- func_arith ()
- {
- $debug_cmd
-
- func_arith_result=`expr "$@"`
- }
-fi
-
-
-# func_basename FILE
-# ------------------
-# Set func_basename_result to FILE with everything up to and including
-# the last / stripped.
-if test yes = "$_G_HAVE_XSI_OPS"; then
- # If this shell supports suffix pattern removal, then use it to avoid
- # forking. Hide the definitions single quotes in case the shell chokes
- # on unsupported syntax...
- _b='func_basename_result=${1##*/}'
- _d='case $1 in
- */*) func_dirname_result=${1%/*}$2 ;;
- * ) func_dirname_result=$3 ;;
- esac'
-
-else
- # ...otherwise fall back to using sed.
- _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
- _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"`
- if test "X$func_dirname_result" = "X$1"; then
- func_dirname_result=$3
- else
- func_append func_dirname_result "$2"
- fi'
-fi
-
-eval 'func_basename ()
-{
- $debug_cmd
-
- '"$_b"'
-}'
-
-
-# func_dirname FILE APPEND NONDIR_REPLACEMENT
-# -------------------------------------------
-# Compute the dirname of FILE. If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-eval 'func_dirname ()
-{
- $debug_cmd
-
- '"$_d"'
-}'
-
-
-# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
-# --------------------------------------------------------
-# Perform func_basename and func_dirname in a single function
-# call:
-# dirname: Compute the dirname of FILE. If nonempty,
-# add APPEND to the result, otherwise set result
-# to NONDIR_REPLACEMENT.
-# value returned in "$func_dirname_result"
-# basename: Compute filename of FILE.
-# value retuned in "$func_basename_result"
-# For efficiency, we do not delegate to the functions above but instead
-# duplicate the functionality here.
-eval 'func_dirname_and_basename ()
-{
- $debug_cmd
-
- '"$_b"'
- '"$_d"'
-}'
-
-
-# func_echo ARG...
-# ----------------
-# Echo program name prefixed message.
-func_echo ()
-{
- $debug_cmd
-
- _G_message=$*
-
- func_echo_IFS=$IFS
- IFS=$nl
- for _G_line in $_G_message; do
- IFS=$func_echo_IFS
- $ECHO "$progname: $_G_line"
- done
- IFS=$func_echo_IFS
-}
-
-
-# func_echo_all ARG...
-# --------------------
-# Invoke $ECHO with all args, space-separated.
-func_echo_all ()
-{
- $ECHO "$*"
-}
-
-
-# func_echo_infix_1 INFIX ARG...
-# ------------------------------
-# Echo program name, followed by INFIX on the first line, with any
-# additional lines not showing INFIX.
-func_echo_infix_1 ()
-{
- $debug_cmd
-
- $require_term_colors
-
- _G_infix=$1; shift
- _G_indent=$_G_infix
- _G_prefix="$progname: $_G_infix: "
- _G_message=$*
-
- # Strip color escape sequences before counting printable length
- for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
- do
- test -n "$_G_tc" && {
- _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
- _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
- }
- done
- _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes
-
- func_echo_infix_1_IFS=$IFS
- IFS=$nl
- for _G_line in $_G_message; do
- IFS=$func_echo_infix_1_IFS
- $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
- _G_prefix=$_G_indent
- done
- IFS=$func_echo_infix_1_IFS
-}
-
-
-# func_error ARG...
-# -----------------
-# Echo program name prefixed message to standard error.
-func_error ()
-{
- $debug_cmd
-
- $require_term_colors
-
- func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2
-}
-
-
-# func_fatal_error ARG...
-# -----------------------
-# Echo program name prefixed message to standard error, and exit.
-func_fatal_error ()
-{
- $debug_cmd
-
- func_error "$*"
- exit $EXIT_FAILURE
-}
-
-
-# func_grep EXPRESSION FILENAME
-# -----------------------------
-# Check whether EXPRESSION matches any line of FILENAME, without output.
-func_grep ()
-{
- $debug_cmd
-
- $GREP "$1" "$2" >/dev/null 2>&1
-}
-
-
-# func_len STRING
-# ---------------
-# Set func_len_result to the length of STRING. STRING may not
-# start with a hyphen.
- test -z "$_G_HAVE_XSI_OPS" \
- && (eval 'x=a/b/c;
- test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
- && _G_HAVE_XSI_OPS=yes
-
-if test yes = "$_G_HAVE_XSI_OPS"; then
- eval 'func_len ()
- {
- $debug_cmd
-
- func_len_result=${#1}
- }'
-else
- func_len ()
- {
- $debug_cmd
-
- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
- }
-fi
-
-
-# func_mkdir_p DIRECTORY-PATH
-# ---------------------------
-# Make sure the entire path to DIRECTORY-PATH is available.
-func_mkdir_p ()
-{
- $debug_cmd
-
- _G_directory_path=$1
- _G_dir_list=
-
- if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
-
- # Protect directory names starting with '-'
- case $_G_directory_path in
- -*) _G_directory_path=./$_G_directory_path ;;
- esac
-
- # While some portion of DIR does not yet exist...
- while test ! -d "$_G_directory_path"; do
- # ...make a list in topmost first order. Use a colon delimited
- # list incase some portion of path contains whitespace.
- _G_dir_list=$_G_directory_path:$_G_dir_list
-
- # If the last portion added has no slash in it, the list is done
- case $_G_directory_path in */*) ;; *) break ;; esac
-
- # ...otherwise throw away the child directory and loop
- _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
- done
- _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
-
- func_mkdir_p_IFS=$IFS; IFS=:
- for _G_dir in $_G_dir_list; do
- IFS=$func_mkdir_p_IFS
- # mkdir can fail with a 'File exist' error if two processes
- # try to create one of the directories concurrently. Don't
- # stop in that case!
- $MKDIR "$_G_dir" 2>/dev/null || :
- done
- IFS=$func_mkdir_p_IFS
-
- # Bail out if we (or some other process) failed to create a directory.
- test -d "$_G_directory_path" || \
- func_fatal_error "Failed to create '$1'"
- fi
-}
-
-
-# func_mktempdir [BASENAME]
-# -------------------------
-# Make a temporary directory that won't clash with other running
-# libtool processes, and avoids race conditions if possible. If
-# given, BASENAME is the basename for that directory.
-func_mktempdir ()
-{
- $debug_cmd
-
- _G_template=${TMPDIR-/tmp}/${1-$progname}
-
- if test : = "$opt_dry_run"; then
- # Return a directory name, but don't create it in dry-run mode
- _G_tmpdir=$_G_template-$$
- else
-
- # If mktemp works, use that first and foremost
- _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
-
- if test ! -d "$_G_tmpdir"; then
- # Failing that, at least try and use $RANDOM to avoid a race
- _G_tmpdir=$_G_template-${RANDOM-0}$$
-
- func_mktempdir_umask=`umask`
- umask 0077
- $MKDIR "$_G_tmpdir"
- umask $func_mktempdir_umask
- fi
-
- # If we're not in dry-run mode, bomb out on failure
- test -d "$_G_tmpdir" || \
- func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
- fi
-
- $ECHO "$_G_tmpdir"
-}
-
-
-# func_normal_abspath PATH
-# ------------------------
-# Remove doubled-up and trailing slashes, "." path components,
-# and cancel out any ".." path components in PATH after making
-# it an absolute path.
-func_normal_abspath ()
-{
- $debug_cmd
-
- # These SED scripts presuppose an absolute path with a trailing slash.
- _G_pathcar='s|^/\([^/]*\).*$|\1|'
- _G_pathcdr='s|^/[^/]*||'
- _G_removedotparts=':dotsl
- s|/\./|/|g
- t dotsl
- s|/\.$|/|'
- _G_collapseslashes='s|/\{1,\}|/|g'
- _G_finalslash='s|/*$|/|'
-
- # Start from root dir and reassemble the path.
- func_normal_abspath_result=
- func_normal_abspath_tpath=$1
- func_normal_abspath_altnamespace=
- case $func_normal_abspath_tpath in
- "")
- # Empty path, that just means $cwd.
- func_stripname '' '/' "`pwd`"
- func_normal_abspath_result=$func_stripname_result
- return
- ;;
- # The next three entries are used to spot a run of precisely
- # two leading slashes without using negated character classes;
- # we take advantage of case's first-match behaviour.
- ///*)
- # Unusual form of absolute path, do nothing.
- ;;
- //*)
- # Not necessarily an ordinary path; POSIX reserves leading '//'
- # and for example Cygwin uses it to access remote file shares
- # over CIFS/SMB, so we conserve a leading double slash if found.
- func_normal_abspath_altnamespace=/
- ;;
- /*)
- # Absolute path, do nothing.
- ;;
- *)
- # Relative path, prepend $cwd.
- func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
- ;;
- esac
-
- # Cancel out all the simple stuff to save iterations. We also want
- # the path to end with a slash for ease of parsing, so make sure
- # there is one (and only one) here.
- func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
- -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
- while :; do
- # Processed it all yet?
- if test / = "$func_normal_abspath_tpath"; then
- # If we ascended to the root using ".." the result may be empty now.
- if test -z "$func_normal_abspath_result"; then
- func_normal_abspath_result=/
- fi
- break
- fi
- func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
- -e "$_G_pathcar"`
- func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
- -e "$_G_pathcdr"`
- # Figure out what to do with it
- case $func_normal_abspath_tcomponent in
- "")
- # Trailing empty path component, ignore it.
- ;;
- ..)
- # Parent dir; strip last assembled component from result.
- func_dirname "$func_normal_abspath_result"
- func_normal_abspath_result=$func_dirname_result
- ;;
- *)
- # Actual path component, append it.
- func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
- ;;
- esac
- done
- # Restore leading double-slash if one was found on entry.
- func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
-}
-
-
-# func_notquiet ARG...
-# --------------------
-# Echo program name prefixed message only when not in quiet mode.
-func_notquiet ()
-{
- $debug_cmd
-
- $opt_quiet || func_echo ${1+"$@"}
-
- # A bug in bash halts the script if the last line of a function
- # fails when set -e is in force, so we need another command to
- # work around that:
- :
-}
-
-
-# func_relative_path SRCDIR DSTDIR
-# --------------------------------
-# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
-func_relative_path ()
-{
- $debug_cmd
-
- func_relative_path_result=
- func_normal_abspath "$1"
- func_relative_path_tlibdir=$func_normal_abspath_result
- func_normal_abspath "$2"
- func_relative_path_tbindir=$func_normal_abspath_result
-
- # Ascend the tree starting from libdir
- while :; do
- # check if we have found a prefix of bindir
- case $func_relative_path_tbindir in
- $func_relative_path_tlibdir)
- # found an exact match
- func_relative_path_tcancelled=
- break
- ;;
- $func_relative_path_tlibdir*)
- # found a matching prefix
- func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
- func_relative_path_tcancelled=$func_stripname_result
- if test -z "$func_relative_path_result"; then
- func_relative_path_result=.
- fi
- break
- ;;
- *)
- func_dirname $func_relative_path_tlibdir
- func_relative_path_tlibdir=$func_dirname_result
- if test -z "$func_relative_path_tlibdir"; then
- # Have to descend all the way to the root!
- func_relative_path_result=../$func_relative_path_result
- func_relative_path_tcancelled=$func_relative_path_tbindir
- break
- fi
- func_relative_path_result=../$func_relative_path_result
- ;;
- esac
- done
-
- # Now calculate path; take care to avoid doubling-up slashes.
- func_stripname '' '/' "$func_relative_path_result"
- func_relative_path_result=$func_stripname_result
- func_stripname '/' '/' "$func_relative_path_tcancelled"
- if test -n "$func_stripname_result"; then
- func_append func_relative_path_result "/$func_stripname_result"
- fi
-
- # Normalisation. If bindir is libdir, return '.' else relative path.
- if test -n "$func_relative_path_result"; then
- func_stripname './' '' "$func_relative_path_result"
- func_relative_path_result=$func_stripname_result
- fi
-
- test -n "$func_relative_path_result" || func_relative_path_result=.
-
- :
-}
-
-
-# func_quote_portable EVAL ARG
-# ----------------------------
-# Internal function to portably implement func_quote_arg. Note that we still
-# keep attention to performance here so we as much as possible try to avoid
-# calling sed binary (so far O(N) complexity as long as func_append is O(1)).
-func_quote_portable ()
-{
- $debug_cmd
-
- $require_check_ifs_backslash
-
- func_quote_portable_result=$2
-
- # one-time-loop (easy break)
- while true
- do
- if $1; then
- func_quote_portable_result=`$ECHO "$2" | $SED \
- -e "$sed_double_quote_subst" -e "$sed_double_backslash"`
- break
- fi
-
- # Quote for eval.
- case $func_quote_portable_result in
- *[\\\`\"\$]*)
- # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string
- # contains the shell wildcard characters.
- case $check_ifs_backshlash_broken$func_quote_portable_result in
- :*|*[\[\*\?]*)
- func_quote_portable_result=`$ECHO "$func_quote_portable_result" \
- | $SED "$sed_quote_subst"`
- break
- ;;
- esac
-
- func_quote_portable_old_IFS=$IFS
- for _G_char in '\' '`' '"' '$'
- do
- # STATE($1) PREV($2) SEPARATOR($3)
- set start "" ""
- func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy
- IFS=$_G_char
- for _G_part in $func_quote_portable_result
- do
- case $1 in
- quote)
- func_append func_quote_portable_result "$3$2"
- set quote "$_G_part" "\\$_G_char"
- ;;
- start)
- set first "" ""
- func_quote_portable_result=
- ;;
- first)
- set quote "$_G_part" ""
- ;;
- esac
- done
- done
- IFS=$func_quote_portable_old_IFS
- ;;
- *) ;;
- esac
- break
- done
-
- func_quote_portable_unquoted_result=$func_quote_portable_result
- case $func_quote_portable_result in
- # double-quote args containing shell metacharacters to delay
- # word splitting, command substitution and variable expansion
- # for a subsequent eval.
- # many bourne shells cannot handle close brackets correctly
- # in scan sets, so we specify it separately.
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- func_quote_portable_result=\"$func_quote_portable_result\"
- ;;
- esac
-}
-
-
-# func_quotefast_eval ARG
-# -----------------------
-# Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG',
-# but optimized for speed. Result is stored in $func_quotefast_eval.
-if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then
- printf -v _GL_test_printf_tilde %q '~'
- if test '\~' = "$_GL_test_printf_tilde"; then
- func_quotefast_eval ()
- {
- printf -v func_quotefast_eval_result %q "$1"
- }
- else
- # Broken older Bash implementations. Make those faster too if possible.
- func_quotefast_eval ()
- {
- case $1 in
- '~'*)
- func_quote_portable false "$1"
- func_quotefast_eval_result=$func_quote_portable_result
- ;;
- *)
- printf -v func_quotefast_eval_result %q "$1"
- ;;
- esac
- }
- fi
-else
- func_quotefast_eval ()
- {
- func_quote_portable false "$1"
- func_quotefast_eval_result=$func_quote_portable_result
- }
-fi
-
-
-# func_quote_arg MODEs ARG
-# ------------------------
-# Quote one ARG to be evaled later. MODEs argument may contain zero or more
-# specifiers listed below separated by ',' character. This function returns two
-# values:
-# i) func_quote_arg_result
-# double-quoted (when needed), suitable for a subsequent eval
-# ii) func_quote_arg_unquoted_result
-# has all characters that are still active within double
-# quotes backslashified. Available only if 'unquoted' is specified.
-#
-# Available modes:
-# ----------------
-# 'eval' (default)
-# - escape shell special characters
-# 'expand'
-# - the same as 'eval'; but do not quote variable references
-# 'pretty'
-# - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might
-# be used later in func_quote to get output like: 'echo "a b"' instead
-# of 'echo a\ b'. This is slower than default on some shells.
-# 'unquoted'
-# - produce also $func_quote_arg_unquoted_result which does not contain
-# wrapping double-quotes.
-#
-# Examples for 'func_quote_arg pretty,unquoted string':
-#
-# string | *_result | *_unquoted_result
-# ------------+-----------------------+-------------------
-# " | \" | \"
-# a b | "a b" | a b
-# "a b" | "\"a b\"" | \"a b\"
-# * | "*" | *
-# z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\"
-#
-# Examples for 'func_quote_arg pretty,unquoted,expand string':
-#
-# string | *_result | *_unquoted_result
-# --------------+---------------------+--------------------
-# z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\"
-func_quote_arg ()
-{
- _G_quote_expand=false
- case ,$1, in
- *,expand,*)
- _G_quote_expand=:
- ;;
- esac
-
- case ,$1, in
- *,pretty,*|*,expand,*|*,unquoted,*)
- func_quote_portable $_G_quote_expand "$2"
- func_quote_arg_result=$func_quote_portable_result
- func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result
- ;;
- *)
- # Faster quote-for-eval for some shells.
- func_quotefast_eval "$2"
- func_quote_arg_result=$func_quotefast_eval_result
- ;;
- esac
-}
-
-
-# func_quote MODEs ARGs...
-# ------------------------
-# Quote all ARGs to be evaled later and join them into single command. See
-# func_quote_arg's description for more info.
-func_quote ()
-{
- $debug_cmd
- _G_func_quote_mode=$1 ; shift
- func_quote_result=
- while test 0 -lt $#; do
- func_quote_arg "$_G_func_quote_mode" "$1"
- if test -n "$func_quote_result"; then
- func_append func_quote_result " $func_quote_arg_result"
- else
- func_append func_quote_result "$func_quote_arg_result"
- fi
- shift
- done
-}
-
-
-# func_stripname PREFIX SUFFIX NAME
-# ---------------------------------
-# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-if test yes = "$_G_HAVE_XSI_OPS"; then
- eval 'func_stripname ()
- {
- $debug_cmd
-
- # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
- # positional parameters, so assign one to ordinary variable first.
- func_stripname_result=$3
- func_stripname_result=${func_stripname_result#"$1"}
- func_stripname_result=${func_stripname_result%"$2"}
- }'
-else
- func_stripname ()
- {
- $debug_cmd
-
- case $2 in
- .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
- *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
- esac
- }
-fi
-
-
-# func_show_eval CMD [FAIL_EXP]
-# -----------------------------
-# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is
-# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
-# is given, then evaluate it.
-func_show_eval ()
-{
- $debug_cmd
-
- _G_cmd=$1
- _G_fail_exp=${2-':'}
-
- func_quote_arg pretty,expand "$_G_cmd"
- eval "func_notquiet $func_quote_arg_result"
-
- $opt_dry_run || {
- eval "$_G_cmd"
- _G_status=$?
- if test 0 -ne "$_G_status"; then
- eval "(exit $_G_status); $_G_fail_exp"
- fi
- }
-}
-
-
-# func_show_eval_locale CMD [FAIL_EXP]
-# ------------------------------------
-# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is
-# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
-# is given, then evaluate it. Use the saved locale for evaluation.
-func_show_eval_locale ()
-{
- $debug_cmd
-
- _G_cmd=$1
- _G_fail_exp=${2-':'}
-
- $opt_quiet || {
- func_quote_arg expand,pretty "$_G_cmd"
- eval "func_echo $func_quote_arg_result"
- }
-
- $opt_dry_run || {
- eval "$_G_user_locale
- $_G_cmd"
- _G_status=$?
- eval "$_G_safe_locale"
- if test 0 -ne "$_G_status"; then
- eval "(exit $_G_status); $_G_fail_exp"
- fi
- }
-}
-
-
-# func_tr_sh
-# ----------
-# Turn $1 into a string suitable for a shell variable name.
-# Result is stored in $func_tr_sh_result. All characters
-# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
-# if $1 begins with a digit, a '_' is prepended as well.
-func_tr_sh ()
-{
- $debug_cmd
-
- case $1 in
- [0-9]* | *[!a-zA-Z0-9_]*)
- func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
- ;;
- * )
- func_tr_sh_result=$1
- ;;
- esac
-}
-
-
-# func_verbose ARG...
-# -------------------
-# Echo program name prefixed message in verbose mode only.
-func_verbose ()
-{
- $debug_cmd
-
- $opt_verbose && func_echo "$*"
-
- :
-}
-
-
-# func_warn_and_continue ARG...
-# -----------------------------
-# Echo program name prefixed warning message to standard error.
-func_warn_and_continue ()
-{
- $debug_cmd
-
- $require_term_colors
-
- func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
-}
-
-
-# func_warning CATEGORY ARG...
-# ----------------------------
-# Echo program name prefixed warning message to standard error. Warning
-# messages can be filtered according to CATEGORY, where this function
-# elides messages where CATEGORY is not listed in the global variable
-# 'opt_warning_types'.
-func_warning ()
-{
- $debug_cmd
-
- # CATEGORY must be in the warning_categories list!
- case " $warning_categories " in
- *" $1 "*) ;;
- *) func_internal_error "invalid warning category '$1'" ;;
- esac
-
- _G_category=$1
- shift
-
- case " $opt_warning_types " in
- *" $_G_category "*) $warning_func ${1+"$@"} ;;
- esac
-}
-
-
-# func_sort_ver VER1 VER2
-# -----------------------
-# 'sort -V' is not generally available.
-# 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
-# version formats or redundant trailing .0 in bootstrap.conf.
-# If we did want full compatibility then we should probably
-# use m4_version_compare from autoconf.
-func_sort_ver ()
-{
- $debug_cmd
-
- printf '%s\n%s\n' "$1" "$2" \
- | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n
-}
-
-# func_lt_ver PREV CURR
-# ---------------------
-# Return true if PREV and CURR are in the correct order according to
-# func_sort_ver, otherwise false. Use it like this:
-#
-# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
-func_lt_ver ()
-{
- $debug_cmd
-
- test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
-}
-
-
-# Local variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'before-save-hook 'time-stamp)
-# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
-# time-stamp-time-zone: "UTC"
-# End:
-#! /bin/sh
-
-# A portable, pluggable option parser for Bourne shell.
-# Written by Gary V. Vaughan, 2010
-
-# This is free software. There is NO warranty; not even for
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-#
-# Copyright (C) 2010-2019, 2021 Bootstrap Authors
-#
-# This file is dual licensed under the terms of the MIT license
-# <https://opensource.org/license/MIT>, and GPL version 2 or later
-# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
-# these licenses when using or redistributing this software or any of
-# the files within it. See the URLs above, or the file `LICENSE`
-# included in the Bootstrap distribution for the full license texts.
-
-# Please report bugs or propose patches to:
-# <https://github.com/gnulib-modules/bootstrap/issues>
-
-# Set a version string for this script.
-scriptversion=2019-02-19.15; # UTC
-
-
-## ------ ##
-## Usage. ##
-## ------ ##
-
-# This file is a library for parsing options in your shell scripts along
-# with assorted other useful supporting features that you can make use
-# of too.
-#
-# For the simplest scripts you might need only:
-#
-# #!/bin/sh
-# . relative/path/to/funclib.sh
-# . relative/path/to/options-parser
-# scriptversion=1.0
-# func_options ${1+"$@"}
-# eval set dummy "$func_options_result"; shift
-# ...rest of your script...
-#
-# In order for the '--version' option to work, you will need to have a
-# suitably formatted comment like the one at the top of this file
-# starting with '# Written by ' and ending with '# Copyright'.
-#
-# For '-h' and '--help' to work, you will also need a one line
-# description of your script's purpose in a comment directly above the
-# '# Written by ' line, like the one at the top of this file.
-#
-# The default options also support '--debug', which will turn on shell
-# execution tracing (see the comment above debug_cmd below for another
-# use), and '--verbose' and the func_verbose function to allow your script
-# to display verbose messages only when your user has specified
-# '--verbose'.
-#
-# After sourcing this file, you can plug in processing for additional
-# options by amending the variables from the 'Configuration' section
-# below, and following the instructions in the 'Option parsing'
-# section further down.
-
-## -------------- ##
-## Configuration. ##
-## -------------- ##
-
-# You should override these variables in your script after sourcing this
-# file so that they reflect the customisations you have added to the
-# option parser.
-
-# The usage line for option parsing errors and the start of '-h' and
-# '--help' output messages. You can embed shell variables for delayed
-# expansion at the time the message is displayed, but you will need to
-# quote other shell meta-characters carefully to prevent them being
-# expanded when the contents are evaled.
-usage='$progpath [OPTION]...'
-
-# Short help message in response to '-h' and '--help'. Add to this or
-# override it after sourcing this library to reflect the full set of
-# options your script accepts.
-usage_message="\
- --debug enable verbose shell tracing
- -W, --warnings=CATEGORY
- report the warnings falling in CATEGORY [all]
- -v, --verbose verbosely report processing
- --version print version information and exit
- -h, --help print short or long help message and exit
-"
-
-# Additional text appended to 'usage_message' in response to '--help'.
-long_help_message="
-Warning categories include:
- 'all' show all warnings
- 'none' turn off all the warnings
- 'error' warnings are treated as fatal errors"
-
-# Help message printed before fatal option parsing errors.
-fatal_help="Try '\$progname --help' for more information."
-
-
-
-## ------------------------- ##
-## Hook function management. ##
-## ------------------------- ##
-
-# This section contains functions for adding, removing, and running hooks
-# in the main code. A hook is just a list of function names that can be
-# run in order later on.
-
-# func_hookable FUNC_NAME
-# -----------------------
-# Declare that FUNC_NAME will run hooks added with
-# 'func_add_hook FUNC_NAME ...'.
-func_hookable ()
-{
- $debug_cmd
-
- func_append hookable_fns " $1"
-}
-
-
-# func_add_hook FUNC_NAME HOOK_FUNC
-# ---------------------------------
-# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must
-# first have been declared "hookable" by a call to 'func_hookable'.
-func_add_hook ()
-{
- $debug_cmd
-
- case " $hookable_fns " in
- *" $1 "*) ;;
- *) func_fatal_error "'$1' does not accept hook functions." ;;
- esac
-
- eval func_append ${1}_hooks '" $2"'
-}
-
-
-# func_remove_hook FUNC_NAME HOOK_FUNC
-# ------------------------------------
-# Remove HOOK_FUNC from the list of hook functions to be called by
-# FUNC_NAME.
-func_remove_hook ()
-{
- $debug_cmd
-
- eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
-}
-
-
-# func_propagate_result FUNC_NAME_A FUNC_NAME_B
-# ---------------------------------------------
-# If the *_result variable of FUNC_NAME_A _is set_, assign its value to
-# *_result variable of FUNC_NAME_B.
-func_propagate_result ()
-{
- $debug_cmd
-
- func_propagate_result_result=:
- if eval "test \"\${${1}_result+set}\" = set"
- then
- eval "${2}_result=\$${1}_result"
- else
- func_propagate_result_result=false
- fi
-}
-
-
-# func_run_hooks FUNC_NAME [ARG]...
-# ---------------------------------
-# Run all hook functions registered to FUNC_NAME.
-# It's assumed that the list of hook functions contains nothing more
-# than a whitespace-delimited list of legal shell function names, and
-# no effort is wasted trying to catch shell meta-characters or preserve
-# whitespace.
-func_run_hooks ()
-{
- $debug_cmd
-
- case " $hookable_fns " in
- *" $1 "*) ;;
- *) func_fatal_error "'$1' does not support hook functions." ;;
- esac
-
- eval _G_hook_fns=\$$1_hooks; shift
-
- for _G_hook in $_G_hook_fns; do
- func_unset "${_G_hook}_result"
- eval $_G_hook '${1+"$@"}'
- func_propagate_result $_G_hook func_run_hooks
- if $func_propagate_result_result; then
- eval set dummy "$func_run_hooks_result"; shift
- fi
- done
-}
-
-
-
-## --------------- ##
-## Option parsing. ##
-## --------------- ##
-
-# In order to add your own option parsing hooks, you must accept the
-# full positional parameter list from your hook function. You may remove
-# or edit any options that you action, and then pass back the remaining
-# unprocessed options in '<hooked_function_name>_result', escaped
-# suitably for 'eval'.
-#
-# The '<hooked_function_name>_result' variable is automatically unset
-# before your hook gets called; for best performance, only set the
-# *_result variable when necessary (i.e. don't call the 'func_quote'
-# function unnecessarily because it can be an expensive operation on some
-# machines).
-#
-# Like this:
-#
-# my_options_prep ()
-# {
-# $debug_cmd
-#
-# # Extend the existing usage message.
-# usage_message=$usage_message'
-# -s, --silent don'\''t print informational messages
-# '
-# # No change in '$@' (ignored completely by this hook). Leave
-# # my_options_prep_result variable intact.
-# }
-# func_add_hook func_options_prep my_options_prep
-#
-#
-# my_silent_option ()
-# {
-# $debug_cmd
-#
-# args_changed=false
-#
-# # Note that, for efficiency, we parse as many options as we can
-# # recognise in a loop before passing the remainder back to the
-# # caller on the first unrecognised argument we encounter.
-# while test $# -gt 0; do
-# opt=$1; shift
-# case $opt in
-# --silent|-s) opt_silent=:
-# args_changed=:
-# ;;
-# # Separate non-argument short options:
-# -s*) func_split_short_opt "$_G_opt"
-# set dummy "$func_split_short_opt_name" \
-# "-$func_split_short_opt_arg" ${1+"$@"}
-# shift
-# args_changed=:
-# ;;
-# *) # Make sure the first unrecognised option "$_G_opt"
-# # is added back to "$@" in case we need it later,
-# # if $args_changed was set to 'true'.
-# set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
-# esac
-# done
-#
-# # Only call 'func_quote' here if we processed at least one argument.
-# if $args_changed; then
-# func_quote eval ${1+"$@"}
-# my_silent_option_result=$func_quote_result
-# fi
-# }
-# func_add_hook func_parse_options my_silent_option
-#
-#
-# my_option_validation ()
-# {
-# $debug_cmd
-#
-# $opt_silent && $opt_verbose && func_fatal_help "\
-# '--silent' and '--verbose' options are mutually exclusive."
-# }
-# func_add_hook func_validate_options my_option_validation
-#
-# You'll also need to manually amend $usage_message to reflect the extra
-# options you parse. It's preferable to append if you can, so that
-# multiple option parsing hooks can be added safely.
-
-
-# func_options_finish [ARG]...
-# ----------------------------
-# Finishing the option parse loop (call 'func_options' hooks ATM).
-func_options_finish ()
-{
- $debug_cmd
-
- func_run_hooks func_options ${1+"$@"}
- func_propagate_result func_run_hooks func_options_finish
-}
-
-
-# func_options [ARG]...
-# ---------------------
-# All the functions called inside func_options are hookable. See the
-# individual implementations for details.
-func_hookable func_options
-func_options ()
-{
- $debug_cmd
-
- _G_options_quoted=false
-
- for my_func in options_prep parse_options validate_options options_finish
- do
- func_unset func_${my_func}_result
- func_unset func_run_hooks_result
- eval func_$my_func '${1+"$@"}'
- func_propagate_result func_$my_func func_options
- if $func_propagate_result_result; then
- eval set dummy "$func_options_result"; shift
- _G_options_quoted=:
- fi
- done
-
- $_G_options_quoted || {
- # As we (func_options) are top-level options-parser function and
- # nobody quoted "$@" for us yet, we need to do it explicitly for
- # caller.
- func_quote eval ${1+"$@"}
- func_options_result=$func_quote_result
- }
-}
-
-
-# func_options_prep [ARG]...
-# --------------------------
-# All initialisations required before starting the option parse loop.
-# Note that when calling hook functions, we pass through the list of
-# positional parameters. If a hook function modifies that list, and
-# needs to propagate that back to rest of this script, then the complete
-# modified list must be put in 'func_run_hooks_result' before returning.
-func_hookable func_options_prep
-func_options_prep ()
-{
- $debug_cmd
-
- # Option defaults:
- opt_verbose=false
- opt_warning_types=
-
- func_run_hooks func_options_prep ${1+"$@"}
- func_propagate_result func_run_hooks func_options_prep
-}
-
-
-# func_parse_options [ARG]...
-# ---------------------------
-# The main option parsing loop.
-func_hookable func_parse_options
-func_parse_options ()
-{
- $debug_cmd
-
- _G_parse_options_requote=false
- # this just eases exit handling
- while test $# -gt 0; do
- # Defer to hook functions for initial option parsing, so they
- # get priority in the event of reusing an option name.
- func_run_hooks func_parse_options ${1+"$@"}
- func_propagate_result func_run_hooks func_parse_options
- if $func_propagate_result_result; then
- eval set dummy "$func_parse_options_result"; shift
- # Even though we may have changed "$@", we passed the "$@" array
- # down into the hook and it quoted it for us (because we are in
- # this if-branch). No need to quote it again.
- _G_parse_options_requote=false
- fi
-
- # Break out of the loop if we already parsed every option.
- test $# -gt 0 || break
-
- # We expect that one of the options parsed in this function matches
- # and thus we remove _G_opt from "$@" and need to re-quote.
- _G_match_parse_options=:
- _G_opt=$1
- shift
- case $_G_opt in
- --debug|-x) debug_cmd='set -x'
- func_echo "enabling shell trace mode" >&2
- $debug_cmd
- ;;
-
- --no-warnings|--no-warning|--no-warn)
- set dummy --warnings none ${1+"$@"}
- shift
- ;;
-
- --warnings|--warning|-W)
- if test $# = 0 && func_missing_arg $_G_opt; then
- _G_parse_options_requote=:
- break
- fi
- case " $warning_categories $1" in
- *" $1 "*)
- # trailing space prevents matching last $1 above
- func_append_uniq opt_warning_types " $1"
- ;;
- *all)
- opt_warning_types=$warning_categories
- ;;
- *none)
- opt_warning_types=none
- warning_func=:
- ;;
- *error)
- opt_warning_types=$warning_categories
- warning_func=func_fatal_error
- ;;
- *)
- func_fatal_error \
- "unsupported warning category: '$1'"
- ;;
- esac
- shift
- ;;
-
- --verbose|-v) opt_verbose=: ;;
- --version) func_version ;;
- -\?|-h) func_usage ;;
- --help) func_help ;;
-
- # Separate optargs to long options (plugins may need this):
- --*=*) func_split_equals "$_G_opt"
- set dummy "$func_split_equals_lhs" \
- "$func_split_equals_rhs" ${1+"$@"}
- shift
- ;;
-
- # Separate optargs to short options:
- -W*)
- func_split_short_opt "$_G_opt"
- set dummy "$func_split_short_opt_name" \
- "$func_split_short_opt_arg" ${1+"$@"}
- shift
- ;;
-
- # Separate non-argument short options:
- -\?*|-h*|-v*|-x*)
- func_split_short_opt "$_G_opt"
- set dummy "$func_split_short_opt_name" \
- "-$func_split_short_opt_arg" ${1+"$@"}
- shift
- ;;
-
- --) _G_parse_options_requote=: ; break ;;
- -*) func_fatal_help "unrecognised option: '$_G_opt'" ;;
- *) set dummy "$_G_opt" ${1+"$@"}; shift
- _G_match_parse_options=false
- break
- ;;
- esac
-
- if $_G_match_parse_options; then
- _G_parse_options_requote=:
- fi
- done
-
- if $_G_parse_options_requote; then
- # save modified positional parameters for caller
- func_quote eval ${1+"$@"}
- func_parse_options_result=$func_quote_result
- fi
-}
-
-
-# func_validate_options [ARG]...
-# ------------------------------
-# Perform any sanity checks on option settings and/or unconsumed
-# arguments.
-func_hookable func_validate_options
-func_validate_options ()
-{
- $debug_cmd
-
- # Display all warnings if -W was not given.
- test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
-
- func_run_hooks func_validate_options ${1+"$@"}
- func_propagate_result func_run_hooks func_validate_options
-
- # Bail if the options were screwed!
- $exit_cmd $EXIT_FAILURE
-}
-
-
-
-## ----------------- ##
-## Helper functions. ##
-## ----------------- ##
-
-# This section contains the helper functions used by the rest of the
-# hookable option parser framework in ascii-betical order.
-
-
-# func_fatal_help ARG...
-# ----------------------
-# Echo program name prefixed message to standard error, followed by
-# a help hint, and exit.
-func_fatal_help ()
-{
- $debug_cmd
-
- eval \$ECHO \""Usage: $usage"\"
- eval \$ECHO \""$fatal_help"\"
- func_error ${1+"$@"}
- exit $EXIT_FAILURE
-}
-
-
-# func_help
-# ---------
-# Echo long help message to standard output and exit.
-func_help ()
-{
- $debug_cmd
-
- func_usage_message
- $ECHO "$long_help_message"
- exit 0
-}
-
-
-# func_missing_arg ARGNAME
-# ------------------------
-# Echo program name prefixed message to standard error and set global
-# exit_cmd.
-func_missing_arg ()
-{
- $debug_cmd
-
- func_error "Missing argument for '$1'."
- exit_cmd=exit
-}
-
-
-# func_split_equals STRING
-# ------------------------
-# Set func_split_equals_lhs and func_split_equals_rhs shell variables
-# after splitting STRING at the '=' sign.
-test -z "$_G_HAVE_XSI_OPS" \
- && (eval 'x=a/b/c;
- test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
- && _G_HAVE_XSI_OPS=yes
-
-if test yes = "$_G_HAVE_XSI_OPS"
-then
- # This is an XSI compatible shell, allowing a faster implementation...
- eval 'func_split_equals ()
- {
- $debug_cmd
-
- func_split_equals_lhs=${1%%=*}
- func_split_equals_rhs=${1#*=}
- if test "x$func_split_equals_lhs" = "x$1"; then
- func_split_equals_rhs=
- fi
- }'
-else
- # ...otherwise fall back to using expr, which is often a shell builtin.
- func_split_equals ()
- {
- $debug_cmd
-
- func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
- func_split_equals_rhs=
- test "x$func_split_equals_lhs=" = "x$1" \
- || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
- }
-fi #func_split_equals
-
-
-# func_split_short_opt SHORTOPT
-# -----------------------------
-# Set func_split_short_opt_name and func_split_short_opt_arg shell
-# variables after splitting SHORTOPT after the 2nd character.
-if test yes = "$_G_HAVE_XSI_OPS"
-then
- # This is an XSI compatible shell, allowing a faster implementation...
- eval 'func_split_short_opt ()
- {
- $debug_cmd
-
- func_split_short_opt_arg=${1#??}
- func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
- }'
-else
- # ...otherwise fall back to using expr, which is often a shell builtin.
- func_split_short_opt ()
- {
- $debug_cmd
-
- func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'`
- func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
- }
-fi #func_split_short_opt
-
-
-# func_usage
-# ----------
-# Echo short help message to standard output and exit.
-func_usage ()
-{
- $debug_cmd
-
- func_usage_message
- $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
- exit 0
-}
-
-
-# func_usage_message
-# ------------------
-# Echo short help message to standard output.
-func_usage_message ()
-{
- $debug_cmd
-
- eval \$ECHO \""Usage: $usage"\"
- echo
- $SED -n 's|^# ||
- /^Written by/{
- x;p;x
- }
- h
- /^Written by/q' < "$progpath"
- echo
- eval \$ECHO \""$usage_message"\"
-}
-
-
-# func_version
-# ------------
-# Echo version message to standard output and exit.
-# The version message is extracted from the calling file's header
-# comments, with leading '# ' stripped:
-# 1. First display the progname and version
-# 2. Followed by the header comment line matching /^# Written by /
-# 3. Then a blank line followed by the first following line matching
-# /^# Copyright /
-# 4. Immediately followed by any lines between the previous matches,
-# except lines preceding the intervening completely blank line.
-# For example, see the header comments of this file.
-func_version ()
-{
- $debug_cmd
-
- printf '%s\n' "$progname $scriptversion"
- $SED -n '
- /^# Written by /!b
- s|^# ||; p; n
-
- :fwd2blnk
- /./ {
- n
- b fwd2blnk
- }
- p; n
-
- :holdwrnt
- s|^# ||
- s|^# *$||
- /^Copyright /!{
- /./H
- n
- b holdwrnt
- }
-
- s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
- G
- s|\(\n\)\n*|\1|g
- p; q' < "$progpath"
-
- exit $?
-}
-
-
-# Local variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'before-save-hook 'time-stamp)
-# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC"
-# time-stamp-time-zone: "UTC"
-# End:
-
-# Set a version string.
-scriptversion='(GNU libtool) 2.4.7'
-
-
-# func_echo ARG...
-# ----------------
-# Libtool also displays the current mode in messages, so override
-# funclib.sh func_echo with this custom definition.
-func_echo ()
-{
- $debug_cmd
-
- _G_message=$*
-
- func_echo_IFS=$IFS
- IFS=$nl
- for _G_line in $_G_message; do
- IFS=$func_echo_IFS
- $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
- done
- IFS=$func_echo_IFS
-}
-
-
-# func_warning ARG...
-# -------------------
-# Libtool warnings are not categorized, so override funclib.sh
-# func_warning with this simpler definition.
-func_warning ()
-{
- $debug_cmd
-
- $warning_func ${1+"$@"}
-}
-
-
-## ---------------- ##
-## Options parsing. ##
-## ---------------- ##
-
-# Hook in the functions to make sure our own options are parsed during
-# the option parsing loop.
-
-usage='$progpath [OPTION]... [MODE-ARG]...'
-
-# Short help message in response to '-h'.
-usage_message="Options:
- --config show all configuration variables
- --debug enable verbose shell tracing
- -n, --dry-run display commands without modifying any files
- --features display basic configuration information and exit
- --mode=MODE use operation mode MODE
- --no-warnings equivalent to '-Wnone'
- --preserve-dup-deps don't remove duplicate dependency libraries
- --quiet, --silent don't print informational messages
- --tag=TAG use configuration variables from tag TAG
- -v, --verbose print more informational messages than default
- --version print version information
- -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all]
- -h, --help, --help-all print short, long, or detailed help message
-"
-
-# Additional text appended to 'usage_message' in response to '--help'.
-func_help ()
-{
- $debug_cmd
-
- func_usage_message
- $ECHO "$long_help_message
-
-MODE must be one of the following:
-
- clean remove files from the build directory
- compile compile a source file into a libtool object
- execute automatically set library path, then run a program
- finish complete the installation of libtool libraries
- install install libraries or executables
- link create a library or an executable
- uninstall remove libraries from an installed directory
-
-MODE-ARGS vary depending on the MODE. When passed as first option,
-'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
-Try '$progname --help --mode=MODE' for a more detailed description of MODE.
-
-When reporting a bug, please describe a test case to reproduce it and
-include the following information:
-
- host-triplet: $host
- shell: $SHELL
- compiler: $LTCC
- compiler flags: $LTCFLAGS
- linker: $LD (gnu? $with_gnu_ld)
- version: $progname (GNU libtool) 2.4.7
- automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
- autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
-
-Report bugs to <bug-libtool@gnu.org>.
-GNU libtool home page: <http://www.gnu.org/software/libtool/>.
-General help using GNU software: <http://www.gnu.org/gethelp/>."
- exit 0
-}
-
-
-# func_lo2o OBJECT-NAME
-# ---------------------
-# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
-# object suffix.
-
-lo2o=s/\\.lo\$/.$objext/
-o2lo=s/\\.$objext\$/.lo/
-
-if test yes = "$_G_HAVE_XSI_OPS"; then
- eval 'func_lo2o ()
- {
- case $1 in
- *.lo) func_lo2o_result=${1%.lo}.$objext ;;
- * ) func_lo2o_result=$1 ;;
- esac
- }'
-
- # func_xform LIBOBJ-OR-SOURCE
- # ---------------------------
- # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
- # suffix to a '.lo' libtool-object suffix.
- eval 'func_xform ()
- {
- func_xform_result=${1%.*}.lo
- }'
-else
- # ...otherwise fall back to using sed.
- func_lo2o ()
- {
- func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
- }
-
- func_xform ()
- {
- func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
- }
-fi
-
-
-# func_fatal_configuration ARG...
-# -------------------------------
-# Echo program name prefixed message to standard error, followed by
-# a configuration failure hint, and exit.
-func_fatal_configuration ()
-{
- func_fatal_error ${1+"$@"} \
- "See the $PACKAGE documentation for more information." \
- "Fatal configuration error."
-}
-
-
-# func_config
-# -----------
-# Display the configuration for all the tags in this script.
-func_config ()
-{
- re_begincf='^# ### BEGIN LIBTOOL'
- re_endcf='^# ### END LIBTOOL'
-
- # Default configuration.
- $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
-
- # Now print the configurations for the tags.
- for tagname in $taglist; do
- $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
- done
-
- exit $?
-}
-
-
-# func_features
-# -------------
-# Display the features supported by this script.
-func_features ()
-{
- echo "host: $host"
- if test yes = "$build_libtool_libs"; then
- echo "enable shared libraries"
- else
- echo "disable shared libraries"
- fi
- if test yes = "$build_old_libs"; then
- echo "enable static libraries"
- else
- echo "disable static libraries"
- fi
-
- exit $?
-}
-
-
-# func_enable_tag TAGNAME
-# -----------------------
-# Verify that TAGNAME is valid, and either flag an error and exit, or
-# enable the TAGNAME tag. We also add TAGNAME to the global $taglist
-# variable here.
-func_enable_tag ()
-{
- # Global variable:
- tagname=$1
-
- re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
- re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
- sed_extractcf=/$re_begincf/,/$re_endcf/p
-
- # Validate tagname.
- case $tagname in
- *[!-_A-Za-z0-9,/]*)
- func_fatal_error "invalid tag name: $tagname"
- ;;
- esac
-
- # Don't test for the "default" C tag, as we know it's
- # there but not specially marked.
- case $tagname in
- CC) ;;
- *)
- if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
- taglist="$taglist $tagname"
-
- # Evaluate the configuration. Be careful to quote the path
- # and the sed script, to avoid splitting on whitespace, but
- # also don't use non-portable quotes within backquotes within
- # quotes we have to do it in 2 steps:
- extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
- eval "$extractedcf"
- else
- func_error "ignoring unknown tag $tagname"
- fi
- ;;
- esac
-}
-
-
-# func_check_version_match
-# ------------------------
-# Ensure that we are using m4 macros, and libtool script from the same
-# release of libtool.
-func_check_version_match ()
-{
- if test "$package_revision" != "$macro_revision"; then
- if test "$VERSION" != "$macro_version"; then
- if test -z "$macro_version"; then
- cat >&2 <<_LT_EOF
-$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
-$progname: definition of this LT_INIT comes from an older release.
-$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
-$progname: and run autoconf again.
-_LT_EOF
- else
- cat >&2 <<_LT_EOF
-$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
-$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
-$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
-$progname: and run autoconf again.
-_LT_EOF
- fi
- else
- cat >&2 <<_LT_EOF
-$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
-$progname: but the definition of this LT_INIT comes from revision $macro_revision.
-$progname: You should recreate aclocal.m4 with macros from revision $package_revision
-$progname: of $PACKAGE $VERSION and run autoconf again.
-_LT_EOF
- fi
-
- exit $EXIT_MISMATCH
- fi
-}
-
-
-# libtool_options_prep [ARG]...
-# -----------------------------
-# Preparation for options parsed by libtool.
-libtool_options_prep ()
-{
- $debug_mode
-
- # Option defaults:
- opt_config=false
- opt_dlopen=
- opt_dry_run=false
- opt_help=false
- opt_mode=
- opt_preserve_dup_deps=false
- opt_quiet=false
-
- nonopt=
- preserve_args=
-
- _G_rc_lt_options_prep=:
-
- # Shorthand for --mode=foo, only valid as the first argument
- case $1 in
- clean|clea|cle|cl)
- shift; set dummy --mode clean ${1+"$@"}; shift
- ;;
- compile|compil|compi|comp|com|co|c)
- shift; set dummy --mode compile ${1+"$@"}; shift
- ;;
- execute|execut|execu|exec|exe|ex|e)
- shift; set dummy --mode execute ${1+"$@"}; shift
- ;;
- finish|finis|fini|fin|fi|f)
- shift; set dummy --mode finish ${1+"$@"}; shift
- ;;
- install|instal|insta|inst|ins|in|i)
- shift; set dummy --mode install ${1+"$@"}; shift
- ;;
- link|lin|li|l)
- shift; set dummy --mode link ${1+"$@"}; shift
- ;;
- uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
- shift; set dummy --mode uninstall ${1+"$@"}; shift
- ;;
- *)
- _G_rc_lt_options_prep=false
- ;;
- esac
-
- if $_G_rc_lt_options_prep; then
- # Pass back the list of options.
- func_quote eval ${1+"$@"}
- libtool_options_prep_result=$func_quote_result
- fi
-}
-func_add_hook func_options_prep libtool_options_prep
-
-
-# libtool_parse_options [ARG]...
-# ---------------------------------
-# Provide handling for libtool specific options.
-libtool_parse_options ()
-{
- $debug_cmd
-
- _G_rc_lt_parse_options=false
-
- # Perform our own loop to consume as many options as possible in
- # each iteration.
- while test $# -gt 0; do
- _G_match_lt_parse_options=:
- _G_opt=$1
- shift
- case $_G_opt in
- --dry-run|--dryrun|-n)
- opt_dry_run=:
- ;;
-
- --config) func_config ;;
-
- --dlopen|-dlopen)
- opt_dlopen="${opt_dlopen+$opt_dlopen
-}$1"
- shift
- ;;
-
- --preserve-dup-deps)
- opt_preserve_dup_deps=: ;;
-
- --features) func_features ;;
-
- --finish) set dummy --mode finish ${1+"$@"}; shift ;;
-
- --help) opt_help=: ;;
-
- --help-all) opt_help=': help-all' ;;
-
- --mode) test $# = 0 && func_missing_arg $_G_opt && break
- opt_mode=$1
- case $1 in
- # Valid mode arguments:
- clean|compile|execute|finish|install|link|relink|uninstall) ;;
-
- # Catch anything else as an error
- *) func_error "invalid argument for $_G_opt"
- exit_cmd=exit
- break
- ;;
- esac
- shift
- ;;
-
- --no-silent|--no-quiet)
- opt_quiet=false
- func_append preserve_args " $_G_opt"
- ;;
-
- --no-warnings|--no-warning|--no-warn)
- opt_warning=false
- func_append preserve_args " $_G_opt"
- ;;
-
- --no-verbose)
- opt_verbose=false
- func_append preserve_args " $_G_opt"
- ;;
-
- --silent|--quiet)
- opt_quiet=:
- opt_verbose=false
- func_append preserve_args " $_G_opt"
- ;;
-
- --tag) test $# = 0 && func_missing_arg $_G_opt && break
- opt_tag=$1
- func_append preserve_args " $_G_opt $1"
- func_enable_tag "$1"
- shift
- ;;
-
- --verbose|-v) opt_quiet=false
- opt_verbose=:
- func_append preserve_args " $_G_opt"
- ;;
-
- # An option not handled by this hook function:
- *) set dummy "$_G_opt" ${1+"$@"} ; shift
- _G_match_lt_parse_options=false
- break
- ;;
- esac
- $_G_match_lt_parse_options && _G_rc_lt_parse_options=:
- done
-
- if $_G_rc_lt_parse_options; then
- # save modified positional parameters for caller
- func_quote eval ${1+"$@"}
- libtool_parse_options_result=$func_quote_result
- fi
-}
-func_add_hook func_parse_options libtool_parse_options
-
-
-
-# libtool_validate_options [ARG]...
-# ---------------------------------
-# Perform any sanity checks on option settings and/or unconsumed
-# arguments.
-libtool_validate_options ()
-{
- # save first non-option argument
- if test 0 -lt $#; then
- nonopt=$1
- shift
- fi
-
- # preserve --debug
- test : = "$debug_cmd" || func_append preserve_args " --debug"
-
- case $host in
- # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
- # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
- *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
- # don't eliminate duplications in $postdeps and $predeps
- opt_duplicate_compiler_generated_deps=:
- ;;
- *)
- opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
- ;;
- esac
-
- $opt_help || {
- # Sanity checks first:
- func_check_version_match
-
- test yes != "$build_libtool_libs" \
- && test yes != "$build_old_libs" \
- && func_fatal_configuration "not configured to build any kind of library"
-
- # Darwin sucks
- eval std_shrext=\"$shrext_cmds\"
-
- # Only execute mode is allowed to have -dlopen flags.
- if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
- func_error "unrecognized option '-dlopen'"
- $ECHO "$help" 1>&2
- exit $EXIT_FAILURE
- fi
-
- # Change the help message to a mode-specific one.
- generic_help=$help
- help="Try '$progname --help --mode=$opt_mode' for more information."
- }
-
- # Pass back the unparsed argument list
- func_quote eval ${1+"$@"}
- libtool_validate_options_result=$func_quote_result
-}
-func_add_hook func_validate_options libtool_validate_options
-
-
-# Process options as early as possible so that --help and --version
-# can return quickly.
-func_options ${1+"$@"}
-eval set dummy "$func_options_result"; shift
-
-
-
-## ----------- ##
-## Main. ##
-## ----------- ##
-
-magic='%%%MAGIC variable%%%'
-magic_exe='%%%MAGIC EXE variable%%%'
-
-# Global variables.
-extracted_archives=
-extracted_serial=0
-
-# If this variable is set in any of the actions, the command in it
-# will be execed at the end. This prevents here-documents from being
-# left over by shells.
-exec_cmd=
-
-
-# A function that is used when there is no print builtin or printf.
-func_fallback_echo ()
-{
- eval 'cat <<_LTECHO_EOF
-$1
-_LTECHO_EOF'
-}
-
-# func_generated_by_libtool
-# True iff stdin has been generated by Libtool. This function is only
-# a basic sanity check; it will hardly flush out determined imposters.
-func_generated_by_libtool_p ()
-{
- $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
-}
-
-# func_lalib_p file
-# True iff FILE is a libtool '.la' library or '.lo' object file.
-# This function is only a basic sanity check; it will hardly flush out
-# determined imposters.
-func_lalib_p ()
-{
- test -f "$1" &&
- $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
-}
-
-# func_lalib_unsafe_p file
-# True iff FILE is a libtool '.la' library or '.lo' object file.
-# This function implements the same check as func_lalib_p without
-# resorting to external programs. To this end, it redirects stdin and
-# closes it afterwards, without saving the original file descriptor.
-# As a safety measure, use it only where a negative result would be
-# fatal anyway. Works if 'file' does not exist.
-func_lalib_unsafe_p ()
-{
- lalib_p=no
- if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
- for lalib_p_l in 1 2 3 4
- do
- read lalib_p_line
- case $lalib_p_line in
- \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
- esac
- done
- exec 0<&5 5<&-
- fi
- test yes = "$lalib_p"
-}
-
-# func_ltwrapper_script_p file
-# True iff FILE is a libtool wrapper script
-# This function is only a basic sanity check; it will hardly flush out
-# determined imposters.
-func_ltwrapper_script_p ()
-{
- test -f "$1" &&
- $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
-}
-
-# func_ltwrapper_executable_p file
-# True iff FILE is a libtool wrapper executable
-# This function is only a basic sanity check; it will hardly flush out
-# determined imposters.
-func_ltwrapper_executable_p ()
-{
- func_ltwrapper_exec_suffix=
- case $1 in
- *.exe) ;;
- *) func_ltwrapper_exec_suffix=.exe ;;
- esac
- $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
-}
-
-# func_ltwrapper_scriptname file
-# Assumes file is an ltwrapper_executable
-# uses $file to determine the appropriate filename for a
-# temporary ltwrapper_script.
-func_ltwrapper_scriptname ()
-{
- func_dirname_and_basename "$1" "" "."
- func_stripname '' '.exe' "$func_basename_result"
- func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
-}
-
-# func_ltwrapper_p file
-# True iff FILE is a libtool wrapper script or wrapper executable
-# This function is only a basic sanity check; it will hardly flush out
-# determined imposters.
-func_ltwrapper_p ()
-{
- func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
-}
-
-
-# func_execute_cmds commands fail_cmd
-# Execute tilde-delimited COMMANDS.
-# If FAIL_CMD is given, eval that upon failure.
-# FAIL_CMD may read-access the current command in variable CMD!
-func_execute_cmds ()
-{
- $debug_cmd
-
- save_ifs=$IFS; IFS='~'
- for cmd in $1; do
- IFS=$sp$nl
- eval cmd=\"$cmd\"
- IFS=$save_ifs
- func_show_eval "$cmd" "${2-:}"
- done
- IFS=$save_ifs
-}
-
-
-# func_source file
-# Source FILE, adding directory component if necessary.
-# Note that it is not necessary on cygwin/mingw to append a dot to
-# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
-# behavior happens only for exec(3), not for open(2)! Also, sourcing
-# 'FILE.' does not work on cygwin managed mounts.
-func_source ()
-{
- $debug_cmd
-
- case $1 in
- */* | *\\*) . "$1" ;;
- *) . "./$1" ;;
- esac
-}
-
-
-# func_resolve_sysroot PATH
-# Replace a leading = in PATH with a sysroot. Store the result into
-# func_resolve_sysroot_result
-func_resolve_sysroot ()
-{
- func_resolve_sysroot_result=$1
- case $func_resolve_sysroot_result in
- =*)
- func_stripname '=' '' "$func_resolve_sysroot_result"
- func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
- ;;
- esac
-}
-
-# func_replace_sysroot PATH
-# If PATH begins with the sysroot, replace it with = and
-# store the result into func_replace_sysroot_result.
-func_replace_sysroot ()
-{
- case $lt_sysroot:$1 in
- ?*:"$lt_sysroot"*)
- func_stripname "$lt_sysroot" '' "$1"
- func_replace_sysroot_result='='$func_stripname_result
- ;;
- *)
- # Including no sysroot.
- func_replace_sysroot_result=$1
- ;;
- esac
-}
-
-# func_infer_tag arg
-# Infer tagged configuration to use if any are available and
-# if one wasn't chosen via the "--tag" command line option.
-# Only attempt this if the compiler in the base compile
-# command doesn't match the default compiler.
-# arg is usually of the form 'gcc ...'
-func_infer_tag ()
-{
- $debug_cmd
-
- if test -n "$available_tags" && test -z "$tagname"; then
- CC_quoted=
- for arg in $CC; do
- func_append_quoted CC_quoted "$arg"
- done
- CC_expanded=`func_echo_all $CC`
- CC_quoted_expanded=`func_echo_all $CC_quoted`
- case $@ in
- # Blanks in the command may have been stripped by the calling shell,
- # but not from the CC environment variable when configure was run.
- " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
- " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
- # Blanks at the start of $base_compile will cause this to fail
- # if we don't check for them as well.
- *)
- for z in $available_tags; do
- if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
- # Evaluate the configuration.
- eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
- CC_quoted=
- for arg in $CC; do
- # Double-quote args containing other shell metacharacters.
- func_append_quoted CC_quoted "$arg"
- done
- CC_expanded=`func_echo_all $CC`
- CC_quoted_expanded=`func_echo_all $CC_quoted`
- case "$@ " in
- " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
- " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
- # The compiler in the base compile command matches
- # the one in the tagged configuration.
- # Assume this is the tagged configuration we want.
- tagname=$z
- break
- ;;
- esac
- fi
- done
- # If $tagname still isn't set, then no tagged configuration
- # was found and let the user know that the "--tag" command
- # line option must be used.
- if test -z "$tagname"; then
- func_echo "unable to infer tagged configuration"
- func_fatal_error "specify a tag with '--tag'"
-# else
-# func_verbose "using $tagname tagged configuration"
- fi
- ;;
- esac
- fi
-}
-
-
-
-# func_write_libtool_object output_name pic_name nonpic_name
-# Create a libtool object file (analogous to a ".la" file),
-# but don't create it if we're doing a dry run.
-func_write_libtool_object ()
-{
- write_libobj=$1
- if test yes = "$build_libtool_libs"; then
- write_lobj=\'$2\'
- else
- write_lobj=none
- fi
-
- if test yes = "$build_old_libs"; then
- write_oldobj=\'$3\'
- else
- write_oldobj=none
- fi
-
- $opt_dry_run || {
- cat >${write_libobj}T <<EOF
-# $write_libobj - a libtool object file
-# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object=$write_lobj
-
-# Name of the non-PIC object
-non_pic_object=$write_oldobj
-
-EOF
- $MV "${write_libobj}T" "$write_libobj"
- }
-}
-
-
-##################################################
-# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
-##################################################
-
-# func_convert_core_file_wine_to_w32 ARG
-# Helper function used by file name conversion functions when $build is *nix,
-# and $host is mingw, cygwin, or some other w32 environment. Relies on a
-# correctly configured wine environment available, with the winepath program
-# in $build's $PATH.
-#
-# ARG is the $build file name to be converted to w32 format.
-# Result is available in $func_convert_core_file_wine_to_w32_result, and will
-# be empty on error (or when ARG is empty)
-func_convert_core_file_wine_to_w32 ()
-{
- $debug_cmd
-
- func_convert_core_file_wine_to_w32_result=$1
- if test -n "$1"; then
- # Unfortunately, winepath does not exit with a non-zero error code, so we
- # are forced to check the contents of stdout. On the other hand, if the
- # command is not found, the shell will set an exit code of 127 and print
- # *an error message* to stdout. So we must check for both error code of
- # zero AND non-empty stdout, which explains the odd construction:
- func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
- if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
- func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
- $SED -e "$sed_naive_backslashify"`
- else
- func_convert_core_file_wine_to_w32_result=
- fi
- fi
-}
-# end: func_convert_core_file_wine_to_w32
-
-
-# func_convert_core_path_wine_to_w32 ARG
-# Helper function used by path conversion functions when $build is *nix, and
-# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
-# configured wine environment available, with the winepath program in $build's
-# $PATH. Assumes ARG has no leading or trailing path separator characters.
-#
-# ARG is path to be converted from $build format to win32.
-# Result is available in $func_convert_core_path_wine_to_w32_result.
-# Unconvertible file (directory) names in ARG are skipped; if no directory names
-# are convertible, then the result may be empty.
-func_convert_core_path_wine_to_w32 ()
-{
- $debug_cmd
-
- # unfortunately, winepath doesn't convert paths, only file names
- func_convert_core_path_wine_to_w32_result=
- if test -n "$1"; then
- oldIFS=$IFS
- IFS=:
- for func_convert_core_path_wine_to_w32_f in $1; do
- IFS=$oldIFS
- func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
- if test -n "$func_convert_core_file_wine_to_w32_result"; then
- if test -z "$func_convert_core_path_wine_to_w32_result"; then
- func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
- else
- func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
- fi
- fi
- done
- IFS=$oldIFS
- fi
-}
-# end: func_convert_core_path_wine_to_w32
-
-
-# func_cygpath ARGS...
-# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
-# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
-# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
-# (2), returns the Cygwin file name or path in func_cygpath_result (input
-# file name or path is assumed to be in w32 format, as previously converted
-# from $build's *nix or MSYS format). In case (3), returns the w32 file name
-# or path in func_cygpath_result (input file name or path is assumed to be in
-# Cygwin format). Returns an empty string on error.
-#
-# ARGS are passed to cygpath, with the last one being the file name or path to
-# be converted.
-#
-# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
-# environment variable; do not put it in $PATH.
-func_cygpath ()
-{
- $debug_cmd
-
- if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
- func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
- if test "$?" -ne 0; then
- # on failure, ensure result is empty
- func_cygpath_result=
- fi
- else
- func_cygpath_result=
- func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
- fi
-}
-#end: func_cygpath
-
-
-# func_convert_core_msys_to_w32 ARG
-# Convert file name or path ARG from MSYS format to w32 format. Return
-# result in func_convert_core_msys_to_w32_result.
-func_convert_core_msys_to_w32 ()
-{
- $debug_cmd
-
- # awkward: cmd appends spaces to result
- func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
- $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
-}
-#end: func_convert_core_msys_to_w32
-
-
-# func_convert_file_check ARG1 ARG2
-# Verify that ARG1 (a file name in $build format) was converted to $host
-# format in ARG2. Otherwise, emit an error message, but continue (resetting
-# func_to_host_file_result to ARG1).
-func_convert_file_check ()
-{
- $debug_cmd
-
- if test -z "$2" && test -n "$1"; then
- func_error "Could not determine host file name corresponding to"
- func_error " '$1'"
- func_error "Continuing, but uninstalled executables may not work."
- # Fallback:
- func_to_host_file_result=$1
- fi
-}
-# end func_convert_file_check
-
-
-# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
-# Verify that FROM_PATH (a path in $build format) was converted to $host
-# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
-# func_to_host_file_result to a simplistic fallback value (see below).
-func_convert_path_check ()
-{
- $debug_cmd
-
- if test -z "$4" && test -n "$3"; then
- func_error "Could not determine the host path corresponding to"
- func_error " '$3'"
- func_error "Continuing, but uninstalled executables may not work."
- # Fallback. This is a deliberately simplistic "conversion" and
- # should not be "improved". See libtool.info.
- if test "x$1" != "x$2"; then
- lt_replace_pathsep_chars="s|$1|$2|g"
- func_to_host_path_result=`echo "$3" |
- $SED -e "$lt_replace_pathsep_chars"`
- else
- func_to_host_path_result=$3
- fi
- fi
-}
-# end func_convert_path_check
-
-
-# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
-# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
-# and appending REPL if ORIG matches BACKPAT.
-func_convert_path_front_back_pathsep ()
-{
- $debug_cmd
-
- case $4 in
- $1 ) func_to_host_path_result=$3$func_to_host_path_result
- ;;
- esac
- case $4 in
- $2 ) func_append func_to_host_path_result "$3"
- ;;
- esac
-}
-# end func_convert_path_front_back_pathsep
-
-
-##################################################
-# $build to $host FILE NAME CONVERSION FUNCTIONS #
-##################################################
-# invoked via '$to_host_file_cmd ARG'
-#
-# In each case, ARG is the path to be converted from $build to $host format.
-# Result will be available in $func_to_host_file_result.
-
-
-# func_to_host_file ARG
-# Converts the file name ARG from $build format to $host format. Return result
-# in func_to_host_file_result.
-func_to_host_file ()
-{
- $debug_cmd
-
- $to_host_file_cmd "$1"
-}
-# end func_to_host_file
-
-
-# func_to_tool_file ARG LAZY
-# converts the file name ARG from $build format to toolchain format. Return
-# result in func_to_tool_file_result. If the conversion in use is listed
-# in (the comma separated) LAZY, no conversion takes place.
-func_to_tool_file ()
-{
- $debug_cmd
-
- case ,$2, in
- *,"$to_tool_file_cmd",*)
- func_to_tool_file_result=$1
- ;;
- *)
- $to_tool_file_cmd "$1"
- func_to_tool_file_result=$func_to_host_file_result
- ;;
- esac
-}
-# end func_to_tool_file
-
-
-# func_convert_file_noop ARG
-# Copy ARG to func_to_host_file_result.
-func_convert_file_noop ()
-{
- func_to_host_file_result=$1
-}
-# end func_convert_file_noop
-
-
-# func_convert_file_msys_to_w32 ARG
-# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
-# conversion to w32 is not available inside the cwrapper. Returns result in
-# func_to_host_file_result.
-func_convert_file_msys_to_w32 ()
-{
- $debug_cmd
-
- func_to_host_file_result=$1
- if test -n "$1"; then
- func_convert_core_msys_to_w32 "$1"
- func_to_host_file_result=$func_convert_core_msys_to_w32_result
- fi
- func_convert_file_check "$1" "$func_to_host_file_result"
-}
-# end func_convert_file_msys_to_w32
-
-
-# func_convert_file_cygwin_to_w32 ARG
-# Convert file name ARG from Cygwin to w32 format. Returns result in
-# func_to_host_file_result.
-func_convert_file_cygwin_to_w32 ()
-{
- $debug_cmd
-
- func_to_host_file_result=$1
- if test -n "$1"; then
- # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
- # LT_CYGPATH in this case.
- func_to_host_file_result=`cygpath -m "$1"`
- fi
- func_convert_file_check "$1" "$func_to_host_file_result"
-}
-# end func_convert_file_cygwin_to_w32
-
-
-# func_convert_file_nix_to_w32 ARG
-# Convert file name ARG from *nix to w32 format. Requires a wine environment
-# and a working winepath. Returns result in func_to_host_file_result.
-func_convert_file_nix_to_w32 ()
-{
- $debug_cmd
-
- func_to_host_file_result=$1
- if test -n "$1"; then
- func_convert_core_file_wine_to_w32 "$1"
- func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
- fi
- func_convert_file_check "$1" "$func_to_host_file_result"
-}
-# end func_convert_file_nix_to_w32
-
-
-# func_convert_file_msys_to_cygwin ARG
-# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
-# Returns result in func_to_host_file_result.
-func_convert_file_msys_to_cygwin ()
-{
- $debug_cmd
-
- func_to_host_file_result=$1
- if test -n "$1"; then
- func_convert_core_msys_to_w32 "$1"
- func_cygpath -u "$func_convert_core_msys_to_w32_result"
- func_to_host_file_result=$func_cygpath_result
- fi
- func_convert_file_check "$1" "$func_to_host_file_result"
-}
-# end func_convert_file_msys_to_cygwin
-
-
-# func_convert_file_nix_to_cygwin ARG
-# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed
-# in a wine environment, working winepath, and LT_CYGPATH set. Returns result
-# in func_to_host_file_result.
-func_convert_file_nix_to_cygwin ()
-{
- $debug_cmd
-
- func_to_host_file_result=$1
- if test -n "$1"; then
- # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
- func_convert_core_file_wine_to_w32 "$1"
- func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
- func_to_host_file_result=$func_cygpath_result
- fi
- func_convert_file_check "$1" "$func_to_host_file_result"
-}
-# end func_convert_file_nix_to_cygwin
-
-
-#############################################
-# $build to $host PATH CONVERSION FUNCTIONS #
-#############################################
-# invoked via '$to_host_path_cmd ARG'
-#
-# In each case, ARG is the path to be converted from $build to $host format.
-# The result will be available in $func_to_host_path_result.
-#
-# Path separators are also converted from $build format to $host format. If
-# ARG begins or ends with a path separator character, it is preserved (but
-# converted to $host format) on output.
-#
-# All path conversion functions are named using the following convention:
-# file name conversion function : func_convert_file_X_to_Y ()
-# path conversion function : func_convert_path_X_to_Y ()
-# where, for any given $build/$host combination the 'X_to_Y' value is the
-# same. If conversion functions are added for new $build/$host combinations,
-# the two new functions must follow this pattern, or func_init_to_host_path_cmd
-# will break.
-
-
-# func_init_to_host_path_cmd
-# Ensures that function "pointer" variable $to_host_path_cmd is set to the
-# appropriate value, based on the value of $to_host_file_cmd.
-to_host_path_cmd=
-func_init_to_host_path_cmd ()
-{
- $debug_cmd
-
- if test -z "$to_host_path_cmd"; then
- func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
- to_host_path_cmd=func_convert_path_$func_stripname_result
- fi
-}
-
-
-# func_to_host_path ARG
-# Converts the path ARG from $build format to $host format. Return result
-# in func_to_host_path_result.
-func_to_host_path ()
-{
- $debug_cmd
-
- func_init_to_host_path_cmd
- $to_host_path_cmd "$1"
-}
-# end func_to_host_path
-
-
-# func_convert_path_noop ARG
-# Copy ARG to func_to_host_path_result.
-func_convert_path_noop ()
-{
- func_to_host_path_result=$1
-}
-# end func_convert_path_noop
-
-
-# func_convert_path_msys_to_w32 ARG
-# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
-# conversion to w32 is not available inside the cwrapper. Returns result in
-# func_to_host_path_result.
-func_convert_path_msys_to_w32 ()
-{
- $debug_cmd
-
- func_to_host_path_result=$1
- if test -n "$1"; then
- # Remove leading and trailing path separator characters from ARG. MSYS
- # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
- # and winepath ignores them completely.
- func_stripname : : "$1"
- func_to_host_path_tmp1=$func_stripname_result
- func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
- func_to_host_path_result=$func_convert_core_msys_to_w32_result
- func_convert_path_check : ";" \
- "$func_to_host_path_tmp1" "$func_to_host_path_result"
- func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
- fi
-}
-# end func_convert_path_msys_to_w32
-
-
-# func_convert_path_cygwin_to_w32 ARG
-# Convert path ARG from Cygwin to w32 format. Returns result in
-# func_to_host_file_result.
-func_convert_path_cygwin_to_w32 ()
-{
- $debug_cmd
-
- func_to_host_path_result=$1
- if test -n "$1"; then
- # See func_convert_path_msys_to_w32:
- func_stripname : : "$1"
- func_to_host_path_tmp1=$func_stripname_result
- func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
- func_convert_path_check : ";" \
- "$func_to_host_path_tmp1" "$func_to_host_path_result"
- func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
- fi
-}
-# end func_convert_path_cygwin_to_w32
-
-
-# func_convert_path_nix_to_w32 ARG
-# Convert path ARG from *nix to w32 format. Requires a wine environment and
-# a working winepath. Returns result in func_to_host_file_result.
-func_convert_path_nix_to_w32 ()
-{
- $debug_cmd
-
- func_to_host_path_result=$1
- if test -n "$1"; then
- # See func_convert_path_msys_to_w32:
- func_stripname : : "$1"
- func_to_host_path_tmp1=$func_stripname_result
- func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
- func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
- func_convert_path_check : ";" \
- "$func_to_host_path_tmp1" "$func_to_host_path_result"
- func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
- fi
-}
-# end func_convert_path_nix_to_w32
-
-
-# func_convert_path_msys_to_cygwin ARG
-# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
-# Returns result in func_to_host_file_result.
-func_convert_path_msys_to_cygwin ()
-{
- $debug_cmd
-
- func_to_host_path_result=$1
- if test -n "$1"; then
- # See func_convert_path_msys_to_w32:
- func_stripname : : "$1"
- func_to_host_path_tmp1=$func_stripname_result
- func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
- func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
- func_to_host_path_result=$func_cygpath_result
- func_convert_path_check : : \
- "$func_to_host_path_tmp1" "$func_to_host_path_result"
- func_convert_path_front_back_pathsep ":*" "*:" : "$1"
- fi
-}
-# end func_convert_path_msys_to_cygwin
-
-
-# func_convert_path_nix_to_cygwin ARG
-# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a
-# a wine environment, working winepath, and LT_CYGPATH set. Returns result in
-# func_to_host_file_result.
-func_convert_path_nix_to_cygwin ()
-{
- $debug_cmd
-
- func_to_host_path_result=$1
- if test -n "$1"; then
- # Remove leading and trailing path separator characters from
- # ARG. msys behavior is inconsistent here, cygpath turns them
- # into '.;' and ';.', and winepath ignores them completely.
- func_stripname : : "$1"
- func_to_host_path_tmp1=$func_stripname_result
- func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
- func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
- func_to_host_path_result=$func_cygpath_result
- func_convert_path_check : : \
- "$func_to_host_path_tmp1" "$func_to_host_path_result"
- func_convert_path_front_back_pathsep ":*" "*:" : "$1"
- fi
-}
-# end func_convert_path_nix_to_cygwin
-
-
-# func_dll_def_p FILE
-# True iff FILE is a Windows DLL '.def' file.
-# Keep in sync with _LT_DLL_DEF_P in libtool.m4
-func_dll_def_p ()
-{
- $debug_cmd
-
- func_dll_def_p_tmp=`$SED -n \
- -e 's/^[ ]*//' \
- -e '/^\(;.*\)*$/d' \
- -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \
- -e q \
- "$1"`
- test DEF = "$func_dll_def_p_tmp"
-}
-
-
-# func_mode_compile arg...
-func_mode_compile ()
-{
- $debug_cmd
-
- # Get the compilation command and the source file.
- base_compile=
- srcfile=$nonopt # always keep a non-empty value in "srcfile"
- suppress_opt=yes
- suppress_output=
- arg_mode=normal
- libobj=
- later=
- pie_flag=
-
- for arg
- do
- case $arg_mode in
- arg )
- # do not "continue". Instead, add this to base_compile
- lastarg=$arg
- arg_mode=normal
- ;;
-
- target )
- libobj=$arg
- arg_mode=normal
- continue
- ;;
-
- normal )
- # Accept any command-line options.
- case $arg in
- -o)
- test -n "$libobj" && \
- func_fatal_error "you cannot specify '-o' more than once"
- arg_mode=target
- continue
- ;;
-
- -pie | -fpie | -fPIE)
- func_append pie_flag " $arg"
- continue
- ;;
-
- -shared | -static | -prefer-pic | -prefer-non-pic)
- func_append later " $arg"
- continue
- ;;
-
- -no-suppress)
- suppress_opt=no
- continue
- ;;
-
- -Xcompiler)
- arg_mode=arg # the next one goes into the "base_compile" arg list
- continue # The current "srcfile" will either be retained or
- ;; # replaced later. I would guess that would be a bug.
-
- -Wc,*)
- func_stripname '-Wc,' '' "$arg"
- args=$func_stripname_result
- lastarg=
- save_ifs=$IFS; IFS=,
- for arg in $args; do
- IFS=$save_ifs
- func_append_quoted lastarg "$arg"
- done
- IFS=$save_ifs
- func_stripname ' ' '' "$lastarg"
- lastarg=$func_stripname_result
-
- # Add the arguments to base_compile.
- func_append base_compile " $lastarg"
- continue
- ;;
-
- *)
- # Accept the current argument as the source file.
- # The previous "srcfile" becomes the current argument.
- #
- lastarg=$srcfile
- srcfile=$arg
- ;;
- esac # case $arg
- ;;
- esac # case $arg_mode
-
- # Aesthetically quote the previous argument.
- func_append_quoted base_compile "$lastarg"
- done # for arg
-
- case $arg_mode in
- arg)
- func_fatal_error "you must specify an argument for -Xcompile"
- ;;
- target)
- func_fatal_error "you must specify a target with '-o'"
- ;;
- *)
- # Get the name of the library object.
- test -z "$libobj" && {
- func_basename "$srcfile"
- libobj=$func_basename_result
- }
- ;;
- esac
-
- # Recognize several different file suffixes.
- # If the user specifies -o file.o, it is replaced with file.lo
- case $libobj in
- *.[cCFSifmso] | \
- *.ada | *.adb | *.ads | *.asm | \
- *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
- *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
- func_xform "$libobj"
- libobj=$func_xform_result
- ;;
- esac
-
- case $libobj in
- *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
- *)
- func_fatal_error "cannot determine name of library object from '$libobj'"
- ;;
- esac
-
- func_infer_tag $base_compile
-
- for arg in $later; do
- case $arg in
- -shared)
- test yes = "$build_libtool_libs" \
- || func_fatal_configuration "cannot build a shared library"
- build_old_libs=no
- continue
- ;;
-
- -static)
- build_libtool_libs=no
- build_old_libs=yes
- continue
- ;;
-
- -prefer-pic)
- pic_mode=yes
- continue
- ;;
-
- -prefer-non-pic)
- pic_mode=no
- continue
- ;;
- esac
- done
-
- func_quote_arg pretty "$libobj"
- test "X$libobj" != "X$func_quote_arg_result" \
- && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
- && func_warning "libobj name '$libobj' may not contain shell special characters."
- func_dirname_and_basename "$obj" "/" ""
- objname=$func_basename_result
- xdir=$func_dirname_result
- lobj=$xdir$objdir/$objname
-
- test -z "$base_compile" && \
- func_fatal_help "you must specify a compilation command"
-
- # Delete any leftover library objects.
- if test yes = "$build_old_libs"; then
- removelist="$obj $lobj $libobj ${libobj}T"
- else
- removelist="$lobj $libobj ${libobj}T"
- fi
-
- # On Cygwin there's no "real" PIC flag so we must build both object types
- case $host_os in
- cygwin* | mingw* | pw32* | os2* | cegcc*)
- pic_mode=default
- ;;
- esac
- if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
- # non-PIC code in shared libraries is not supported
- pic_mode=default
- fi
-
- # Calculate the filename of the output object if compiler does
- # not support -o with -c
- if test no = "$compiler_c_o"; then
- output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
- lockfile=$output_obj.lock
- else
- output_obj=
- need_locks=no
- lockfile=
- fi
-
- # Lock this critical section if it is needed
- # We use this script file to make the link, it avoids creating a new file
- if test yes = "$need_locks"; then
- until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
- func_echo "Waiting for $lockfile to be removed"
- sleep 2
- done
- elif test warn = "$need_locks"; then
- if test -f "$lockfile"; then
- $ECHO "\
-*** ERROR, $lockfile exists and contains:
-`cat $lockfile 2>/dev/null`
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support '-c' and '-o' together. If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
- $opt_dry_run || $RM $removelist
- exit $EXIT_FAILURE
- fi
- func_append removelist " $output_obj"
- $ECHO "$srcfile" > "$lockfile"
- fi
-
- $opt_dry_run || $RM $removelist
- func_append removelist " $lockfile"
- trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
-
- func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
- srcfile=$func_to_tool_file_result
- func_quote_arg pretty "$srcfile"
- qsrcfile=$func_quote_arg_result
-
- # Only build a PIC object if we are building libtool libraries.
- if test yes = "$build_libtool_libs"; then
- # Without this assignment, base_compile gets emptied.
- fbsd_hideous_sh_bug=$base_compile
-
- if test no != "$pic_mode"; then
- command="$base_compile $qsrcfile $pic_flag"
- else
- # Don't build PIC code
- command="$base_compile $qsrcfile"
- fi
-
- func_mkdir_p "$xdir$objdir"
-
- if test -z "$output_obj"; then
- # Place PIC objects in $objdir
- func_append command " -o $lobj"
- fi
-
- func_show_eval_locale "$command" \
- 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
-
- if test warn = "$need_locks" &&
- test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
- $ECHO "\
-*** ERROR, $lockfile contains:
-`cat $lockfile 2>/dev/null`
-
-but it should contain:
-$srcfile
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support '-c' and '-o' together. If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
- $opt_dry_run || $RM $removelist
- exit $EXIT_FAILURE
- fi
-
- # Just move the object if needed, then go on to compile the next one
- if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
- func_show_eval '$MV "$output_obj" "$lobj"' \
- 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
- fi
-
- # Allow error messages only from the first compilation.
- if test yes = "$suppress_opt"; then
- suppress_output=' >/dev/null 2>&1'
- fi
- fi
-
- # Only build a position-dependent object if we build old libraries.
- if test yes = "$build_old_libs"; then
- if test yes != "$pic_mode"; then
- # Don't build PIC code
- command="$base_compile $qsrcfile$pie_flag"
- else
- command="$base_compile $qsrcfile $pic_flag"
- fi
- if test yes = "$compiler_c_o"; then
- func_append command " -o $obj"
- fi
-
- # Suppress compiler output if we already did a PIC compilation.
- func_append command "$suppress_output"
- func_show_eval_locale "$command" \
- '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
-
- if test warn = "$need_locks" &&
- test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
- $ECHO "\
-*** ERROR, $lockfile contains:
-`cat $lockfile 2>/dev/null`
-
-but it should contain:
-$srcfile
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support '-c' and '-o' together. If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
- $opt_dry_run || $RM $removelist
- exit $EXIT_FAILURE
- fi
-
- # Just move the object if needed
- if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
- func_show_eval '$MV "$output_obj" "$obj"' \
- 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
- fi
- fi
-
- $opt_dry_run || {
- func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
-
- # Unlock the critical section if it was locked
- if test no != "$need_locks"; then
- removelist=$lockfile
- $RM "$lockfile"
- fi
- }
-
- exit $EXIT_SUCCESS
-}
-
-$opt_help || {
- test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
-}
-
-func_mode_help ()
-{
- # We need to display help for each of the modes.
- case $opt_mode in
- "")
- # Generic help is extracted from the usage comments
- # at the start of this file.
- func_help
- ;;
-
- clean)
- $ECHO \
-"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
-
-Remove files from the build directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed
-to RM.
-
-If FILE is a libtool library, object or program, all the files associated
-with it are deleted. Otherwise, only FILE itself is deleted using RM."
- ;;
-
- compile)
- $ECHO \
-"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
-
-Compile a source file into a libtool library object.
-
-This mode accepts the following additional options:
-
- -o OUTPUT-FILE set the output file name to OUTPUT-FILE
- -no-suppress do not suppress compiler output for multiple passes
- -prefer-pic try to build PIC objects only
- -prefer-non-pic try to build non-PIC objects only
- -shared do not build a '.o' file suitable for static linking
- -static only build a '.o' file suitable for static linking
- -Wc,FLAG
- -Xcompiler FLAG pass FLAG directly to the compiler
-
-COMPILE-COMMAND is a command to be used in creating a 'standard' object file
-from the given SOURCEFILE.
-
-The output file name is determined by removing the directory component from
-SOURCEFILE, then substituting the C source code suffix '.c' with the
-library object suffix, '.lo'."
- ;;
-
- execute)
- $ECHO \
-"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
-
-Automatically set library path, then run a program.
-
-This mode accepts the following additional options:
-
- -dlopen FILE add the directory containing FILE to the library path
-
-This mode sets the library path environment variable according to '-dlopen'
-flags.
-
-If any of the ARGS are libtool executable wrappers, then they are translated
-into their corresponding uninstalled binary, and any of their required library
-directories are added to the library path.
-
-Then, COMMAND is executed, with ARGS as arguments."
- ;;
-
- finish)
- $ECHO \
-"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
-
-Complete the installation of libtool libraries.
-
-Each LIBDIR is a directory that contains libtool libraries.
-
-The commands that this mode executes may require superuser privileges. Use
-the '--dry-run' option if you just want to see what would be executed."
- ;;
-
- install)
- $ECHO \
-"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
-
-Install executables or libraries.
-
-INSTALL-COMMAND is the installation command. The first component should be
-either the 'install' or 'cp' program.
-
-The following components of INSTALL-COMMAND are treated specially:
-
- -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation
-
-The rest of the components are interpreted as arguments to that command (only
-BSD-compatible install options are recognized)."
- ;;
-
- link)
- $ECHO \
-"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
-
-Link object files or libraries together to form another library, or to
-create an executable program.
-
-LINK-COMMAND is a command using the C compiler that you would use to create
-a program from several object files.
-
-The following components of LINK-COMMAND are treated specially:
-
- -all-static do not do any dynamic linking at all
- -avoid-version do not add a version suffix if possible
- -bindir BINDIR specify path to binaries directory (for systems where
- libraries must be found in the PATH setting at runtime)
- -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime
- -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
- -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
- -export-symbols SYMFILE
- try to export only the symbols listed in SYMFILE
- -export-symbols-regex REGEX
- try to export only the symbols matching REGEX
- -LLIBDIR search LIBDIR for required installed libraries
- -lNAME OUTPUT-FILE requires the installed library libNAME
- -module build a library that can dlopened
- -no-fast-install disable the fast-install mode
- -no-install link a not-installable executable
- -no-undefined declare that a library does not refer to external symbols
- -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
- -objectlist FILE use a list of object files found in FILE to specify objects
- -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes)
- -precious-files-regex REGEX
- don't remove output files matching REGEX
- -release RELEASE specify package release information
- -rpath LIBDIR the created library will eventually be installed in LIBDIR
- -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
- -shared only do dynamic linking of libtool libraries
- -shrext SUFFIX override the standard shared library file extension
- -static do not do any dynamic linking of uninstalled libtool libraries
- -static-libtool-libs
- do not do any dynamic linking of libtool libraries
- -version-info CURRENT[:REVISION[:AGE]]
- specify library version info [each variable defaults to 0]
- -weak LIBNAME declare that the target provides the LIBNAME interface
- -Wc,FLAG
- -Xcompiler FLAG pass linker-specific FLAG directly to the compiler
- -Wa,FLAG
- -Xassembler FLAG pass linker-specific FLAG directly to the assembler
- -Wl,FLAG
- -Xlinker FLAG pass linker-specific FLAG directly to the linker
- -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC)
-
-All other options (arguments beginning with '-') are ignored.
-
-Every other argument is treated as a filename. Files ending in '.la' are
-treated as uninstalled libtool libraries, other files are standard or library
-object files.
-
-If the OUTPUT-FILE ends in '.la', then a libtool library is created,
-only library objects ('.lo' files) may be specified, and '-rpath' is
-required, except when creating a convenience library.
-
-If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
-using 'ar' and 'ranlib', or on Windows using 'lib'.
-
-If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
-is created, otherwise an executable program is created."
- ;;
-
- uninstall)
- $ECHO \
-"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
-
-Remove libraries from an installation directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed
-to RM.
-
-If FILE is a libtool library, all the files associated with it are deleted.
-Otherwise, only FILE itself is deleted using RM."
- ;;
-
- *)
- func_fatal_help "invalid operation mode '$opt_mode'"
- ;;
- esac
-
- echo
- $ECHO "Try '$progname --help' for more information about other modes."
-}
-
-# Now that we've collected a possible --mode arg, show help if necessary
-if $opt_help; then
- if test : = "$opt_help"; then
- func_mode_help
- else
- {
- func_help noexit
- for opt_mode in compile link execute install finish uninstall clean; do
- func_mode_help
- done
- } | $SED -n '1p; 2,$s/^Usage:/ or: /p'
- {
- func_help noexit
- for opt_mode in compile link execute install finish uninstall clean; do
- echo
- func_mode_help
- done
- } |
- $SED '1d
- /^When reporting/,/^Report/{
- H
- d
- }
- $x
- /information about other modes/d
- /more detailed .*MODE/d
- s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
- fi
- exit $?
-fi
-
-
-# func_mode_execute arg...
-func_mode_execute ()
-{
- $debug_cmd
-
- # The first argument is the command name.
- cmd=$nonopt
- test -z "$cmd" && \
- func_fatal_help "you must specify a COMMAND"
-
- # Handle -dlopen flags immediately.
- for file in $opt_dlopen; do
- test -f "$file" \
- || func_fatal_help "'$file' is not a file"
-
- dir=
- case $file in
- *.la)
- func_resolve_sysroot "$file"
- file=$func_resolve_sysroot_result
-
- # Check to see that this really is a libtool archive.
- func_lalib_unsafe_p "$file" \
- || func_fatal_help "'$lib' is not a valid libtool archive"
-
- # Read the libtool library.
- dlname=
- library_names=
- func_source "$file"
-
- # Skip this library if it cannot be dlopened.
- if test -z "$dlname"; then
- # Warn if it was a shared library.
- test -n "$library_names" && \
- func_warning "'$file' was not linked with '-export-dynamic'"
- continue
- fi
-
- func_dirname "$file" "" "."
- dir=$func_dirname_result
-
- if test -f "$dir/$objdir/$dlname"; then
- func_append dir "/$objdir"
- else
- if test ! -f "$dir/$dlname"; then
- func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
- fi
- fi
- ;;
-
- *.lo)
- # Just add the directory containing the .lo file.
- func_dirname "$file" "" "."
- dir=$func_dirname_result
- ;;
-
- *)
- func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
- continue
- ;;
- esac
-
- # Get the absolute pathname.
- absdir=`cd "$dir" && pwd`
- test -n "$absdir" && dir=$absdir
-
- # Now add the directory to shlibpath_var.
- if eval "test -z \"\$$shlibpath_var\""; then
- eval "$shlibpath_var=\"\$dir\""
- else
- eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
- fi
- done
-
- # This variable tells wrapper scripts just to set shlibpath_var
- # rather than running their programs.
- libtool_execute_magic=$magic
-
- # Check if any of the arguments is a wrapper script.
- args=
- for file
- do
- case $file in
- -* | *.la | *.lo ) ;;
- *)
- # Do a test to see if this is really a libtool program.
- if func_ltwrapper_script_p "$file"; then
- func_source "$file"
- # Transform arg to wrapped name.
- file=$progdir/$program
- elif func_ltwrapper_executable_p "$file"; then
- func_ltwrapper_scriptname "$file"
- func_source "$func_ltwrapper_scriptname_result"
- # Transform arg to wrapped name.
- file=$progdir/$program
- fi
- ;;
- esac
- # Quote arguments (to preserve shell metacharacters).
- func_append_quoted args "$file"
- done
-
- if $opt_dry_run; then
- # Display what would be done.
- if test -n "$shlibpath_var"; then
- eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
- echo "export $shlibpath_var"
- fi
- $ECHO "$cmd$args"
- exit $EXIT_SUCCESS
- else
- if test -n "$shlibpath_var"; then
- # Export the shlibpath_var.
- eval "export $shlibpath_var"
- fi
-
- # Restore saved environment variables
- for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
- do
- eval "if test \"\${save_$lt_var+set}\" = set; then
- $lt_var=\$save_$lt_var; export $lt_var
- else
- $lt_unset $lt_var
- fi"
- done
-
- # Now prepare to actually exec the command.
- exec_cmd=\$cmd$args
- fi
-}
-
-test execute = "$opt_mode" && func_mode_execute ${1+"$@"}
-
-
-# func_mode_finish arg...
-func_mode_finish ()
-{
- $debug_cmd
-
- libs=
- libdirs=
- admincmds=
-
- for opt in "$nonopt" ${1+"$@"}
- do
- if test -d "$opt"; then
- func_append libdirs " $opt"
-
- elif test -f "$opt"; then
- if func_lalib_unsafe_p "$opt"; then
- func_append libs " $opt"
- else
- func_warning "'$opt' is not a valid libtool archive"
- fi
-
- else
- func_fatal_error "invalid argument '$opt'"
- fi
- done
-
- if test -n "$libs"; then
- if test -n "$lt_sysroot"; then
- sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
- sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
- else
- sysroot_cmd=
- fi
-
- # Remove sysroot references
- if $opt_dry_run; then
- for lib in $libs; do
- echo "removing references to $lt_sysroot and '=' prefixes from $lib"
- done
- else
- tmpdir=`func_mktempdir`
- for lib in $libs; do
- $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
- > $tmpdir/tmp-la
- mv -f $tmpdir/tmp-la $lib
- done
- ${RM}r "$tmpdir"
- fi
- fi
-
- if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
- for libdir in $libdirs; do
- if test -n "$finish_cmds"; then
- # Do each command in the finish commands.
- func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
-'"$cmd"'"'
- fi
- if test -n "$finish_eval"; then
- # Do the single finish_eval.
- eval cmds=\"$finish_eval\"
- $opt_dry_run || eval "$cmds" || func_append admincmds "
- $cmds"
- fi
- done
- fi
-
- # Exit here if they wanted silent mode.
- $opt_quiet && exit $EXIT_SUCCESS
-
- if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
- echo "----------------------------------------------------------------------"
- echo "Libraries have been installed in:"
- for libdir in $libdirs; do
- $ECHO " $libdir"
- done
- echo
- echo "If you ever happen to want to link against installed libraries"
- echo "in a given directory, LIBDIR, you must either use libtool, and"
- echo "specify the full pathname of the library, or use the '-LLIBDIR'"
- echo "flag during linking and do at least one of the following:"
- if test -n "$shlibpath_var"; then
- echo " - add LIBDIR to the '$shlibpath_var' environment variable"
- echo " during execution"
- fi
- if test -n "$runpath_var"; then
- echo " - add LIBDIR to the '$runpath_var' environment variable"
- echo " during linking"
- fi
- if test -n "$hardcode_libdir_flag_spec"; then
- libdir=LIBDIR
- eval flag=\"$hardcode_libdir_flag_spec\"
-
- $ECHO " - use the '$flag' linker flag"
- fi
- if test -n "$admincmds"; then
- $ECHO " - have your system administrator run these commands:$admincmds"
- fi
- if test -f /etc/ld.so.conf; then
- echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
- fi
- echo
-
- echo "See any operating system documentation about shared libraries for"
- case $host in
- solaris2.[6789]|solaris2.1[0-9])
- echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
- echo "pages."
- ;;
- *)
- echo "more information, such as the ld(1) and ld.so(8) manual pages."
- ;;
- esac
- echo "----------------------------------------------------------------------"
- fi
- exit $EXIT_SUCCESS
-}
-
-test finish = "$opt_mode" && func_mode_finish ${1+"$@"}
-
-
-# func_mode_install arg...
-func_mode_install ()
-{
- $debug_cmd
-
- # There may be an optional sh(1) argument at the beginning of
- # install_prog (especially on Windows NT).
- if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
- # Allow the use of GNU shtool's install command.
- case $nonopt in *shtool*) :;; *) false;; esac
- then
- # Aesthetically quote it.
- func_quote_arg pretty "$nonopt"
- install_prog="$func_quote_arg_result "
- arg=$1
- shift
- else
- install_prog=
- arg=$nonopt
- fi
-
- # The real first argument should be the name of the installation program.
- # Aesthetically quote it.
- func_quote_arg pretty "$arg"
- func_append install_prog "$func_quote_arg_result"
- install_shared_prog=$install_prog
- case " $install_prog " in
- *[\\\ /]cp\ *) install_cp=: ;;
- *) install_cp=false ;;
- esac
-
- # We need to accept at least all the BSD install flags.
- dest=
- files=
- opts=
- prev=
- install_type=
- isdir=false
- stripme=
- no_mode=:
- for arg
- do
- arg2=
- if test -n "$dest"; then
- func_append files " $dest"
- dest=$arg
- continue
- fi
-
- case $arg in
- -d) isdir=: ;;
- -f)
- if $install_cp; then :; else
- prev=$arg
- fi
- ;;
- -g | -m | -o)
- prev=$arg
- ;;
- -s)
- stripme=" -s"
- continue
- ;;
- -*)
- ;;
- *)
- # If the previous option needed an argument, then skip it.
- if test -n "$prev"; then
- if test X-m = "X$prev" && test -n "$install_override_mode"; then
- arg2=$install_override_mode
- no_mode=false
- fi
- prev=
- else
- dest=$arg
- continue
- fi
- ;;
- esac
-
- # Aesthetically quote the argument.
- func_quote_arg pretty "$arg"
- func_append install_prog " $func_quote_arg_result"
- if test -n "$arg2"; then
- func_quote_arg pretty "$arg2"
- fi
- func_append install_shared_prog " $func_quote_arg_result"
- done
-
- test -z "$install_prog" && \
- func_fatal_help "you must specify an install program"
-
- test -n "$prev" && \
- func_fatal_help "the '$prev' option requires an argument"
-
- if test -n "$install_override_mode" && $no_mode; then
- if $install_cp; then :; else
- func_quote_arg pretty "$install_override_mode"
- func_append install_shared_prog " -m $func_quote_arg_result"
- fi
- fi
-
- if test -z "$files"; then
- if test -z "$dest"; then
- func_fatal_help "no file or destination specified"
- else
- func_fatal_help "you must specify a destination"
- fi
- fi
-
- # Strip any trailing slash from the destination.
- func_stripname '' '/' "$dest"
- dest=$func_stripname_result
-
- # Check to see that the destination is a directory.
- test -d "$dest" && isdir=:
- if $isdir; then
- destdir=$dest
- destname=
- else
- func_dirname_and_basename "$dest" "" "."
- destdir=$func_dirname_result
- destname=$func_basename_result
-
- # Not a directory, so check to see that there is only one file specified.
- set dummy $files; shift
- test "$#" -gt 1 && \
- func_fatal_help "'$dest' is not a directory"
- fi
- case $destdir in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- for file in $files; do
- case $file in
- *.lo) ;;
- *)
- func_fatal_help "'$destdir' must be an absolute directory name"
- ;;
- esac
- done
- ;;
- esac
-
- # This variable tells wrapper scripts just to set variables rather
- # than running their programs.
- libtool_install_magic=$magic
-
- staticlibs=
- future_libdirs=
- current_libdirs=
- for file in $files; do
-
- # Do each installation.
- case $file in
- *.$libext)
- # Do the static libraries later.
- func_append staticlibs " $file"
- ;;
-
- *.la)
- func_resolve_sysroot "$file"
- file=$func_resolve_sysroot_result
-
- # Check to see that this really is a libtool archive.
- func_lalib_unsafe_p "$file" \
- || func_fatal_help "'$file' is not a valid libtool archive"
-
- library_names=
- old_library=
- relink_command=
- func_source "$file"
-
- # Add the libdir to current_libdirs if it is the destination.
- if test "X$destdir" = "X$libdir"; then
- case "$current_libdirs " in
- *" $libdir "*) ;;
- *) func_append current_libdirs " $libdir" ;;
- esac
- else
- # Note the libdir as a future libdir.
- case "$future_libdirs " in
- *" $libdir "*) ;;
- *) func_append future_libdirs " $libdir" ;;
- esac
- fi
-
- func_dirname "$file" "/" ""
- dir=$func_dirname_result
- func_append dir "$objdir"
-
- if test -n "$relink_command"; then
- # Determine the prefix the user has applied to our future dir.
- inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
-
- # Don't allow the user to place us outside of our expected
- # location b/c this prevents finding dependent libraries that
- # are installed to the same prefix.
- # At present, this check doesn't affect windows .dll's that
- # are installed into $libdir/../bin (currently, that works fine)
- # but it's something to keep an eye on.
- test "$inst_prefix_dir" = "$destdir" && \
- func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
-
- if test -n "$inst_prefix_dir"; then
- # Stick the inst_prefix_dir data into the link command.
- relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
- else
- relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
- fi
-
- func_warning "relinking '$file'"
- func_show_eval "$relink_command" \
- 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
- fi
-
- # See the names of the shared library.
- set dummy $library_names; shift
- if test -n "$1"; then
- realname=$1
- shift
-
- srcname=$realname
- test -n "$relink_command" && srcname=${realname}T
-
- # Install the shared library and build the symlinks.
- func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
- 'exit $?'
- tstripme=$stripme
- case $host_os in
- cygwin* | mingw* | pw32* | cegcc*)
- case $realname in
- *.dll.a)
- tstripme=
- ;;
- esac
- ;;
- os2*)
- case $realname in
- *_dll.a)
- tstripme=
- ;;
- esac
- ;;
- esac
- if test -n "$tstripme" && test -n "$striplib"; then
- func_show_eval "$striplib $destdir/$realname" 'exit $?'
- fi
-
- if test "$#" -gt 0; then
- # Delete the old symlinks, and create new ones.
- # Try 'ln -sf' first, because the 'ln' binary might depend on
- # the symlink we replace! Solaris /bin/ln does not understand -f,
- # so we also need to try rm && ln -s.
- for linkname
- do
- test "$linkname" != "$realname" \
- && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
- done
- fi
-
- # Do each command in the postinstall commands.
- lib=$destdir/$realname
- func_execute_cmds "$postinstall_cmds" 'exit $?'
- fi
-
- # Install the pseudo-library for information purposes.
- func_basename "$file"
- name=$func_basename_result
- instname=$dir/${name}i
- func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
-
- # Maybe install the static library, too.
- test -n "$old_library" && func_append staticlibs " $dir/$old_library"
- ;;
-
- *.lo)
- # Install (i.e. copy) a libtool object.
-
- # Figure out destination file name, if it wasn't already specified.
- if test -n "$destname"; then
- destfile=$destdir/$destname
- else
- func_basename "$file"
- destfile=$func_basename_result
- destfile=$destdir/$destfile
- fi
-
- # Deduce the name of the destination old-style object file.
- case $destfile in
- *.lo)
- func_lo2o "$destfile"
- staticdest=$func_lo2o_result
- ;;
- *.$objext)
- staticdest=$destfile
- destfile=
- ;;
- *)
- func_fatal_help "cannot copy a libtool object to '$destfile'"
- ;;
- esac
-
- # Install the libtool object if requested.
- test -n "$destfile" && \
- func_show_eval "$install_prog $file $destfile" 'exit $?'
-
- # Install the old object if enabled.
- if test yes = "$build_old_libs"; then
- # Deduce the name of the old-style object file.
- func_lo2o "$file"
- staticobj=$func_lo2o_result
- func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
- fi
- exit $EXIT_SUCCESS
- ;;
-
- *)
- # Figure out destination file name, if it wasn't already specified.
- if test -n "$destname"; then
- destfile=$destdir/$destname
- else
- func_basename "$file"
- destfile=$func_basename_result
- destfile=$destdir/$destfile
- fi
-
- # If the file is missing, and there is a .exe on the end, strip it
- # because it is most likely a libtool script we actually want to
- # install
- stripped_ext=
- case $file in
- *.exe)
- if test ! -f "$file"; then
- func_stripname '' '.exe' "$file"
- file=$func_stripname_result
- stripped_ext=.exe
- fi
- ;;
- esac
-
- # Do a test to see if this is really a libtool program.
- case $host in
- *cygwin* | *mingw*)
- if func_ltwrapper_executable_p "$file"; then
- func_ltwrapper_scriptname "$file"
- wrapper=$func_ltwrapper_scriptname_result
- else
- func_stripname '' '.exe' "$file"
- wrapper=$func_stripname_result
- fi
- ;;
- *)
- wrapper=$file
- ;;
- esac
- if func_ltwrapper_script_p "$wrapper"; then
- notinst_deplibs=
- relink_command=
-
- func_source "$wrapper"
-
- # Check the variables that should have been set.
- test -z "$generated_by_libtool_version" && \
- func_fatal_error "invalid libtool wrapper script '$wrapper'"
-
- finalize=:
- for lib in $notinst_deplibs; do
- # Check to see that each library is installed.
- libdir=
- if test -f "$lib"; then
- func_source "$lib"
- fi
- libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
- if test -n "$libdir" && test ! -f "$libfile"; then
- func_warning "'$lib' has not been installed in '$libdir'"
- finalize=false
- fi
- done
-
- relink_command=
- func_source "$wrapper"
-
- outputname=
- if test no = "$fast_install" && test -n "$relink_command"; then
- $opt_dry_run || {
- if $finalize; then
- tmpdir=`func_mktempdir`
- func_basename "$file$stripped_ext"
- file=$func_basename_result
- outputname=$tmpdir/$file
- # Replace the output file specification.
- relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
-
- $opt_quiet || {
- func_quote_arg expand,pretty "$relink_command"
- eval "func_echo $func_quote_arg_result"
- }
- if eval "$relink_command"; then :
- else
- func_error "error: relink '$file' with the above command before installing it"
- $opt_dry_run || ${RM}r "$tmpdir"
- continue
- fi
- file=$outputname
- else
- func_warning "cannot relink '$file'"
- fi
- }
- else
- # Install the binary that we compiled earlier.
- file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
- fi
- fi
-
- # remove .exe since cygwin /usr/bin/install will append another
- # one anyway
- case $install_prog,$host in
- */usr/bin/install*,*cygwin*)
- case $file:$destfile in
- *.exe:*.exe)
- # this is ok
- ;;
- *.exe:*)
- destfile=$destfile.exe
- ;;
- *:*.exe)
- func_stripname '' '.exe' "$destfile"
- destfile=$func_stripname_result
- ;;
- esac
- ;;
- esac
- func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
- $opt_dry_run || if test -n "$outputname"; then
- ${RM}r "$tmpdir"
- fi
- ;;
- esac
- done
-
- for file in $staticlibs; do
- func_basename "$file"
- name=$func_basename_result
-
- # Set up the ranlib parameters.
- oldlib=$destdir/$name
- func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
- tool_oldlib=$func_to_tool_file_result
-
- func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
-
- if test -n "$stripme" && test -n "$old_striplib"; then
- func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
- fi
-
- # Do each command in the postinstall commands.
- func_execute_cmds "$old_postinstall_cmds" 'exit $?'
- done
-
- test -n "$future_libdirs" && \
- func_warning "remember to run '$progname --finish$future_libdirs'"
-
- if test -n "$current_libdirs"; then
- # Maybe just do a dry run.
- $opt_dry_run && current_libdirs=" -n$current_libdirs"
- exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
- else
- exit $EXIT_SUCCESS
- fi
-}
-
-test install = "$opt_mode" && func_mode_install ${1+"$@"}
-
-
-# func_generate_dlsyms outputname originator pic_p
-# Extract symbols from dlprefiles and create ${outputname}S.o with
-# a dlpreopen symbol table.
-func_generate_dlsyms ()
-{
- $debug_cmd
-
- my_outputname=$1
- my_originator=$2
- my_pic_p=${3-false}
- my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
- my_dlsyms=
-
- if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
- if test -n "$NM" && test -n "$global_symbol_pipe"; then
- my_dlsyms=${my_outputname}S.c
- else
- func_error "not configured to extract global symbols from dlpreopened files"
- fi
- fi
-
- if test -n "$my_dlsyms"; then
- case $my_dlsyms in
- "") ;;
- *.c)
- # Discover the nlist of each of the dlfiles.
- nlist=$output_objdir/$my_outputname.nm
-
- func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
-
- # Parse the name list into a source file.
- func_verbose "creating $output_objdir/$my_dlsyms"
-
- $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
-/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
-/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
-
-#ifdef __cplusplus
-extern \"C\" {
-#endif
-
-#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
-#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
-#endif
-
-/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
-#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
-/* DATA imports from DLLs on WIN32 can't be const, because runtime
- relocations are performed -- see ld's documentation on pseudo-relocs. */
-# define LT_DLSYM_CONST
-#elif defined __osf__
-/* This system does not cope well with relocations in const data. */
-# define LT_DLSYM_CONST
-#else
-# define LT_DLSYM_CONST const
-#endif
-
-#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
-
-/* External symbol declarations for the compiler. */\
-"
-
- if test yes = "$dlself"; then
- func_verbose "generating symbol list for '$output'"
-
- $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
-
- # Add our own program objects to the symbol list.
- progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
- for progfile in $progfiles; do
- func_to_tool_file "$progfile" func_convert_file_msys_to_w32
- func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
- $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
- done
-
- if test -n "$exclude_expsyms"; then
- $opt_dry_run || {
- eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
- eval '$MV "$nlist"T "$nlist"'
- }
- fi
-
- if test -n "$export_symbols_regex"; then
- $opt_dry_run || {
- eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
- eval '$MV "$nlist"T "$nlist"'
- }
- fi
-
- # Prepare the list of exported symbols
- if test -z "$export_symbols"; then
- export_symbols=$output_objdir/$outputname.exp
- $opt_dry_run || {
- $RM $export_symbols
- eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
- case $host in
- *cygwin* | *mingw* | *cegcc* )
- eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
- eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
- ;;
- esac
- }
- else
- $opt_dry_run || {
- eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
- eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
- eval '$MV "$nlist"T "$nlist"'
- case $host in
- *cygwin* | *mingw* | *cegcc* )
- eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
- eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
- ;;
- esac
- }
- fi
- fi
-
- for dlprefile in $dlprefiles; do
- func_verbose "extracting global C symbols from '$dlprefile'"
- func_basename "$dlprefile"
- name=$func_basename_result
- case $host in
- *cygwin* | *mingw* | *cegcc* )
- # if an import library, we need to obtain dlname
- if func_win32_import_lib_p "$dlprefile"; then
- func_tr_sh "$dlprefile"
- eval "curr_lafile=\$libfile_$func_tr_sh_result"
- dlprefile_dlbasename=
- if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
- # Use subshell, to avoid clobbering current variable values
- dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
- if test -n "$dlprefile_dlname"; then
- func_basename "$dlprefile_dlname"
- dlprefile_dlbasename=$func_basename_result
- else
- # no lafile. user explicitly requested -dlpreopen <import library>.
- $sharedlib_from_linklib_cmd "$dlprefile"
- dlprefile_dlbasename=$sharedlib_from_linklib_result
- fi
- fi
- $opt_dry_run || {
- if test -n "$dlprefile_dlbasename"; then
- eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
- else
- func_warning "Could not compute DLL name from $name"
- eval '$ECHO ": $name " >> "$nlist"'
- fi
- func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
- eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
- $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
- }
- else # not an import lib
- $opt_dry_run || {
- eval '$ECHO ": $name " >> "$nlist"'
- func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
- eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
- }
- fi
- ;;
- *)
- $opt_dry_run || {
- eval '$ECHO ": $name " >> "$nlist"'
- func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
- eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
- }
- ;;
- esac
- done
-
- $opt_dry_run || {
- # Make sure we have at least an empty file.
- test -f "$nlist" || : > "$nlist"
-
- if test -n "$exclude_expsyms"; then
- $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
- $MV "$nlist"T "$nlist"
- fi
-
- # Try sorting and uniquifying the output.
- if $GREP -v "^: " < "$nlist" |
- if sort -k 3 </dev/null >/dev/null 2>&1; then
- sort -k 3
- else
- sort +2
- fi |
- uniq > "$nlist"S; then
- :
- else
- $GREP -v "^: " < "$nlist" > "$nlist"S
- fi
-
- if test -f "$nlist"S; then
- eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
- else
- echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
- fi
-
- func_show_eval '$RM "${nlist}I"'
- if test -n "$global_symbol_to_import"; then
- eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
- fi
-
- echo >> "$output_objdir/$my_dlsyms" "\
-
-/* The mapping between symbol names and symbols. */
-typedef struct {
- const char *name;
- void *address;
-} lt_dlsymlist;
-extern LT_DLSYM_CONST lt_dlsymlist
-lt_${my_prefix}_LTX_preloaded_symbols[];\
-"
-
- if test -s "$nlist"I; then
- echo >> "$output_objdir/$my_dlsyms" "\
-static void lt_syminit(void)
-{
- LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
- for (; symbol->name; ++symbol)
- {"
- $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
- echo >> "$output_objdir/$my_dlsyms" "\
- }
-}"
- fi
- echo >> "$output_objdir/$my_dlsyms" "\
-LT_DLSYM_CONST lt_dlsymlist
-lt_${my_prefix}_LTX_preloaded_symbols[] =
-{ {\"$my_originator\", (void *) 0},"
-
- if test -s "$nlist"I; then
- echo >> "$output_objdir/$my_dlsyms" "\
- {\"@INIT@\", (void *) &lt_syminit},"
- fi
-
- case $need_lib_prefix in
- no)
- eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
- ;;
- *)
- eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
- ;;
- esac
- echo >> "$output_objdir/$my_dlsyms" "\
- {0, (void *) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
- return lt_${my_prefix}_LTX_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif\
-"
- } # !$opt_dry_run
-
- pic_flag_for_symtable=
- case "$compile_command " in
- *" -static "*) ;;
- *)
- case $host in
- # compiling the symbol table file with pic_flag works around
- # a FreeBSD bug that causes programs to crash when -lm is
- # linked before any other PIC object. But we must not use
- # pic_flag when linking with -static. The problem exists in
- # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
- *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
- pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
- *-*-hpux*)
- pic_flag_for_symtable=" $pic_flag" ;;
- *)
- $my_pic_p && pic_flag_for_symtable=" $pic_flag"
- ;;
- esac
- ;;
- esac
- symtab_cflags=
- for arg in $LTCFLAGS; do
- case $arg in
- -pie | -fpie | -fPIE) ;;
- *) func_append symtab_cflags " $arg" ;;
- esac
- done
-
- # Now compile the dynamic symbol file.
- func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
-
- # Clean up the generated files.
- func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
-
- # Transform the symbol file into the correct name.
- symfileobj=$output_objdir/${my_outputname}S.$objext
- case $host in
- *cygwin* | *mingw* | *cegcc* )
- if test -f "$output_objdir/$my_outputname.def"; then
- compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
- finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
- else
- compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
- finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
- fi
- ;;
- *)
- compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
- finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
- ;;
- esac
- ;;
- *)
- func_fatal_error "unknown suffix for '$my_dlsyms'"
- ;;
- esac
- else
- # We keep going just in case the user didn't refer to
- # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
- # really was required.
-
- # Nullify the symbol file.
- compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
- finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
- fi
-}
-
-# func_cygming_gnu_implib_p ARG
-# This predicate returns with zero status (TRUE) if
-# ARG is a GNU/binutils-style import library. Returns
-# with nonzero status (FALSE) otherwise.
-func_cygming_gnu_implib_p ()
-{
- $debug_cmd
-
- func_to_tool_file "$1" func_convert_file_msys_to_w32
- func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
- test -n "$func_cygming_gnu_implib_tmp"
-}
-
-# func_cygming_ms_implib_p ARG
-# This predicate returns with zero status (TRUE) if
-# ARG is an MS-style import library. Returns
-# with nonzero status (FALSE) otherwise.
-func_cygming_ms_implib_p ()
-{
- $debug_cmd
-
- func_to_tool_file "$1" func_convert_file_msys_to_w32
- func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
- test -n "$func_cygming_ms_implib_tmp"
-}
-
-# func_win32_libid arg
-# return the library type of file 'arg'
-#
-# Need a lot of goo to handle *both* DLLs and import libs
-# Has to be a shell function in order to 'eat' the argument
-# that is supplied when $file_magic_command is called.
-# Despite the name, also deal with 64 bit binaries.
-func_win32_libid ()
-{
- $debug_cmd
-
- win32_libid_type=unknown
- win32_fileres=`file -L $1 2>/dev/null`
- case $win32_fileres in
- *ar\ archive\ import\ library*) # definitely import
- win32_libid_type="x86 archive import"
- ;;
- *ar\ archive*) # could be an import, or static
- # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
- if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
- $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
- case $nm_interface in
- "MS dumpbin")
- if func_cygming_ms_implib_p "$1" ||
- func_cygming_gnu_implib_p "$1"
- then
- win32_nmres=import
- else
- win32_nmres=
- fi
- ;;
- *)
- func_to_tool_file "$1" func_convert_file_msys_to_w32
- win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
- $SED -n -e '
- 1,100{
- / I /{
- s|.*|import|
- p
- q
- }
- }'`
- ;;
- esac
- case $win32_nmres in
- import*) win32_libid_type="x86 archive import";;
- *) win32_libid_type="x86 archive static";;
- esac
- fi
- ;;
- *DLL*)
- win32_libid_type="x86 DLL"
- ;;
- *executable*) # but shell scripts are "executable" too...
- case $win32_fileres in
- *MS\ Windows\ PE\ Intel*)
- win32_libid_type="x86 DLL"
- ;;
- esac
- ;;
- esac
- $ECHO "$win32_libid_type"
-}
-
-# func_cygming_dll_for_implib ARG
-#
-# Platform-specific function to extract the
-# name of the DLL associated with the specified
-# import library ARG.
-# Invoked by eval'ing the libtool variable
-# $sharedlib_from_linklib_cmd
-# Result is available in the variable
-# $sharedlib_from_linklib_result
-func_cygming_dll_for_implib ()
-{
- $debug_cmd
-
- sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
-}
-
-# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
-#
-# The is the core of a fallback implementation of a
-# platform-specific function to extract the name of the
-# DLL associated with the specified import library LIBNAME.
-#
-# SECTION_NAME is either .idata$6 or .idata$7, depending
-# on the platform and compiler that created the implib.
-#
-# Echos the name of the DLL associated with the
-# specified import library.
-func_cygming_dll_for_implib_fallback_core ()
-{
- $debug_cmd
-
- match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
- $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
- $SED '/^Contents of section '"$match_literal"':/{
- # Place marker at beginning of archive member dllname section
- s/.*/====MARK====/
- p
- d
- }
- # These lines can sometimes be longer than 43 characters, but
- # are always uninteresting
- /:[ ]*file format pe[i]\{,1\}-/d
- /^In archive [^:]*:/d
- # Ensure marker is printed
- /^====MARK====/p
- # Remove all lines with less than 43 characters
- /^.\{43\}/!d
- # From remaining lines, remove first 43 characters
- s/^.\{43\}//' |
- $SED -n '
- # Join marker and all lines until next marker into a single line
- /^====MARK====/ b para
- H
- $ b para
- b
- :para
- x
- s/\n//g
- # Remove the marker
- s/^====MARK====//
- # Remove trailing dots and whitespace
- s/[\. \t]*$//
- # Print
- /./p' |
- # we now have a list, one entry per line, of the stringified
- # contents of the appropriate section of all members of the
- # archive that possess that section. Heuristic: eliminate
- # all those that have a first or second character that is
- # a '.' (that is, objdump's representation of an unprintable
- # character.) This should work for all archives with less than
- # 0x302f exports -- but will fail for DLLs whose name actually
- # begins with a literal '.' or a single character followed by
- # a '.'.
- #
- # Of those that remain, print the first one.
- $SED -e '/^\./d;/^.\./d;q'
-}
-
-# func_cygming_dll_for_implib_fallback ARG
-# Platform-specific function to extract the
-# name of the DLL associated with the specified
-# import library ARG.
-#
-# This fallback implementation is for use when $DLLTOOL
-# does not support the --identify-strict option.
-# Invoked by eval'ing the libtool variable
-# $sharedlib_from_linklib_cmd
-# Result is available in the variable
-# $sharedlib_from_linklib_result
-func_cygming_dll_for_implib_fallback ()
-{
- $debug_cmd
-
- if func_cygming_gnu_implib_p "$1"; then
- # binutils import library
- sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
- elif func_cygming_ms_implib_p "$1"; then
- # ms-generated import library
- sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
- else
- # unknown
- sharedlib_from_linklib_result=
- fi
-}
-
-
-# func_extract_an_archive dir oldlib
-func_extract_an_archive ()
-{
- $debug_cmd
-
- f_ex_an_ar_dir=$1; shift
- f_ex_an_ar_oldlib=$1
- if test yes = "$lock_old_archive_extraction"; then
- lockfile=$f_ex_an_ar_oldlib.lock
- until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
- func_echo "Waiting for $lockfile to be removed"
- sleep 2
- done
- fi
- func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
- 'stat=$?; rm -f "$lockfile"; exit $stat'
- if test yes = "$lock_old_archive_extraction"; then
- $opt_dry_run || rm -f "$lockfile"
- fi
- if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
- :
- else
- func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
- fi
-}
-
-
-# func_extract_archives gentop oldlib ...
-func_extract_archives ()
-{
- $debug_cmd
-
- my_gentop=$1; shift
- my_oldlibs=${1+"$@"}
- my_oldobjs=
- my_xlib=
- my_xabs=
- my_xdir=
-
- for my_xlib in $my_oldlibs; do
- # Extract the objects.
- case $my_xlib in
- [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
- *) my_xabs=`pwd`"/$my_xlib" ;;
- esac
- func_basename "$my_xlib"
- my_xlib=$func_basename_result
- my_xlib_u=$my_xlib
- while :; do
- case " $extracted_archives " in
- *" $my_xlib_u "*)
- func_arith $extracted_serial + 1
- extracted_serial=$func_arith_result
- my_xlib_u=lt$extracted_serial-$my_xlib ;;
- *) break ;;
- esac
- done
- extracted_archives="$extracted_archives $my_xlib_u"
- my_xdir=$my_gentop/$my_xlib_u
-
- func_mkdir_p "$my_xdir"
-
- case $host in
- *-darwin*)
- func_verbose "Extracting $my_xabs"
- # Do not bother doing anything if just a dry run
- $opt_dry_run || {
- darwin_orig_dir=`pwd`
- cd $my_xdir || exit $?
- darwin_archive=$my_xabs
- darwin_curdir=`pwd`
- func_basename "$darwin_archive"
- darwin_base_archive=$func_basename_result
- darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
- if test -n "$darwin_arches"; then
- darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
- darwin_arch=
- func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
- for darwin_arch in $darwin_arches; do
- func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
- $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
- cd "unfat-$$/$darwin_base_archive-$darwin_arch"
- func_extract_an_archive "`pwd`" "$darwin_base_archive"
- cd "$darwin_curdir"
- $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
- done # $darwin_arches
- ## Okay now we've a bunch of thin objects, gotta fatten them up :)
- darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
- darwin_file=
- darwin_files=
- for darwin_file in $darwin_filelist; do
- darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
- $LIPO -create -output "$darwin_file" $darwin_files
- done # $darwin_filelist
- $RM -rf unfat-$$
- cd "$darwin_orig_dir"
- else
- cd $darwin_orig_dir
- func_extract_an_archive "$my_xdir" "$my_xabs"
- fi # $darwin_arches
- } # !$opt_dry_run
- ;;
- *)
- func_extract_an_archive "$my_xdir" "$my_xabs"
- ;;
- esac
- my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
- done
-
- func_extract_archives_result=$my_oldobjs
-}
-
-
-# func_emit_wrapper [arg=no]
-#
-# Emit a libtool wrapper script on stdout.
-# Don't directly open a file because we may want to
-# incorporate the script contents within a cygwin/mingw
-# wrapper executable. Must ONLY be called from within
-# func_mode_link because it depends on a number of variables
-# set therein.
-#
-# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
-# variable will take. If 'yes', then the emitted script
-# will assume that the directory where it is stored is
-# the $objdir directory. This is a cygwin/mingw-specific
-# behavior.
-func_emit_wrapper ()
-{
- func_emit_wrapper_arg1=${1-no}
-
- $ECHO "\
-#! $SHELL
-
-# $output - temporary wrapper script for $objdir/$outputname
-# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
-#
-# The $output program cannot be directly executed until all the libtool
-# libraries that it depends on are installed.
-#
-# This wrapper script should never be moved out of the build directory.
-# If it is, it will not operate correctly.
-
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='$sed_quote_subst'
-
-# Be Bourne compatible
-if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '\${1+\"\$@\"}'='\"\$@\"'
- setopt NO_GLOB_SUBST
-else
- case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
-fi
-BIN_SH=xpg4; export BIN_SH # for Tru64
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-relink_command=\"$relink_command\"
-
-# This environment variable determines our operation mode.
-if test \"\$libtool_install_magic\" = \"$magic\"; then
- # install mode needs the following variables:
- generated_by_libtool_version='$macro_version'
- notinst_deplibs='$notinst_deplibs'
-else
- # When we are sourced in execute mode, \$file and \$ECHO are already set.
- if test \"\$libtool_execute_magic\" != \"$magic\"; then
- file=\"\$0\""
-
- func_quote_arg pretty "$ECHO"
- qECHO=$func_quote_arg_result
- $ECHO "\
-
-# A function that is used when there is no print builtin or printf.
-func_fallback_echo ()
-{
- eval 'cat <<_LTECHO_EOF
-\$1
-_LTECHO_EOF'
-}
- ECHO=$qECHO
- fi
-
-# Very basic option parsing. These options are (a) specific to
-# the libtool wrapper, (b) are identical between the wrapper
-# /script/ and the wrapper /executable/ that is used only on
-# windows platforms, and (c) all begin with the string "--lt-"
-# (application programs are unlikely to have options that match
-# this pattern).
-#
-# There are only two supported options: --lt-debug and
-# --lt-dump-script. There is, deliberately, no --lt-help.
-#
-# The first argument to this parsing function should be the
-# script's $0 value, followed by "$@".
-lt_option_debug=
-func_parse_lt_options ()
-{
- lt_script_arg0=\$0
- shift
- for lt_opt
- do
- case \"\$lt_opt\" in
- --lt-debug) lt_option_debug=1 ;;
- --lt-dump-script)
- lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
- test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
- lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
- cat \"\$lt_dump_D/\$lt_dump_F\"
- exit 0
- ;;
- --lt-*)
- \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
- exit 1
- ;;
- esac
- done
-
- # Print the debug banner immediately:
- if test -n \"\$lt_option_debug\"; then
- echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
- fi
-}
-
-# Used when --lt-debug. Prints its arguments to stdout
-# (redirection is the responsibility of the caller)
-func_lt_dump_args ()
-{
- lt_dump_args_N=1;
- for lt_arg
- do
- \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
- lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
- done
-}
-
-# Core function for launching the target application
-func_exec_program_core ()
-{
-"
- case $host in
- # Backslashes separate directories on plain windows
- *-*-mingw | *-*-os2* | *-cegcc*)
- $ECHO "\
- if test -n \"\$lt_option_debug\"; then
- \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
- func_lt_dump_args \${1+\"\$@\"} 1>&2
- fi
- exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
-"
- ;;
-
- *)
- $ECHO "\
- if test -n \"\$lt_option_debug\"; then
- \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
- func_lt_dump_args \${1+\"\$@\"} 1>&2
- fi
- exec \"\$progdir/\$program\" \${1+\"\$@\"}
-"
- ;;
- esac
- $ECHO "\
- \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
- exit 1
-}
-
-# A function to encapsulate launching the target application
-# Strips options in the --lt-* namespace from \$@ and
-# launches target application with the remaining arguments.
-func_exec_program ()
-{
- case \" \$* \" in
- *\\ --lt-*)
- for lt_wr_arg
- do
- case \$lt_wr_arg in
- --lt-*) ;;
- *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
- esac
- shift
- done ;;
- esac
- func_exec_program_core \${1+\"\$@\"}
-}
-
- # Parse options
- func_parse_lt_options \"\$0\" \${1+\"\$@\"}
-
- # Find the directory that this script lives in.
- thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
- test \"x\$thisdir\" = \"x\$file\" && thisdir=.
-
- # Follow symbolic links until we get to the real thisdir.
- file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
- while test -n \"\$file\"; do
- destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
-
- # If there was a directory component, then change thisdir.
- if test \"x\$destdir\" != \"x\$file\"; then
- case \"\$destdir\" in
- [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
- *) thisdir=\"\$thisdir/\$destdir\" ;;
- esac
- fi
-
- file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
- file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
- done
-
- # Usually 'no', except on cygwin/mingw when embedded into
- # the cwrapper.
- WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
- if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
- # special case for '.'
- if test \"\$thisdir\" = \".\"; then
- thisdir=\`pwd\`
- fi
- # remove .libs from thisdir
- case \"\$thisdir\" in
- *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
- $objdir ) thisdir=. ;;
- esac
- fi
-
- # Try to get the absolute directory name.
- absdir=\`cd \"\$thisdir\" && pwd\`
- test -n \"\$absdir\" && thisdir=\"\$absdir\"
-"
-
- if test yes = "$fast_install"; then
- $ECHO "\
- program=lt-'$outputname'$exeext
- progdir=\"\$thisdir/$objdir\"
-
- if test ! -f \"\$progdir/\$program\" ||
- { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
- test \"X\$file\" != \"X\$progdir/\$program\"; }; then
-
- file=\"\$\$-\$program\"
-
- if test ! -d \"\$progdir\"; then
- $MKDIR \"\$progdir\"
- else
- $RM \"\$progdir/\$file\"
- fi"
-
- $ECHO "\
-
- # relink executable if necessary
- if test -n \"\$relink_command\"; then
- if relink_command_output=\`eval \$relink_command 2>&1\`; then :
- else
- \$ECHO \"\$relink_command_output\" >&2
- $RM \"\$progdir/\$file\"
- exit 1
- fi
- fi
-
- $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
- { $RM \"\$progdir/\$program\";
- $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
- $RM \"\$progdir/\$file\"
- fi"
- else
- $ECHO "\
- program='$outputname'
- progdir=\"\$thisdir/$objdir\"
-"
- fi
-
- $ECHO "\
-
- if test -f \"\$progdir/\$program\"; then"
-
- # fixup the dll searchpath if we need to.
- #
- # Fix the DLL searchpath if we need to. Do this before prepending
- # to shlibpath, because on Windows, both are PATH and uninstalled
- # libraries must come first.
- if test -n "$dllsearchpath"; then
- $ECHO "\
- # Add the dll search path components to the executable PATH
- PATH=$dllsearchpath:\$PATH
-"
- fi
-
- # Export our shlibpath_var if we have one.
- if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
- $ECHO "\
- # Add our own library path to $shlibpath_var
- $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
-
- # Some systems cannot cope with colon-terminated $shlibpath_var
- # The second colon is a workaround for a bug in BeOS R4 sed
- $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
-
- export $shlibpath_var
-"
- fi
-
- $ECHO "\
- if test \"\$libtool_execute_magic\" != \"$magic\"; then
- # Run the actual program with our arguments.
- func_exec_program \${1+\"\$@\"}
- fi
- else
- # The program doesn't exist.
- \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
- \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
- \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
- exit 1
- fi
-fi\
-"
-}
-
-
-# func_emit_cwrapperexe_src
-# emit the source code for a wrapper executable on stdout
-# Must ONLY be called from within func_mode_link because
-# it depends on a number of variable set therein.
-func_emit_cwrapperexe_src ()
-{
- cat <<EOF
-
-/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
- Generated by $PROGRAM (GNU $PACKAGE) $VERSION
-
- The $output program cannot be directly executed until all the libtool
- libraries that it depends on are installed.
-
- This wrapper executable should never be moved out of the build directory.
- If it is, it will not operate correctly.
-*/
-EOF
- cat <<"EOF"
-#ifdef _MSC_VER
-# define _CRT_SECURE_NO_DEPRECATE 1
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#ifdef _MSC_VER
-# include <direct.h>
-# include <process.h>
-# include <io.h>
-#else
-# include <unistd.h>
-# include <stdint.h>
-# ifdef __CYGWIN__
-# include <io.h>
-# endif
-#endif
-#include <malloc.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-
-#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
-
-/* declarations of non-ANSI functions */
-#if defined __MINGW32__
-# ifdef __STRICT_ANSI__
-int _putenv (const char *);
-# endif
-#elif defined __CYGWIN__
-# ifdef __STRICT_ANSI__
-char *realpath (const char *, char *);
-int putenv (char *);
-int setenv (const char *, const char *, int);
-# endif
-/* #elif defined other_platform || defined ... */
-#endif
-
-/* portability defines, excluding path handling macros */
-#if defined _MSC_VER
-# define setmode _setmode
-# define stat _stat
-# define chmod _chmod
-# define getcwd _getcwd
-# define putenv _putenv
-# define S_IXUSR _S_IEXEC
-#elif defined __MINGW32__
-# define setmode _setmode
-# define stat _stat
-# define chmod _chmod
-# define getcwd _getcwd
-# define putenv _putenv
-#elif defined __CYGWIN__
-# define HAVE_SETENV
-# define FOPEN_WB "wb"
-/* #elif defined other platforms ... */
-#endif
-
-#if defined PATH_MAX
-# define LT_PATHMAX PATH_MAX
-#elif defined MAXPATHLEN
-# define LT_PATHMAX MAXPATHLEN
-#else
-# define LT_PATHMAX 1024
-#endif
-
-#ifndef S_IXOTH
-# define S_IXOTH 0
-#endif
-#ifndef S_IXGRP
-# define S_IXGRP 0
-#endif
-
-/* path handling portability macros */
-#ifndef DIR_SEPARATOR
-# define DIR_SEPARATOR '/'
-# define PATH_SEPARATOR ':'
-#endif
-
-#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
- defined __OS2__
-# define HAVE_DOS_BASED_FILE_SYSTEM
-# define FOPEN_WB "wb"
-# ifndef DIR_SEPARATOR_2
-# define DIR_SEPARATOR_2 '\\'
-# endif
-# ifndef PATH_SEPARATOR_2
-# define PATH_SEPARATOR_2 ';'
-# endif
-#endif
-
-#ifndef DIR_SEPARATOR_2
-# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
-#else /* DIR_SEPARATOR_2 */
-# define IS_DIR_SEPARATOR(ch) \
- (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
-#endif /* DIR_SEPARATOR_2 */
-
-#ifndef PATH_SEPARATOR_2
-# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
-#else /* PATH_SEPARATOR_2 */
-# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
-#endif /* PATH_SEPARATOR_2 */
-
-#ifndef FOPEN_WB
-# define FOPEN_WB "w"
-#endif
-#ifndef _O_BINARY
-# define _O_BINARY 0
-#endif
-
-#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
-#define XFREE(stale) do { \
- if (stale) { free (stale); stale = 0; } \
-} while (0)
-
-#if defined LT_DEBUGWRAPPER
-static int lt_debug = 1;
-#else
-static int lt_debug = 0;
-#endif
-
-const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
-
-void *xmalloc (size_t num);
-char *xstrdup (const char *string);
-const char *base_name (const char *name);
-char *find_executable (const char *wrapper);
-char *chase_symlinks (const char *pathspec);
-int make_executable (const char *path);
-int check_executable (const char *path);
-char *strendzap (char *str, const char *pat);
-void lt_debugprintf (const char *file, int line, const char *fmt, ...);
-void lt_fatal (const char *file, int line, const char *message, ...);
-static const char *nonnull (const char *s);
-static const char *nonempty (const char *s);
-void lt_setenv (const char *name, const char *value);
-char *lt_extend_str (const char *orig_value, const char *add, int to_end);
-void lt_update_exe_path (const char *name, const char *value);
-void lt_update_lib_path (const char *name, const char *value);
-char **prepare_spawn (char **argv);
-void lt_dump_script (FILE *f);
-EOF
-
- cat <<EOF
-#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
-# define externally_visible volatile
-#else
-# define externally_visible __attribute__((externally_visible)) volatile
-#endif
-externally_visible const char * MAGIC_EXE = "$magic_exe";
-const char * LIB_PATH_VARNAME = "$shlibpath_var";
-EOF
-
- if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
- func_to_host_path "$temp_rpath"
- cat <<EOF
-const char * LIB_PATH_VALUE = "$func_to_host_path_result";
-EOF
- else
- cat <<"EOF"
-const char * LIB_PATH_VALUE = "";
-EOF
- fi
-
- if test -n "$dllsearchpath"; then
- func_to_host_path "$dllsearchpath:"
- cat <<EOF
-const char * EXE_PATH_VARNAME = "PATH";
-const char * EXE_PATH_VALUE = "$func_to_host_path_result";
-EOF
- else
- cat <<"EOF"
-const char * EXE_PATH_VARNAME = "";
-const char * EXE_PATH_VALUE = "";
-EOF
- fi
-
- if test yes = "$fast_install"; then
- cat <<EOF
-const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
-EOF
- else
- cat <<EOF
-const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
-EOF
- fi
-
-
- cat <<"EOF"
-
-#define LTWRAPPER_OPTION_PREFIX "--lt-"
-
-static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
-static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script";
-static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug";
-
-int
-main (int argc, char *argv[])
-{
- char **newargz;
- int newargc;
- char *tmp_pathspec;
- char *actual_cwrapper_path;
- char *actual_cwrapper_name;
- char *target_name;
- char *lt_argv_zero;
- int rval = 127;
-
- int i;
-
- program_name = (char *) xstrdup (base_name (argv[0]));
- newargz = XMALLOC (char *, (size_t) argc + 1);
-
- /* very simple arg parsing; don't want to rely on getopt
- * also, copy all non cwrapper options to newargz, except
- * argz[0], which is handled differently
- */
- newargc=0;
- for (i = 1; i < argc; i++)
- {
- if (STREQ (argv[i], dumpscript_opt))
- {
-EOF
- case $host in
- *mingw* | *cygwin* )
- # make stdout use "unix" line endings
- echo " setmode(1,_O_BINARY);"
- ;;
- esac
-
- cat <<"EOF"
- lt_dump_script (stdout);
- return 0;
- }
- if (STREQ (argv[i], debug_opt))
- {
- lt_debug = 1;
- continue;
- }
- if (STREQ (argv[i], ltwrapper_option_prefix))
- {
- /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
- namespace, but it is not one of the ones we know about and
- have already dealt with, above (inluding dump-script), then
- report an error. Otherwise, targets might begin to believe
- they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
- namespace. The first time any user complains about this, we'll
- need to make LTWRAPPER_OPTION_PREFIX a configure-time option
- or a configure.ac-settable value.
- */
- lt_fatal (__FILE__, __LINE__,
- "unrecognized %s option: '%s'",
- ltwrapper_option_prefix, argv[i]);
- }
- /* otherwise ... */
- newargz[++newargc] = xstrdup (argv[i]);
- }
- newargz[++newargc] = NULL;
-
-EOF
- cat <<EOF
- /* The GNU banner must be the first non-error debug message */
- lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
-EOF
- cat <<"EOF"
- lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
- lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
-
- tmp_pathspec = find_executable (argv[0]);
- if (tmp_pathspec == NULL)
- lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
- lt_debugprintf (__FILE__, __LINE__,
- "(main) found exe (before symlink chase) at: %s\n",
- tmp_pathspec);
-
- actual_cwrapper_path = chase_symlinks (tmp_pathspec);
- lt_debugprintf (__FILE__, __LINE__,
- "(main) found exe (after symlink chase) at: %s\n",
- actual_cwrapper_path);
- XFREE (tmp_pathspec);
-
- actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
- strendzap (actual_cwrapper_path, actual_cwrapper_name);
-
- /* wrapper name transforms */
- strendzap (actual_cwrapper_name, ".exe");
- tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
- XFREE (actual_cwrapper_name);
- actual_cwrapper_name = tmp_pathspec;
- tmp_pathspec = 0;
-
- /* target_name transforms -- use actual target program name; might have lt- prefix */
- target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
- strendzap (target_name, ".exe");
- tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
- XFREE (target_name);
- target_name = tmp_pathspec;
- tmp_pathspec = 0;
-
- lt_debugprintf (__FILE__, __LINE__,
- "(main) libtool target name: %s\n",
- target_name);
-EOF
-
- cat <<EOF
- newargz[0] =
- XMALLOC (char, (strlen (actual_cwrapper_path) +
- strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
- strcpy (newargz[0], actual_cwrapper_path);
- strcat (newargz[0], "$objdir");
- strcat (newargz[0], "/");
-EOF
-
- cat <<"EOF"
- /* stop here, and copy so we don't have to do this twice */
- tmp_pathspec = xstrdup (newargz[0]);
-
- /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
- strcat (newargz[0], actual_cwrapper_name);
-
- /* DO want the lt- prefix here if it exists, so use target_name */
- lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
- XFREE (tmp_pathspec);
- tmp_pathspec = NULL;
-EOF
-
- case $host_os in
- mingw*)
- cat <<"EOF"
- {
- char* p;
- while ((p = strchr (newargz[0], '\\')) != NULL)
- {
- *p = '/';
- }
- while ((p = strchr (lt_argv_zero, '\\')) != NULL)
- {
- *p = '/';
- }
- }
-EOF
- ;;
- esac
-
- cat <<"EOF"
- XFREE (target_name);
- XFREE (actual_cwrapper_path);
- XFREE (actual_cwrapper_name);
-
- lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
- lt_setenv ("DUALCASE", "1"); /* for MSK sh */
- /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must
- be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
- because on Windows, both *_VARNAMEs are PATH but uninstalled
- libraries must come first. */
- lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
- lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
-
- lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
- nonnull (lt_argv_zero));
- for (i = 0; i < newargc; i++)
- {
- lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
- i, nonnull (newargz[i]));
- }
-
-EOF
-
- case $host_os in
- mingw*)
- cat <<"EOF"
- /* execv doesn't actually work on mingw as expected on unix */
- newargz = prepare_spawn (newargz);
- rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
- if (rval == -1)
- {
- /* failed to start process */
- lt_debugprintf (__FILE__, __LINE__,
- "(main) failed to launch target \"%s\": %s\n",
- lt_argv_zero, nonnull (strerror (errno)));
- return 127;
- }
- return rval;
-EOF
- ;;
- *)
- cat <<"EOF"
- execv (lt_argv_zero, newargz);
- return rval; /* =127, but avoids unused variable warning */
-EOF
- ;;
- esac
-
- cat <<"EOF"
-}
-
-void *
-xmalloc (size_t num)
-{
- void *p = (void *) malloc (num);
- if (!p)
- lt_fatal (__FILE__, __LINE__, "memory exhausted");
-
- return p;
-}
-
-char *
-xstrdup (const char *string)
-{
- return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
- string) : NULL;
-}
-
-const char *
-base_name (const char *name)
-{
- const char *base;
-
-#if defined HAVE_DOS_BASED_FILE_SYSTEM
- /* Skip over the disk name in MSDOS pathnames. */
- if (isalpha ((unsigned char) name[0]) && name[1] == ':')
- name += 2;
-#endif
-
- for (base = name; *name; name++)
- if (IS_DIR_SEPARATOR (*name))
- base = name + 1;
- return base;
-}
-
-int
-check_executable (const char *path)
-{
- struct stat st;
-
- lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
- nonempty (path));
- if ((!path) || (!*path))
- return 0;
-
- if ((stat (path, &st) >= 0)
- && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
- return 1;
- else
- return 0;
-}
-
-int
-make_executable (const char *path)
-{
- int rval = 0;
- struct stat st;
-
- lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
- nonempty (path));
- if ((!path) || (!*path))
- return 0;
-
- if (stat (path, &st) >= 0)
- {
- rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
- }
- return rval;
-}
-
-/* Searches for the full path of the wrapper. Returns
- newly allocated full path name if found, NULL otherwise
- Does not chase symlinks, even on platforms that support them.
-*/
-char *
-find_executable (const char *wrapper)
-{
- int has_slash = 0;
- const char *p;
- const char *p_next;
- /* static buffer for getcwd */
- char tmp[LT_PATHMAX + 1];
- size_t tmp_len;
- char *concat_name;
-
- lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
- nonempty (wrapper));
-
- if ((wrapper == NULL) || (*wrapper == '\0'))
- return NULL;
-
- /* Absolute path? */
-#if defined HAVE_DOS_BASED_FILE_SYSTEM
- if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
- {
- concat_name = xstrdup (wrapper);
- if (check_executable (concat_name))
- return concat_name;
- XFREE (concat_name);
- }
- else
- {
-#endif
- if (IS_DIR_SEPARATOR (wrapper[0]))
- {
- concat_name = xstrdup (wrapper);
- if (check_executable (concat_name))
- return concat_name;
- XFREE (concat_name);
- }
-#if defined HAVE_DOS_BASED_FILE_SYSTEM
- }
-#endif
-
- for (p = wrapper; *p; p++)
- if (*p == '/')
- {
- has_slash = 1;
- break;
- }
- if (!has_slash)
- {
- /* no slashes; search PATH */
- const char *path = getenv ("PATH");
- if (path != NULL)
- {
- for (p = path; *p; p = p_next)
- {
- const char *q;
- size_t p_len;
- for (q = p; *q; q++)
- if (IS_PATH_SEPARATOR (*q))
- break;
- p_len = (size_t) (q - p);
- p_next = (*q == '\0' ? q : q + 1);
- if (p_len == 0)
- {
- /* empty path: current directory */
- if (getcwd (tmp, LT_PATHMAX) == NULL)
- lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
- nonnull (strerror (errno)));
- tmp_len = strlen (tmp);
- concat_name =
- XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
- memcpy (concat_name, tmp, tmp_len);
- concat_name[tmp_len] = '/';
- strcpy (concat_name + tmp_len + 1, wrapper);
- }
- else
- {
- concat_name =
- XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
- memcpy (concat_name, p, p_len);
- concat_name[p_len] = '/';
- strcpy (concat_name + p_len + 1, wrapper);
- }
- if (check_executable (concat_name))
- return concat_name;
- XFREE (concat_name);
- }
- }
- /* not found in PATH; assume curdir */
- }
- /* Relative path | not found in path: prepend cwd */
- if (getcwd (tmp, LT_PATHMAX) == NULL)
- lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
- nonnull (strerror (errno)));
- tmp_len = strlen (tmp);
- concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
- memcpy (concat_name, tmp, tmp_len);
- concat_name[tmp_len] = '/';
- strcpy (concat_name + tmp_len + 1, wrapper);
-
- if (check_executable (concat_name))
- return concat_name;
- XFREE (concat_name);
- return NULL;
-}
-
-char *
-chase_symlinks (const char *pathspec)
-{
-#ifndef S_ISLNK
- return xstrdup (pathspec);
-#else
- char buf[LT_PATHMAX];
- struct stat s;
- char *tmp_pathspec = xstrdup (pathspec);
- char *p;
- int has_symlinks = 0;
- while (strlen (tmp_pathspec) && !has_symlinks)
- {
- lt_debugprintf (__FILE__, __LINE__,
- "checking path component for symlinks: %s\n",
- tmp_pathspec);
- if (lstat (tmp_pathspec, &s) == 0)
- {
- if (S_ISLNK (s.st_mode) != 0)
- {
- has_symlinks = 1;
- break;
- }
-
- /* search backwards for last DIR_SEPARATOR */
- p = tmp_pathspec + strlen (tmp_pathspec) - 1;
- while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
- p--;
- if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
- {
- /* no more DIR_SEPARATORS left */
- break;
- }
- *p = '\0';
- }
- else
- {
- lt_fatal (__FILE__, __LINE__,
- "error accessing file \"%s\": %s",
- tmp_pathspec, nonnull (strerror (errno)));
- }
- }
- XFREE (tmp_pathspec);
-
- if (!has_symlinks)
- {
- return xstrdup (pathspec);
- }
-
- tmp_pathspec = realpath (pathspec, buf);
- if (tmp_pathspec == 0)
- {
- lt_fatal (__FILE__, __LINE__,
- "could not follow symlinks for %s", pathspec);
- }
- return xstrdup (tmp_pathspec);
-#endif
-}
-
-char *
-strendzap (char *str, const char *pat)
-{
- size_t len, patlen;
-
- assert (str != NULL);
- assert (pat != NULL);
-
- len = strlen (str);
- patlen = strlen (pat);
-
- if (patlen <= len)
- {
- str += len - patlen;
- if (STREQ (str, pat))
- *str = '\0';
- }
- return str;
-}
-
-void
-lt_debugprintf (const char *file, int line, const char *fmt, ...)
-{
- va_list args;
- if (lt_debug)
- {
- (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
- va_start (args, fmt);
- (void) vfprintf (stderr, fmt, args);
- va_end (args);
- }
-}
-
-static void
-lt_error_core (int exit_status, const char *file,
- int line, const char *mode,
- const char *message, va_list ap)
-{
- fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
- vfprintf (stderr, message, ap);
- fprintf (stderr, ".\n");
-
- if (exit_status >= 0)
- exit (exit_status);
-}
-
-void
-lt_fatal (const char *file, int line, const char *message, ...)
-{
- va_list ap;
- va_start (ap, message);
- lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
- va_end (ap);
-}
-
-static const char *
-nonnull (const char *s)
-{
- return s ? s : "(null)";
-}
-
-static const char *
-nonempty (const char *s)
-{
- return (s && !*s) ? "(empty)" : nonnull (s);
-}
-
-void
-lt_setenv (const char *name, const char *value)
-{
- lt_debugprintf (__FILE__, __LINE__,
- "(lt_setenv) setting '%s' to '%s'\n",
- nonnull (name), nonnull (value));
- {
-#ifdef HAVE_SETENV
- /* always make a copy, for consistency with !HAVE_SETENV */
- char *str = xstrdup (value);
- setenv (name, str, 1);
-#else
- size_t len = strlen (name) + 1 + strlen (value) + 1;
- char *str = XMALLOC (char, len);
- sprintf (str, "%s=%s", name, value);
- if (putenv (str) != EXIT_SUCCESS)
- {
- XFREE (str);
- }
-#endif
- }
-}
-
-char *
-lt_extend_str (const char *orig_value, const char *add, int to_end)
-{
- char *new_value;
- if (orig_value && *orig_value)
- {
- size_t orig_value_len = strlen (orig_value);
- size_t add_len = strlen (add);
- new_value = XMALLOC (char, add_len + orig_value_len + 1);
- if (to_end)
- {
- strcpy (new_value, orig_value);
- strcpy (new_value + orig_value_len, add);
- }
- else
- {
- strcpy (new_value, add);
- strcpy (new_value + add_len, orig_value);
- }
- }
- else
- {
- new_value = xstrdup (add);
- }
- return new_value;
-}
-
-void
-lt_update_exe_path (const char *name, const char *value)
-{
- lt_debugprintf (__FILE__, __LINE__,
- "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
- nonnull (name), nonnull (value));
-
- if (name && *name && value && *value)
- {
- char *new_value = lt_extend_str (getenv (name), value, 0);
- /* some systems can't cope with a ':'-terminated path #' */
- size_t len = strlen (new_value);
- while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
- {
- new_value[--len] = '\0';
- }
- lt_setenv (name, new_value);
- XFREE (new_value);
- }
-}
-
-void
-lt_update_lib_path (const char *name, const char *value)
-{
- lt_debugprintf (__FILE__, __LINE__,
- "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
- nonnull (name), nonnull (value));
-
- if (name && *name && value && *value)
- {
- char *new_value = lt_extend_str (getenv (name), value, 0);
- lt_setenv (name, new_value);
- XFREE (new_value);
- }
-}
-
-EOF
- case $host_os in
- mingw*)
- cat <<"EOF"
-
-/* Prepares an argument vector before calling spawn().
- Note that spawn() does not by itself call the command interpreter
- (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
- ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
- GetVersionEx(&v);
- v.dwPlatformId == VER_PLATFORM_WIN32_NT;
- }) ? "cmd.exe" : "command.com").
- Instead it simply concatenates the arguments, separated by ' ', and calls
- CreateProcess(). We must quote the arguments since Win32 CreateProcess()
- interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
- special way:
- - Space and tab are interpreted as delimiters. They are not treated as
- delimiters if they are surrounded by double quotes: "...".
- - Unescaped double quotes are removed from the input. Their only effect is
- that within double quotes, space and tab are treated like normal
- characters.
- - Backslashes not followed by double quotes are not special.
- - But 2*n+1 backslashes followed by a double quote become
- n backslashes followed by a double quote (n >= 0):
- \" -> "
- \\\" -> \"
- \\\\\" -> \\"
- */
-#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
-#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
-char **
-prepare_spawn (char **argv)
-{
- size_t argc;
- char **new_argv;
- size_t i;
-
- /* Count number of arguments. */
- for (argc = 0; argv[argc] != NULL; argc++)
- ;
-
- /* Allocate new argument vector. */
- new_argv = XMALLOC (char *, argc + 1);
-
- /* Put quoted arguments into the new argument vector. */
- for (i = 0; i < argc; i++)
- {
- const char *string = argv[i];
-
- if (string[0] == '\0')
- new_argv[i] = xstrdup ("\"\"");
- else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
- {
- int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
- size_t length;
- unsigned int backslashes;
- const char *s;
- char *quoted_string;
- char *p;
-
- length = 0;
- backslashes = 0;
- if (quote_around)
- length++;
- for (s = string; *s != '\0'; s++)
- {
- char c = *s;
- if (c == '"')
- length += backslashes + 1;
- length++;
- if (c == '\\')
- backslashes++;
- else
- backslashes = 0;
- }
- if (quote_around)
- length += backslashes + 1;
-
- quoted_string = XMALLOC (char, length + 1);
-
- p = quoted_string;
- backslashes = 0;
- if (quote_around)
- *p++ = '"';
- for (s = string; *s != '\0'; s++)
- {
- char c = *s;
- if (c == '"')
- {
- unsigned int j;
- for (j = backslashes + 1; j > 0; j--)
- *p++ = '\\';
- }
- *p++ = c;
- if (c == '\\')
- backslashes++;
- else
- backslashes = 0;
- }
- if (quote_around)
- {
- unsigned int j;
- for (j = backslashes; j > 0; j--)
- *p++ = '\\';
- *p++ = '"';
- }
- *p = '\0';
-
- new_argv[i] = quoted_string;
- }
- else
- new_argv[i] = (char *) string;
- }
- new_argv[argc] = NULL;
-
- return new_argv;
-}
-EOF
- ;;
- esac
-
- cat <<"EOF"
-void lt_dump_script (FILE* f)
-{
-EOF
- func_emit_wrapper yes |
- $SED -n -e '
-s/^\(.\{79\}\)\(..*\)/\1\
-\2/
-h
-s/\([\\"]\)/\\\1/g
-s/$/\\n/
-s/\([^\n]*\).*/ fputs ("\1", f);/p
-g
-D'
- cat <<"EOF"
-}
-EOF
-}
-# end: func_emit_cwrapperexe_src
-
-# func_win32_import_lib_p ARG
-# True if ARG is an import lib, as indicated by $file_magic_cmd
-func_win32_import_lib_p ()
-{
- $debug_cmd
-
- case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
- *import*) : ;;
- *) false ;;
- esac
-}
-
-# func_suncc_cstd_abi
-# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
-# Several compiler flags select an ABI that is incompatible with the
-# Cstd library. Avoid specifying it if any are in CXXFLAGS.
-func_suncc_cstd_abi ()
-{
- $debug_cmd
-
- case " $compile_command " in
- *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
- suncc_use_cstd_abi=no
- ;;
- *)
- suncc_use_cstd_abi=yes
- ;;
- esac
-}
-
-# func_mode_link arg...
-func_mode_link ()
-{
- $debug_cmd
-
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
- # It is impossible to link a dll without this setting, and
- # we shouldn't force the makefile maintainer to figure out
- # what system we are compiling for in order to pass an extra
- # flag for every libtool invocation.
- # allow_undefined=no
-
- # FIXME: Unfortunately, there are problems with the above when trying
- # to make a dll that has undefined symbols, in which case not
- # even a static library is built. For now, we need to specify
- # -no-undefined on the libtool link line when we can be certain
- # that all symbols are satisfied, otherwise we get a static library.
- allow_undefined=yes
- ;;
- *)
- allow_undefined=yes
- ;;
- esac
- libtool_args=$nonopt
- base_compile="$nonopt $@"
- compile_command=$nonopt
- finalize_command=$nonopt
-
- compile_rpath=
- finalize_rpath=
- compile_shlibpath=
- finalize_shlibpath=
- convenience=
- old_convenience=
- deplibs=
- old_deplibs=
- compiler_flags=
- linker_flags=
- dllsearchpath=
- lib_search_path=`pwd`
- inst_prefix_dir=
- new_inherited_linker_flags=
-
- avoid_version=no
- bindir=
- dlfiles=
- dlprefiles=
- dlself=no
- export_dynamic=no
- export_symbols=
- export_symbols_regex=
- generated=
- libobjs=
- ltlibs=
- module=no
- no_install=no
- objs=
- os2dllname=
- non_pic_objects=
- precious_files_regex=
- prefer_static_libs=no
- preload=false
- prev=
- prevarg=
- release=
- rpath=
- xrpath=
- perm_rpath=
- temp_rpath=
- thread_safe=no
- vinfo=
- vinfo_number=no
- weak_libs=
- single_module=$wl-single_module
- func_infer_tag $base_compile
-
- # We need to know -static, to get the right output filenames.
- for arg
- do
- case $arg in
- -shared)
- test yes != "$build_libtool_libs" \
- && func_fatal_configuration "cannot build a shared library"
- build_old_libs=no
- break
- ;;
- -all-static | -static | -static-libtool-libs)
- case $arg in
- -all-static)
- if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
- func_warning "complete static linking is impossible in this configuration"
- fi
- if test -n "$link_static_flag"; then
- dlopen_self=$dlopen_self_static
- fi
- prefer_static_libs=yes
- ;;
- -static)
- if test -z "$pic_flag" && test -n "$link_static_flag"; then
- dlopen_self=$dlopen_self_static
- fi
- prefer_static_libs=built
- ;;
- -static-libtool-libs)
- if test -z "$pic_flag" && test -n "$link_static_flag"; then
- dlopen_self=$dlopen_self_static
- fi
- prefer_static_libs=yes
- ;;
- esac
- build_libtool_libs=no
- build_old_libs=yes
- break
- ;;
- esac
- done
-
- # See if our shared archives depend on static archives.
- test -n "$old_archive_from_new_cmds" && build_old_libs=yes
-
- # Go through the arguments, transforming them on the way.
- while test "$#" -gt 0; do
- arg=$1
- shift
- func_quote_arg pretty,unquoted "$arg"
- qarg=$func_quote_arg_unquoted_result
- func_append libtool_args " $func_quote_arg_result"
-
- # If the previous option needs an argument, assign it.
- if test -n "$prev"; then
- case $prev in
- output)
- func_append compile_command " @OUTPUT@"
- func_append finalize_command " @OUTPUT@"
- ;;
- esac
-
- case $prev in
- bindir)
- bindir=$arg
- prev=
- continue
- ;;
- dlfiles|dlprefiles)
- $preload || {
- # Add the symbol object into the linking commands.
- func_append compile_command " @SYMFILE@"
- func_append finalize_command " @SYMFILE@"
- preload=:
- }
- case $arg in
- *.la | *.lo) ;; # We handle these cases below.
- force)
- if test no = "$dlself"; then
- dlself=needless
- export_dynamic=yes
- fi
- prev=
- continue
- ;;
- self)
- if test dlprefiles = "$prev"; then
- dlself=yes
- elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
- dlself=yes
- else
- dlself=needless
- export_dynamic=yes
- fi
- prev=
- continue
- ;;
- *)
- if test dlfiles = "$prev"; then
- func_append dlfiles " $arg"
- else
- func_append dlprefiles " $arg"
- fi
- prev=
- continue
- ;;
- esac
- ;;
- expsyms)
- export_symbols=$arg
- test -f "$arg" \
- || func_fatal_error "symbol file '$arg' does not exist"
- prev=
- continue
- ;;
- expsyms_regex)
- export_symbols_regex=$arg
- prev=
- continue
- ;;
- framework)
- case $host in
- *-*-darwin*)
- case "$deplibs " in
- *" $qarg.ltframework "*) ;;
- *) func_append deplibs " $qarg.ltframework" # this is fixed later
- ;;
- esac
- ;;
- esac
- prev=
- continue
- ;;
- inst_prefix)
- inst_prefix_dir=$arg
- prev=
- continue
- ;;
- mllvm)
- # Clang does not use LLVM to link, so we can simply discard any
- # '-mllvm $arg' options when doing the link step.
- prev=
- continue
- ;;
- objectlist)
- if test -f "$arg"; then
- save_arg=$arg
- moreargs=
- for fil in `cat "$save_arg"`
- do
-# func_append moreargs " $fil"
- arg=$fil
- # A libtool-controlled object.
-
- # Check to see that this really is a libtool object.
- if func_lalib_unsafe_p "$arg"; then
- pic_object=
- non_pic_object=
-
- # Read the .lo file
- func_source "$arg"
-
- if test -z "$pic_object" ||
- test -z "$non_pic_object" ||
- test none = "$pic_object" &&
- test none = "$non_pic_object"; then
- func_fatal_error "cannot find name of object for '$arg'"
- fi
-
- # Extract subdirectory from the argument.
- func_dirname "$arg" "/" ""
- xdir=$func_dirname_result
-
- if test none != "$pic_object"; then
- # Prepend the subdirectory the object is found in.
- pic_object=$xdir$pic_object
-
- if test dlfiles = "$prev"; then
- if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
- func_append dlfiles " $pic_object"
- prev=
- continue
- else
- # If libtool objects are unsupported, then we need to preload.
- prev=dlprefiles
- fi
- fi
-
- # CHECK ME: I think I busted this. -Ossama
- if test dlprefiles = "$prev"; then
- # Preload the old-style object.
- func_append dlprefiles " $pic_object"
- prev=
- fi
-
- # A PIC object.
- func_append libobjs " $pic_object"
- arg=$pic_object
- fi
-
- # Non-PIC object.
- if test none != "$non_pic_object"; then
- # Prepend the subdirectory the object is found in.
- non_pic_object=$xdir$non_pic_object
-
- # A standard non-PIC object
- func_append non_pic_objects " $non_pic_object"
- if test -z "$pic_object" || test none = "$pic_object"; then
- arg=$non_pic_object
- fi
- else
- # If the PIC object exists, use it instead.
- # $xdir was prepended to $pic_object above.
- non_pic_object=$pic_object
- func_append non_pic_objects " $non_pic_object"
- fi
- else
- # Only an error if not doing a dry-run.
- if $opt_dry_run; then
- # Extract subdirectory from the argument.
- func_dirname "$arg" "/" ""
- xdir=$func_dirname_result
-
- func_lo2o "$arg"
- pic_object=$xdir$objdir/$func_lo2o_result
- non_pic_object=$xdir$func_lo2o_result
- func_append libobjs " $pic_object"
- func_append non_pic_objects " $non_pic_object"
- else
- func_fatal_error "'$arg' is not a valid libtool object"
- fi
- fi
- done
- else
- func_fatal_error "link input file '$arg' does not exist"
- fi
- arg=$save_arg
- prev=
- continue
- ;;
- os2dllname)
- os2dllname=$arg
- prev=
- continue
- ;;
- precious_regex)
- precious_files_regex=$arg
- prev=
- continue
- ;;
- release)
- release=-$arg
- prev=
- continue
- ;;
- rpath | xrpath)
- # We need an absolute path.
- case $arg in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- func_fatal_error "only absolute run-paths are allowed"
- ;;
- esac
- if test rpath = "$prev"; then
- case "$rpath " in
- *" $arg "*) ;;
- *) func_append rpath " $arg" ;;
- esac
- else
- case "$xrpath " in
- *" $arg "*) ;;
- *) func_append xrpath " $arg" ;;
- esac
- fi
- prev=
- continue
- ;;
- shrext)
- shrext_cmds=$arg
- prev=
- continue
- ;;
- weak)
- func_append weak_libs " $arg"
- prev=
- continue
- ;;
- xassembler)
- func_append compiler_flags " -Xassembler $qarg"
- prev=
- func_append compile_command " -Xassembler $qarg"
- func_append finalize_command " -Xassembler $qarg"
- continue
- ;;
- xcclinker)
- func_append linker_flags " $qarg"
- func_append compiler_flags " $qarg"
- prev=
- func_append compile_command " $qarg"
- func_append finalize_command " $qarg"
- continue
- ;;
- xcompiler)
- func_append compiler_flags " $qarg"
- prev=
- func_append compile_command " $qarg"
- func_append finalize_command " $qarg"
- continue
- ;;
- xlinker)
- func_append linker_flags " $qarg"
- func_append compiler_flags " $wl$qarg"
- prev=
- func_append compile_command " $wl$qarg"
- func_append finalize_command " $wl$qarg"
- continue
- ;;
- *)
- eval "$prev=\"\$arg\""
- prev=
- continue
- ;;
- esac
- fi # test -n "$prev"
-
- prevarg=$arg
-
- case $arg in
- -all-static)
- if test -n "$link_static_flag"; then
- # See comment for -static flag below, for more details.
- func_append compile_command " $link_static_flag"
- func_append finalize_command " $link_static_flag"
- fi
- continue
- ;;
-
- -allow-undefined)
- # FIXME: remove this flag sometime in the future.
- func_fatal_error "'-allow-undefined' must not be used because it is the default"
- ;;
-
- -avoid-version)
- avoid_version=yes
- continue
- ;;
-
- -bindir)
- prev=bindir
- continue
- ;;
-
- -dlopen)
- prev=dlfiles
- continue
- ;;
-
- -dlpreopen)
- prev=dlprefiles
- continue
- ;;
-
- -export-dynamic)
- export_dynamic=yes
- continue
- ;;
-
- -export-symbols | -export-symbols-regex)
- if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
- func_fatal_error "more than one -exported-symbols argument is not allowed"
- fi
- if test X-export-symbols = "X$arg"; then
- prev=expsyms
- else
- prev=expsyms_regex
- fi
- continue
- ;;
-
- -framework)
- prev=framework
- continue
- ;;
-
- -inst-prefix-dir)
- prev=inst_prefix
- continue
- ;;
-
- # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
- # so, if we see these flags be careful not to treat them like -L
- -L[A-Z][A-Z]*:*)
- case $with_gcc/$host in
- no/*-*-irix* | /*-*-irix*)
- func_append compile_command " $arg"
- func_append finalize_command " $arg"
- ;;
- esac
- continue
- ;;
-
- -L*)
- func_stripname "-L" '' "$arg"
- if test -z "$func_stripname_result"; then
- if test "$#" -gt 0; then
- func_fatal_error "require no space between '-L' and '$1'"
- else
- func_fatal_error "need path for '-L' option"
- fi
- fi
- func_resolve_sysroot "$func_stripname_result"
- dir=$func_resolve_sysroot_result
- # We need an absolute path.
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- *)
- absdir=`cd "$dir" && pwd`
- test -z "$absdir" && \
- func_fatal_error "cannot determine absolute directory name of '$dir'"
- dir=$absdir
- ;;
- esac
- case "$deplibs " in
- *" -L$dir "* | *" $arg "*)
- # Will only happen for absolute or sysroot arguments
- ;;
- *)
- # Preserve sysroot, but never include relative directories
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
- *) func_append deplibs " -L$dir" ;;
- esac
- func_append lib_search_path " $dir"
- ;;
- esac
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
- testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
- case :$dllsearchpath: in
- *":$dir:"*) ;;
- ::) dllsearchpath=$dir;;
- *) func_append dllsearchpath ":$dir";;
- esac
- case :$dllsearchpath: in
- *":$testbindir:"*) ;;
- ::) dllsearchpath=$testbindir;;
- *) func_append dllsearchpath ":$testbindir";;
- esac
- ;;
- esac
- continue
- ;;
-
- -l*)
- if test X-lc = "X$arg" || test X-lm = "X$arg"; then
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
- # These systems don't actually have a C or math library (as such)
- continue
- ;;
- *-*-os2*)
- # These systems don't actually have a C library (as such)
- test X-lc = "X$arg" && continue
- ;;
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*)
- # Do not include libc due to us having libc/libc_r.
- test X-lc = "X$arg" && continue
- ;;
- *-*-rhapsody* | *-*-darwin1.[012])
- # Rhapsody C and math libraries are in the System framework
- func_append deplibs " System.ltframework"
- continue
- ;;
- *-*-sco3.2v5* | *-*-sco5v6*)
- # Causes problems with __ctype
- test X-lc = "X$arg" && continue
- ;;
- *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
- # Compiler inserts libc in the correct place for threads to work
- test X-lc = "X$arg" && continue
- ;;
- esac
- elif test X-lc_r = "X$arg"; then
- case $host in
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*)
- # Do not include libc_r directly, use -pthread flag.
- continue
- ;;
- esac
- fi
- func_append deplibs " $arg"
- continue
- ;;
-
- -mllvm)
- prev=mllvm
- continue
- ;;
-
- -module)
- module=yes
- continue
- ;;
-
- # Tru64 UNIX uses -model [arg] to determine the layout of C++
- # classes, name mangling, and exception handling.
- # Darwin uses the -arch flag to determine output architecture.
- -model|-arch|-isysroot|--sysroot)
- func_append compiler_flags " $arg"
- func_append compile_command " $arg"
- func_append finalize_command " $arg"
- prev=xcompiler
- continue
- ;;
- # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199.
- -pthread)
- case $host in
- *solaris2*) ;;
- *)
- case "$new_inherited_linker_flags " in
- *" $arg "*) ;;
- * ) func_append new_inherited_linker_flags " $arg" ;;
- esac
- ;;
- esac
- continue
- ;;
- -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \
- |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
- func_append compiler_flags " $arg"
- func_append compile_command " $arg"
- func_append finalize_command " $arg"
- case "$new_inherited_linker_flags " in
- *" $arg "*) ;;
- * ) func_append new_inherited_linker_flags " $arg" ;;
- esac
- continue
- ;;
-
- -multi_module)
- single_module=$wl-multi_module
- continue
- ;;
-
- -no-fast-install)
- fast_install=no
- continue
- ;;
-
- -no-install)
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
- # The PATH hackery in wrapper scripts is required on Windows
- # and Darwin in order for the loader to find any dlls it needs.
- func_warning "'-no-install' is ignored for $host"
- func_warning "assuming '-no-fast-install' instead"
- fast_install=no
- ;;
- *) no_install=yes ;;
- esac
- continue
- ;;
-
- -no-undefined)
- allow_undefined=no
- continue
- ;;
-
- -objectlist)
- prev=objectlist
- continue
- ;;
-
- -os2dllname)
- prev=os2dllname
- continue
- ;;
-
- -o) prev=output ;;
-
- -precious-files-regex)
- prev=precious_regex
- continue
- ;;
-
- -release)
- prev=release
- continue
- ;;
-
- -rpath)
- prev=rpath
- continue
- ;;
-
- -R)
- prev=xrpath
- continue
- ;;
-
- -R*)
- func_stripname '-R' '' "$arg"
- dir=$func_stripname_result
- # We need an absolute path.
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*) ;;
- =*)
- func_stripname '=' '' "$dir"
- dir=$lt_sysroot$func_stripname_result
- ;;
- *)
- func_fatal_error "only absolute run-paths are allowed"
- ;;
- esac
- case "$xrpath " in
- *" $dir "*) ;;
- *) func_append xrpath " $dir" ;;
- esac
- continue
- ;;
-
- -shared)
- # The effects of -shared are defined in a previous loop.
- continue
- ;;
-
- -shrext)
- prev=shrext
- continue
- ;;
-
- -static | -static-libtool-libs)
- # The effects of -static are defined in a previous loop.
- # We used to do the same as -all-static on platforms that
- # didn't have a PIC flag, but the assumption that the effects
- # would be equivalent was wrong. It would break on at least
- # Digital Unix and AIX.
- continue
- ;;
-
- -thread-safe)
- thread_safe=yes
- continue
- ;;
-
- -version-info)
- prev=vinfo
- continue
- ;;
-
- -version-number)
- prev=vinfo
- vinfo_number=yes
- continue
- ;;
-
- -weak)
- prev=weak
- continue
- ;;
-
- -Wc,*)
- func_stripname '-Wc,' '' "$arg"
- args=$func_stripname_result
- arg=
- save_ifs=$IFS; IFS=,
- for flag in $args; do
- IFS=$save_ifs
- func_quote_arg pretty "$flag"
- func_append arg " $func_quote_arg_result"
- func_append compiler_flags " $func_quote_arg_result"
- done
- IFS=$save_ifs
- func_stripname ' ' '' "$arg"
- arg=$func_stripname_result
- ;;
-
- -Wl,*)
- func_stripname '-Wl,' '' "$arg"
- args=$func_stripname_result
- arg=
- save_ifs=$IFS; IFS=,
- for flag in $args; do
- IFS=$save_ifs
- func_quote_arg pretty "$flag"
- func_append arg " $wl$func_quote_arg_result"
- func_append compiler_flags " $wl$func_quote_arg_result"
- func_append linker_flags " $func_quote_arg_result"
- done
- IFS=$save_ifs
- func_stripname ' ' '' "$arg"
- arg=$func_stripname_result
- ;;
-
- -Xassembler)
- prev=xassembler
- continue
- ;;
-
- -Xcompiler)
- prev=xcompiler
- continue
- ;;
-
- -Xlinker)
- prev=xlinker
- continue
- ;;
-
- -XCClinker)
- prev=xcclinker
- continue
- ;;
-
- # -msg_* for osf cc
- -msg_*)
- func_quote_arg pretty "$arg"
- arg=$func_quote_arg_result
- ;;
-
- # Flags to be passed through unchanged, with rationale:
- # -64, -mips[0-9] enable 64-bit mode for the SGI compiler
- # -r[0-9][0-9]* specify processor for the SGI compiler
- # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
- # +DA*, +DD* enable 64-bit mode for the HP compiler
- # -q* compiler args for the IBM compiler
- # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
- # -F/path path to uninstalled frameworks, gcc on darwin
- # -p, -pg, --coverage, -fprofile-* profiling flags for GCC
- # -fstack-protector* stack protector flags for GCC
- # @file GCC response files
- # -tp=* Portland pgcc target processor selection
- # --sysroot=* for sysroot support
- # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
- # -specs=* GCC specs files
- # -stdlib=* select c++ std lib with clang
- # -fsanitize=* Clang/GCC memory and address sanitizer
- # -fuse-ld=* Linker select flags for GCC
- # -Wa,* Pass flags directly to the assembler
- -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
- -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
- -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
- -specs=*|-fsanitize=*|-fuse-ld=*|-Wa,*)
- func_quote_arg pretty "$arg"
- arg=$func_quote_arg_result
- func_append compile_command " $arg"
- func_append finalize_command " $arg"
- func_append compiler_flags " $arg"
- continue
- ;;
-
- -Z*)
- if test os2 = "`expr $host : '.*\(os2\)'`"; then
- # OS/2 uses -Zxxx to specify OS/2-specific options
- compiler_flags="$compiler_flags $arg"
- func_append compile_command " $arg"
- func_append finalize_command " $arg"
- case $arg in
- -Zlinker | -Zstack)
- prev=xcompiler
- ;;
- esac
- continue
- else
- # Otherwise treat like 'Some other compiler flag' below
- func_quote_arg pretty "$arg"
- arg=$func_quote_arg_result
- fi
- ;;
-
- # Some other compiler flag.
- -* | +*)
- func_quote_arg pretty "$arg"
- arg=$func_quote_arg_result
- ;;
-
- *.$objext)
- # A standard object.
- func_append objs " $arg"
- ;;
-
- *.lo)
- # A libtool-controlled object.
-
- # Check to see that this really is a libtool object.
- if func_lalib_unsafe_p "$arg"; then
- pic_object=
- non_pic_object=
-
- # Read the .lo file
- func_source "$arg"
-
- if test -z "$pic_object" ||
- test -z "$non_pic_object" ||
- test none = "$pic_object" &&
- test none = "$non_pic_object"; then
- func_fatal_error "cannot find name of object for '$arg'"
- fi
-
- # Extract subdirectory from the argument.
- func_dirname "$arg" "/" ""
- xdir=$func_dirname_result
-
- test none = "$pic_object" || {
- # Prepend the subdirectory the object is found in.
- pic_object=$xdir$pic_object
-
- if test dlfiles = "$prev"; then
- if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
- func_append dlfiles " $pic_object"
- prev=
- continue
- else
- # If libtool objects are unsupported, then we need to preload.
- prev=dlprefiles
- fi
- fi
-
- # CHECK ME: I think I busted this. -Ossama
- if test dlprefiles = "$prev"; then
- # Preload the old-style object.
- func_append dlprefiles " $pic_object"
- prev=
- fi
-
- # A PIC object.
- func_append libobjs " $pic_object"
- arg=$pic_object
- }
-
- # Non-PIC object.
- if test none != "$non_pic_object"; then
- # Prepend the subdirectory the object is found in.
- non_pic_object=$xdir$non_pic_object
-
- # A standard non-PIC object
- func_append non_pic_objects " $non_pic_object"
- if test -z "$pic_object" || test none = "$pic_object"; then
- arg=$non_pic_object
- fi
- else
- # If the PIC object exists, use it instead.
- # $xdir was prepended to $pic_object above.
- non_pic_object=$pic_object
- func_append non_pic_objects " $non_pic_object"
- fi
- else
- # Only an error if not doing a dry-run.
- if $opt_dry_run; then
- # Extract subdirectory from the argument.
- func_dirname "$arg" "/" ""
- xdir=$func_dirname_result
-
- func_lo2o "$arg"
- pic_object=$xdir$objdir/$func_lo2o_result
- non_pic_object=$xdir$func_lo2o_result
- func_append libobjs " $pic_object"
- func_append non_pic_objects " $non_pic_object"
- else
- func_fatal_error "'$arg' is not a valid libtool object"
- fi
- fi
- ;;
-
- *.$libext)
- # An archive.
- func_append deplibs " $arg"
- func_append old_deplibs " $arg"
- continue
- ;;
-
- *.la)
- # A libtool-controlled library.
-
- func_resolve_sysroot "$arg"
- if test dlfiles = "$prev"; then
- # This library was specified with -dlopen.
- func_append dlfiles " $func_resolve_sysroot_result"
- prev=
- elif test dlprefiles = "$prev"; then
- # The library was specified with -dlpreopen.
- func_append dlprefiles " $func_resolve_sysroot_result"
- prev=
- else
- func_append deplibs " $func_resolve_sysroot_result"
- fi
- continue
- ;;
-
- # Some other compiler argument.
- *)
- # Unknown arguments in both finalize_command and compile_command need
- # to be aesthetically quoted because they are evaled later.
- func_quote_arg pretty "$arg"
- arg=$func_quote_arg_result
- ;;
- esac # arg
-
- # Now actually substitute the argument into the commands.
- if test -n "$arg"; then
- func_append compile_command " $arg"
- func_append finalize_command " $arg"
- fi
- done # argument parsing loop
-
- test -n "$prev" && \
- func_fatal_help "the '$prevarg' option requires an argument"
-
- if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
- eval arg=\"$export_dynamic_flag_spec\"
- func_append compile_command " $arg"
- func_append finalize_command " $arg"
- fi
-
- oldlibs=
- # calculate the name of the file, without its directory
- func_basename "$output"
- outputname=$func_basename_result
- libobjs_save=$libobjs
-
- if test -n "$shlibpath_var"; then
- # get the directories listed in $shlibpath_var
- eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
- else
- shlib_search_path=
- fi
- eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
- eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
-
- # Definition is injected by LT_CONFIG during libtool generation.
- func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
-
- func_dirname "$output" "/" ""
- output_objdir=$func_dirname_result$objdir
- func_to_tool_file "$output_objdir/"
- tool_output_objdir=$func_to_tool_file_result
- # Create the object directory.
- func_mkdir_p "$output_objdir"
-
- # Determine the type of output
- case $output in
- "")
- func_fatal_help "you must specify an output file"
- ;;
- *.$libext) linkmode=oldlib ;;
- *.lo | *.$objext) linkmode=obj ;;
- *.la) linkmode=lib ;;
- *) linkmode=prog ;; # Anything else should be a program.
- esac
-
- specialdeplibs=
-
- libs=
- # Find all interdependent deplibs by searching for libraries
- # that are linked more than once (e.g. -la -lb -la)
- for deplib in $deplibs; do
- if $opt_preserve_dup_deps; then
- case "$libs " in
- *" $deplib "*) func_append specialdeplibs " $deplib" ;;
- esac
- fi
- func_append libs " $deplib"
- done
-
- if test lib = "$linkmode"; then
- libs="$predeps $libs $compiler_lib_search_path $postdeps"
-
- # Compute libraries that are listed more than once in $predeps
- # $postdeps and mark them as special (i.e., whose duplicates are
- # not to be eliminated).
- pre_post_deps=
- if $opt_duplicate_compiler_generated_deps; then
- for pre_post_dep in $predeps $postdeps; do
- case "$pre_post_deps " in
- *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
- esac
- func_append pre_post_deps " $pre_post_dep"
- done
- fi
- pre_post_deps=
- fi
-
- deplibs=
- newdependency_libs=
- newlib_search_path=
- need_relink=no # whether we're linking any uninstalled libtool libraries
- notinst_deplibs= # not-installed libtool libraries
- notinst_path= # paths that contain not-installed libtool libraries
-
- case $linkmode in
- lib)
- passes="conv dlpreopen link"
- for file in $dlfiles $dlprefiles; do
- case $file in
- *.la) ;;
- *)
- func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
- ;;
- esac
- done
- ;;
- prog)
- compile_deplibs=
- finalize_deplibs=
- alldeplibs=false
- newdlfiles=
- newdlprefiles=
- passes="conv scan dlopen dlpreopen link"
- ;;
- *) passes="conv"
- ;;
- esac
-
- for pass in $passes; do
- # The preopen pass in lib mode reverses $deplibs; put it back here
- # so that -L comes before libs that need it for instance...
- if test lib,link = "$linkmode,$pass"; then
- ## FIXME: Find the place where the list is rebuilt in the wrong
- ## order, and fix it there properly
- tmp_deplibs=
- for deplib in $deplibs; do
- tmp_deplibs="$deplib $tmp_deplibs"
- done
- deplibs=$tmp_deplibs
- fi
-
- if test lib,link = "$linkmode,$pass" ||
- test prog,scan = "$linkmode,$pass"; then
- libs=$deplibs
- deplibs=
- fi
- if test prog = "$linkmode"; then
- case $pass in
- dlopen) libs=$dlfiles ;;
- dlpreopen) libs=$dlprefiles ;;
- link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
- esac
- fi
- if test lib,dlpreopen = "$linkmode,$pass"; then
- # Collect and forward deplibs of preopened libtool libs
- for lib in $dlprefiles; do
- # Ignore non-libtool-libs
- dependency_libs=
- func_resolve_sysroot "$lib"
- case $lib in
- *.la) func_source "$func_resolve_sysroot_result" ;;
- esac
-
- # Collect preopened libtool deplibs, except any this library
- # has declared as weak libs
- for deplib in $dependency_libs; do
- func_basename "$deplib"
- deplib_base=$func_basename_result
- case " $weak_libs " in
- *" $deplib_base "*) ;;
- *) func_append deplibs " $deplib" ;;
- esac
- done
- done
- libs=$dlprefiles
- fi
- if test dlopen = "$pass"; then
- # Collect dlpreopened libraries
- save_deplibs=$deplibs
- deplibs=
- fi
-
- for deplib in $libs; do
- lib=
- found=false
- case $deplib in
- -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
- |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
- if test prog,link = "$linkmode,$pass"; then
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- func_append compiler_flags " $deplib"
- if test lib = "$linkmode"; then
- case "$new_inherited_linker_flags " in
- *" $deplib "*) ;;
- * ) func_append new_inherited_linker_flags " $deplib" ;;
- esac
- fi
- fi
- continue
- ;;
- -l*)
- if test lib != "$linkmode" && test prog != "$linkmode"; then
- func_warning "'-l' is ignored for archives/objects"
- continue
- fi
- func_stripname '-l' '' "$deplib"
- name=$func_stripname_result
- if test lib = "$linkmode"; then
- searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
- else
- searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
- fi
- for searchdir in $searchdirs; do
- for search_ext in .la $std_shrext .so .a; do
- # Search the libtool library
- lib=$searchdir/lib$name$search_ext
- if test -f "$lib"; then
- if test .la = "$search_ext"; then
- found=:
- else
- found=false
- fi
- break 2
- fi
- done
- done
- if $found; then
- # deplib is a libtool library
- # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
- # We need to do some special things here, and not later.
- if test yes = "$allow_libtool_libs_with_static_runtimes"; then
- case " $predeps $postdeps " in
- *" $deplib "*)
- if func_lalib_p "$lib"; then
- library_names=
- old_library=
- func_source "$lib"
- for l in $old_library $library_names; do
- ll=$l
- done
- if test "X$ll" = "X$old_library"; then # only static version available
- found=false
- func_dirname "$lib" "" "."
- ladir=$func_dirname_result
- lib=$ladir/$old_library
- if test prog,link = "$linkmode,$pass"; then
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- deplibs="$deplib $deplibs"
- test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
- fi
- continue
- fi
- fi
- ;;
- *) ;;
- esac
- fi
- else
- # deplib doesn't seem to be a libtool library
- if test prog,link = "$linkmode,$pass"; then
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- deplibs="$deplib $deplibs"
- test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
- fi
- continue
- fi
- ;; # -l
- *.ltframework)
- if test prog,link = "$linkmode,$pass"; then
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- deplibs="$deplib $deplibs"
- if test lib = "$linkmode"; then
- case "$new_inherited_linker_flags " in
- *" $deplib "*) ;;
- * ) func_append new_inherited_linker_flags " $deplib" ;;
- esac
- fi
- fi
- continue
- ;;
- -L*)
- case $linkmode in
- lib)
- deplibs="$deplib $deplibs"
- test conv = "$pass" && continue
- newdependency_libs="$deplib $newdependency_libs"
- func_stripname '-L' '' "$deplib"
- func_resolve_sysroot "$func_stripname_result"
- func_append newlib_search_path " $func_resolve_sysroot_result"
- ;;
- prog)
- if test conv = "$pass"; then
- deplibs="$deplib $deplibs"
- continue
- fi
- if test scan = "$pass"; then
- deplibs="$deplib $deplibs"
- else
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- fi
- func_stripname '-L' '' "$deplib"
- func_resolve_sysroot "$func_stripname_result"
- func_append newlib_search_path " $func_resolve_sysroot_result"
- ;;
- *)
- func_warning "'-L' is ignored for archives/objects"
- ;;
- esac # linkmode
- continue
- ;; # -L
- -R*)
- if test link = "$pass"; then
- func_stripname '-R' '' "$deplib"
- func_resolve_sysroot "$func_stripname_result"
- dir=$func_resolve_sysroot_result
- # Make sure the xrpath contains only unique directories.
- case "$xrpath " in
- *" $dir "*) ;;
- *) func_append xrpath " $dir" ;;
- esac
- fi
- deplibs="$deplib $deplibs"
- continue
- ;;
- *.la)
- func_resolve_sysroot "$deplib"
- lib=$func_resolve_sysroot_result
- ;;
- *.$libext)
- if test conv = "$pass"; then
- deplibs="$deplib $deplibs"
- continue
- fi
- case $linkmode in
- lib)
- # Linking convenience modules into shared libraries is allowed,
- # but linking other static libraries is non-portable.
- case " $dlpreconveniencelibs " in
- *" $deplib "*) ;;
- *)
- valid_a_lib=false
- case $deplibs_check_method in
- match_pattern*)
- set dummy $deplibs_check_method; shift
- match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
- if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
- | $EGREP "$match_pattern_regex" > /dev/null; then
- valid_a_lib=:
- fi
- ;;
- pass_all)
- valid_a_lib=:
- ;;
- esac
- if $valid_a_lib; then
- echo
- $ECHO "*** Warning: Linking the shared library $output against the"
- $ECHO "*** static library $deplib is not portable!"
- deplibs="$deplib $deplibs"
- else
- echo
- $ECHO "*** Warning: Trying to link with static lib archive $deplib."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have"
- echo "*** because the file extensions .$libext of this argument makes me believe"
- echo "*** that it is just a static archive that I should not use here."
- fi
- ;;
- esac
- continue
- ;;
- prog)
- if test link != "$pass"; then
- deplibs="$deplib $deplibs"
- else
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- fi
- continue
- ;;
- esac # linkmode
- ;; # *.$libext
- *.lo | *.$objext)
- if test conv = "$pass"; then
- deplibs="$deplib $deplibs"
- elif test prog = "$linkmode"; then
- if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
- # If there is no dlopen support or we're linking statically,
- # we need to preload.
- func_append newdlprefiles " $deplib"
- compile_deplibs="$deplib $compile_deplibs"
- finalize_deplibs="$deplib $finalize_deplibs"
- else
- func_append newdlfiles " $deplib"
- fi
- fi
- continue
- ;;
- %DEPLIBS%)
- alldeplibs=:
- continue
- ;;
- esac # case $deplib
-
- $found || test -f "$lib" \
- || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
-
- # Check to see that this really is a libtool archive.
- func_lalib_unsafe_p "$lib" \
- || func_fatal_error "'$lib' is not a valid libtool archive"
-
- func_dirname "$lib" "" "."
- ladir=$func_dirname_result
-
- dlname=
- dlopen=
- dlpreopen=
- libdir=
- library_names=
- old_library=
- inherited_linker_flags=
- # If the library was installed with an old release of libtool,
- # it will not redefine variables installed, or shouldnotlink
- installed=yes
- shouldnotlink=no
- avoidtemprpath=
-
-
- # Read the .la file
- func_source "$lib"
-
- # Convert "-framework foo" to "foo.ltframework"
- if test -n "$inherited_linker_flags"; then
- tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
- for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
- case " $new_inherited_linker_flags " in
- *" $tmp_inherited_linker_flag "*) ;;
- *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
- esac
- done
- fi
- dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
- if test lib,link = "$linkmode,$pass" ||
- test prog,scan = "$linkmode,$pass" ||
- { test prog != "$linkmode" && test lib != "$linkmode"; }; then
- test -n "$dlopen" && func_append dlfiles " $dlopen"
- test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
- fi
-
- if test conv = "$pass"; then
- # Only check for convenience libraries
- deplibs="$lib $deplibs"
- if test -z "$libdir"; then
- if test -z "$old_library"; then
- func_fatal_error "cannot find name of link library for '$lib'"
- fi
- # It is a libtool convenience library, so add in its objects.
- func_append convenience " $ladir/$objdir/$old_library"
- func_append old_convenience " $ladir/$objdir/$old_library"
- elif test prog != "$linkmode" && test lib != "$linkmode"; then
- func_fatal_error "'$lib' is not a convenience library"
- fi
- tmp_libs=
- for deplib in $dependency_libs; do
- deplibs="$deplib $deplibs"
- if $opt_preserve_dup_deps; then
- case "$tmp_libs " in
- *" $deplib "*) func_append specialdeplibs " $deplib" ;;
- esac
- fi
- func_append tmp_libs " $deplib"
- done
- continue
- fi # $pass = conv
-
-
- # Get the name of the library we link against.
- linklib=
- if test -n "$old_library" &&
- { test yes = "$prefer_static_libs" ||
- test built,no = "$prefer_static_libs,$installed"; }; then
- linklib=$old_library
- else
- for l in $old_library $library_names; do
- linklib=$l
- done
- fi
- if test -z "$linklib"; then
- func_fatal_error "cannot find name of link library for '$lib'"
- fi
-
- # This library was specified with -dlopen.
- if test dlopen = "$pass"; then
- test -z "$libdir" \
- && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
- if test -z "$dlname" ||
- test yes != "$dlopen_support" ||
- test no = "$build_libtool_libs"
- then
- # If there is no dlname, no dlopen support or we're linking
- # statically, we need to preload. We also need to preload any
- # dependent libraries so libltdl's deplib preloader doesn't
- # bomb out in the load deplibs phase.
- func_append dlprefiles " $lib $dependency_libs"
- else
- func_append newdlfiles " $lib"
- fi
- continue
- fi # $pass = dlopen
-
- # We need an absolute path.
- case $ladir in
- [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
- *)
- abs_ladir=`cd "$ladir" && pwd`
- if test -z "$abs_ladir"; then
- func_warning "cannot determine absolute directory name of '$ladir'"
- func_warning "passing it literally to the linker, although it might fail"
- abs_ladir=$ladir
- fi
- ;;
- esac
- func_basename "$lib"
- laname=$func_basename_result
-
- # Find the relevant object directory and library name.
- if test yes = "$installed"; then
- if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
- func_warning "library '$lib' was moved."
- dir=$ladir
- absdir=$abs_ladir
- libdir=$abs_ladir
- else
- dir=$lt_sysroot$libdir
- absdir=$lt_sysroot$libdir
- fi
- test yes = "$hardcode_automatic" && avoidtemprpath=yes
- else
- if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
- dir=$ladir
- absdir=$abs_ladir
- # Remove this search path later
- func_append notinst_path " $abs_ladir"
- else
- dir=$ladir/$objdir
- absdir=$abs_ladir/$objdir
- # Remove this search path later
- func_append notinst_path " $abs_ladir"
- fi
- fi # $installed = yes
- func_stripname 'lib' '.la' "$laname"
- name=$func_stripname_result
-
- # This library was specified with -dlpreopen.
- if test dlpreopen = "$pass"; then
- if test -z "$libdir" && test prog = "$linkmode"; then
- func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
- fi
- case $host in
- # special handling for platforms with PE-DLLs.
- *cygwin* | *mingw* | *cegcc* )
- # Linker will automatically link against shared library if both
- # static and shared are present. Therefore, ensure we extract
- # symbols from the import library if a shared library is present
- # (otherwise, the dlopen module name will be incorrect). We do
- # this by putting the import library name into $newdlprefiles.
- # We recover the dlopen module name by 'saving' the la file
- # name in a special purpose variable, and (later) extracting the
- # dlname from the la file.
- if test -n "$dlname"; then
- func_tr_sh "$dir/$linklib"
- eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
- func_append newdlprefiles " $dir/$linklib"
- else
- func_append newdlprefiles " $dir/$old_library"
- # Keep a list of preopened convenience libraries to check
- # that they are being used correctly in the link pass.
- test -z "$libdir" && \
- func_append dlpreconveniencelibs " $dir/$old_library"
- fi
- ;;
- * )
- # Prefer using a static library (so that no silly _DYNAMIC symbols
- # are required to link).
- if test -n "$old_library"; then
- func_append newdlprefiles " $dir/$old_library"
- # Keep a list of preopened convenience libraries to check
- # that they are being used correctly in the link pass.
- test -z "$libdir" && \
- func_append dlpreconveniencelibs " $dir/$old_library"
- # Otherwise, use the dlname, so that lt_dlopen finds it.
- elif test -n "$dlname"; then
- func_append newdlprefiles " $dir/$dlname"
- else
- func_append newdlprefiles " $dir/$linklib"
- fi
- ;;
- esac
- fi # $pass = dlpreopen
-
- if test -z "$libdir"; then
- # Link the convenience library
- if test lib = "$linkmode"; then
- deplibs="$dir/$old_library $deplibs"
- elif test prog,link = "$linkmode,$pass"; then
- compile_deplibs="$dir/$old_library $compile_deplibs"
- finalize_deplibs="$dir/$old_library $finalize_deplibs"
- else
- deplibs="$lib $deplibs" # used for prog,scan pass
- fi
- continue
- fi
-
-
- if test prog = "$linkmode" && test link != "$pass"; then
- func_append newlib_search_path " $ladir"
- deplibs="$lib $deplibs"
-
- linkalldeplibs=false
- if test no != "$link_all_deplibs" || test -z "$library_names" ||
- test no = "$build_libtool_libs"; then
- linkalldeplibs=:
- fi
-
- tmp_libs=
- for deplib in $dependency_libs; do
- case $deplib in
- -L*) func_stripname '-L' '' "$deplib"
- func_resolve_sysroot "$func_stripname_result"
- func_append newlib_search_path " $func_resolve_sysroot_result"
- ;;
- esac
- # Need to link against all dependency_libs?
- if $linkalldeplibs; then
- deplibs="$deplib $deplibs"
- else
- # Need to hardcode shared library paths
- # or/and link against static libraries
- newdependency_libs="$deplib $newdependency_libs"
- fi
- if $opt_preserve_dup_deps; then
- case "$tmp_libs " in
- *" $deplib "*) func_append specialdeplibs " $deplib" ;;
- esac
- fi
- func_append tmp_libs " $deplib"
- done # for deplib
- continue
- fi # $linkmode = prog...
-
- if test prog,link = "$linkmode,$pass"; then
- if test -n "$library_names" &&
- { { test no = "$prefer_static_libs" ||
- test built,yes = "$prefer_static_libs,$installed"; } ||
- test -z "$old_library"; }; then
- # We need to hardcode the library path
- if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
- # Make sure the rpath contains only unique directories.
- case $temp_rpath: in
- *"$absdir:"*) ;;
- *) func_append temp_rpath "$absdir:" ;;
- esac
- fi
-
- # Hardcode the library path.
- # Skip directories that are in the system default run-time
- # search path.
- case " $sys_lib_dlsearch_path " in
- *" $absdir "*) ;;
- *)
- case "$compile_rpath " in
- *" $absdir "*) ;;
- *) func_append compile_rpath " $absdir" ;;
- esac
- ;;
- esac
- case " $sys_lib_dlsearch_path " in
- *" $libdir "*) ;;
- *)
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) func_append finalize_rpath " $libdir" ;;
- esac
- ;;
- esac
- fi # $linkmode,$pass = prog,link...
-
- if $alldeplibs &&
- { test pass_all = "$deplibs_check_method" ||
- { test yes = "$build_libtool_libs" &&
- test -n "$library_names"; }; }; then
- # We only need to search for static libraries
- continue
- fi
- fi
-
- link_static=no # Whether the deplib will be linked statically
- use_static_libs=$prefer_static_libs
- if test built = "$use_static_libs" && test yes = "$installed"; then
- use_static_libs=no
- fi
- if test -n "$library_names" &&
- { test no = "$use_static_libs" || test -z "$old_library"; }; then
- case $host in
- *cygwin* | *mingw* | *cegcc* | *os2*)
- # No point in relinking DLLs because paths are not encoded
- func_append notinst_deplibs " $lib"
- need_relink=no
- ;;
- *)
- if test no = "$installed"; then
- func_append notinst_deplibs " $lib"
- need_relink=yes
- fi
- ;;
- esac
- # This is a shared library
-
- # Warn about portability, can't link against -module's on some
- # systems (darwin). Don't bleat about dlopened modules though!
- dlopenmodule=
- for dlpremoduletest in $dlprefiles; do
- if test "X$dlpremoduletest" = "X$lib"; then
- dlopenmodule=$dlpremoduletest
- break
- fi
- done
- if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
- echo
- if test prog = "$linkmode"; then
- $ECHO "*** Warning: Linking the executable $output against the loadable module"
- else
- $ECHO "*** Warning: Linking the shared library $output against the loadable module"
- fi
- $ECHO "*** $linklib is not portable!"
- fi
- if test lib = "$linkmode" &&
- test yes = "$hardcode_into_libs"; then
- # Hardcode the library path.
- # Skip directories that are in the system default run-time
- # search path.
- case " $sys_lib_dlsearch_path " in
- *" $absdir "*) ;;
- *)
- case "$compile_rpath " in
- *" $absdir "*) ;;
- *) func_append compile_rpath " $absdir" ;;
- esac
- ;;
- esac
- case " $sys_lib_dlsearch_path " in
- *" $libdir "*) ;;
- *)
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) func_append finalize_rpath " $libdir" ;;
- esac
- ;;
- esac
- fi
-
- if test -n "$old_archive_from_expsyms_cmds"; then
- # figure out the soname
- set dummy $library_names
- shift
- realname=$1
- shift
- libname=`eval "\\$ECHO \"$libname_spec\""`
- # use dlname if we got it. it's perfectly good, no?
- if test -n "$dlname"; then
- soname=$dlname
- elif test -n "$soname_spec"; then
- # bleh windows
- case $host in
- *cygwin* | mingw* | *cegcc* | *os2*)
- func_arith $current - $age
- major=$func_arith_result
- versuffix=-$major
- ;;
- esac
- eval soname=\"$soname_spec\"
- else
- soname=$realname
- fi
-
- # Make a new name for the extract_expsyms_cmds to use
- soroot=$soname
- func_basename "$soroot"
- soname=$func_basename_result
- func_stripname 'lib' '.dll' "$soname"
- newlib=libimp-$func_stripname_result.a
-
- # If the library has no export list, then create one now
- if test -f "$output_objdir/$soname-def"; then :
- else
- func_verbose "extracting exported symbol list from '$soname'"
- func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
- fi
-
- # Create $newlib
- if test -f "$output_objdir/$newlib"; then :; else
- func_verbose "generating import library for '$soname'"
- func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
- fi
- # make sure the library variables are pointing to the new library
- dir=$output_objdir
- linklib=$newlib
- fi # test -n "$old_archive_from_expsyms_cmds"
-
- if test prog = "$linkmode" || test relink != "$opt_mode"; then
- add_shlibpath=
- add_dir=
- add=
- lib_linked=yes
- case $hardcode_action in
- immediate | unsupported)
- if test no = "$hardcode_direct"; then
- add=$dir/$linklib
- case $host in
- *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
- *-*-sysv4*uw2*) add_dir=-L$dir ;;
- *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
- *-*-unixware7*) add_dir=-L$dir ;;
- *-*-darwin* )
- # if the lib is a (non-dlopened) module then we cannot
- # link against it, someone is ignoring the earlier warnings
- if /usr/bin/file -L $add 2> /dev/null |
- $GREP ": [^:]* bundle" >/dev/null; then
- if test "X$dlopenmodule" != "X$lib"; then
- $ECHO "*** Warning: lib $linklib is a module, not a shared library"
- if test -z "$old_library"; then
- echo
- echo "*** And there doesn't seem to be a static archive available"
- echo "*** The link will probably fail, sorry"
- else
- add=$dir/$old_library
- fi
- elif test -n "$old_library"; then
- add=$dir/$old_library
- fi
- fi
- esac
- elif test no = "$hardcode_minus_L"; then
- case $host in
- *-*-sunos*) add_shlibpath=$dir ;;
- esac
- add_dir=-L$dir
- add=-l$name
- elif test no = "$hardcode_shlibpath_var"; then
- add_shlibpath=$dir
- add=-l$name
- else
- lib_linked=no
- fi
- ;;
- relink)
- if test yes = "$hardcode_direct" &&
- test no = "$hardcode_direct_absolute"; then
- add=$dir/$linklib
- elif test yes = "$hardcode_minus_L"; then
- add_dir=-L$absdir
- # Try looking first in the location we're being installed to.
- if test -n "$inst_prefix_dir"; then
- case $libdir in
- [\\/]*)
- func_append add_dir " -L$inst_prefix_dir$libdir"
- ;;
- esac
- fi
- add=-l$name
- elif test yes = "$hardcode_shlibpath_var"; then
- add_shlibpath=$dir
- add=-l$name
- else
- lib_linked=no
- fi
- ;;
- *) lib_linked=no ;;
- esac
-
- if test yes != "$lib_linked"; then
- func_fatal_configuration "unsupported hardcode properties"
- fi
-
- if test -n "$add_shlibpath"; then
- case :$compile_shlibpath: in
- *":$add_shlibpath:"*) ;;
- *) func_append compile_shlibpath "$add_shlibpath:" ;;
- esac
- fi
- if test prog = "$linkmode"; then
- test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
- test -n "$add" && compile_deplibs="$add $compile_deplibs"
- else
- test -n "$add_dir" && deplibs="$add_dir $deplibs"
- test -n "$add" && deplibs="$add $deplibs"
- if test yes != "$hardcode_direct" &&
- test yes != "$hardcode_minus_L" &&
- test yes = "$hardcode_shlibpath_var"; then
- case :$finalize_shlibpath: in
- *":$libdir:"*) ;;
- *) func_append finalize_shlibpath "$libdir:" ;;
- esac
- fi
- fi
- fi
-
- if test prog = "$linkmode" || test relink = "$opt_mode"; then
- add_shlibpath=
- add_dir=
- add=
- # Finalize command for both is simple: just hardcode it.
- if test yes = "$hardcode_direct" &&
- test no = "$hardcode_direct_absolute"; then
- add=$libdir/$linklib
- elif test yes = "$hardcode_minus_L"; then
- add_dir=-L$libdir
- add=-l$name
- elif test yes = "$hardcode_shlibpath_var"; then
- case :$finalize_shlibpath: in
- *":$libdir:"*) ;;
- *) func_append finalize_shlibpath "$libdir:" ;;
- esac
- add=-l$name
- elif test yes = "$hardcode_automatic"; then
- if test -n "$inst_prefix_dir" &&
- test -f "$inst_prefix_dir$libdir/$linklib"; then
- add=$inst_prefix_dir$libdir/$linklib
- else
- add=$libdir/$linklib
- fi
- else
- # We cannot seem to hardcode it, guess we'll fake it.
- add_dir=-L$libdir
- # Try looking first in the location we're being installed to.
- if test -n "$inst_prefix_dir"; then
- case $libdir in
- [\\/]*)
- func_append add_dir " -L$inst_prefix_dir$libdir"
- ;;
- esac
- fi
- add=-l$name
- fi
-
- if test prog = "$linkmode"; then
- test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
- test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
- else
- test -n "$add_dir" && deplibs="$add_dir $deplibs"
- test -n "$add" && deplibs="$add $deplibs"
- fi
- fi
- elif test prog = "$linkmode"; then
- # Here we assume that one of hardcode_direct or hardcode_minus_L
- # is not unsupported. This is valid on all known static and
- # shared platforms.
- if test unsupported != "$hardcode_direct"; then
- test -n "$old_library" && linklib=$old_library
- compile_deplibs="$dir/$linklib $compile_deplibs"
- finalize_deplibs="$dir/$linklib $finalize_deplibs"
- else
- compile_deplibs="-l$name -L$dir $compile_deplibs"
- finalize_deplibs="-l$name -L$dir $finalize_deplibs"
- fi
- elif test yes = "$build_libtool_libs"; then
- # Not a shared library
- if test pass_all != "$deplibs_check_method"; then
- # We're trying link a shared library against a static one
- # but the system doesn't support it.
-
- # Just print a warning and add the library to dependency_libs so
- # that the program can be linked against the static library.
- echo
- $ECHO "*** Warning: This system cannot link to static lib archive $lib."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have."
- if test yes = "$module"; then
- echo "*** But as you try to build a module library, libtool will still create "
- echo "*** a static module, that should work as long as the dlopening application"
- echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
- if test -z "$global_symbol_pipe"; then
- echo
- echo "*** However, this would only work if libtool was able to extract symbol"
- echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
- echo "*** not find such a program. So, this module is probably useless."
- echo "*** 'nm' from GNU binutils and a full rebuild may help."
- fi
- if test no = "$build_old_libs"; then
- build_libtool_libs=module
- build_old_libs=yes
- else
- build_libtool_libs=no
- fi
- fi
- else
- deplibs="$dir/$old_library $deplibs"
- link_static=yes
- fi
- fi # link shared/static library?
-
- if test lib = "$linkmode"; then
- if test -n "$dependency_libs" &&
- { test yes != "$hardcode_into_libs" ||
- test yes = "$build_old_libs" ||
- test yes = "$link_static"; }; then
- # Extract -R from dependency_libs
- temp_deplibs=
- for libdir in $dependency_libs; do
- case $libdir in
- -R*) func_stripname '-R' '' "$libdir"
- temp_xrpath=$func_stripname_result
- case " $xrpath " in
- *" $temp_xrpath "*) ;;
- *) func_append xrpath " $temp_xrpath";;
- esac;;
- *) func_append temp_deplibs " $libdir";;
- esac
- done
- dependency_libs=$temp_deplibs
- fi
-
- func_append newlib_search_path " $absdir"
- # Link against this library
- test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
- # ... and its dependency_libs
- tmp_libs=
- for deplib in $dependency_libs; do
- newdependency_libs="$deplib $newdependency_libs"
- case $deplib in
- -L*) func_stripname '-L' '' "$deplib"
- func_resolve_sysroot "$func_stripname_result";;
- *) func_resolve_sysroot "$deplib" ;;
- esac
- if $opt_preserve_dup_deps; then
- case "$tmp_libs " in
- *" $func_resolve_sysroot_result "*)
- func_append specialdeplibs " $func_resolve_sysroot_result" ;;
- esac
- fi
- func_append tmp_libs " $func_resolve_sysroot_result"
- done
-
- if test no != "$link_all_deplibs"; then
- # Add the search paths of all dependency libraries
- for deplib in $dependency_libs; do
- path=
- case $deplib in
- -L*) path=$deplib ;;
- *.la)
- func_resolve_sysroot "$deplib"
- deplib=$func_resolve_sysroot_result
- func_dirname "$deplib" "" "."
- dir=$func_dirname_result
- # We need an absolute path.
- case $dir in
- [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
- *)
- absdir=`cd "$dir" && pwd`
- if test -z "$absdir"; then
- func_warning "cannot determine absolute directory name of '$dir'"
- absdir=$dir
- fi
- ;;
- esac
- if $GREP "^installed=no" $deplib > /dev/null; then
- case $host in
- *-*-darwin*)
- depdepl=
- eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
- if test -n "$deplibrary_names"; then
- for tmp in $deplibrary_names; do
- depdepl=$tmp
- done
- if test -f "$absdir/$objdir/$depdepl"; then
- depdepl=$absdir/$objdir/$depdepl
- darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
- if test -z "$darwin_install_name"; then
- darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
- fi
- func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
- func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
- path=
- fi
- fi
- ;;
- *)
- path=-L$absdir/$objdir
- ;;
- esac
- else
- eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
- test -z "$libdir" && \
- func_fatal_error "'$deplib' is not a valid libtool archive"
- test "$absdir" != "$libdir" && \
- func_warning "'$deplib' seems to be moved"
-
- path=-L$absdir
- fi
- ;;
- esac
- case " $deplibs " in
- *" $path "*) ;;
- *) deplibs="$path $deplibs" ;;
- esac
- done
- fi # link_all_deplibs != no
- fi # linkmode = lib
- done # for deplib in $libs
- if test link = "$pass"; then
- if test prog = "$linkmode"; then
- compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
- finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
- else
- compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
- fi
- fi
- dependency_libs=$newdependency_libs
- if test dlpreopen = "$pass"; then
- # Link the dlpreopened libraries before other libraries
- for deplib in $save_deplibs; do
- deplibs="$deplib $deplibs"
- done
- fi
- if test dlopen != "$pass"; then
- test conv = "$pass" || {
- # Make sure lib_search_path contains only unique directories.
- lib_search_path=
- for dir in $newlib_search_path; do
- case "$lib_search_path " in
- *" $dir "*) ;;
- *) func_append lib_search_path " $dir" ;;
- esac
- done
- newlib_search_path=
- }
-
- if test prog,link = "$linkmode,$pass"; then
- vars="compile_deplibs finalize_deplibs"
- else
- vars=deplibs
- fi
- for var in $vars dependency_libs; do
- # Add libraries to $var in reverse order
- eval tmp_libs=\"\$$var\"
- new_libs=
- for deplib in $tmp_libs; do
- # FIXME: Pedantically, this is the right thing to do, so
- # that some nasty dependency loop isn't accidentally
- # broken:
- #new_libs="$deplib $new_libs"
- # Pragmatically, this seems to cause very few problems in
- # practice:
- case $deplib in
- -L*) new_libs="$deplib $new_libs" ;;
- -R*) ;;
- *)
- # And here is the reason: when a library appears more
- # than once as an explicit dependence of a library, or
- # is implicitly linked in more than once by the
- # compiler, it is considered special, and multiple
- # occurrences thereof are not removed. Compare this
- # with having the same library being listed as a
- # dependency of multiple other libraries: in this case,
- # we know (pedantically, we assume) the library does not
- # need to be listed more than once, so we keep only the
- # last copy. This is not always right, but it is rare
- # enough that we require users that really mean to play
- # such unportable linking tricks to link the library
- # using -Wl,-lname, so that libtool does not consider it
- # for duplicate removal.
- case " $specialdeplibs " in
- *" $deplib "*) new_libs="$deplib $new_libs" ;;
- *)
- case " $new_libs " in
- *" $deplib "*) ;;
- *) new_libs="$deplib $new_libs" ;;
- esac
- ;;
- esac
- ;;
- esac
- done
- tmp_libs=
- for deplib in $new_libs; do
- case $deplib in
- -L*)
- case " $tmp_libs " in
- *" $deplib "*) ;;
- *) func_append tmp_libs " $deplib" ;;
- esac
- ;;
- *) func_append tmp_libs " $deplib" ;;
- esac
- done
- eval $var=\"$tmp_libs\"
- done # for var
- fi
-
- # Add Sun CC postdeps if required:
- test CXX = "$tagname" && {
- case $host_os in
- linux*)
- case `$CC -V 2>&1 | $SED 5q` in
- *Sun\ C*) # Sun C++ 5.9
- func_suncc_cstd_abi
-
- if test no != "$suncc_use_cstd_abi"; then
- func_append postdeps ' -library=Cstd -library=Crun'
- fi
- ;;
- esac
- ;;
-
- solaris*)
- func_cc_basename "$CC"
- case $func_cc_basename_result in
- CC* | sunCC*)
- func_suncc_cstd_abi
-
- if test no != "$suncc_use_cstd_abi"; then
- func_append postdeps ' -library=Cstd -library=Crun'
- fi
- ;;
- esac
- ;;
- esac
- }
-
- # Last step: remove runtime libs from dependency_libs
- # (they stay in deplibs)
- tmp_libs=
- for i in $dependency_libs; do
- case " $predeps $postdeps $compiler_lib_search_path " in
- *" $i "*)
- i=
- ;;
- esac
- if test -n "$i"; then
- func_append tmp_libs " $i"
- fi
- done
- dependency_libs=$tmp_libs
- done # for pass
- if test prog = "$linkmode"; then
- dlfiles=$newdlfiles
- fi
- if test prog = "$linkmode" || test lib = "$linkmode"; then
- dlprefiles=$newdlprefiles
- fi
-
- case $linkmode in
- oldlib)
- if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
- func_warning "'-dlopen' is ignored for archives"
- fi
-
- case " $deplibs" in
- *\ -l* | *\ -L*)
- func_warning "'-l' and '-L' are ignored for archives" ;;
- esac
-
- test -n "$rpath" && \
- func_warning "'-rpath' is ignored for archives"
-
- test -n "$xrpath" && \
- func_warning "'-R' is ignored for archives"
-
- test -n "$vinfo" && \
- func_warning "'-version-info/-version-number' is ignored for archives"
-
- test -n "$release" && \
- func_warning "'-release' is ignored for archives"
-
- test -n "$export_symbols$export_symbols_regex" && \
- func_warning "'-export-symbols' is ignored for archives"
-
- # Now set the variables for building old libraries.
- build_libtool_libs=no
- oldlibs=$output
- func_append objs "$old_deplibs"
- ;;
-
- lib)
- # Make sure we only generate libraries of the form 'libNAME.la'.
- case $outputname in
- lib*)
- func_stripname 'lib' '.la' "$outputname"
- name=$func_stripname_result
- eval shared_ext=\"$shrext_cmds\"
- eval libname=\"$libname_spec\"
- ;;
- *)
- test no = "$module" \
- && func_fatal_help "libtool library '$output' must begin with 'lib'"
-
- if test no != "$need_lib_prefix"; then
- # Add the "lib" prefix for modules if required
- func_stripname '' '.la' "$outputname"
- name=$func_stripname_result
- eval shared_ext=\"$shrext_cmds\"
- eval libname=\"$libname_spec\"
- else
- func_stripname '' '.la' "$outputname"
- libname=$func_stripname_result
- fi
- ;;
- esac
-
- if test -n "$objs"; then
- if test pass_all != "$deplibs_check_method"; then
- func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
- else
- echo
- $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
- $ECHO "*** objects $objs is not portable!"
- func_append libobjs " $objs"
- fi
- fi
-
- test no = "$dlself" \
- || func_warning "'-dlopen self' is ignored for libtool libraries"
-
- set dummy $rpath
- shift
- test 1 -lt "$#" \
- && func_warning "ignoring multiple '-rpath's for a libtool library"
-
- install_libdir=$1
-
- oldlibs=
- if test -z "$rpath"; then
- if test yes = "$build_libtool_libs"; then
- # Building a libtool convenience library.
- # Some compilers have problems with a '.al' extension so
- # convenience libraries should have the same extension an
- # archive normally would.
- oldlibs="$output_objdir/$libname.$libext $oldlibs"
- build_libtool_libs=convenience
- build_old_libs=yes
- fi
-
- test -n "$vinfo" && \
- func_warning "'-version-info/-version-number' is ignored for convenience libraries"
-
- test -n "$release" && \
- func_warning "'-release' is ignored for convenience libraries"
- else
-
- # Parse the version information argument.
- save_ifs=$IFS; IFS=:
- set dummy $vinfo 0 0 0
- shift
- IFS=$save_ifs
-
- test -n "$7" && \
- func_fatal_help "too many parameters to '-version-info'"
-
- # convert absolute version numbers to libtool ages
- # this retains compatibility with .la files and attempts
- # to make the code below a bit more comprehensible
-
- case $vinfo_number in
- yes)
- number_major=$1
- number_minor=$2
- number_revision=$3
- #
- # There are really only two kinds -- those that
- # use the current revision as the major version
- # and those that subtract age and use age as
- # a minor version. But, then there is irix
- # that has an extra 1 added just for fun
- #
- case $version_type in
- # correct linux to gnu/linux during the next big refactor
- darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none)
- func_arith $number_major + $number_minor
- current=$func_arith_result
- age=$number_minor
- revision=$number_revision
- ;;
- freebsd-aout|qnx|sunos)
- current=$number_major
- revision=$number_minor
- age=0
- ;;
- irix|nonstopux)
- func_arith $number_major + $number_minor
- current=$func_arith_result
- age=$number_minor
- revision=$number_minor
- lt_irix_increment=no
- ;;
- esac
- ;;
- no)
- current=$1
- revision=$2
- age=$3
- ;;
- esac
-
- # Check that each of the things are valid numbers.
- case $current in
- 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
- *)
- func_error "CURRENT '$current' must be a nonnegative integer"
- func_fatal_error "'$vinfo' is not valid version information"
- ;;
- esac
-
- case $revision in
- 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
- *)
- func_error "REVISION '$revision' must be a nonnegative integer"
- func_fatal_error "'$vinfo' is not valid version information"
- ;;
- esac
-
- case $age in
- 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
- *)
- func_error "AGE '$age' must be a nonnegative integer"
- func_fatal_error "'$vinfo' is not valid version information"
- ;;
- esac
-
- if test "$age" -gt "$current"; then
- func_error "AGE '$age' is greater than the current interface number '$current'"
- func_fatal_error "'$vinfo' is not valid version information"
- fi
-
- # Calculate the version variables.
- major=
- versuffix=
- verstring=
- case $version_type in
- none) ;;
-
- darwin)
- # Like Linux, but with the current version available in
- # verstring for coding it into the library header
- func_arith $current - $age
- major=.$func_arith_result
- versuffix=$major.$age.$revision
- # Darwin ld doesn't like 0 for these options...
- func_arith $current + 1
- minor_current=$func_arith_result
- xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
- verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
- # On Darwin other compilers
- case $CC in
- nagfor*)
- verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
- ;;
- *)
- verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
- ;;
- esac
- ;;
-
- freebsd-aout)
- major=.$current
- versuffix=.$current.$revision
- ;;
-
- freebsd-elf | midnightbsd-elf)
- func_arith $current - $age
- major=.$func_arith_result
- versuffix=$major.$age.$revision
- ;;
-
- irix | nonstopux)
- if test no = "$lt_irix_increment"; then
- func_arith $current - $age
- else
- func_arith $current - $age + 1
- fi
- major=$func_arith_result
-
- case $version_type in
- nonstopux) verstring_prefix=nonstopux ;;
- *) verstring_prefix=sgi ;;
- esac
- verstring=$verstring_prefix$major.$revision
-
- # Add in all the interfaces that we are compatible with.
- loop=$revision
- while test 0 -ne "$loop"; do
- func_arith $revision - $loop
- iface=$func_arith_result
- func_arith $loop - 1
- loop=$func_arith_result
- verstring=$verstring_prefix$major.$iface:$verstring
- done
-
- # Before this point, $major must not contain '.'.
- major=.$major
- versuffix=$major.$revision
- ;;
-
- linux) # correct to gnu/linux during the next big refactor
- func_arith $current - $age
- major=.$func_arith_result
- versuffix=$major.$age.$revision
- ;;
-
- osf)
- func_arith $current - $age
- major=.$func_arith_result
- versuffix=.$current.$age.$revision
- verstring=$current.$age.$revision
-
- # Add in all the interfaces that we are compatible with.
- loop=$age
- while test 0 -ne "$loop"; do
- func_arith $current - $loop
- iface=$func_arith_result
- func_arith $loop - 1
- loop=$func_arith_result
- verstring=$verstring:$iface.0
- done
-
- # Make executables depend on our current version.
- func_append verstring ":$current.0"
- ;;
-
- qnx)
- major=.$current
- versuffix=.$current
- ;;
-
- sco)
- major=.$current
- versuffix=.$current
- ;;
-
- sunos)
- major=.$current
- versuffix=.$current.$revision
- ;;
-
- windows)
- # Use '-' rather than '.', since we only want one
- # extension on DOS 8.3 file systems.
- func_arith $current - $age
- major=$func_arith_result
- versuffix=-$major
- ;;
-
- *)
- func_fatal_configuration "unknown library version type '$version_type'"
- ;;
- esac
-
- # Clear the version info if we defaulted, and they specified a release.
- if test -z "$vinfo" && test -n "$release"; then
- major=
- case $version_type in
- darwin)
- # we can't check for "0.0" in archive_cmds due to quoting
- # problems, so we reset it completely
- verstring=
- ;;
- *)
- verstring=0.0
- ;;
- esac
- if test no = "$need_version"; then
- versuffix=
- else
- versuffix=.0.0
- fi
- fi
-
- # Remove version info from name if versioning should be avoided
- if test yes,no = "$avoid_version,$need_version"; then
- major=
- versuffix=
- verstring=
- fi
-
- # Check to see if the archive will have undefined symbols.
- if test yes = "$allow_undefined"; then
- if test unsupported = "$allow_undefined_flag"; then
- if test yes = "$build_old_libs"; then
- func_warning "undefined symbols not allowed in $host shared libraries; building static only"
- build_libtool_libs=no
- else
- func_fatal_error "can't build $host shared library unless -no-undefined is specified"
- fi
- fi
- else
- # Don't allow undefined symbols.
- allow_undefined_flag=$no_undefined_flag
- fi
-
- fi
-
- func_generate_dlsyms "$libname" "$libname" :
- func_append libobjs " $symfileobj"
- test " " = "$libobjs" && libobjs=
-
- if test relink != "$opt_mode"; then
- # Remove our outputs, but don't remove object files since they
- # may have been created when compiling PIC objects.
- removelist=
- tempremovelist=`$ECHO "$output_objdir/*"`
- for p in $tempremovelist; do
- case $p in
- *.$objext | *.gcno)
- ;;
- $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
- if test -n "$precious_files_regex"; then
- if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
- then
- continue
- fi
- fi
- func_append removelist " $p"
- ;;
- *) ;;
- esac
- done
- test -n "$removelist" && \
- func_show_eval "${RM}r \$removelist"
- fi
-
- # Now set the variables for building old libraries.
- if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
- func_append oldlibs " $output_objdir/$libname.$libext"
-
- # Transform .lo files to .o files.
- oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
- fi
-
- # Eliminate all temporary directories.
- #for path in $notinst_path; do
- # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
- # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
- # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
- #done
-
- if test -n "$xrpath"; then
- # If the user specified any rpath flags, then add them.
- temp_xrpath=
- for libdir in $xrpath; do
- func_replace_sysroot "$libdir"
- func_append temp_xrpath " -R$func_replace_sysroot_result"
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) func_append finalize_rpath " $libdir" ;;
- esac
- done
- if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
- dependency_libs="$temp_xrpath $dependency_libs"
- fi
- fi
-
- # Make sure dlfiles contains only unique files that won't be dlpreopened
- old_dlfiles=$dlfiles
- dlfiles=
- for lib in $old_dlfiles; do
- case " $dlprefiles $dlfiles " in
- *" $lib "*) ;;
- *) func_append dlfiles " $lib" ;;
- esac
- done
-
- # Make sure dlprefiles contains only unique files
- old_dlprefiles=$dlprefiles
- dlprefiles=
- for lib in $old_dlprefiles; do
- case "$dlprefiles " in
- *" $lib "*) ;;
- *) func_append dlprefiles " $lib" ;;
- esac
- done
-
- if test yes = "$build_libtool_libs"; then
- if test -n "$rpath"; then
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
- # these systems don't actually have a c library (as such)!
- ;;
- *-*-rhapsody* | *-*-darwin1.[012])
- # Rhapsody C library is in the System framework
- func_append deplibs " System.ltframework"
- ;;
- *-*-netbsd*)
- # Don't link with libc until the a.out ld.so is fixed.
- ;;
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*)
- # Do not include libc due to us having libc/libc_r.
- ;;
- *-*-sco3.2v5* | *-*-sco5v6*)
- # Causes problems with __ctype
- ;;
- *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
- # Compiler inserts libc in the correct place for threads to work
- ;;
- *)
- # Add libc to deplibs on all other systems if necessary.
- if test yes = "$build_libtool_need_lc"; then
- func_append deplibs " -lc"
- fi
- ;;
- esac
- fi
-
- # Transform deplibs into only deplibs that can be linked in shared.
- name_save=$name
- libname_save=$libname
- release_save=$release
- versuffix_save=$versuffix
- major_save=$major
- # I'm not sure if I'm treating the release correctly. I think
- # release should show up in the -l (ie -lgmp5) so we don't want to
- # add it in twice. Is that correct?
- release=
- versuffix=
- major=
- newdeplibs=
- droppeddeps=no
- case $deplibs_check_method in
- pass_all)
- # Don't check for shared/static. Everything works.
- # This might be a little naive. We might want to check
- # whether the library exists or not. But this is on
- # osf3 & osf4 and I'm not really sure... Just
- # implementing what was already the behavior.
- newdeplibs=$deplibs
- ;;
- test_compile)
- # This code stresses the "libraries are programs" paradigm to its
- # limits. Maybe even breaks it. We compile a program, linking it
- # against the deplibs as a proxy for the library. Then we can check
- # whether they linked in statically or dynamically with ldd.
- $opt_dry_run || $RM conftest.c
- cat > conftest.c <<EOF
- int main() { return 0; }
-EOF
- $opt_dry_run || $RM conftest
- if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
- ldd_output=`ldd conftest`
- for i in $deplibs; do
- case $i in
- -l*)
- func_stripname -l '' "$i"
- name=$func_stripname_result
- if test yes = "$allow_libtool_libs_with_static_runtimes"; then
- case " $predeps $postdeps " in
- *" $i "*)
- func_append newdeplibs " $i"
- i=
- ;;
- esac
- fi
- if test -n "$i"; then
- libname=`eval "\\$ECHO \"$libname_spec\""`
- deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
- set dummy $deplib_matches; shift
- deplib_match=$1
- if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
- func_append newdeplibs " $i"
- else
- droppeddeps=yes
- echo
- $ECHO "*** Warning: dynamic linker does not accept needed library $i."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which I believe you do not have"
- echo "*** because a test_compile did reveal that the linker did not use it for"
- echo "*** its dynamic dependency list that programs get resolved with at runtime."
- fi
- fi
- ;;
- *)
- func_append newdeplibs " $i"
- ;;
- esac
- done
- else
- # Error occurred in the first compile. Let's try to salvage
- # the situation: Compile a separate program for each library.
- for i in $deplibs; do
- case $i in
- -l*)
- func_stripname -l '' "$i"
- name=$func_stripname_result
- $opt_dry_run || $RM conftest
- if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
- ldd_output=`ldd conftest`
- if test yes = "$allow_libtool_libs_with_static_runtimes"; then
- case " $predeps $postdeps " in
- *" $i "*)
- func_append newdeplibs " $i"
- i=
- ;;
- esac
- fi
- if test -n "$i"; then
- libname=`eval "\\$ECHO \"$libname_spec\""`
- deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
- set dummy $deplib_matches; shift
- deplib_match=$1
- if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
- func_append newdeplibs " $i"
- else
- droppeddeps=yes
- echo
- $ECHO "*** Warning: dynamic linker does not accept needed library $i."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have"
- echo "*** because a test_compile did reveal that the linker did not use this one"
- echo "*** as a dynamic dependency that programs can get resolved with at runtime."
- fi
- fi
- else
- droppeddeps=yes
- echo
- $ECHO "*** Warning! Library $i is needed by this library but I was not able to"
- echo "*** make it link in! You will probably need to install it or some"
- echo "*** library that it depends on before this library will be fully"
- echo "*** functional. Installing it before continuing would be even better."
- fi
- ;;
- *)
- func_append newdeplibs " $i"
- ;;
- esac
- done
- fi
- ;;
- file_magic*)
- set dummy $deplibs_check_method; shift
- file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
- for a_deplib in $deplibs; do
- case $a_deplib in
- -l*)
- func_stripname -l '' "$a_deplib"
- name=$func_stripname_result
- if test yes = "$allow_libtool_libs_with_static_runtimes"; then
- case " $predeps $postdeps " in
- *" $a_deplib "*)
- func_append newdeplibs " $a_deplib"
- a_deplib=
- ;;
- esac
- fi
- if test -n "$a_deplib"; then
- libname=`eval "\\$ECHO \"$libname_spec\""`
- if test -n "$file_magic_glob"; then
- libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
- else
- libnameglob=$libname
- fi
- test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
- for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
- if test yes = "$want_nocaseglob"; then
- shopt -s nocaseglob
- potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
- $nocaseglob
- else
- potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
- fi
- for potent_lib in $potential_libs; do
- # Follow soft links.
- if ls -lLd "$potent_lib" 2>/dev/null |
- $GREP " -> " >/dev/null; then
- continue
- fi
- # The statement above tries to avoid entering an
- # endless loop below, in case of cyclic links.
- # We might still enter an endless loop, since a link
- # loop can be closed while we follow links,
- # but so what?
- potlib=$potent_lib
- while test -h "$potlib" 2>/dev/null; do
- potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
- case $potliblink in
- [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
- *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
- esac
- done
- if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
- $SED -e 10q |
- $EGREP "$file_magic_regex" > /dev/null; then
- func_append newdeplibs " $a_deplib"
- a_deplib=
- break 2
- fi
- done
- done
- fi
- if test -n "$a_deplib"; then
- droppeddeps=yes
- echo
- $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have"
- echo "*** because I did check the linker path looking for a file starting"
- if test -z "$potlib"; then
- $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
- else
- $ECHO "*** with $libname and none of the candidates passed a file format test"
- $ECHO "*** using a file magic. Last file checked: $potlib"
- fi
- fi
- ;;
- *)
- # Add a -L argument.
- func_append newdeplibs " $a_deplib"
- ;;
- esac
- done # Gone through all deplibs.
- ;;
- match_pattern*)
- set dummy $deplibs_check_method; shift
- match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
- for a_deplib in $deplibs; do
- case $a_deplib in
- -l*)
- func_stripname -l '' "$a_deplib"
- name=$func_stripname_result
- if test yes = "$allow_libtool_libs_with_static_runtimes"; then
- case " $predeps $postdeps " in
- *" $a_deplib "*)
- func_append newdeplibs " $a_deplib"
- a_deplib=
- ;;
- esac
- fi
- if test -n "$a_deplib"; then
- libname=`eval "\\$ECHO \"$libname_spec\""`
- for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
- potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
- for potent_lib in $potential_libs; do
- potlib=$potent_lib # see symlink-check above in file_magic test
- if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
- $EGREP "$match_pattern_regex" > /dev/null; then
- func_append newdeplibs " $a_deplib"
- a_deplib=
- break 2
- fi
- done
- done
- fi
- if test -n "$a_deplib"; then
- droppeddeps=yes
- echo
- $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have"
- echo "*** because I did check the linker path looking for a file starting"
- if test -z "$potlib"; then
- $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
- else
- $ECHO "*** with $libname and none of the candidates passed a file format test"
- $ECHO "*** using a regex pattern. Last file checked: $potlib"
- fi
- fi
- ;;
- *)
- # Add a -L argument.
- func_append newdeplibs " $a_deplib"
- ;;
- esac
- done # Gone through all deplibs.
- ;;
- none | unknown | *)
- newdeplibs=
- tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
- if test yes = "$allow_libtool_libs_with_static_runtimes"; then
- for i in $predeps $postdeps; do
- # can't use Xsed below, because $i might contain '/'
- tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
- done
- fi
- case $tmp_deplibs in
- *[!\ \ ]*)
- echo
- if test none = "$deplibs_check_method"; then
- echo "*** Warning: inter-library dependencies are not supported in this platform."
- else
- echo "*** Warning: inter-library dependencies are not known to be supported."
- fi
- echo "*** All declared inter-library dependencies are being dropped."
- droppeddeps=yes
- ;;
- esac
- ;;
- esac
- versuffix=$versuffix_save
- major=$major_save
- release=$release_save
- libname=$libname_save
- name=$name_save
-
- case $host in
- *-*-rhapsody* | *-*-darwin1.[012])
- # On Rhapsody replace the C library with the System framework
- newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
- ;;
- esac
-
- if test yes = "$droppeddeps"; then
- if test yes = "$module"; then
- echo
- echo "*** Warning: libtool could not satisfy all declared inter-library"
- $ECHO "*** dependencies of module $libname. Therefore, libtool will create"
- echo "*** a static module, that should work as long as the dlopening"
- echo "*** application is linked with the -dlopen flag."
- if test -z "$global_symbol_pipe"; then
- echo
- echo "*** However, this would only work if libtool was able to extract symbol"
- echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
- echo "*** not find such a program. So, this module is probably useless."
- echo "*** 'nm' from GNU binutils and a full rebuild may help."
- fi
- if test no = "$build_old_libs"; then
- oldlibs=$output_objdir/$libname.$libext
- build_libtool_libs=module
- build_old_libs=yes
- else
- build_libtool_libs=no
- fi
- else
- echo "*** The inter-library dependencies that have been dropped here will be"
- echo "*** automatically added whenever a program is linked with this library"
- echo "*** or is declared to -dlopen it."
-
- if test no = "$allow_undefined"; then
- echo
- echo "*** Since this library must not contain undefined symbols,"
- echo "*** because either the platform does not support them or"
- echo "*** it was explicitly requested with -no-undefined,"
- echo "*** libtool will only create a static version of it."
- if test no = "$build_old_libs"; then
- oldlibs=$output_objdir/$libname.$libext
- build_libtool_libs=module
- build_old_libs=yes
- else
- build_libtool_libs=no
- fi
- fi
- fi
- fi
- # Done checking deplibs!
- deplibs=$newdeplibs
- fi
- # Time to change all our "foo.ltframework" stuff back to "-framework foo"
- case $host in
- *-*-darwin*)
- newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
- new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
- deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
- ;;
- esac
-
- # move library search paths that coincide with paths to not yet
- # installed libraries to the beginning of the library search list
- new_libs=
- for path in $notinst_path; do
- case " $new_libs " in
- *" -L$path/$objdir "*) ;;
- *)
- case " $deplibs " in
- *" -L$path/$objdir "*)
- func_append new_libs " -L$path/$objdir" ;;
- esac
- ;;
- esac
- done
- for deplib in $deplibs; do
- case $deplib in
- -L*)
- case " $new_libs " in
- *" $deplib "*) ;;
- *) func_append new_libs " $deplib" ;;
- esac
- ;;
- *) func_append new_libs " $deplib" ;;
- esac
- done
- deplibs=$new_libs
-
- # All the library-specific variables (install_libdir is set above).
- library_names=
- old_library=
- dlname=
-
- # Test again, we may have decided not to build it any more
- if test yes = "$build_libtool_libs"; then
- # Remove $wl instances when linking with ld.
- # FIXME: should test the right _cmds variable.
- case $archive_cmds in
- *\$LD\ *) wl= ;;
- esac
- if test yes = "$hardcode_into_libs"; then
- # Hardcode the library paths
- hardcode_libdirs=
- dep_rpath=
- rpath=$finalize_rpath
- test relink = "$opt_mode" || rpath=$compile_rpath$rpath
- for libdir in $rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- func_replace_sysroot "$libdir"
- libdir=$func_replace_sysroot_result
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs=$libdir
- else
- # Just accumulate the unique libdirs.
- case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
- func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
- eval flag=\"$hardcode_libdir_flag_spec\"
- func_append dep_rpath " $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$perm_rpath " in
- *" $libdir "*) ;;
- *) func_append perm_rpath " $libdir" ;;
- esac
- fi
- done
- # Substitute the hardcoded libdirs into the rpath.
- if test -n "$hardcode_libdir_separator" &&
- test -n "$hardcode_libdirs"; then
- libdir=$hardcode_libdirs
- eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
- fi
- if test -n "$runpath_var" && test -n "$perm_rpath"; then
- # We should set the runpath_var.
- rpath=
- for dir in $perm_rpath; do
- func_append rpath "$dir:"
- done
- eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
- fi
- test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
- fi
-
- shlibpath=$finalize_shlibpath
- test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
- if test -n "$shlibpath"; then
- eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
- fi
-
- # Get the real and link names of the library.
- eval shared_ext=\"$shrext_cmds\"
- eval library_names=\"$library_names_spec\"
- set dummy $library_names
- shift
- realname=$1
- shift
-
- if test -n "$soname_spec"; then
- eval soname=\"$soname_spec\"
- else
- soname=$realname
- fi
- if test -z "$dlname"; then
- dlname=$soname
- fi
-
- lib=$output_objdir/$realname
- linknames=
- for link
- do
- func_append linknames " $link"
- done
-
- # Use standard objects if they are pic
- test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
- test "X$libobjs" = "X " && libobjs=
-
- delfiles=
- if test -n "$export_symbols" && test -n "$include_expsyms"; then
- $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
- export_symbols=$output_objdir/$libname.uexp
- func_append delfiles " $export_symbols"
- fi
-
- orig_export_symbols=
- case $host_os in
- cygwin* | mingw* | cegcc*)
- if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
- # exporting using user supplied symfile
- func_dll_def_p "$export_symbols" || {
- # and it's NOT already a .def file. Must figure out
- # which of the given symbols are data symbols and tag
- # them as such. So, trigger use of export_symbols_cmds.
- # export_symbols gets reassigned inside the "prepare
- # the list of exported symbols" if statement, so the
- # include_expsyms logic still works.
- orig_export_symbols=$export_symbols
- export_symbols=
- always_export_symbols=yes
- }
- fi
- ;;
- esac
-
- # Prepare the list of exported symbols
- if test -z "$export_symbols"; then
- if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
- func_verbose "generating symbol list for '$libname.la'"
- export_symbols=$output_objdir/$libname.exp
- $opt_dry_run || $RM $export_symbols
- cmds=$export_symbols_cmds
- save_ifs=$IFS; IFS='~'
- for cmd1 in $cmds; do
- IFS=$save_ifs
- # Take the normal branch if the nm_file_list_spec branch
- # doesn't work or if tool conversion is not needed.
- case $nm_file_list_spec~$to_tool_file_cmd in
- *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
- try_normal_branch=yes
- eval cmd=\"$cmd1\"
- func_len " $cmd"
- len=$func_len_result
- ;;
- *)
- try_normal_branch=no
- ;;
- esac
- if test yes = "$try_normal_branch" \
- && { test "$len" -lt "$max_cmd_len" \
- || test "$max_cmd_len" -le -1; }
- then
- func_show_eval "$cmd" 'exit $?'
- skipped_export=false
- elif test -n "$nm_file_list_spec"; then
- func_basename "$output"
- output_la=$func_basename_result
- save_libobjs=$libobjs
- save_output=$output
- output=$output_objdir/$output_la.nm
- func_to_tool_file "$output"
- libobjs=$nm_file_list_spec$func_to_tool_file_result
- func_append delfiles " $output"
- func_verbose "creating $NM input file list: $output"
- for obj in $save_libobjs; do
- func_to_tool_file "$obj"
- $ECHO "$func_to_tool_file_result"
- done > "$output"
- eval cmd=\"$cmd1\"
- func_show_eval "$cmd" 'exit $?'
- output=$save_output
- libobjs=$save_libobjs
- skipped_export=false
- else
- # The command line is too long to execute in one step.
- func_verbose "using reloadable object file for export list..."
- skipped_export=:
- # Break out early, otherwise skipped_export may be
- # set to false by a later but shorter cmd.
- break
- fi
- done
- IFS=$save_ifs
- if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
- func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
- func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
- fi
- fi
- fi
-
- if test -n "$export_symbols" && test -n "$include_expsyms"; then
- tmp_export_symbols=$export_symbols
- test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
- $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
- fi
-
- if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
- # The given exports_symbols file has to be filtered, so filter it.
- func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
- # FIXME: $output_objdir/$libname.filter potentially contains lots of
- # 's' commands, which not all seds can handle. GNU sed should be fine
- # though. Also, the filter scales superlinearly with the number of
- # global variables. join(1) would be nice here, but unfortunately
- # isn't a blessed tool.
- $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
- func_append delfiles " $export_symbols $output_objdir/$libname.filter"
- export_symbols=$output_objdir/$libname.def
- $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
- fi
-
- tmp_deplibs=
- for test_deplib in $deplibs; do
- case " $convenience " in
- *" $test_deplib "*) ;;
- *)
- func_append tmp_deplibs " $test_deplib"
- ;;
- esac
- done
- deplibs=$tmp_deplibs
-
- if test -n "$convenience"; then
- if test -n "$whole_archive_flag_spec" &&
- test yes = "$compiler_needs_object" &&
- test -z "$libobjs"; then
- # extract the archives, so we have objects to list.
- # TODO: could optimize this to just extract one archive.
- whole_archive_flag_spec=
- fi
- if test -n "$whole_archive_flag_spec"; then
- save_libobjs=$libobjs
- eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
- test "X$libobjs" = "X " && libobjs=
- else
- gentop=$output_objdir/${outputname}x
- func_append generated " $gentop"
-
- func_extract_archives $gentop $convenience
- func_append libobjs " $func_extract_archives_result"
- test "X$libobjs" = "X " && libobjs=
- fi
- fi
-
- if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
- eval flag=\"$thread_safe_flag_spec\"
- func_append linker_flags " $flag"
- fi
-
- # Make a backup of the uninstalled library when relinking
- if test relink = "$opt_mode"; then
- $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
- fi
-
- # Do each of the archive commands.
- if test yes = "$module" && test -n "$module_cmds"; then
- if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
- eval test_cmds=\"$module_expsym_cmds\"
- cmds=$module_expsym_cmds
- else
- eval test_cmds=\"$module_cmds\"
- cmds=$module_cmds
- fi
- else
- if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
- eval test_cmds=\"$archive_expsym_cmds\"
- cmds=$archive_expsym_cmds
- else
- eval test_cmds=\"$archive_cmds\"
- cmds=$archive_cmds
- fi
- fi
-
- if test : != "$skipped_export" &&
- func_len " $test_cmds" &&
- len=$func_len_result &&
- test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
- :
- else
- # The command line is too long to link in one step, link piecewise
- # or, if using GNU ld and skipped_export is not :, use a linker
- # script.
-
- # Save the value of $output and $libobjs because we want to
- # use them later. If we have whole_archive_flag_spec, we
- # want to use save_libobjs as it was before
- # whole_archive_flag_spec was expanded, because we can't
- # assume the linker understands whole_archive_flag_spec.
- # This may have to be revisited, in case too many
- # convenience libraries get linked in and end up exceeding
- # the spec.
- if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
- save_libobjs=$libobjs
- fi
- save_output=$output
- func_basename "$output"
- output_la=$func_basename_result
-
- # Clear the reloadable object creation command queue and
- # initialize k to one.
- test_cmds=
- concat_cmds=
- objlist=
- last_robj=
- k=1
-
- if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
- output=$output_objdir/$output_la.lnkscript
- func_verbose "creating GNU ld script: $output"
- echo 'INPUT (' > $output
- for obj in $save_libobjs
- do
- func_to_tool_file "$obj"
- $ECHO "$func_to_tool_file_result" >> $output
- done
- echo ')' >> $output
- func_append delfiles " $output"
- func_to_tool_file "$output"
- output=$func_to_tool_file_result
- elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
- output=$output_objdir/$output_la.lnk
- func_verbose "creating linker input file list: $output"
- : > $output
- set x $save_libobjs
- shift
- firstobj=
- if test yes = "$compiler_needs_object"; then
- firstobj="$1 "
- shift
- fi
- for obj
- do
- func_to_tool_file "$obj"
- $ECHO "$func_to_tool_file_result" >> $output
- done
- func_append delfiles " $output"
- func_to_tool_file "$output"
- output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
- else
- if test -n "$save_libobjs"; then
- func_verbose "creating reloadable object files..."
- output=$output_objdir/$output_la-$k.$objext
- eval test_cmds=\"$reload_cmds\"
- func_len " $test_cmds"
- len0=$func_len_result
- len=$len0
-
- # Loop over the list of objects to be linked.
- for obj in $save_libobjs
- do
- func_len " $obj"
- func_arith $len + $func_len_result
- len=$func_arith_result
- if test -z "$objlist" ||
- test "$len" -lt "$max_cmd_len"; then
- func_append objlist " $obj"
- else
- # The command $test_cmds is almost too long, add a
- # command to the queue.
- if test 1 -eq "$k"; then
- # The first file doesn't have a previous command to add.
- reload_objs=$objlist
- eval concat_cmds=\"$reload_cmds\"
- else
- # All subsequent reloadable object files will link in
- # the last one created.
- reload_objs="$objlist $last_robj"
- eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
- fi
- last_robj=$output_objdir/$output_la-$k.$objext
- func_arith $k + 1
- k=$func_arith_result
- output=$output_objdir/$output_la-$k.$objext
- objlist=" $obj"
- func_len " $last_robj"
- func_arith $len0 + $func_len_result
- len=$func_arith_result
- fi
- done
- # Handle the remaining objects by creating one last
- # reloadable object file. All subsequent reloadable object
- # files will link in the last one created.
- test -z "$concat_cmds" || concat_cmds=$concat_cmds~
- reload_objs="$objlist $last_robj"
- eval concat_cmds=\"\$concat_cmds$reload_cmds\"
- if test -n "$last_robj"; then
- eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
- fi
- func_append delfiles " $output"
-
- else
- output=
- fi
-
- ${skipped_export-false} && {
- func_verbose "generating symbol list for '$libname.la'"
- export_symbols=$output_objdir/$libname.exp
- $opt_dry_run || $RM $export_symbols
- libobjs=$output
- # Append the command to create the export file.
- test -z "$concat_cmds" || concat_cmds=$concat_cmds~
- eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
- if test -n "$last_robj"; then
- eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
- fi
- }
-
- test -n "$save_libobjs" &&
- func_verbose "creating a temporary reloadable object file: $output"
-
- # Loop through the commands generated above and execute them.
- save_ifs=$IFS; IFS='~'
- for cmd in $concat_cmds; do
- IFS=$save_ifs
- $opt_quiet || {
- func_quote_arg expand,pretty "$cmd"
- eval "func_echo $func_quote_arg_result"
- }
- $opt_dry_run || eval "$cmd" || {
- lt_exit=$?
-
- # Restore the uninstalled library and exit
- if test relink = "$opt_mode"; then
- ( cd "$output_objdir" && \
- $RM "${realname}T" && \
- $MV "${realname}U" "$realname" )
- fi
-
- exit $lt_exit
- }
- done
- IFS=$save_ifs
-
- if test -n "$export_symbols_regex" && ${skipped_export-false}; then
- func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
- func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
- fi
- fi
-
- ${skipped_export-false} && {
- if test -n "$export_symbols" && test -n "$include_expsyms"; then
- tmp_export_symbols=$export_symbols
- test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
- $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
- fi
-
- if test -n "$orig_export_symbols"; then
- # The given exports_symbols file has to be filtered, so filter it.
- func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
- # FIXME: $output_objdir/$libname.filter potentially contains lots of
- # 's' commands, which not all seds can handle. GNU sed should be fine
- # though. Also, the filter scales superlinearly with the number of
- # global variables. join(1) would be nice here, but unfortunately
- # isn't a blessed tool.
- $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
- func_append delfiles " $export_symbols $output_objdir/$libname.filter"
- export_symbols=$output_objdir/$libname.def
- $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
- fi
- }
-
- libobjs=$output
- # Restore the value of output.
- output=$save_output
-
- if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
- eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
- test "X$libobjs" = "X " && libobjs=
- fi
- # Expand the library linking commands again to reset the
- # value of $libobjs for piecewise linking.
-
- # Do each of the archive commands.
- if test yes = "$module" && test -n "$module_cmds"; then
- if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
- cmds=$module_expsym_cmds
- else
- cmds=$module_cmds
- fi
- else
- if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
- cmds=$archive_expsym_cmds
- else
- cmds=$archive_cmds
- fi
- fi
- fi
-
- if test -n "$delfiles"; then
- # Append the command to remove temporary files to $cmds.
- eval cmds=\"\$cmds~\$RM $delfiles\"
- fi
-
- # Add any objects from preloaded convenience libraries
- if test -n "$dlprefiles"; then
- gentop=$output_objdir/${outputname}x
- func_append generated " $gentop"
-
- func_extract_archives $gentop $dlprefiles
- func_append libobjs " $func_extract_archives_result"
- test "X$libobjs" = "X " && libobjs=
- fi
-
- save_ifs=$IFS; IFS='~'
- for cmd in $cmds; do
- IFS=$sp$nl
- eval cmd=\"$cmd\"
- IFS=$save_ifs
- $opt_quiet || {
- func_quote_arg expand,pretty "$cmd"
- eval "func_echo $func_quote_arg_result"
- }
- $opt_dry_run || eval "$cmd" || {
- lt_exit=$?
-
- # Restore the uninstalled library and exit
- if test relink = "$opt_mode"; then
- ( cd "$output_objdir" && \
- $RM "${realname}T" && \
- $MV "${realname}U" "$realname" )
- fi
-
- exit $lt_exit
- }
- done
- IFS=$save_ifs
-
- # Restore the uninstalled library and exit
- if test relink = "$opt_mode"; then
- $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
-
- if test -n "$convenience"; then
- if test -z "$whole_archive_flag_spec"; then
- func_show_eval '${RM}r "$gentop"'
- fi
- fi
-
- exit $EXIT_SUCCESS
- fi
-
- # Create links to the real library.
- for linkname in $linknames; do
- if test "$realname" != "$linkname"; then
- func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
- fi
- done
-
- # If -module or -export-dynamic was specified, set the dlname.
- if test yes = "$module" || test yes = "$export_dynamic"; then
- # On all known operating systems, these are identical.
- dlname=$soname
- fi
- fi
- ;;
-
- obj)
- if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
- func_warning "'-dlopen' is ignored for objects"
- fi
-
- case " $deplibs" in
- *\ -l* | *\ -L*)
- func_warning "'-l' and '-L' are ignored for objects" ;;
- esac
-
- test -n "$rpath" && \
- func_warning "'-rpath' is ignored for objects"
-
- test -n "$xrpath" && \
- func_warning "'-R' is ignored for objects"
-
- test -n "$vinfo" && \
- func_warning "'-version-info' is ignored for objects"
-
- test -n "$release" && \
- func_warning "'-release' is ignored for objects"
-
- case $output in
- *.lo)
- test -n "$objs$old_deplibs" && \
- func_fatal_error "cannot build library object '$output' from non-libtool objects"
-
- libobj=$output
- func_lo2o "$libobj"
- obj=$func_lo2o_result
- ;;
- *)
- libobj=
- obj=$output
- ;;
- esac
-
- # Delete the old objects.
- $opt_dry_run || $RM $obj $libobj
-
- # Objects from convenience libraries. This assumes
- # single-version convenience libraries. Whenever we create
- # different ones for PIC/non-PIC, this we'll have to duplicate
- # the extraction.
- reload_conv_objs=
- gentop=
- # if reload_cmds runs $LD directly, get rid of -Wl from
- # whole_archive_flag_spec and hope we can get by with turning comma
- # into space.
- case $reload_cmds in
- *\$LD[\ \$]*) wl= ;;
- esac
- if test -n "$convenience"; then
- if test -n "$whole_archive_flag_spec"; then
- eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
- test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
- reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
- else
- gentop=$output_objdir/${obj}x
- func_append generated " $gentop"
-
- func_extract_archives $gentop $convenience
- reload_conv_objs="$reload_objs $func_extract_archives_result"
- fi
- fi
-
- # If we're not building shared, we need to use non_pic_objs
- test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
-
- # Create the old-style object.
- reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
-
- output=$obj
- func_execute_cmds "$reload_cmds" 'exit $?'
-
- # Exit if we aren't doing a library object file.
- if test -z "$libobj"; then
- if test -n "$gentop"; then
- func_show_eval '${RM}r "$gentop"'
- fi
-
- exit $EXIT_SUCCESS
- fi
-
- test yes = "$build_libtool_libs" || {
- if test -n "$gentop"; then
- func_show_eval '${RM}r "$gentop"'
- fi
-
- # Create an invalid libtool object if no PIC, so that we don't
- # accidentally link it into a program.
- # $show "echo timestamp > $libobj"
- # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
- exit $EXIT_SUCCESS
- }
-
- if test -n "$pic_flag" || test default != "$pic_mode"; then
- # Only do commands if we really have different PIC objects.
- reload_objs="$libobjs $reload_conv_objs"
- output=$libobj
- func_execute_cmds "$reload_cmds" 'exit $?'
- fi
-
- if test -n "$gentop"; then
- func_show_eval '${RM}r "$gentop"'
- fi
-
- exit $EXIT_SUCCESS
- ;;
-
- prog)
- case $host in
- *cygwin*) func_stripname '' '.exe' "$output"
- output=$func_stripname_result.exe;;
- esac
- test -n "$vinfo" && \
- func_warning "'-version-info' is ignored for programs"
-
- test -n "$release" && \
- func_warning "'-release' is ignored for programs"
-
- $preload \
- && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
- && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
-
- case $host in
- *-*-rhapsody* | *-*-darwin1.[012])
- # On Rhapsody replace the C library is the System framework
- compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
- finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
- ;;
- esac
-
- case $host in
- *-*-darwin*)
- # Don't allow lazy linking, it breaks C++ global constructors
- # But is supposedly fixed on 10.4 or later (yay!).
- if test CXX = "$tagname"; then
- case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
- 10.[0123])
- func_append compile_command " $wl-bind_at_load"
- func_append finalize_command " $wl-bind_at_load"
- ;;
- esac
- fi
- # Time to change all our "foo.ltframework" stuff back to "-framework foo"
- compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
- finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
- ;;
- esac
-
-
- # move library search paths that coincide with paths to not yet
- # installed libraries to the beginning of the library search list
- new_libs=
- for path in $notinst_path; do
- case " $new_libs " in
- *" -L$path/$objdir "*) ;;
- *)
- case " $compile_deplibs " in
- *" -L$path/$objdir "*)
- func_append new_libs " -L$path/$objdir" ;;
- esac
- ;;
- esac
- done
- for deplib in $compile_deplibs; do
- case $deplib in
- -L*)
- case " $new_libs " in
- *" $deplib "*) ;;
- *) func_append new_libs " $deplib" ;;
- esac
- ;;
- *) func_append new_libs " $deplib" ;;
- esac
- done
- compile_deplibs=$new_libs
-
-
- func_append compile_command " $compile_deplibs"
- func_append finalize_command " $finalize_deplibs"
-
- if test -n "$rpath$xrpath"; then
- # If the user specified any rpath flags, then add them.
- for libdir in $rpath $xrpath; do
- # This is the magic to use -rpath.
- case "$finalize_rpath " in
- *" $libdir "*) ;;
- *) func_append finalize_rpath " $libdir" ;;
- esac
- done
- fi
-
- # Now hardcode the library paths
- rpath=
- hardcode_libdirs=
- for libdir in $compile_rpath $finalize_rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs=$libdir
- else
- # Just accumulate the unique libdirs.
- case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
- func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
- eval flag=\"$hardcode_libdir_flag_spec\"
- func_append rpath " $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$perm_rpath " in
- *" $libdir "*) ;;
- *) func_append perm_rpath " $libdir" ;;
- esac
- fi
- case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
- testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
- case :$dllsearchpath: in
- *":$libdir:"*) ;;
- ::) dllsearchpath=$libdir;;
- *) func_append dllsearchpath ":$libdir";;
- esac
- case :$dllsearchpath: in
- *":$testbindir:"*) ;;
- ::) dllsearchpath=$testbindir;;
- *) func_append dllsearchpath ":$testbindir";;
- esac
- ;;
- esac
- done
- # Substitute the hardcoded libdirs into the rpath.
- if test -n "$hardcode_libdir_separator" &&
- test -n "$hardcode_libdirs"; then
- libdir=$hardcode_libdirs
- eval rpath=\" $hardcode_libdir_flag_spec\"
- fi
- compile_rpath=$rpath
-
- rpath=
- hardcode_libdirs=
- for libdir in $finalize_rpath; do
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
- hardcode_libdirs=$libdir
- else
- # Just accumulate the unique libdirs.
- case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
- *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- ;;
- *)
- func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
- ;;
- esac
- fi
- else
- eval flag=\"$hardcode_libdir_flag_spec\"
- func_append rpath " $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$finalize_perm_rpath " in
- *" $libdir "*) ;;
- *) func_append finalize_perm_rpath " $libdir" ;;
- esac
- fi
- done
- # Substitute the hardcoded libdirs into the rpath.
- if test -n "$hardcode_libdir_separator" &&
- test -n "$hardcode_libdirs"; then
- libdir=$hardcode_libdirs
- eval rpath=\" $hardcode_libdir_flag_spec\"
- fi
- finalize_rpath=$rpath
-
- if test -n "$libobjs" && test yes = "$build_old_libs"; then
- # Transform all the library objects into standard objects.
- compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
- finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
- fi
-
- func_generate_dlsyms "$outputname" "@PROGRAM@" false
-
- # template prelinking step
- if test -n "$prelink_cmds"; then
- func_execute_cmds "$prelink_cmds" 'exit $?'
- fi
-
- wrappers_required=:
- case $host in
- *cegcc* | *mingw32ce*)
- # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
- wrappers_required=false
- ;;
- *cygwin* | *mingw* )
- test yes = "$build_libtool_libs" || wrappers_required=false
- ;;
- *)
- if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
- wrappers_required=false
- fi
- ;;
- esac
- $wrappers_required || {
- # Replace the output file specification.
- compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
- link_command=$compile_command$compile_rpath
-
- # We have no uninstalled library dependencies, so finalize right now.
- exit_status=0
- func_show_eval "$link_command" 'exit_status=$?'
-
- if test -n "$postlink_cmds"; then
- func_to_tool_file "$output"
- postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
- func_execute_cmds "$postlink_cmds" 'exit $?'
- fi
-
- # Delete the generated files.
- if test -f "$output_objdir/${outputname}S.$objext"; then
- func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
- fi
-
- exit $exit_status
- }
-
- if test -n "$compile_shlibpath$finalize_shlibpath"; then
- compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
- fi
- if test -n "$finalize_shlibpath"; then
- finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
- fi
-
- compile_var=
- finalize_var=
- if test -n "$runpath_var"; then
- if test -n "$perm_rpath"; then
- # We should set the runpath_var.
- rpath=
- for dir in $perm_rpath; do
- func_append rpath "$dir:"
- done
- compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
- fi
- if test -n "$finalize_perm_rpath"; then
- # We should set the runpath_var.
- rpath=
- for dir in $finalize_perm_rpath; do
- func_append rpath "$dir:"
- done
- finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
- fi
- fi
-
- if test yes = "$no_install"; then
- # We don't need to create a wrapper script.
- link_command=$compile_var$compile_command$compile_rpath
- # Replace the output file specification.
- link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
- # Delete the old output file.
- $opt_dry_run || $RM $output
- # Link the executable and exit
- func_show_eval "$link_command" 'exit $?'
-
- if test -n "$postlink_cmds"; then
- func_to_tool_file "$output"
- postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
- func_execute_cmds "$postlink_cmds" 'exit $?'
- fi
-
- exit $EXIT_SUCCESS
- fi
-
- case $hardcode_action,$fast_install in
- relink,*)
- # Fast installation is not supported
- link_command=$compile_var$compile_command$compile_rpath
- relink_command=$finalize_var$finalize_command$finalize_rpath
-
- func_warning "this platform does not like uninstalled shared libraries"
- func_warning "'$output' will be relinked during installation"
- ;;
- *,yes)
- link_command=$finalize_var$compile_command$finalize_rpath
- relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
- ;;
- *,no)
- link_command=$compile_var$compile_command$compile_rpath
- relink_command=$finalize_var$finalize_command$finalize_rpath
- ;;
- *,needless)
- link_command=$finalize_var$compile_command$finalize_rpath
- relink_command=
- ;;
- esac
-
- # Replace the output file specification.
- link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
-
- # Delete the old output files.
- $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
-
- func_show_eval "$link_command" 'exit $?'
-
- if test -n "$postlink_cmds"; then
- func_to_tool_file "$output_objdir/$outputname"
- postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
- func_execute_cmds "$postlink_cmds" 'exit $?'
- fi
-
- # Now create the wrapper script.
- func_verbose "creating $output"
-
- # Quote the relink command for shipping.
- if test -n "$relink_command"; then
- # Preserve any variables that may affect compiler behavior
- for var in $variables_saved_for_relink; do
- if eval test -z \"\${$var+set}\"; then
- relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
- elif eval var_value=\$$var; test -z "$var_value"; then
- relink_command="$var=; export $var; $relink_command"
- else
- func_quote_arg pretty "$var_value"
- relink_command="$var=$func_quote_arg_result; export $var; $relink_command"
- fi
- done
- func_quote eval cd "`pwd`"
- func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)"
- relink_command=$func_quote_arg_unquoted_result
- fi
-
- # Only actually do things if not in dry run mode.
- $opt_dry_run || {
- # win32 will think the script is a binary if it has
- # a .exe suffix, so we strip it off here.
- case $output in
- *.exe) func_stripname '' '.exe' "$output"
- output=$func_stripname_result ;;
- esac
- # test for cygwin because mv fails w/o .exe extensions
- case $host in
- *cygwin*)
- exeext=.exe
- func_stripname '' '.exe' "$outputname"
- outputname=$func_stripname_result ;;
- *) exeext= ;;
- esac
- case $host in
- *cygwin* | *mingw* )
- func_dirname_and_basename "$output" "" "."
- output_name=$func_basename_result
- output_path=$func_dirname_result
- cwrappersource=$output_path/$objdir/lt-$output_name.c
- cwrapper=$output_path/$output_name.exe
- $RM $cwrappersource $cwrapper
- trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
-
- func_emit_cwrapperexe_src > $cwrappersource
-
- # The wrapper executable is built using the $host compiler,
- # because it contains $host paths and files. If cross-
- # compiling, it, like the target executable, must be
- # executed on the $host or under an emulation environment.
- $opt_dry_run || {
- $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
- $STRIP $cwrapper
- }
-
- # Now, create the wrapper script for func_source use:
- func_ltwrapper_scriptname $cwrapper
- $RM $func_ltwrapper_scriptname_result
- trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
- $opt_dry_run || {
- # note: this script will not be executed, so do not chmod.
- if test "x$build" = "x$host"; then
- $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
- else
- func_emit_wrapper no > $func_ltwrapper_scriptname_result
- fi
- }
- ;;
- * )
- $RM $output
- trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
-
- func_emit_wrapper no > $output
- chmod +x $output
- ;;
- esac
- }
- exit $EXIT_SUCCESS
- ;;
- esac
-
- # See if we need to build an old-fashioned archive.
- for oldlib in $oldlibs; do
-
- case $build_libtool_libs in
- convenience)
- oldobjs="$libobjs_save $symfileobj"
- addlibs=$convenience
- build_libtool_libs=no
- ;;
- module)
- oldobjs=$libobjs_save
- addlibs=$old_convenience
- build_libtool_libs=no
- ;;
- *)
- oldobjs="$old_deplibs $non_pic_objects"
- $preload && test -f "$symfileobj" \
- && func_append oldobjs " $symfileobj"
- addlibs=$old_convenience
- ;;
- esac
-
- if test -n "$addlibs"; then
- gentop=$output_objdir/${outputname}x
- func_append generated " $gentop"
-
- func_extract_archives $gentop $addlibs
- func_append oldobjs " $func_extract_archives_result"
- fi
-
- # Do each command in the archive commands.
- if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
- cmds=$old_archive_from_new_cmds
- else
-
- # Add any objects from preloaded convenience libraries
- if test -n "$dlprefiles"; then
- gentop=$output_objdir/${outputname}x
- func_append generated " $gentop"
-
- func_extract_archives $gentop $dlprefiles
- func_append oldobjs " $func_extract_archives_result"
- fi
-
- # POSIX demands no paths to be encoded in archives. We have
- # to avoid creating archives with duplicate basenames if we
- # might have to extract them afterwards, e.g., when creating a
- # static archive out of a convenience library, or when linking
- # the entirety of a libtool archive into another (currently
- # not supported by libtool).
- if (for obj in $oldobjs
- do
- func_basename "$obj"
- $ECHO "$func_basename_result"
- done | sort | sort -uc >/dev/null 2>&1); then
- :
- else
- echo "copying selected object files to avoid basename conflicts..."
- gentop=$output_objdir/${outputname}x
- func_append generated " $gentop"
- func_mkdir_p "$gentop"
- save_oldobjs=$oldobjs
- oldobjs=
- counter=1
- for obj in $save_oldobjs
- do
- func_basename "$obj"
- objbase=$func_basename_result
- case " $oldobjs " in
- " ") oldobjs=$obj ;;
- *[\ /]"$objbase "*)
- while :; do
- # Make sure we don't pick an alternate name that also
- # overlaps.
- newobj=lt$counter-$objbase
- func_arith $counter + 1
- counter=$func_arith_result
- case " $oldobjs " in
- *[\ /]"$newobj "*) ;;
- *) if test ! -f "$gentop/$newobj"; then break; fi ;;
- esac
- done
- func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
- func_append oldobjs " $gentop/$newobj"
- ;;
- *) func_append oldobjs " $obj" ;;
- esac
- done
- fi
- func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
- tool_oldlib=$func_to_tool_file_result
- eval cmds=\"$old_archive_cmds\"
-
- func_len " $cmds"
- len=$func_len_result
- if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
- cmds=$old_archive_cmds
- elif test -n "$archiver_list_spec"; then
- func_verbose "using command file archive linking..."
- for obj in $oldobjs
- do
- func_to_tool_file "$obj"
- $ECHO "$func_to_tool_file_result"
- done > $output_objdir/$libname.libcmd
- func_to_tool_file "$output_objdir/$libname.libcmd"
- oldobjs=" $archiver_list_spec$func_to_tool_file_result"
- cmds=$old_archive_cmds
- else
- # the command line is too long to link in one step, link in parts
- func_verbose "using piecewise archive linking..."
- save_RANLIB=$RANLIB
- RANLIB=:
- objlist=
- concat_cmds=
- save_oldobjs=$oldobjs
- oldobjs=
- # Is there a better way of finding the last object in the list?
- for obj in $save_oldobjs
- do
- last_oldobj=$obj
- done
- eval test_cmds=\"$old_archive_cmds\"
- func_len " $test_cmds"
- len0=$func_len_result
- len=$len0
- for obj in $save_oldobjs
- do
- func_len " $obj"
- func_arith $len + $func_len_result
- len=$func_arith_result
- func_append objlist " $obj"
- if test "$len" -lt "$max_cmd_len"; then
- :
- else
- # the above command should be used before it gets too long
- oldobjs=$objlist
- if test "$obj" = "$last_oldobj"; then
- RANLIB=$save_RANLIB
- fi
- test -z "$concat_cmds" || concat_cmds=$concat_cmds~
- eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
- objlist=
- len=$len0
- fi
- done
- RANLIB=$save_RANLIB
- oldobjs=$objlist
- if test -z "$oldobjs"; then
- eval cmds=\"\$concat_cmds\"
- else
- eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
- fi
- fi
- fi
- func_execute_cmds "$cmds" 'exit $?'
- done
-
- test -n "$generated" && \
- func_show_eval "${RM}r$generated"
-
- # Now create the libtool archive.
- case $output in
- *.la)
- old_library=
- test yes = "$build_old_libs" && old_library=$libname.$libext
- func_verbose "creating $output"
-
- # Preserve any variables that may affect compiler behavior
- for var in $variables_saved_for_relink; do
- if eval test -z \"\${$var+set}\"; then
- relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
- elif eval var_value=\$$var; test -z "$var_value"; then
- relink_command="$var=; export $var; $relink_command"
- else
- func_quote_arg pretty,unquoted "$var_value"
- relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command"
- fi
- done
- # Quote the link command for shipping.
- func_quote eval cd "`pwd`"
- relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
- func_quote_arg pretty,unquoted "$relink_command"
- relink_command=$func_quote_arg_unquoted_result
- if test yes = "$hardcode_automatic"; then
- relink_command=
- fi
-
- # Only create the output if not a dry run.
- $opt_dry_run || {
- for installed in no yes; do
- if test yes = "$installed"; then
- if test -z "$install_libdir"; then
- break
- fi
- output=$output_objdir/${outputname}i
- # Replace all uninstalled libtool libraries with the installed ones
- newdependency_libs=
- for deplib in $dependency_libs; do
- case $deplib in
- *.la)
- func_basename "$deplib"
- name=$func_basename_result
- func_resolve_sysroot "$deplib"
- eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
- test -z "$libdir" && \
- func_fatal_error "'$deplib' is not a valid libtool archive"
- func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
- ;;
- -L*)
- func_stripname -L '' "$deplib"
- func_replace_sysroot "$func_stripname_result"
- func_append newdependency_libs " -L$func_replace_sysroot_result"
- ;;
- -R*)
- func_stripname -R '' "$deplib"
- func_replace_sysroot "$func_stripname_result"
- func_append newdependency_libs " -R$func_replace_sysroot_result"
- ;;
- *) func_append newdependency_libs " $deplib" ;;
- esac
- done
- dependency_libs=$newdependency_libs
- newdlfiles=
-
- for lib in $dlfiles; do
- case $lib in
- *.la)
- func_basename "$lib"
- name=$func_basename_result
- eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
- test -z "$libdir" && \
- func_fatal_error "'$lib' is not a valid libtool archive"
- func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
- ;;
- *) func_append newdlfiles " $lib" ;;
- esac
- done
- dlfiles=$newdlfiles
- newdlprefiles=
- for lib in $dlprefiles; do
- case $lib in
- *.la)
- # Only pass preopened files to the pseudo-archive (for
- # eventual linking with the app. that links it) if we
- # didn't already link the preopened objects directly into
- # the library:
- func_basename "$lib"
- name=$func_basename_result
- eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
- test -z "$libdir" && \
- func_fatal_error "'$lib' is not a valid libtool archive"
- func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
- ;;
- esac
- done
- dlprefiles=$newdlprefiles
- else
- newdlfiles=
- for lib in $dlfiles; do
- case $lib in
- [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
- *) abs=`pwd`"/$lib" ;;
- esac
- func_append newdlfiles " $abs"
- done
- dlfiles=$newdlfiles
- newdlprefiles=
- for lib in $dlprefiles; do
- case $lib in
- [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
- *) abs=`pwd`"/$lib" ;;
- esac
- func_append newdlprefiles " $abs"
- done
- dlprefiles=$newdlprefiles
- fi
- $RM $output
- # place dlname in correct position for cygwin
- # In fact, it would be nice if we could use this code for all target
- # systems that can't hard-code library paths into their executables
- # and that have no shared library path variable independent of PATH,
- # but it turns out we can't easily determine that from inspecting
- # libtool variables, so we have to hard-code the OSs to which it
- # applies here; at the moment, that means platforms that use the PE
- # object format with DLL files. See the long comment at the top of
- # tests/bindir.at for full details.
- tdlname=$dlname
- case $host,$output,$installed,$module,$dlname in
- *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
- # If a -bindir argument was supplied, place the dll there.
- if test -n "$bindir"; then
- func_relative_path "$install_libdir" "$bindir"
- tdlname=$func_relative_path_result/$dlname
- else
- # Otherwise fall back on heuristic.
- tdlname=../bin/$dlname
- fi
- ;;
- esac
- $ECHO > $output "\
-# $outputname - a libtool library file
-# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# The name that we can dlopen(3).
-dlname='$tdlname'
-
-# Names of this library.
-library_names='$library_names'
-
-# The name of the static archive.
-old_library='$old_library'
-
-# Linker flags that cannot go in dependency_libs.
-inherited_linker_flags='$new_inherited_linker_flags'
-
-# Libraries that this one depends upon.
-dependency_libs='$dependency_libs'
-
-# Names of additional weak libraries provided by this library
-weak_library_names='$weak_libs'
-
-# Version information for $libname.
-current=$current
-age=$age
-revision=$revision
-
-# Is this an already installed library?
-installed=$installed
-
-# Should we warn about portability when linking against -modules?
-shouldnotlink=$module
-
-# Files to dlopen/dlpreopen
-dlopen='$dlfiles'
-dlpreopen='$dlprefiles'
-
-# Directory that this library needs to be installed in:
-libdir='$install_libdir'"
- if test no,yes = "$installed,$need_relink"; then
- $ECHO >> $output "\
-relink_command=\"$relink_command\""
- fi
- done
- }
-
- # Do a symbolic link so that the libtool archive can be found in
- # LD_LIBRARY_PATH before the program is installed.
- func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
- ;;
- esac
- exit $EXIT_SUCCESS
-}
-
-if test link = "$opt_mode" || test relink = "$opt_mode"; then
- func_mode_link ${1+"$@"}
-fi
-
-
-# func_mode_uninstall arg...
-func_mode_uninstall ()
-{
- $debug_cmd
-
- RM=$nonopt
- files=
- rmforce=false
- exit_status=0
-
- # This variable tells wrapper scripts just to set variables rather
- # than running their programs.
- libtool_install_magic=$magic
-
- for arg
- do
- case $arg in
- -f) func_append RM " $arg"; rmforce=: ;;
- -*) func_append RM " $arg" ;;
- *) func_append files " $arg" ;;
- esac
- done
-
- test -z "$RM" && \
- func_fatal_help "you must specify an RM program"
-
- rmdirs=
-
- for file in $files; do
- func_dirname "$file" "" "."
- dir=$func_dirname_result
- if test . = "$dir"; then
- odir=$objdir
- else
- odir=$dir/$objdir
- fi
- func_basename "$file"
- name=$func_basename_result
- test uninstall = "$opt_mode" && odir=$dir
-
- # Remember odir for removal later, being careful to avoid duplicates
- if test clean = "$opt_mode"; then
- case " $rmdirs " in
- *" $odir "*) ;;
- *) func_append rmdirs " $odir" ;;
- esac
- fi
-
- # Don't error if the file doesn't exist and rm -f was used.
- if { test -L "$file"; } >/dev/null 2>&1 ||
- { test -h "$file"; } >/dev/null 2>&1 ||
- test -f "$file"; then
- :
- elif test -d "$file"; then
- exit_status=1
- continue
- elif $rmforce; then
- continue
- fi
-
- rmfiles=$file
-
- case $name in
- *.la)
- # Possibly a libtool archive, so verify it.
- if func_lalib_p "$file"; then
- func_source $dir/$name
-
- # Delete the libtool libraries and symlinks.
- for n in $library_names; do
- func_append rmfiles " $odir/$n"
- done
- test -n "$old_library" && func_append rmfiles " $odir/$old_library"
-
- case $opt_mode in
- clean)
- case " $library_names " in
- *" $dlname "*) ;;
- *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
- esac
- test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
- ;;
- uninstall)
- if test -n "$library_names"; then
- # Do each command in the postuninstall commands.
- func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
- fi
-
- if test -n "$old_library"; then
- # Do each command in the old_postuninstall commands.
- func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
- fi
- # FIXME: should reinstall the best remaining shared library.
- ;;
- esac
- fi
- ;;
-
- *.lo)
- # Possibly a libtool object, so verify it.
- if func_lalib_p "$file"; then
-
- # Read the .lo file
- func_source $dir/$name
-
- # Add PIC object to the list of files to remove.
- if test -n "$pic_object" && test none != "$pic_object"; then
- func_append rmfiles " $dir/$pic_object"
- fi
-
- # Add non-PIC object to the list of files to remove.
- if test -n "$non_pic_object" && test none != "$non_pic_object"; then
- func_append rmfiles " $dir/$non_pic_object"
- fi
- fi
- ;;
-
- *)
- if test clean = "$opt_mode"; then
- noexename=$name
- case $file in
- *.exe)
- func_stripname '' '.exe' "$file"
- file=$func_stripname_result
- func_stripname '' '.exe' "$name"
- noexename=$func_stripname_result
- # $file with .exe has already been added to rmfiles,
- # add $file without .exe
- func_append rmfiles " $file"
- ;;
- esac
- # Do a test to see if this is a libtool program.
- if func_ltwrapper_p "$file"; then
- if func_ltwrapper_executable_p "$file"; then
- func_ltwrapper_scriptname "$file"
- relink_command=
- func_source $func_ltwrapper_scriptname_result
- func_append rmfiles " $func_ltwrapper_scriptname_result"
- else
- relink_command=
- func_source $dir/$noexename
- fi
-
- # note $name still contains .exe if it was in $file originally
- # as does the version of $file that was added into $rmfiles
- func_append rmfiles " $odir/$name $odir/${name}S.$objext"
- if test yes = "$fast_install" && test -n "$relink_command"; then
- func_append rmfiles " $odir/lt-$name"
- fi
- if test "X$noexename" != "X$name"; then
- func_append rmfiles " $odir/lt-$noexename.c"
- fi
- fi
- fi
- ;;
- esac
- func_show_eval "$RM $rmfiles" 'exit_status=1'
- done
-
- # Try to remove the $objdir's in the directories where we deleted files
- for dir in $rmdirs; do
- if test -d "$dir"; then
- func_show_eval "rmdir $dir >/dev/null 2>&1"
- fi
- done
-
- exit $exit_status
-}
-
-if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
- func_mode_uninstall ${1+"$@"}
-fi
-
-test -z "$opt_mode" && {
- help=$generic_help
- func_fatal_help "you must specify a MODE"
-}
-
-test -z "$exec_cmd" && \
- func_fatal_help "invalid operation mode '$opt_mode'"
-
-if test -n "$exec_cmd"; then
- eval exec "$exec_cmd"
- exit $EXIT_FAILURE
-fi
-
-exit $exit_status
-
-
-# The TAGs below are defined such that we never get into a situation
-# where we disable both kinds of libraries. Given conflicting
-# choices, we go for a static library, that is the most portable,
-# since we can't tell whether shared libraries were disabled because
-# the user asked for that or because the platform doesn't support
-# them. This is particularly important on AIX, because we don't
-# support having both static and shared libraries enabled at the same
-# time on that platform, so we default to a shared-only configuration.
-# If a disable-shared tag is given, we'll fallback to a static-only
-# configuration. But we'll never go from static-only to shared-only.
-
-# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
-build_libtool_libs=no
-build_old_libs=yes
-# ### END LIBTOOL TAG CONFIG: disable-shared
-
-# ### BEGIN LIBTOOL TAG CONFIG: disable-static
-build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
-# ### END LIBTOOL TAG CONFIG: disable-static
-
-# Local Variables:
-# mode:shell-script
-# sh-indentation:2
-# End:
diff --git a/ldns/net.c b/ldns/net.c
deleted file mode 100644
index 38d00cf..0000000
--- a/ldns/net.c
+++ /dev/null
@@ -1,1036 +0,0 @@
-/*
- * net.c
- *
- * Network implementation
- * All network related functions are grouped here
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2004-2006
- *
- * See the file LICENSE for the license
- */
-
-#include <ldns/config.h>
-
-#include <ldns/ldns.h>
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#include <sys/time.h>
-#include <errno.h>
-#include <fcntl.h>
-#ifdef HAVE_POLL
-#include <poll.h>
-#endif
-
-ldns_status
-ldns_send(ldns_pkt **result_packet, ldns_resolver *r, const ldns_pkt *query_pkt)
-{
- ldns_buffer *qb;
- ldns_status result;
- ldns_rdf *tsig_mac = NULL;
-
- qb = ldns_buffer_new(LDNS_MIN_BUFLEN);
-
- if (query_pkt && ldns_pkt_tsig(query_pkt)) {
- tsig_mac = ldns_rr_rdf(ldns_pkt_tsig(query_pkt), 3);
- }
-
- if (!query_pkt ||
- ldns_pkt2buffer_wire(qb, query_pkt) != LDNS_STATUS_OK) {
- result = LDNS_STATUS_ERR;
- } else {
- result = ldns_send_buffer(result_packet, r, qb, tsig_mac);
- }
-
- ldns_buffer_free(qb);
-
- return result;
-}
-
-/* code from rdata.c */
-static struct sockaddr_storage *
-ldns_rdf2native_sockaddr_storage_port(
- const ldns_rdf *rd, uint16_t port, size_t *size)
-{
- struct sockaddr_storage *data;
- struct sockaddr_in *data_in;
- struct sockaddr_in6 *data_in6;
-
- data = LDNS_MALLOC(struct sockaddr_storage);
- if (!data) {
- return NULL;
- }
- /* zero the structure for portability */
- memset(data, 0, sizeof(struct sockaddr_storage));
-
- switch(ldns_rdf_get_type(rd)) {
- case LDNS_RDF_TYPE_A:
-#ifndef S_SPLINT_S
- data->ss_family = AF_INET;
-#endif
- data_in = (struct sockaddr_in*) data;
- data_in->sin_port = (in_port_t)htons(port);
- memcpy(&(data_in->sin_addr), ldns_rdf_data(rd), ldns_rdf_size(rd));
- *size = sizeof(struct sockaddr_in);
- return data;
- case LDNS_RDF_TYPE_AAAA:
-#ifndef S_SPLINT_S
- data->ss_family = AF_INET6;
-#endif
- data_in6 = (struct sockaddr_in6*) data;
- data_in6->sin6_port = (in_port_t)htons(port);
- memcpy(&data_in6->sin6_addr, ldns_rdf_data(rd), ldns_rdf_size(rd));
- *size = sizeof(struct sockaddr_in6);
- return data;
- default:
- LDNS_FREE(data);
- return NULL;
- }
-}
-
-struct sockaddr_storage *
-ldns_rdf2native_sockaddr_storage(
- const ldns_rdf *rd, uint16_t port, size_t *size)
-{
- return ldns_rdf2native_sockaddr_storage_port(
- rd, (port == 0 ? (uint16_t)LDNS_PORT : port), size);
-}
-
-/** best effort to set nonblocking */
-static void
-ldns_sock_nonblock(int sockfd)
-{
-#ifdef HAVE_FCNTL
- int flag;
- if((flag = fcntl(sockfd, F_GETFL)) != -1) {
- flag |= O_NONBLOCK;
- if(fcntl(sockfd, F_SETFL, flag) == -1) {
- /* ignore error, continue blockingly */
- }
- }
-#elif defined(HAVE_IOCTLSOCKET)
- unsigned long on = 1;
- if(ioctlsocket(sockfd, FIONBIO, &on) != 0) {
- /* ignore error, continue blockingly */
- }
-#endif
-}
-
-/** best effort to set blocking */
-static void
-ldns_sock_block(int sockfd)
-{
-#ifdef HAVE_FCNTL
- int flag;
- if((flag = fcntl(sockfd, F_GETFL)) != -1) {
- flag &= ~O_NONBLOCK;
- if(fcntl(sockfd, F_SETFL, flag) == -1) {
- /* ignore error, continue */
- }
- }
-#elif defined(HAVE_IOCTLSOCKET)
- unsigned long off = 0;
- if(ioctlsocket(sockfd, FIONBIO, &off) != 0) {
- /* ignore error, continue */
- }
-#endif
-}
-
-/** wait for a socket to become ready */
-static int
-ldns_sock_wait(int sockfd, struct timeval timeout, int write)
-{
- int ret;
-#ifndef HAVE_POLL
-#ifndef S_SPLINT_S
- fd_set fds;
- FD_ZERO(&fds);
- FD_SET(FD_SET_T sockfd, &fds);
- if(write)
- ret = select(sockfd+1, NULL, &fds, NULL, &timeout);
- else
- ret = select(sockfd+1, &fds, NULL, NULL, &timeout);
-#endif
-#else
- struct pollfd pfds[2];
-
- memset(&pfds[0], 0, sizeof(pfds[0]) * 2);
-
- pfds[0].fd = sockfd;
- pfds[0].events = POLLIN|POLLERR;
-
- if (write) {
- pfds[0].events |= POLLOUT;
- }
-
- ret = poll(pfds, 1, (int)(timeout.tv_sec * 1000
- + timeout.tv_usec / 1000));
-#endif
- if(ret == 0)
- /* timeout expired */
- return 0;
- else if(ret == -1)
- /* error */
- return 0;
- return 1;
-}
-
-
-static int
-ldns_tcp_connect_from(const struct sockaddr_storage *to, socklen_t tolen,
- const struct sockaddr_storage *from, socklen_t fromlen,
- struct timeval timeout)
-{
- int sockfd;
-
-#ifndef S_SPLINT_S
- if ((sockfd = socket((int)((struct sockaddr*)to)->sa_family, SOCK_STREAM,
- IPPROTO_TCP)) == SOCK_INVALID) {
- return -1;
- }
-#endif
- if (from && bind(sockfd, (const struct sockaddr*)from, fromlen) == SOCK_INVALID){
- close_socket(sockfd);
- return -1;
- }
-
- /* perform nonblocking connect, to be able to wait with select() */
- ldns_sock_nonblock(sockfd);
- if (connect(sockfd, (struct sockaddr*)to, tolen) == SOCK_INVALID) {
-#ifndef USE_WINSOCK
-#ifdef EINPROGRESS
- if(errno != EINPROGRESS) {
-#else
- if(1) {
-#endif
- close_socket(sockfd);
- return -1;
- }
-#else /* USE_WINSOCK */
- if(WSAGetLastError() != WSAEINPROGRESS &&
- WSAGetLastError() != WSAEWOULDBLOCK) {
- close_socket(sockfd);
- return -1;
- }
-#endif
- /* error was only telling us that it would block */
- }
-
- /* wait(write) until connected or error */
- while(1) {
- int error = 0;
- socklen_t len = (socklen_t)sizeof(error);
-
- if(!ldns_sock_wait(sockfd, timeout, 1)) {
- close_socket(sockfd);
- return -1;
- }
-
- /* check if there is a pending error for nonblocking connect */
- if(getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (void*)&error,
- &len) < 0) {
-#ifndef USE_WINSOCK
- error = errno; /* on solaris errno is error */
-#else
- error = WSAGetLastError();
-#endif
- }
-#ifndef USE_WINSOCK
-#if defined(EINPROGRESS) && defined(EWOULDBLOCK)
- if(error == EINPROGRESS || error == EWOULDBLOCK)
- continue; /* try again */
-#endif
- else if(error != 0) {
- close_socket(sockfd);
- /* error in errno for our user */
- errno = error;
- return -1;
- }
-#else /* USE_WINSOCK */
- if(error == WSAEINPROGRESS)
- continue;
- else if(error == WSAEWOULDBLOCK)
- continue;
- else if(error != 0) {
- close_socket(sockfd);
- errno = error;
- return -1;
- }
-#endif /* USE_WINSOCK */
- /* connected */
- break;
- }
-
- /* set the socket blocking again */
- ldns_sock_block(sockfd);
-
- return sockfd;
-}
-
-int
-ldns_tcp_connect(const struct sockaddr_storage *to, socklen_t tolen,
- struct timeval timeout)
-{
- int s = ldns_tcp_connect_from(to, tolen, NULL, 0, timeout);
- return s > 0 ? s : 0;
-}
-
-int
-ldns_tcp_connect2(const struct sockaddr_storage *to, socklen_t tolen,
- struct timeval timeout)
-{
- return ldns_tcp_connect_from(to, tolen, NULL, 0, timeout);
-}
-
-static int
-ldns_tcp_bgsend_from(ldns_buffer *qbin,
- const struct sockaddr_storage *to, socklen_t tolen,
- const struct sockaddr_storage *from, socklen_t fromlen,
- struct timeval timeout)
-{
- int sockfd;
-
- sockfd = ldns_tcp_connect_from(to, tolen, from, fromlen, timeout);
-
- if (sockfd >= 0 && ldns_tcp_send_query(qbin, sockfd, to, tolen) == 0) {
- close_socket(sockfd);
- return -1;
- }
-
- return sockfd;
-}
-
-int
-ldns_tcp_bgsend(ldns_buffer *qbin,
- const struct sockaddr_storage *to, socklen_t tolen,
- struct timeval timeout)
-{
- int s = ldns_tcp_bgsend_from(qbin, to, tolen, NULL, 0, timeout);
- return s > 0 ? s : 0;
-}
-
-int
-ldns_tcp_bgsend2(ldns_buffer *qbin,
- const struct sockaddr_storage *to, socklen_t tolen,
- struct timeval timeout)
-{
- return ldns_tcp_bgsend_from(qbin, to, tolen, NULL, 0, timeout);
-}
-
-/* keep in mind that in DNS tcp messages the first 2 bytes signal the
- * amount data to expect
- */
-static ldns_status
-ldns_tcp_send_from(uint8_t **result, ldns_buffer *qbin,
- const struct sockaddr_storage *to, socklen_t tolen,
- const struct sockaddr_storage *from, socklen_t fromlen,
- struct timeval timeout, size_t *answer_size)
-{
- int sockfd;
- uint8_t *answer;
-
- sockfd = ldns_tcp_bgsend_from(qbin, to, tolen, from, fromlen, timeout);
-
- if (sockfd == -1) {
- return LDNS_STATUS_ERR;
- }
-
- answer = ldns_tcp_read_wire_timeout(sockfd, answer_size, timeout);
- close_socket(sockfd);
-
- if (!answer) {
- /* oops */
- return LDNS_STATUS_NETWORK_ERR;
- }
-
- *result = answer;
- return LDNS_STATUS_OK;
-}
-
-ldns_status
-ldns_tcp_send(uint8_t **result, ldns_buffer *qbin,
- const struct sockaddr_storage *to, socklen_t tolen,
- struct timeval timeout, size_t *answer_size)
-{
- return ldns_tcp_send_from(result, qbin,
- to, tolen, NULL, 0, timeout, answer_size);
-}
-
-int
-ldns_udp_connect(const struct sockaddr_storage *to, struct timeval ATTR_UNUSED(timeout))
-{
- int sockfd;
-
-#ifndef S_SPLINT_S
- if ((sockfd = socket((int)((struct sockaddr*)to)->sa_family, SOCK_DGRAM,
- IPPROTO_UDP))
- == SOCK_INVALID) {
- return 0;
- }
-#endif
- return sockfd;
-}
-
-int
-ldns_udp_connect2(const struct sockaddr_storage *to, struct timeval ATTR_UNUSED(timeout))
-{
- int sockfd;
-
-#ifndef S_SPLINT_S
- if ((sockfd = socket((int)((struct sockaddr*)to)->sa_family, SOCK_DGRAM,
- IPPROTO_UDP))
- == SOCK_INVALID) {
- return -1;
- }
-#endif
- return sockfd;
-}
-
-static int
-ldns_udp_bgsend_from(ldns_buffer *qbin,
- const struct sockaddr_storage *to , socklen_t tolen,
- const struct sockaddr_storage *from, socklen_t fromlen,
- struct timeval timeout)
-{
- int sockfd;
-
- sockfd = ldns_udp_connect2(to, timeout);
-
- if (sockfd == -1) {
- return -1;
- }
-
- if (from && bind(sockfd, (const struct sockaddr*)from, fromlen) == -1){
- close_socket(sockfd);
- return -1;
- }
-
- if (ldns_udp_send_query(qbin, sockfd, to, tolen) == 0) {
- close_socket(sockfd);
- return -1;
- }
- return sockfd;
-}
-
-int
-ldns_udp_bgsend(ldns_buffer *qbin,
- const struct sockaddr_storage *to , socklen_t tolen,
- struct timeval timeout)
-{
- int s = ldns_udp_bgsend_from(qbin, to, tolen, NULL, 0, timeout);
- return s > 0 ? s : 0;
-}
-
-int
-ldns_udp_bgsend2(ldns_buffer *qbin,
- const struct sockaddr_storage *to , socklen_t tolen,
- struct timeval timeout)
-{
- return ldns_udp_bgsend_from(qbin, to, tolen, NULL, 0, timeout);
-}
-
-static ldns_status
-ldns_udp_send_from(uint8_t **result, ldns_buffer *qbin,
- const struct sockaddr_storage *to , socklen_t tolen,
- const struct sockaddr_storage *from, socklen_t fromlen,
- struct timeval timeout, size_t *answer_size)
-{
- int sockfd;
- uint8_t *answer;
-
- sockfd = ldns_udp_bgsend_from(qbin, to, tolen, from, fromlen, timeout);
-
- if (sockfd == -1) {
- return LDNS_STATUS_SOCKET_ERROR;
- }
-
- /* wait for an response*/
- if(!ldns_sock_wait(sockfd, timeout, 0)) {
- close_socket(sockfd);
- return LDNS_STATUS_NETWORK_ERR;
- }
-
- /* set to nonblocking, so if the checksum is bad, it becomes
- * an EGAIN error and the ldns_udp_send function does not block,
- * but returns a 'NETWORK_ERROR' much like a timeout. */
- ldns_sock_nonblock(sockfd);
-
- answer = ldns_udp_read_wire(sockfd, answer_size, NULL, NULL);
- close_socket(sockfd);
-
- if (!answer) {
- /* oops */
- return LDNS_STATUS_NETWORK_ERR;
- }
-
- *result = answer;
- return LDNS_STATUS_OK;
-}
-
-ldns_status
-ldns_udp_send(uint8_t **result, ldns_buffer *qbin,
- const struct sockaddr_storage *to , socklen_t tolen,
- struct timeval timeout, size_t *answer_size)
-{
- return ldns_udp_send_from(result, qbin, to, tolen, NULL, 0,
- timeout, answer_size);
-}
-
-ldns_status
-ldns_send_buffer(ldns_pkt **result, ldns_resolver *r, ldns_buffer *qb, ldns_rdf *tsig_mac)
-{
- uint8_t i;
-
- struct sockaddr_storage *src = NULL;
- size_t src_len = 0;
- struct sockaddr_storage *ns;
- size_t ns_len;
- struct timeval tv_s;
- struct timeval tv_e;
-
- ldns_rdf **ns_array;
- size_t *rtt;
- ldns_pkt *reply;
- bool all_servers_rtt_inf;
- uint8_t retries;
-
- uint8_t *reply_bytes = NULL;
- size_t reply_size = 0;
- ldns_status status, send_status;
-
- assert(r != NULL);
-
- status = LDNS_STATUS_OK;
- rtt = ldns_resolver_rtt(r);
- ns_array = ldns_resolver_nameservers(r);
- reply = NULL;
- ns_len = 0;
-
- all_servers_rtt_inf = true;
-
- if (ldns_resolver_random(r)) {
- ldns_resolver_nameservers_randomize(r);
- }
-
- if(ldns_resolver_source(r)) {
- src = ldns_rdf2native_sockaddr_storage_port(
- ldns_resolver_source(r), 0, &src_len);
- }
-
- /* loop through all defined nameservers */
- for (i = 0; i < ldns_resolver_nameserver_count(r); i++) {
- if (rtt[i] == LDNS_RESOLV_RTT_INF) {
- /* not reachable nameserver! */
- continue;
- }
-
- /* maybe verbosity setting?
- printf("Sending to ");
- ldns_rdf_print(stdout, ns_array[i]);
- printf("\n");
- */
- ns = ldns_rdf2native_sockaddr_storage(ns_array[i],
- ldns_resolver_port(r), &ns_len);
-
-
-#ifndef S_SPLINT_S
- if ((ns->ss_family == AF_INET) &&
- (ldns_resolver_ip6(r) == LDNS_RESOLV_INET6)) {
- /* not reachable */
- LDNS_FREE(ns);
- continue;
- }
-
- if ((ns->ss_family == AF_INET6) &&
- (ldns_resolver_ip6(r) == LDNS_RESOLV_INET)) {
- /* not reachable */
- LDNS_FREE(ns);
- continue;
- }
-#endif
-
- all_servers_rtt_inf = false;
-
- gettimeofday(&tv_s, NULL);
-
- send_status = LDNS_STATUS_ERR;
-
- /* reply_bytes implicitly handles our error */
- if (ldns_resolver_usevc(r)) {
- for (retries = ldns_resolver_retry(r); retries > 0; retries--) {
- send_status =
- ldns_tcp_send_from(&reply_bytes, qb,
- ns, (socklen_t)ns_len,
- src, (socklen_t)src_len,
- ldns_resolver_timeout(r),
- &reply_size);
- if (send_status == LDNS_STATUS_OK) {
- break;
- }
- }
- } else {
- for (retries = ldns_resolver_retry(r); retries > 0; retries--) {
- /* ldns_rdf_print(stdout, ns_array[i]); */
- send_status =
- ldns_udp_send_from(&reply_bytes, qb,
- ns, (socklen_t)ns_len,
- src, (socklen_t)src_len,
- ldns_resolver_timeout(r),
- &reply_size);
- if (send_status == LDNS_STATUS_OK) {
- break;
- }
- }
- }
-
- if (send_status != LDNS_STATUS_OK) {
- ldns_resolver_set_nameserver_rtt(r, i, LDNS_RESOLV_RTT_INF);
- status = send_status;
- }
-
- /* obey the fail directive */
- if (!reply_bytes) {
- /* the current nameserver seems to have a problem, blacklist it */
- if (ldns_resolver_fail(r)) {
- if(src) {
- LDNS_FREE(src);
- }
- LDNS_FREE(ns);
- return LDNS_STATUS_ERR;
- } else {
- LDNS_FREE(ns);
- continue;
- }
- }
-
- status = ldns_wire2pkt(&reply, reply_bytes, reply_size);
- if (status != LDNS_STATUS_OK) {
- if(src) LDNS_FREE(src);
- LDNS_FREE(reply_bytes);
- LDNS_FREE(ns);
- return status;
- }
- assert(reply);
-
- LDNS_FREE(ns);
- gettimeofday(&tv_e, NULL);
-
- if (reply) {
- ldns_pkt_set_querytime(reply, (uint32_t)
- ((tv_e.tv_sec - tv_s.tv_sec) * 1000) +
- (tv_e.tv_usec - tv_s.tv_usec) / 1000);
- ldns_pkt_set_answerfrom(reply,
- ldns_rdf_clone(ns_array[i]));
- ldns_pkt_set_timestamp(reply, tv_s);
- ldns_pkt_set_size(reply, reply_size);
- break;
- } else {
- if (ldns_resolver_fail(r)) {
- /* if fail is set bail out, after the first
- * one */
- break;
- }
- }
-
- /* wait retrans seconds... */
- sleep((unsigned int) ldns_resolver_retrans(r));
- }
-
- if(src) {
- LDNS_FREE(src);
- }
- if (all_servers_rtt_inf) {
- LDNS_FREE(reply_bytes);
- return LDNS_STATUS_RES_NO_NS;
- }
-#ifdef HAVE_SSL
- if (tsig_mac && reply && reply_bytes) {
- if (!ldns_pkt_tsig_verify(reply,
- reply_bytes,
- reply_size,
- ldns_resolver_tsig_keyname(r),
- ldns_resolver_tsig_keydata(r), tsig_mac)) {
- status = LDNS_STATUS_CRYPTO_TSIG_BOGUS;
- }
- }
-#else
- (void)tsig_mac;
-#endif /* HAVE_SSL */
-
- LDNS_FREE(reply_bytes);
- if (result) {
- *result = reply;
- }
-
- return status;
-}
-
-ssize_t
-ldns_tcp_send_query(ldns_buffer *qbin, int sockfd,
- const struct sockaddr_storage *to, socklen_t tolen)
-{
- uint8_t *sendbuf;
- ssize_t bytes;
-
- /* add length of packet */
- sendbuf = LDNS_XMALLOC(uint8_t, ldns_buffer_position(qbin) + 2);
- if(!sendbuf) return 0;
- ldns_write_uint16(sendbuf, ldns_buffer_position(qbin));
- memcpy(sendbuf + 2, ldns_buffer_begin(qbin), ldns_buffer_position(qbin));
-
- bytes = sendto(sockfd, (void*)sendbuf,
- ldns_buffer_position(qbin) + 2, 0, (struct sockaddr *)to, tolen);
-
- LDNS_FREE(sendbuf);
-
- if (bytes == -1 || (size_t) bytes != ldns_buffer_position(qbin) + 2 ) {
- return 0;
- }
- return bytes;
-}
-
-/* don't wait for an answer */
-ssize_t
-ldns_udp_send_query(ldns_buffer *qbin, int sockfd, const struct sockaddr_storage *to,
- socklen_t tolen)
-{
- ssize_t bytes;
-
- bytes = sendto(sockfd, (void*)ldns_buffer_begin(qbin),
- ldns_buffer_position(qbin), 0, (struct sockaddr *)to, tolen);
-
- if (bytes == -1 || (size_t)bytes != ldns_buffer_position(qbin)) {
- return 0;
- }
- return bytes;
-}
-
-uint8_t *
-ldns_udp_read_wire(int sockfd, size_t *size, struct sockaddr_storage *from,
- socklen_t *fromlen)
-{
- uint8_t *wire, *wireout;
- ssize_t wire_size;
-
- wire = LDNS_XMALLOC(uint8_t, LDNS_MAX_PACKETLEN);
- if (!wire) {
- *size = 0;
- return NULL;
- }
-
- wire_size = recvfrom(sockfd, (void*)wire, LDNS_MAX_PACKETLEN, 0,
- (struct sockaddr *)from, fromlen);
-
- /* recvfrom can also return 0 */
- if (wire_size == -1 || wire_size == 0) {
- *size = 0;
- LDNS_FREE(wire);
- return NULL;
- }
-
- *size = (size_t)wire_size;
- wireout = LDNS_XREALLOC(wire, uint8_t, (size_t)wire_size);
- if(!wireout) LDNS_FREE(wire);
-
- return wireout;
-}
-
-uint8_t *
-ldns_tcp_read_wire_timeout(int sockfd, size_t *size, struct timeval timeout)
-{
- uint8_t *wire;
- uint16_t wire_size;
- ssize_t bytes = 0, rc = 0;
-
- wire = LDNS_XMALLOC(uint8_t, 2);
- if (!wire) {
- *size = 0;
- return NULL;
- }
-
- while (bytes < 2) {
- if(!ldns_sock_wait(sockfd, timeout, 0)) {
- *size = 0;
- LDNS_FREE(wire);
- return NULL;
- }
- rc = recv(sockfd, (void*) (wire + bytes),
- (size_t) (2 - bytes), 0);
- if (rc == -1 || rc == 0) {
- *size = 0;
- LDNS_FREE(wire);
- return NULL;
- }
- bytes += rc;
- }
-
- wire_size = ldns_read_uint16(wire);
-
- LDNS_FREE(wire);
- wire = LDNS_XMALLOC(uint8_t, wire_size);
- if (!wire) {
- *size = 0;
- return NULL;
- }
- bytes = 0;
-
- while (bytes < (ssize_t) wire_size) {
- if(!ldns_sock_wait(sockfd, timeout, 0)) {
- *size = 0;
- LDNS_FREE(wire);
- return NULL;
- }
- rc = recv(sockfd, (void*) (wire + bytes),
- (size_t) (wire_size - bytes), 0);
- if (rc == -1 || rc == 0) {
- LDNS_FREE(wire);
- *size = 0;
- return NULL;
- }
- bytes += rc;
- }
-
- *size = (size_t) bytes;
- return wire;
-}
-
-uint8_t *
-ldns_tcp_read_wire(int sockfd, size_t *size)
-{
- uint8_t *wire;
- uint16_t wire_size;
- ssize_t bytes = 0, rc = 0;
-
- wire = LDNS_XMALLOC(uint8_t, 2);
- if (!wire) {
- *size = 0;
- return NULL;
- }
-
- while (bytes < 2) {
- rc = recv(sockfd, (void*) (wire + bytes),
- (size_t) (2 - bytes), 0);
- if (rc == -1 || rc == 0) {
- *size = 0;
- LDNS_FREE(wire);
- return NULL;
- }
- bytes += rc;
- }
-
- wire_size = ldns_read_uint16(wire);
-
- LDNS_FREE(wire);
- wire = LDNS_XMALLOC(uint8_t, wire_size);
- if (!wire) {
- *size = 0;
- return NULL;
- }
- bytes = 0;
-
- while (bytes < (ssize_t) wire_size) {
- rc = recv(sockfd, (void*) (wire + bytes),
- (size_t) (wire_size - bytes), 0);
- if (rc == -1 || rc == 0) {
- LDNS_FREE(wire);
- *size = 0;
- return NULL;
- }
- bytes += rc;
- }
-
- *size = (size_t) bytes;
- return wire;
-}
-
-#ifndef S_SPLINT_S
-ldns_rdf *
-ldns_sockaddr_storage2rdf(const struct sockaddr_storage *sock, uint16_t *port)
-{
- ldns_rdf *addr;
- struct sockaddr_in *data_in;
- struct sockaddr_in6 *data_in6;
-
- switch(sock->ss_family) {
- case AF_INET:
- data_in = (struct sockaddr_in*)sock;
- if (port) {
- *port = ntohs((uint16_t)data_in->sin_port);
- }
- addr = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_A,
- LDNS_IP4ADDRLEN, &data_in->sin_addr);
- break;
- case AF_INET6:
- data_in6 = (struct sockaddr_in6*)sock;
- if (port) {
- *port = ntohs((uint16_t)data_in6->sin6_port);
- }
- addr = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_AAAA,
- LDNS_IP6ADDRLEN, &data_in6->sin6_addr);
- break;
- default:
- if (port) {
- *port = 0;
- }
- return NULL;
- }
- return addr;
-}
-#endif
-
-/* code from resolver.c */
-ldns_status
-ldns_axfr_start(ldns_resolver *resolver, const ldns_rdf *domain, ldns_rr_class class)
-{
- ldns_pkt *query;
- ldns_buffer *query_wire;
-
- struct sockaddr_storage *src = NULL;
- size_t src_len = 0;
- struct sockaddr_storage *ns = NULL;
- size_t ns_len = 0;
- size_t ns_i;
- ldns_status status;
-
- if (!resolver || ldns_resolver_nameserver_count(resolver) < 1) {
- return LDNS_STATUS_ERR;
- }
-
- query = ldns_pkt_query_new(ldns_rdf_clone(domain), LDNS_RR_TYPE_AXFR, class, 0);
-
- if (!query) {
- return LDNS_STATUS_ADDRESS_ERR;
- }
- if(ldns_resolver_source(resolver)) {
- src = ldns_rdf2native_sockaddr_storage_port(
- ldns_resolver_source(resolver), 0, &src_len);
- }
- /* For AXFR, we have to make the connection ourselves */
- /* try all nameservers (which usually would mean v4 fallback if
- * @hostname is used */
- for (ns_i = 0;
- ns_i < ldns_resolver_nameserver_count(resolver) &&
- resolver->_socket == SOCK_INVALID;
- ns_i++) {
- if (ns != NULL) {
- LDNS_FREE(ns);
- }
- ns = ldns_rdf2native_sockaddr_storage(
- resolver->_nameservers[ns_i],
- ldns_resolver_port(resolver), &ns_len);
-#ifndef S_SPLINT_S
- if ((ns->ss_family == AF_INET) &&
- (ldns_resolver_ip6(resolver) == LDNS_RESOLV_INET6)) {
- /* not reachable */
- LDNS_FREE(ns);
- ns = NULL;
- continue;
- }
-
- if ((ns->ss_family == AF_INET6) &&
- (ldns_resolver_ip6(resolver) == LDNS_RESOLV_INET)) {
- /* not reachable */
- LDNS_FREE(ns);
- ns = NULL;
- continue;
- }
-#endif
-
- resolver->_socket = ldns_tcp_connect_from(
- ns, (socklen_t)ns_len,
- src, (socklen_t)src_len,
- ldns_resolver_timeout(resolver));
- }
- if (src) {
- LDNS_FREE(src);
- }
-
- if (resolver->_socket == SOCK_INVALID) {
- ldns_pkt_free(query);
- LDNS_FREE(ns);
- return LDNS_STATUS_NETWORK_ERR;
- }
-
-#ifdef HAVE_SSL
- if (ldns_resolver_tsig_keyname(resolver) && ldns_resolver_tsig_keydata(resolver)) {
- status = ldns_pkt_tsig_sign(query,
- ldns_resolver_tsig_keyname(resolver),
- ldns_resolver_tsig_keydata(resolver),
- 300, ldns_resolver_tsig_algorithm(resolver), NULL);
- if (status != LDNS_STATUS_OK) {
- /* to prevent problems on subsequent calls to
- * ldns_axfr_start we have to close the socket here! */
- close_socket(resolver->_socket);
- resolver->_socket = 0;
-
- ldns_pkt_free(query);
- LDNS_FREE(ns);
-
- return LDNS_STATUS_CRYPTO_TSIG_ERR;
- }
- }
-#endif /* HAVE_SSL */
-
- /* Convert the query to a buffer
- * Is this necessary?
- */
- query_wire = ldns_buffer_new(LDNS_MAX_PACKETLEN);
- if(!query_wire) {
- ldns_pkt_free(query);
- LDNS_FREE(ns);
-
- close_socket(resolver->_socket);
-
- return LDNS_STATUS_MEM_ERR;
- }
- status = ldns_pkt2buffer_wire(query_wire, query);
- if (status != LDNS_STATUS_OK) {
- ldns_pkt_free(query);
- ldns_buffer_free(query_wire);
- LDNS_FREE(ns);
-
- /* to prevent problems on subsequent calls to ldns_axfr_start
- * we have to close the socket here! */
- close_socket(resolver->_socket);
- resolver->_socket = 0;
-
- return status;
- }
- /* Send the query */
- if (ldns_tcp_send_query(query_wire, resolver->_socket, ns,
- (socklen_t)ns_len) == 0) {
- ldns_pkt_free(query);
- ldns_buffer_free(query_wire);
- LDNS_FREE(ns);
-
- /* to prevent problems on subsequent calls to ldns_axfr_start
- * we have to close the socket here! */
-
-
- close_socket(resolver->_socket);
-
- return LDNS_STATUS_NETWORK_ERR;
- }
-
- ldns_pkt_free(query);
- ldns_buffer_free(query_wire);
- LDNS_FREE(ns);
-
- /*
- * The AXFR is done once the second SOA record is sent
- */
- resolver->_axfr_soa_count = 0;
- return LDNS_STATUS_OK;
-}
diff --git a/ldns/packaging/ldns-config.in b/ldns/packaging/ldns-config.in
deleted file mode 100755
index f147920..0000000
--- a/ldns/packaging/ldns-config.in
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/sh
-
-VERSION="@PACKAGE_VERSION@"
-LDFLAGS="@LDFLAGS@ @LIBSSL_LDFLAGS@ @PYTHON_LDFLAGS@"
-LIBS="@LIBS@ @LIBSSL_LIBS@"
-LIBDIR="@libdir@"
-INCLUDEDIR="@includedir@"
-LIBVERSION="@VERSION_INFO@"
-
-for arg in $@
-do
- if [ $arg = "--cflags" ]
- then
- echo "-I${INCLUDEDIR}"
- fi
- if [ $arg = "--libs" ]
- then
- echo "${LDFLAGS} -L${LIBDIR} ${LIBS} -lldns"
- fi
- if [ $arg = "-h" ] || [ $arg = "--help" ]
- then
- echo "Usage: $0 [--cflags] [--libs] [--version]"
- fi
- if [ $arg = "--version" ]
- then
- echo "${VERSION}"
- fi
- if [ $arg = "--libversion" ]
- then
- echo "${LIBVERSION}"
- fi
-done
diff --git a/ldns/packaging/libldns.pc.in b/ldns/packaging/libldns.pc.in
deleted file mode 100644
index 923b688..0000000
--- a/ldns/packaging/libldns.pc.in
+++ /dev/null
@@ -1,13 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: ldns
-Description: Library for DNS programming
-URL: http://www.nlnetlabs.nl/projects/ldns
-Version: @PACKAGE_VERSION@
-Requires:
-Libs: -L${libdir} -lldns
-Libs.private: @LDFLAGS@
-Cflags: -I${includedir}
diff --git a/ldns/packet.c b/ldns/packet.c
deleted file mode 100644
index a57e190..0000000
--- a/ldns/packet.c
+++ /dev/null
@@ -1,1176 +0,0 @@
-/*
- * packet.c
- *
- * dns packet implementation
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2004-2006
- *
- * See the file LICENSE for the license
- */
-
-#include <ldns/config.h>
-
-#include <ldns/ldns.h>
-
-#include <strings.h>
-#include <limits.h>
-
-#ifdef HAVE_SSL
-#include <openssl/rand.h>
-#endif
-
-/* Access functions
- * do this as functions to get type checking
- */
-
-#define LDNS_EDNS_MASK_DO_BIT 0x8000
-#define LDNS_EDNS_MASK_UNASSIGNED (0xFFFF & ~LDNS_EDNS_MASK_DO_BIT)
-
-/* TODO defines for 3600 */
-/* convert to and from numerical flag values */
-ldns_lookup_table ldns_edns_flags[] = {
- { 3600, "do"},
- { 0, NULL}
-};
-
-/* read */
-uint16_t
-ldns_pkt_id(const ldns_pkt *packet)
-{
- return packet->_header->_id;
-}
-
-bool
-ldns_pkt_qr(const ldns_pkt *packet)
-{
- return packet->_header->_qr;
-}
-
-bool
-ldns_pkt_aa(const ldns_pkt *packet)
-{
- return packet->_header->_aa;
-}
-
-bool
-ldns_pkt_tc(const ldns_pkt *packet)
-{
- return packet->_header->_tc;
-}
-
-bool
-ldns_pkt_rd(const ldns_pkt *packet)
-{
- return packet->_header->_rd;
-}
-
-bool
-ldns_pkt_cd(const ldns_pkt *packet)
-{
- return packet->_header->_cd;
-}
-
-bool
-ldns_pkt_ra(const ldns_pkt *packet)
-{
- return packet->_header->_ra;
-}
-
-bool
-ldns_pkt_ad(const ldns_pkt *packet)
-{
- return packet->_header->_ad;
-}
-
-ldns_pkt_opcode
-ldns_pkt_get_opcode(const ldns_pkt *packet)
-{
- return packet->_header->_opcode;
-}
-
-ldns_pkt_rcode
-ldns_pkt_get_rcode(const ldns_pkt *packet)
-{
- return packet->_header->_rcode;
-}
-
-uint16_t
-ldns_pkt_qdcount(const ldns_pkt *packet)
-{
- return packet->_header->_qdcount;
-}
-
-uint16_t
-ldns_pkt_ancount(const ldns_pkt *packet)
-{
- return packet->_header->_ancount;
-}
-
-uint16_t
-ldns_pkt_nscount(const ldns_pkt *packet)
-{
- return packet->_header->_nscount;
-}
-
-uint16_t
-ldns_pkt_arcount(const ldns_pkt *packet)
-{
- return packet->_header->_arcount;
-}
-
-ldns_rr_list *
-ldns_pkt_question(const ldns_pkt *packet)
-{
- return packet->_question;
-}
-
-ldns_rr_list *
-ldns_pkt_answer(const ldns_pkt *packet)
-{
- return packet->_answer;
-}
-
-ldns_rr_list *
-ldns_pkt_authority(const ldns_pkt *packet)
-{
- return packet->_authority;
-}
-
-ldns_rr_list *
-ldns_pkt_additional(const ldns_pkt *packet)
-{
- return packet->_additional;
-}
-
-/* return ALL section concatenated */
-ldns_rr_list *
-ldns_pkt_all(const ldns_pkt *packet)
-{
- ldns_rr_list *all, *prev_all;
-
- all = ldns_rr_list_cat_clone(
- ldns_pkt_question(packet),
- ldns_pkt_answer(packet));
- prev_all = all;
- all = ldns_rr_list_cat_clone(all,
- ldns_pkt_authority(packet));
- ldns_rr_list_deep_free(prev_all);
- prev_all = all;
- all = ldns_rr_list_cat_clone(all,
- ldns_pkt_additional(packet));
- ldns_rr_list_deep_free(prev_all);
- return all;
-}
-
-ldns_rr_list *
-ldns_pkt_all_noquestion(const ldns_pkt *packet)
-{
- ldns_rr_list *all, *all2;
-
- all = ldns_rr_list_cat_clone(
- ldns_pkt_answer(packet),
- ldns_pkt_authority(packet));
- all2 = ldns_rr_list_cat_clone(all,
- ldns_pkt_additional(packet));
-
- ldns_rr_list_deep_free(all);
- return all2;
-}
-
-size_t
-ldns_pkt_size(const ldns_pkt *packet)
-{
- return packet->_size;
-}
-
-uint32_t
-ldns_pkt_querytime(const ldns_pkt *packet)
-{
- return packet->_querytime;
-}
-
-ldns_rdf *
-ldns_pkt_answerfrom(const ldns_pkt *packet)
-{
- return packet->_answerfrom;
-}
-
-struct timeval
-ldns_pkt_timestamp(const ldns_pkt *packet)
-{
- return packet->timestamp;
-}
-
-uint16_t
-ldns_pkt_edns_udp_size(const ldns_pkt *packet)
-{
- return packet->_edns_udp_size;
-}
-
-uint8_t
-ldns_pkt_edns_extended_rcode(const ldns_pkt *packet)
-{
- return packet->_edns_extended_rcode;
-}
-
-uint8_t
-ldns_pkt_edns_version(const ldns_pkt *packet)
-{
- return packet->_edns_version;
-}
-
-uint16_t
-ldns_pkt_edns_z(const ldns_pkt *packet)
-{
- return packet->_edns_z;
-}
-
-bool
-ldns_pkt_edns_do(const ldns_pkt *packet)
-{
- return (packet->_edns_z & LDNS_EDNS_MASK_DO_BIT);
-}
-
-void
-ldns_pkt_set_edns_do(ldns_pkt *packet, bool value)
-{
- if (value) {
- packet->_edns_z = packet->_edns_z | LDNS_EDNS_MASK_DO_BIT;
- } else {
- packet->_edns_z = packet->_edns_z & ~LDNS_EDNS_MASK_DO_BIT;
- }
-}
-
-uint16_t
-ldns_pkt_edns_unassigned(const ldns_pkt *packet)
-{
- return (packet->_edns_z & LDNS_EDNS_MASK_UNASSIGNED);
-}
-
-void
-ldns_pkt_set_edns_unassigned(ldns_pkt *packet, uint16_t value)
-{
- packet->_edns_z = (packet->_edns_z & ~LDNS_EDNS_MASK_UNASSIGNED)
- | (value & LDNS_EDNS_MASK_UNASSIGNED);
-}
-
-ldns_rdf *
-ldns_pkt_edns_data(const ldns_pkt *packet)
-{
- return packet->_edns_data;
-}
-
-/* return only those rr that share the ownername */
-ldns_rr_list *
-ldns_pkt_rr_list_by_name(const ldns_pkt *packet,
- const ldns_rdf *ownername,
- ldns_pkt_section sec)
-{
- ldns_rr_list *rrs;
- ldns_rr_list *ret;
- uint16_t i;
-
- if (!packet) {
- return NULL;
- }
-
- rrs = ldns_pkt_get_section_clone(packet, sec);
- ret = NULL;
-
- for(i = 0; i < ldns_rr_list_rr_count(rrs); i++) {
- if (ldns_dname_compare(ldns_rr_owner(
- ldns_rr_list_rr(rrs, i)),
- ownername) == 0) {
- /* owner names match */
- if (ret == NULL) {
- ret = ldns_rr_list_new();
- }
- ldns_rr_list_push_rr(ret,
- ldns_rr_clone(
- ldns_rr_list_rr(rrs, i))
- );
- }
- }
-
- ldns_rr_list_deep_free(rrs);
-
- return ret;
-}
-
-/* return only those rr that share a type */
-ldns_rr_list *
-ldns_pkt_rr_list_by_type(const ldns_pkt *packet,
- ldns_rr_type type,
- ldns_pkt_section sec)
-{
- ldns_rr_list *rrs;
- ldns_rr_list *new;
- uint16_t i;
-
- if(!packet) {
- return NULL;
- }
-
- rrs = ldns_pkt_get_section_clone(packet, sec);
- new = ldns_rr_list_new();
-
- for(i = 0; i < ldns_rr_list_rr_count(rrs); i++) {
- if (type == ldns_rr_get_type(ldns_rr_list_rr(rrs, i))) {
- /* types match */
- ldns_rr_list_push_rr(new,
- ldns_rr_clone(
- ldns_rr_list_rr(rrs, i))
- );
- }
- }
- ldns_rr_list_deep_free(rrs);
-
- if (ldns_rr_list_rr_count(new) == 0) {
- ldns_rr_list_free(new);
- return NULL;
- } else {
- return new;
- }
-}
-
-/* return only those rrs that share name and type */
-ldns_rr_list *
-ldns_pkt_rr_list_by_name_and_type(const ldns_pkt *packet,
- const ldns_rdf *ownername,
- ldns_rr_type type,
- ldns_pkt_section sec)
-{
- ldns_rr_list *rrs;
- ldns_rr_list *new;
- ldns_rr_list *ret;
- uint16_t i;
-
- if(!packet) {
- return NULL;
- }
-
- rrs = ldns_pkt_get_section_clone(packet, sec);
- new = ldns_rr_list_new();
- ret = NULL;
-
- for(i = 0; i < ldns_rr_list_rr_count(rrs); i++) {
- if (type == ldns_rr_get_type(ldns_rr_list_rr(rrs, i)) &&
- ldns_dname_compare(ldns_rr_owner(ldns_rr_list_rr(rrs, i)),
- ownername
- ) == 0
- ) {
- /* types match */
- ldns_rr_list_push_rr(new, ldns_rr_clone(ldns_rr_list_rr(rrs, i)));
- ret = new;
- }
- }
- ldns_rr_list_deep_free(rrs);
- if (!ret) {
- ldns_rr_list_free(new);
- }
- return ret;
-}
-
-bool
-ldns_pkt_rr(const ldns_pkt *pkt, ldns_pkt_section sec, const ldns_rr *rr)
-{
- bool result = false;
-
- switch (sec) {
- case LDNS_SECTION_QUESTION:
- return ldns_rr_list_contains_rr(ldns_pkt_question(pkt), rr);
- case LDNS_SECTION_ANSWER:
- return ldns_rr_list_contains_rr(ldns_pkt_answer(pkt), rr);
- case LDNS_SECTION_AUTHORITY:
- return ldns_rr_list_contains_rr(ldns_pkt_authority(pkt), rr);
- case LDNS_SECTION_ADDITIONAL:
- return ldns_rr_list_contains_rr(ldns_pkt_additional(pkt), rr);
- case LDNS_SECTION_ANY:
- result = ldns_rr_list_contains_rr(ldns_pkt_question(pkt), rr);
- /* fallthrough */
- case LDNS_SECTION_ANY_NOQUESTION:
- result = result
- || ldns_rr_list_contains_rr(ldns_pkt_answer(pkt), rr)
- || ldns_rr_list_contains_rr(ldns_pkt_authority(pkt), rr)
- || ldns_rr_list_contains_rr(ldns_pkt_additional(pkt), rr);
- }
-
- return result;
-}
-
-uint16_t
-ldns_pkt_section_count(const ldns_pkt *packet, ldns_pkt_section s)
-{
- switch(s) {
- case LDNS_SECTION_QUESTION:
- return ldns_pkt_qdcount(packet);
- case LDNS_SECTION_ANSWER:
- return ldns_pkt_ancount(packet);
- case LDNS_SECTION_AUTHORITY:
- return ldns_pkt_nscount(packet);
- case LDNS_SECTION_ADDITIONAL:
- return ldns_pkt_arcount(packet);
- case LDNS_SECTION_ANY:
- return ldns_pkt_qdcount(packet) +
- ldns_pkt_ancount(packet) +
- ldns_pkt_nscount(packet) +
- ldns_pkt_arcount(packet);
- case LDNS_SECTION_ANY_NOQUESTION:
- return ldns_pkt_ancount(packet) +
- ldns_pkt_nscount(packet) +
- ldns_pkt_arcount(packet);
- default:
- return 0;
- }
-}
-
-bool
-ldns_pkt_empty(ldns_pkt *p)
-{
- if (!p) {
- return true; /* NULL is empty? */
- }
- if (ldns_pkt_section_count(p, LDNS_SECTION_ANY) > 0) {
- return false;
- } else {
- return true;
- }
-}
-
-
-ldns_rr_list *
-ldns_pkt_get_section_clone(const ldns_pkt *packet, ldns_pkt_section s)
-{
- switch(s) {
- case LDNS_SECTION_QUESTION:
- return ldns_rr_list_clone(ldns_pkt_question(packet));
- case LDNS_SECTION_ANSWER:
- return ldns_rr_list_clone(ldns_pkt_answer(packet));
- case LDNS_SECTION_AUTHORITY:
- return ldns_rr_list_clone(ldns_pkt_authority(packet));
- case LDNS_SECTION_ADDITIONAL:
- return ldns_rr_list_clone(ldns_pkt_additional(packet));
- case LDNS_SECTION_ANY:
- /* these are already clones */
- return ldns_pkt_all(packet);
- case LDNS_SECTION_ANY_NOQUESTION:
- return ldns_pkt_all_noquestion(packet);
- default:
- return NULL;
- }
-}
-
-ldns_rr *ldns_pkt_tsig(const ldns_pkt *pkt) {
- return pkt->_tsig_rr;
-}
-
-/* write */
-void
-ldns_pkt_set_id(ldns_pkt *packet, uint16_t id)
-{
- packet->_header->_id = id;
-}
-
-void
-ldns_pkt_set_random_id(ldns_pkt *packet)
-{
- uint16_t rid = ldns_get_random();
- ldns_pkt_set_id(packet, rid);
-}
-
-
-void
-ldns_pkt_set_qr(ldns_pkt *packet, bool qr)
-{
- packet->_header->_qr = qr;
-}
-
-void
-ldns_pkt_set_aa(ldns_pkt *packet, bool aa)
-{
- packet->_header->_aa = aa;
-}
-
-void
-ldns_pkt_set_tc(ldns_pkt *packet, bool tc)
-{
- packet->_header->_tc = tc;
-}
-
-void
-ldns_pkt_set_rd(ldns_pkt *packet, bool rd)
-{
- packet->_header->_rd = rd;
-}
-
-void
-ldns_pkt_set_additional(ldns_pkt *p, ldns_rr_list *rr)
-{
- p->_additional = rr;
-}
-
-void
-ldns_pkt_set_question(ldns_pkt *p, ldns_rr_list *rr)
-{
- p->_question = rr;
-}
-
-void
-ldns_pkt_set_answer(ldns_pkt *p, ldns_rr_list *rr)
-{
- p->_answer = rr;
-}
-
-void
-ldns_pkt_set_authority(ldns_pkt *p, ldns_rr_list *rr)
-{
- p->_authority = rr;
-}
-
-void
-ldns_pkt_set_cd(ldns_pkt *packet, bool cd)
-{
- packet->_header->_cd = cd;
-}
-
-void
-ldns_pkt_set_ra(ldns_pkt *packet, bool ra)
-{
- packet->_header->_ra = ra;
-}
-
-void
-ldns_pkt_set_ad(ldns_pkt *packet, bool ad)
-{
- packet->_header->_ad = ad;
-}
-
-void
-ldns_pkt_set_opcode(ldns_pkt *packet, ldns_pkt_opcode opcode)
-{
- packet->_header->_opcode = opcode;
-}
-
-void
-ldns_pkt_set_rcode(ldns_pkt *packet, uint8_t rcode)
-{
- packet->_header->_rcode = rcode;
-}
-
-void
-ldns_pkt_set_qdcount(ldns_pkt *packet, uint16_t qdcount)
-{
- packet->_header->_qdcount = qdcount;
-}
-
-void
-ldns_pkt_set_ancount(ldns_pkt *packet, uint16_t ancount)
-{
- packet->_header->_ancount = ancount;
-}
-
-void
-ldns_pkt_set_nscount(ldns_pkt *packet, uint16_t nscount)
-{
- packet->_header->_nscount = nscount;
-}
-
-void
-ldns_pkt_set_arcount(ldns_pkt *packet, uint16_t arcount)
-{
- packet->_header->_arcount = arcount;
-}
-
-void
-ldns_pkt_set_querytime(ldns_pkt *packet, uint32_t time)
-{
- packet->_querytime = time;
-}
-
-void
-ldns_pkt_set_answerfrom(ldns_pkt *packet, ldns_rdf *answerfrom)
-{
- packet->_answerfrom = answerfrom;
-}
-
-void
-ldns_pkt_set_timestamp(ldns_pkt *packet, struct timeval timeval)
-{
- packet->timestamp.tv_sec = timeval.tv_sec;
- packet->timestamp.tv_usec = timeval.tv_usec;
-}
-
-void
-ldns_pkt_set_size(ldns_pkt *packet, size_t s)
-{
- packet->_size = s;
-}
-
-void
-ldns_pkt_set_edns_udp_size(ldns_pkt *packet, uint16_t s)
-{
- packet->_edns_udp_size = s;
-}
-
-void
-ldns_pkt_set_edns_extended_rcode(ldns_pkt *packet, uint8_t c)
-{
- packet->_edns_extended_rcode = c;
-}
-
-void
-ldns_pkt_set_edns_version(ldns_pkt *packet, uint8_t v)
-{
- packet->_edns_version = v;
-}
-
-void
-ldns_pkt_set_edns_z(ldns_pkt *packet, uint16_t z)
-{
- packet->_edns_z = z;
-}
-
-void
-ldns_pkt_set_edns_data(ldns_pkt *packet, ldns_rdf *data)
-{
- packet->_edns_data = data;
-}
-
-void
-ldns_pkt_set_section_count(ldns_pkt *packet, ldns_pkt_section s, uint16_t count)
-{
- switch(s) {
- case LDNS_SECTION_QUESTION:
- ldns_pkt_set_qdcount(packet, count);
- break;
- case LDNS_SECTION_ANSWER:
- ldns_pkt_set_ancount(packet, count);
- break;
- case LDNS_SECTION_AUTHORITY:
- ldns_pkt_set_nscount(packet, count);
- break;
- case LDNS_SECTION_ADDITIONAL:
- ldns_pkt_set_arcount(packet, count);
- break;
- case LDNS_SECTION_ANY:
- case LDNS_SECTION_ANY_NOQUESTION:
- break;
- }
-}
-
-void ldns_pkt_set_tsig(ldns_pkt *pkt, ldns_rr *rr)
-{
- pkt->_tsig_rr = rr;
-}
-
-bool
-ldns_pkt_push_rr(ldns_pkt *packet, ldns_pkt_section section, ldns_rr *rr)
-{
- switch(section) {
- case LDNS_SECTION_QUESTION:
- if (!ldns_rr_list_push_rr(ldns_pkt_question(packet), rr)) {
- return false;
- }
- ldns_pkt_set_qdcount(packet, ldns_pkt_qdcount(packet) + 1);
- break;
- case LDNS_SECTION_ANSWER:
- if (!ldns_rr_list_push_rr(ldns_pkt_answer(packet), rr)) {
- return false;
- }
- ldns_pkt_set_ancount(packet, ldns_pkt_ancount(packet) + 1);
- break;
- case LDNS_SECTION_AUTHORITY:
- if (!ldns_rr_list_push_rr(ldns_pkt_authority(packet), rr)) {
- return false;
- }
- ldns_pkt_set_nscount(packet, ldns_pkt_nscount(packet) + 1);
- break;
- case LDNS_SECTION_ADDITIONAL:
- if (!ldns_rr_list_push_rr(ldns_pkt_additional(packet), rr)) {
- return false;
- }
- ldns_pkt_set_arcount(packet, ldns_pkt_arcount(packet) + 1);
- break;
- case LDNS_SECTION_ANY:
- case LDNS_SECTION_ANY_NOQUESTION:
- /* shouldn't this error? */
- break;
- }
- return true;
-}
-
-bool
-ldns_pkt_safe_push_rr(ldns_pkt *pkt, ldns_pkt_section sec, ldns_rr *rr)
-{
-
- /* check to see if its there */
- if (ldns_pkt_rr(pkt, sec, rr)) {
- /* already there */
- return false;
- }
- return ldns_pkt_push_rr(pkt, sec, rr);
-}
-
-bool
-ldns_pkt_push_rr_list(ldns_pkt *p, ldns_pkt_section s, ldns_rr_list *list)
-{
- size_t i;
- for(i = 0; i < ldns_rr_list_rr_count(list); i++) {
- if (!ldns_pkt_push_rr(p, s, ldns_rr_list_rr(list, i))) {
- return false;
- }
- }
- return true;
-}
-
-bool
-ldns_pkt_safe_push_rr_list(ldns_pkt *p, ldns_pkt_section s, ldns_rr_list *list)
-{
- size_t i;
- for(i = 0; i < ldns_rr_list_rr_count(list); i++) {
- if (!ldns_pkt_safe_push_rr(p, s, ldns_rr_list_rr(list, i))) {
- return false;
- }
- }
- return true;
-}
-
-bool
-ldns_pkt_edns(const ldns_pkt *pkt) {
- return (ldns_pkt_edns_udp_size(pkt) > 0 ||
- ldns_pkt_edns_extended_rcode(pkt) > 0 ||
- ldns_pkt_edns_data(pkt) ||
- ldns_pkt_edns_do(pkt) ||
- pkt->_edns_present
- );
-}
-
-
-/* Create/destroy/convert functions
- */
-ldns_pkt *
-ldns_pkt_new(void)
-{
- ldns_pkt *packet;
- packet = LDNS_MALLOC(ldns_pkt);
- if (!packet) {
- return NULL;
- }
-
- packet->_header = LDNS_MALLOC(ldns_hdr);
- if (!packet->_header) {
- LDNS_FREE(packet);
- return NULL;
- }
-
- packet->_question = ldns_rr_list_new();
- packet->_answer = ldns_rr_list_new();
- packet->_authority = ldns_rr_list_new();
- packet->_additional = ldns_rr_list_new();
-
- /* default everything to false */
- ldns_pkt_set_qr(packet, false);
- ldns_pkt_set_aa(packet, false);
- ldns_pkt_set_tc(packet, false);
- ldns_pkt_set_rd(packet, false);
- ldns_pkt_set_ra(packet, false);
- ldns_pkt_set_ad(packet, false);
- ldns_pkt_set_cd(packet, false);
-
- ldns_pkt_set_opcode(packet, LDNS_PACKET_QUERY);
- ldns_pkt_set_rcode(packet, 0);
- ldns_pkt_set_id(packet, 0);
- ldns_pkt_set_size(packet, 0);
- ldns_pkt_set_querytime(packet, 0);
- memset(&packet->timestamp, 0, sizeof(packet->timestamp));
- ldns_pkt_set_answerfrom(packet, NULL);
- ldns_pkt_set_section_count(packet, LDNS_SECTION_QUESTION, 0);
- ldns_pkt_set_section_count(packet, LDNS_SECTION_ANSWER, 0);
- ldns_pkt_set_section_count(packet, LDNS_SECTION_AUTHORITY, 0);
- ldns_pkt_set_section_count(packet, LDNS_SECTION_ADDITIONAL, 0);
-
- ldns_pkt_set_edns_udp_size(packet, 0);
- ldns_pkt_set_edns_extended_rcode(packet, 0);
- ldns_pkt_set_edns_version(packet, 0);
- ldns_pkt_set_edns_z(packet, 0);
- ldns_pkt_set_edns_data(packet, NULL);
- packet->_edns_present = false;
-
- ldns_pkt_set_tsig(packet, NULL);
-
- return packet;
-}
-
-void
-ldns_pkt_free(ldns_pkt *packet)
-{
- if (packet) {
- LDNS_FREE(packet->_header);
- ldns_rr_list_deep_free(packet->_question);
- ldns_rr_list_deep_free(packet->_answer);
- ldns_rr_list_deep_free(packet->_authority);
- ldns_rr_list_deep_free(packet->_additional);
- ldns_rr_free(packet->_tsig_rr);
- ldns_rdf_deep_free(packet->_edns_data);
- ldns_rdf_deep_free(packet->_answerfrom);
- LDNS_FREE(packet);
- }
-}
-
-bool
-ldns_pkt_set_flags(ldns_pkt *packet, uint16_t flags)
-{
- if (!packet) {
- return false;
- }
- if ((flags & LDNS_QR) == LDNS_QR) {
- ldns_pkt_set_qr(packet, true);
- }
- if ((flags & LDNS_AA) == LDNS_AA) {
- ldns_pkt_set_aa(packet, true);
- }
- if ((flags & LDNS_RD) == LDNS_RD) {
- ldns_pkt_set_rd(packet, true);
- }
- if ((flags & LDNS_TC) == LDNS_TC) {
- ldns_pkt_set_tc(packet, true);
- }
- if ((flags & LDNS_CD) == LDNS_CD) {
- ldns_pkt_set_cd(packet, true);
- }
- if ((flags & LDNS_RA) == LDNS_RA) {
- ldns_pkt_set_ra(packet, true);
- }
- if ((flags & LDNS_AD) == LDNS_AD) {
- ldns_pkt_set_ad(packet, true);
- }
- return true;
-}
-
-
-static ldns_rr*
-ldns_pkt_authsoa(const ldns_rdf* rr_name, ldns_rr_class rr_class)
-{
- ldns_rr* soa_rr = ldns_rr_new();
- ldns_rdf *owner_rdf;
- ldns_rdf *mname_rdf;
- ldns_rdf *rname_rdf;
- ldns_rdf *serial_rdf;
- ldns_rdf *refresh_rdf;
- ldns_rdf *retry_rdf;
- ldns_rdf *expire_rdf;
- ldns_rdf *minimum_rdf;
-
- if (!soa_rr) {
- return NULL;
- }
- owner_rdf = ldns_rdf_clone(rr_name);
- if (!owner_rdf) {
- ldns_rr_free(soa_rr);
- return NULL;
- }
-
- ldns_rr_set_owner(soa_rr, owner_rdf);
- ldns_rr_set_type(soa_rr, LDNS_RR_TYPE_SOA);
- ldns_rr_set_class(soa_rr, rr_class);
- ldns_rr_set_question(soa_rr, false);
-
- if (ldns_str2rdf_dname(&mname_rdf, ".") != LDNS_STATUS_OK) {
- ldns_rr_free(soa_rr);
- return NULL;
- } else {
- ldns_rr_push_rdf(soa_rr, mname_rdf);
- }
- if (ldns_str2rdf_dname(&rname_rdf, ".") != LDNS_STATUS_OK) {
- ldns_rr_free(soa_rr);
- return NULL;
- } else {
- ldns_rr_push_rdf(soa_rr, rname_rdf);
- }
- serial_rdf = ldns_native2rdf_int32(LDNS_RDF_TYPE_INT32, 0);
- if (!serial_rdf) {
- ldns_rr_free(soa_rr);
- return NULL;
- } else {
- ldns_rr_push_rdf(soa_rr, serial_rdf);
- }
- refresh_rdf = ldns_native2rdf_int32(LDNS_RDF_TYPE_INT32, 0);
- if (!refresh_rdf) {
- ldns_rr_free(soa_rr);
- return NULL;
- } else {
- ldns_rr_push_rdf(soa_rr, refresh_rdf);
- }
- retry_rdf = ldns_native2rdf_int32(LDNS_RDF_TYPE_INT32, 0);
- if (!retry_rdf) {
- ldns_rr_free(soa_rr);
- return NULL;
- } else {
- ldns_rr_push_rdf(soa_rr, retry_rdf);
- }
- expire_rdf = ldns_native2rdf_int32(LDNS_RDF_TYPE_INT32, 0);
- if (!expire_rdf) {
- ldns_rr_free(soa_rr);
- return NULL;
- } else {
- ldns_rr_push_rdf(soa_rr, expire_rdf);
- }
- minimum_rdf = ldns_native2rdf_int32(LDNS_RDF_TYPE_INT32, 0);
- if (!minimum_rdf) {
- ldns_rr_free(soa_rr);
- return NULL;
- } else {
- ldns_rr_push_rdf(soa_rr, minimum_rdf);
- }
- return soa_rr;
-}
-
-
-static ldns_status
-ldns_pkt_query_new_frm_str_internal(ldns_pkt **p, const char *name,
- ldns_rr_type rr_type, ldns_rr_class rr_class, uint16_t flags,
- ldns_rr* authsoa_rr)
-{
- ldns_pkt *packet;
- ldns_rr *question_rr;
- ldns_rdf *name_rdf;
-
- packet = ldns_pkt_new();
- if (!packet) {
- return LDNS_STATUS_MEM_ERR;
- }
-
- if (!ldns_pkt_set_flags(packet, flags)) {
- ldns_pkt_free(packet);
- return LDNS_STATUS_ERR;
- }
-
- question_rr = ldns_rr_new();
- if (!question_rr) {
- ldns_pkt_free(packet);
- return LDNS_STATUS_MEM_ERR;
- }
-
- if (rr_type == 0) {
- rr_type = LDNS_RR_TYPE_A;
- }
- if (rr_class == 0) {
- rr_class = LDNS_RR_CLASS_IN;
- }
-
- if (ldns_str2rdf_dname(&name_rdf, name) == LDNS_STATUS_OK) {
- ldns_rr_set_owner(question_rr, name_rdf);
- ldns_rr_set_type(question_rr, rr_type);
- ldns_rr_set_class(question_rr, rr_class);
- ldns_rr_set_question(question_rr, true);
-
- ldns_pkt_push_rr(packet, LDNS_SECTION_QUESTION, question_rr);
- } else {
- ldns_rr_free(question_rr);
- ldns_pkt_free(packet);
- return LDNS_STATUS_ERR;
- }
-
- if (authsoa_rr) {
- ldns_pkt_push_rr(packet, LDNS_SECTION_AUTHORITY, authsoa_rr);
- }
-
- packet->_tsig_rr = NULL;
- ldns_pkt_set_answerfrom(packet, NULL);
- if (p) {
- *p = packet;
- return LDNS_STATUS_OK;
- } else {
- ldns_pkt_free(packet);
- return LDNS_STATUS_NULL;
- }
-}
-
-ldns_status
-ldns_pkt_query_new_frm_str(ldns_pkt **p, const char *name,
- ldns_rr_type rr_type, ldns_rr_class rr_class, uint16_t flags)
-{
- return ldns_pkt_query_new_frm_str_internal(p, name, rr_type,
- rr_class, flags, NULL);
-}
-
-ldns_status
-ldns_pkt_ixfr_request_new_frm_str(ldns_pkt **p, const char *name,
- ldns_rr_class rr_class, uint16_t flags, ldns_rr *soa)
-{
- ldns_rr* authsoa_rr = soa;
- if (!authsoa_rr) {
- ldns_rdf *name_rdf;
- if (ldns_str2rdf_dname(&name_rdf, name) == LDNS_STATUS_OK) {
- authsoa_rr = ldns_pkt_authsoa(name_rdf, rr_class);
- }
- ldns_rdf_free(name_rdf);
- }
- return ldns_pkt_query_new_frm_str_internal(p, name, LDNS_RR_TYPE_IXFR,
- rr_class, flags, authsoa_rr);
-}
-
-static ldns_pkt *
-ldns_pkt_query_new_internal(ldns_rdf *rr_name, ldns_rr_type rr_type,
- ldns_rr_class rr_class, uint16_t flags, ldns_rr* authsoa_rr)
-{
- ldns_pkt *packet;
- ldns_rr *question_rr;
-
- packet = ldns_pkt_new();
- if (!packet) {
- return NULL;
- }
-
- if (!ldns_pkt_set_flags(packet, flags)) {
- return NULL;
- }
-
- question_rr = ldns_rr_new();
- if (!question_rr) {
- ldns_pkt_free(packet);
- return NULL;
- }
-
- if (rr_type == 0) {
- rr_type = LDNS_RR_TYPE_A;
- }
- if (rr_class == 0) {
- rr_class = LDNS_RR_CLASS_IN;
- }
-
- ldns_rr_set_owner(question_rr, rr_name);
- ldns_rr_set_type(question_rr, rr_type);
- ldns_rr_set_class(question_rr, rr_class);
- ldns_rr_set_question(question_rr, true);
- ldns_pkt_push_rr(packet, LDNS_SECTION_QUESTION, question_rr);
-
- if (authsoa_rr) {
- ldns_pkt_push_rr(packet, LDNS_SECTION_AUTHORITY, authsoa_rr);
- }
-
- packet->_tsig_rr = NULL;
- return packet;
-}
-
-ldns_pkt *
-ldns_pkt_query_new(ldns_rdf *rr_name, ldns_rr_type rr_type,
- ldns_rr_class rr_class, uint16_t flags)
-{
- return ldns_pkt_query_new_internal(rr_name, rr_type,
- rr_class, flags, NULL);
-}
-
-ldns_pkt *
-ldns_pkt_ixfr_request_new(ldns_rdf *rr_name, ldns_rr_class rr_class,
- uint16_t flags, ldns_rr* soa)
-{
- ldns_rr* authsoa_rr = soa;
- if (!authsoa_rr) {
- authsoa_rr = ldns_pkt_authsoa(rr_name, rr_class);
- }
- return ldns_pkt_query_new_internal(rr_name, LDNS_RR_TYPE_IXFR,
- rr_class, flags, authsoa_rr);
-}
-
-ldns_pkt_type
-ldns_pkt_reply_type(const ldns_pkt *p)
-{
- ldns_rr_list *tmp;
-
- if (!p) {
- return LDNS_PACKET_UNKNOWN;
- }
-
- if (ldns_pkt_get_rcode(p) == LDNS_RCODE_NXDOMAIN) {
- return LDNS_PACKET_NXDOMAIN;
- }
-
- if (ldns_pkt_ancount(p) == 0 && ldns_pkt_arcount(p) == 0
- && ldns_pkt_nscount(p) == 1) {
-
- /* check for SOA */
- tmp = ldns_pkt_rr_list_by_type(p, LDNS_RR_TYPE_SOA,
- LDNS_SECTION_AUTHORITY);
- if (tmp) {
- ldns_rr_list_deep_free(tmp);
- return LDNS_PACKET_NODATA;
- } else {
- /* I have no idea ... */
- }
- }
-
- if (ldns_pkt_ancount(p) == 0 && ldns_pkt_nscount(p) > 0) {
- tmp = ldns_pkt_rr_list_by_type(p, LDNS_RR_TYPE_NS,
- LDNS_SECTION_AUTHORITY);
- if (tmp) {
- /* there are nameservers here */
- ldns_rr_list_deep_free(tmp);
- return LDNS_PACKET_REFERRAL;
- } else {
- /* I have no idea */
- }
- ldns_rr_list_deep_free(tmp);
- }
-
- /* if we cannot determine the packet type, we say it's an
- * answer...
- */
- return LDNS_PACKET_ANSWER;
-}
-
-ldns_pkt *
-ldns_pkt_clone(const ldns_pkt *pkt)
-{
- ldns_pkt *new_pkt;
-
- if (!pkt) {
- return NULL;
- }
- new_pkt = ldns_pkt_new();
-
- ldns_pkt_set_id(new_pkt, ldns_pkt_id(pkt));
- ldns_pkt_set_qr(new_pkt, ldns_pkt_qr(pkt));
- ldns_pkt_set_aa(new_pkt, ldns_pkt_aa(pkt));
- ldns_pkt_set_tc(new_pkt, ldns_pkt_tc(pkt));
- ldns_pkt_set_rd(new_pkt, ldns_pkt_rd(pkt));
- ldns_pkt_set_cd(new_pkt, ldns_pkt_cd(pkt));
- ldns_pkt_set_ra(new_pkt, ldns_pkt_ra(pkt));
- ldns_pkt_set_ad(new_pkt, ldns_pkt_ad(pkt));
- ldns_pkt_set_opcode(new_pkt, ldns_pkt_get_opcode(pkt));
- ldns_pkt_set_rcode(new_pkt, ldns_pkt_get_rcode(pkt));
- ldns_pkt_set_qdcount(new_pkt, ldns_pkt_qdcount(pkt));
- ldns_pkt_set_ancount(new_pkt, ldns_pkt_ancount(pkt));
- ldns_pkt_set_nscount(new_pkt, ldns_pkt_nscount(pkt));
- ldns_pkt_set_arcount(new_pkt, ldns_pkt_arcount(pkt));
- if (ldns_pkt_answerfrom(pkt))
- ldns_pkt_set_answerfrom(new_pkt,
- ldns_rdf_clone(ldns_pkt_answerfrom(pkt)));
- ldns_pkt_set_timestamp(new_pkt, ldns_pkt_timestamp(pkt));
- ldns_pkt_set_querytime(new_pkt, ldns_pkt_querytime(pkt));
- ldns_pkt_set_size(new_pkt, ldns_pkt_size(pkt));
- ldns_pkt_set_tsig(new_pkt, ldns_rr_clone(ldns_pkt_tsig(pkt)));
-
- ldns_pkt_set_edns_udp_size(new_pkt, ldns_pkt_edns_udp_size(pkt));
- ldns_pkt_set_edns_extended_rcode(new_pkt,
- ldns_pkt_edns_extended_rcode(pkt));
- ldns_pkt_set_edns_version(new_pkt, ldns_pkt_edns_version(pkt));
- new_pkt->_edns_present = pkt->_edns_present;
- ldns_pkt_set_edns_z(new_pkt, ldns_pkt_edns_z(pkt));
- if(ldns_pkt_edns_data(pkt))
- ldns_pkt_set_edns_data(new_pkt,
- ldns_rdf_clone(ldns_pkt_edns_data(pkt)));
- ldns_pkt_set_edns_do(new_pkt, ldns_pkt_edns_do(pkt));
-
- ldns_rr_list_deep_free(new_pkt->_question);
- ldns_rr_list_deep_free(new_pkt->_answer);
- ldns_rr_list_deep_free(new_pkt->_authority);
- ldns_rr_list_deep_free(new_pkt->_additional);
- new_pkt->_question = ldns_rr_list_clone(ldns_pkt_question(pkt));
- new_pkt->_answer = ldns_rr_list_clone(ldns_pkt_answer(pkt));
- new_pkt->_authority = ldns_rr_list_clone(ldns_pkt_authority(pkt));
- new_pkt->_additional = ldns_rr_list_clone(ldns_pkt_additional(pkt));
- return new_pkt;
-}
diff --git a/ldns/parse.c b/ldns/parse.c
deleted file mode 100644
index 947dbb8..0000000
--- a/ldns/parse.c
+++ /dev/null
@@ -1,438 +0,0 @@
-/*
- * a generic (simple) parser. Use to parse rr's, private key
- * information and /etc/resolv.conf files
- *
- * a Net::DNS like library for C
- * LibDNS Team @ NLnet Labs
- * (c) NLnet Labs, 2005-2006
- * See the file LICENSE for the license
- */
-#include <ldns/config.h>
-#include <ldns/ldns.h>
-
-#include <limits.h>
-#include <strings.h>
-
-ldns_lookup_table ldns_directive_types[] = {
- { LDNS_DIR_TTL, "$TTL" },
- { LDNS_DIR_ORIGIN, "$ORIGIN" },
- { LDNS_DIR_INCLUDE, "$INCLUDE" },
- { 0, NULL }
-};
-
-/* add max_limit here? */
-ssize_t
-ldns_fget_token(FILE *f, char *token, const char *delim, size_t limit)
-{
- return ldns_fget_token_l(f, token, delim, limit, NULL);
-}
-
-ssize_t
-ldns_fget_token_l(FILE *f, char *token, const char *delim, size_t limit, int *line_nr)
-{
- int c, prev_c;
- int p; /* 0 -> no parenthese seen, >0 nr of ( seen */
- int com, quoted;
- char *t;
- size_t i;
- const char *d;
- const char *del;
-
- /* standard delimeters */
- if (!delim) {
- /* from isspace(3) */
- del = LDNS_PARSE_NORMAL;
- } else {
- del = delim;
- }
-
- p = 0;
- i = 0;
- com = 0;
- quoted = 0;
- prev_c = 0;
- t = token;
- if (del[0] == '"') {
- quoted = 1;
- }
- while ((c = getc(f)) != EOF) {
- if (c == '\r') /* carriage return */
- c = ' ';
- if (c == '(' && prev_c != '\\' && !quoted) {
- /* this only counts for non-comments */
- if (com == 0) {
- p++;
- }
- prev_c = c;
- continue;
- }
-
- if (c == ')' && prev_c != '\\' && !quoted) {
- /* this only counts for non-comments */
- if (com == 0) {
- p--;
- }
- prev_c = c;
- continue;
- }
-
- if (p < 0) {
- /* more ) then ( - close off the string */
- *t = '\0';
- return 0;
- }
-
- /* do something with comments ; */
- if (c == ';' && quoted == 0) {
- if (prev_c != '\\') {
- com = 1;
- }
- }
- if (c == '\"' && com == 0 && prev_c != '\\') {
- quoted = 1 - quoted;
- }
-
- if (c == '\n' && com != 0) {
- /* comments */
- com = 0;
- *t = ' ';
- if (line_nr) {
- *line_nr = *line_nr + 1;
- }
- if (p == 0 && i > 0) {
- goto tokenread;
- } else {
- prev_c = c;
- continue;
- }
- }
-
- if (com == 1) {
- *t = ' ';
- prev_c = c;
- continue;
- }
-
- if (c == '\n' && p != 0 && t > token) {
- /* in parentheses */
- if (line_nr) {
- *line_nr = *line_nr + 1;
- }
- if (limit > 0 && (i >= limit || (size_t)(t-token) >= limit)) {
- *t = '\0';
- return -1;
- }
- *t++ = ' ';
- prev_c = c;
- continue;
- }
-
- /* check if we hit the delim */
- for (d = del; *d; d++) {
- if (c == *d && i > 0 && prev_c != '\\' && p == 0) {
- if (c == '\n' && line_nr) {
- *line_nr = *line_nr + 1;
- }
- goto tokenread;
- }
- }
- if (c != '\0' && c != '\n') {
- i++;
- }
- if (limit > 0 && (i >= limit || (size_t)(t-token) >= limit)) {
- *t = '\0';
- return -1;
- }
- if (c != '\0' && c != '\n') {
- *t++ = c;
- }
- if (c == '\\' && prev_c == '\\')
- prev_c = 0;
- else prev_c = c;
- }
- *t = '\0';
- if (c == EOF) {
- return (ssize_t)i;
- }
-
- if (i == 0) {
- /* nothing read */
- return -1;
- }
- if (p != 0) {
- return -1;
- }
- return (ssize_t)i;
-
-tokenread:
- if(*del == '"') /* do not skip over quotes, they are significant */
- ldns_fskipcs_l(f, del+1, line_nr);
- else ldns_fskipcs_l(f, del, line_nr);
- *t = '\0';
- if (p != 0) {
- return -1;
- }
-
- return (ssize_t)i;
-}
-
-ssize_t
-ldns_fget_keyword_data(FILE *f, const char *keyword, const char *k_del, char *data,
- const char *d_del, size_t data_limit)
-{
- return ldns_fget_keyword_data_l(f, keyword, k_del, data, d_del,
- data_limit, NULL);
-}
-
-ssize_t
-ldns_fget_keyword_data_l(FILE *f, const char *keyword, const char *k_del, char *data,
- const char *d_del, size_t data_limit, int *line_nr)
-{
- /* we assume: keyword|sep|data */
- char *fkeyword;
- ssize_t i;
-
- if(strlen(keyword) >= LDNS_MAX_KEYWORDLEN)
- return -1;
- fkeyword = LDNS_XMALLOC(char, LDNS_MAX_KEYWORDLEN);
- if(!fkeyword)
- return -1;
-
- i = ldns_fget_token(f, fkeyword, k_del, LDNS_MAX_KEYWORDLEN);
- if(i==0 || i==-1) {
- LDNS_FREE(fkeyword);
- return -1;
- }
-
- /* case??? i instead of strlen? */
- if (strncmp(fkeyword, keyword, LDNS_MAX_KEYWORDLEN - 1) == 0) {
- /* whee! */
- /* printf("%s\n%s\n", "Matching keyword", fkeyword); */
- i = ldns_fget_token_l(f, data, d_del, data_limit, line_nr);
- LDNS_FREE(fkeyword);
- return i;
- } else {
- /*printf("no match for %s (read: %s)\n", keyword, fkeyword);*/
- LDNS_FREE(fkeyword);
- return -1;
- }
-}
-
-
-ssize_t
-ldns_bget_token(ldns_buffer *b, char *token, const char *delim, size_t limit)
-{
- int c, lc;
- int p; /* 0 -> no parenthese seen, >0 nr of ( seen */
- int com, quoted;
- char *t;
- size_t i;
- const char *d;
- const char *del;
-
- /* standard delimiters */
- if (!delim) {
- /* from isspace(3) */
- del = LDNS_PARSE_NORMAL;
- } else {
- del = delim;
- }
-
- p = 0;
- i = 0;
- com = 0;
- quoted = 0;
- t = token;
- lc = 0;
- if (del[0] == '"') {
- quoted = 1;
- }
-
- while ((c = ldns_bgetc(b)) != EOF) {
- if (c == '\r') /* carriage return */
- c = ' ';
- if (c == '(' && lc != '\\' && !quoted) {
- /* this only counts for non-comments */
- if (com == 0) {
- p++;
- }
- lc = c;
- continue;
- }
-
- if (c == ')' && lc != '\\' && !quoted) {
- /* this only counts for non-comments */
- if (com == 0) {
- p--;
- }
- lc = c;
- continue;
- }
-
- if (p < 0) {
- /* more ) then ( */
- *t = '\0';
- return 0;
- }
-
- /* do something with comments ; */
- if (c == ';' && quoted == 0) {
- if (lc != '\\') {
- com = 1;
- }
- }
- if (c == '"' && com == 0 && lc != '\\') {
- quoted = 1 - quoted;
- }
-
- if (c == '\n' && com != 0) {
- /* comments */
- com = 0;
- *t = ' ';
- lc = c;
- continue;
- }
-
- if (com == 1) {
- *t = ' ';
- lc = c;
- continue;
- }
-
- if (c == '\n' && p != 0) {
- /* in parentheses */
- *t++ = ' ';
- lc = c;
- continue;
- }
-
- /* check if we hit the delim */
- for (d = del; *d; d++) {
- if (c == *d && lc != '\\' && p == 0) {
- goto tokenread;
- }
- }
-
- i++;
- if (limit > 0 && (i >= limit || (size_t)(t-token) >= limit)) {
- *t = '\0';
- return -1;
- }
- *t++ = c;
-
- if (c == '\\' && lc == '\\') {
- lc = 0;
- } else {
- lc = c;
- }
- }
- *t = '\0';
- if (i == 0) {
- /* nothing read */
- return -1;
- }
- if (p != 0) {
- return -1;
- }
- return (ssize_t)i;
-
-tokenread:
- if(*del == '"') /* do not skip over quotes, they are significant */
- ldns_bskipcs(b, del+1);
- else ldns_bskipcs(b, del);
- *t = '\0';
-
- if (p != 0) {
- return -1;
- }
- return (ssize_t)i;
-}
-
-
-void
-ldns_bskipcs(ldns_buffer *buffer, const char *s)
-{
- bool found;
- char c;
- const char *d;
-
- while(ldns_buffer_available_at(buffer, buffer->_position, sizeof(char))) {
- c = (char) ldns_buffer_read_u8_at(buffer, buffer->_position);
- found = false;
- for (d = s; *d; d++) {
- if (*d == c) {
- found = true;
- }
- }
- if (found && buffer->_limit > buffer->_position) {
- buffer->_position += sizeof(char);
- } else {
- return;
- }
- }
-}
-
-void
-ldns_fskipcs(FILE *fp, const char *s)
-{
- ldns_fskipcs_l(fp, s, NULL);
-}
-
-void
-ldns_fskipcs_l(FILE *fp, const char *s, int *line_nr)
-{
- bool found;
- int c;
- const char *d;
-
- while ((c = fgetc(fp)) != EOF) {
- if (line_nr && c == '\n') {
- *line_nr = *line_nr + 1;
- }
- found = false;
- for (d = s; *d; d++) {
- if (*d == c) {
- found = true;
- }
- }
- if (!found) {
- /* with getc, we've read too far */
- ungetc(c, fp);
- return;
- }
- }
-}
-
-ssize_t
-ldns_bget_keyword_data(ldns_buffer *b, const char *keyword, const char *k_del, char
-*data, const char *d_del, size_t data_limit)
-{
- /* we assume: keyword|sep|data */
- char *fkeyword;
- ssize_t i;
-
- if(strlen(keyword) >= LDNS_MAX_KEYWORDLEN)
- return -1;
- fkeyword = LDNS_XMALLOC(char, LDNS_MAX_KEYWORDLEN);
- if(!fkeyword)
- return -1; /* out of memory */
-
- i = ldns_bget_token(b, fkeyword, k_del, data_limit);
- if(i==0 || i==-1) {
- LDNS_FREE(fkeyword);
- return -1; /* nothing read */
- }
-
- /* case??? */
- if (strncmp(fkeyword, keyword, strlen(keyword)) == 0) {
- LDNS_FREE(fkeyword);
- /* whee, the match! */
- /* retrieve it's data */
- i = ldns_bget_token(b, data, d_del, 0);
- return i;
- } else {
- LDNS_FREE(fkeyword);
- return -1;
- }
-}
-
diff --git a/ldns/radix.c b/ldns/radix.c
deleted file mode 100644
index 9695e13..0000000
--- a/ldns/radix.c
+++ /dev/null
@@ -1,1593 +0,0 @@
-/*
- * radix.c -- generic radix tree
- *
- * Taken from NSD4, modified for ldns
- *
- * Copyright (c) 2012, NLnet Labs. All rights reserved.
- *
- * This software is open source.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * Neither the name of the NLNET LABS nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-/**
- * \file
- * Implementation of a radix tree.
- */
-
-#include <ldns/config.h>
-#include <ldns/radix.h>
-#include <ldns/util.h>
-#include <stdlib.h>
-
-/** Helper functions */
-static ldns_radix_node_t* ldns_radix_new_node(void* data, uint8_t* key,
- radix_strlen_t len);
-static int ldns_radix_find_prefix(ldns_radix_t* tree, uint8_t* key,
- radix_strlen_t len, ldns_radix_node_t** result, radix_strlen_t* pos);
-static int ldns_radix_array_space(ldns_radix_node_t* node, uint8_t byte);
-static int ldns_radix_array_grow(ldns_radix_node_t* node, unsigned need);
-static int ldns_radix_str_create(ldns_radix_array_t* array, uint8_t* key,
- radix_strlen_t pos, radix_strlen_t len);
-static int ldns_radix_prefix_remainder(radix_strlen_t prefix_len,
- uint8_t* longer_str, radix_strlen_t longer_len, uint8_t** split_str,
- radix_strlen_t* split_len);
-static int ldns_radix_array_split(ldns_radix_array_t* array, uint8_t* key,
- radix_strlen_t pos, radix_strlen_t len, ldns_radix_node_t* add);
-static int ldns_radix_str_is_prefix(uint8_t* str1, radix_strlen_t len1,
- uint8_t* str2, radix_strlen_t len2);
-static radix_strlen_t ldns_radix_str_common(uint8_t* str1, radix_strlen_t len1,
- uint8_t* str2, radix_strlen_t len2);
-static ldns_radix_node_t* ldns_radix_next_in_subtree(ldns_radix_node_t* node);
-static ldns_radix_node_t* ldns_radix_prev_from_index(ldns_radix_node_t* node,
- uint8_t index);
-static ldns_radix_node_t* ldns_radix_last_in_subtree_incl_self(
- ldns_radix_node_t* node);
-static ldns_radix_node_t* ldns_radix_last_in_subtree(ldns_radix_node_t* node);
-static void ldns_radix_del_fix(ldns_radix_t* tree, ldns_radix_node_t* node);
-static void ldns_radix_cleanup_onechild(ldns_radix_node_t* node);
-static void ldns_radix_cleanup_leaf(ldns_radix_node_t* node);
-static void ldns_radix_node_free(ldns_radix_node_t* node, void* arg);
-static void ldns_radix_node_array_free(ldns_radix_node_t* node);
-static void ldns_radix_node_array_free_front(ldns_radix_node_t* node);
-static void ldns_radix_node_array_free_end(ldns_radix_node_t* node);
-static void ldns_radix_array_reduce(ldns_radix_node_t* node);
-static void ldns_radix_self_or_prev(ldns_radix_node_t* node,
- ldns_radix_node_t** result);
-
-
-/**
- * Create a new radix node.
- *
- */
-static ldns_radix_node_t*
-ldns_radix_new_node(void* data, uint8_t* key, radix_strlen_t len)
-{
- ldns_radix_node_t* node = LDNS_MALLOC(ldns_radix_node_t);
- if (!node) {
- return NULL;
- }
- node->data = data;
- node->key = key;
- node->klen = len;
- node->parent = NULL;
- node->parent_index = 0;
- node->len = 0;
- node->offset = 0;
- node->capacity = 0;
- node->array = NULL;
- return node;
-}
-
-
-/**
- * Create a new radix tree.
- *
- */
-ldns_radix_t *
-ldns_radix_create(void)
-{
- ldns_radix_t* tree;
-
- /** Allocate memory for it */
- tree = (ldns_radix_t *) LDNS_MALLOC(ldns_radix_t);
- if (!tree) {
- return NULL;
- }
- /** Initialize it */
- ldns_radix_init(tree);
- return tree;
-}
-
-
-/**
- * Initialize radix tree.
- *
- */
-void
-ldns_radix_init(ldns_radix_t* tree)
-{
- /** Initialize it */
- if (tree) {
- tree->root = NULL;
- tree->count = 0;
- }
- return;
-}
-
-
-/**
- * Free radix tree.
- *
- */
-void
-ldns_radix_free(ldns_radix_t* tree)
-{
- if (tree) {
- if (tree->root) {
- ldns_radix_traverse_postorder(tree->root,
- ldns_radix_node_free, NULL);
- }
- LDNS_FREE(tree);
- }
- return;
-}
-
-
-/**
- * Insert data into the tree.
- *
- */
-ldns_status
-ldns_radix_insert(ldns_radix_t* tree, uint8_t* key, radix_strlen_t len,
- void* data)
-{
- radix_strlen_t pos = 0;
- ldns_radix_node_t* add = NULL;
- ldns_radix_node_t* prefix = NULL;
-
- if (!tree || !key || !data) {
- return LDNS_STATUS_NULL;
- }
- add = ldns_radix_new_node(data, key, len);
- if (!add) {
- return LDNS_STATUS_MEM_ERR;
- }
- /** Search the trie until we can make no further process. */
- if (!ldns_radix_find_prefix(tree, key, len, &prefix, &pos)) {
- /** No prefix found */
- assert(tree->root == NULL);
- if (len == 0) {
- /**
- * Example 1: The root:
- * | [0]
- **/
- tree->root = add;
- } else {
- /** Example 2: 'dns':
- * | [0]
- * --| [d+ns] dns
- **/
- prefix = ldns_radix_new_node(NULL, (uint8_t*)"", 0);
- if (!prefix) {
- LDNS_FREE(add);
- return LDNS_STATUS_MEM_ERR;
- }
- /** Find some space in the array for the first byte */
- if (!ldns_radix_array_space(prefix, key[0])) {
- LDNS_FREE(add);
- LDNS_FREE(prefix->array);
- LDNS_FREE(prefix);
- return LDNS_STATUS_MEM_ERR;
- }
- /** Set relational pointers */
- add->parent = prefix;
- add->parent_index = 0;
- prefix->array[0].edge = add;
- if (len > 1) {
- /** Store the remainder of the prefix */
- if (!ldns_radix_prefix_remainder(1, key,
- len, &prefix->array[0].str,
- &prefix->array[0].len)) {
- LDNS_FREE(add);
- LDNS_FREE(prefix->array);
- LDNS_FREE(prefix);
- return LDNS_STATUS_MEM_ERR;
- }
- }
- tree->root = prefix;
- }
- } else if (pos == len) {
- /** Exact match found */
- LDNS_FREE(add);
- if (prefix->data) {
- /* Element already exists */
- return LDNS_STATUS_EXISTS_ERR;
- }
- prefix->data = data;
- prefix->key = key;
- prefix->klen = len; /* redundant */
- } else {
- /** Prefix found */
- uint8_t byte = key[pos];
- assert(pos < len);
- if (byte < prefix->offset ||
- (byte - prefix->offset) >= prefix->len) {
- /** Find some space in the array for the byte. */
- /**
- * Example 3: 'ldns'
- * | [0]
- * --| [d+ns] dns
- * --| [l+dns] ldns
- **/
- if (!ldns_radix_array_space(prefix, byte)) {
- LDNS_FREE(add);
- return LDNS_STATUS_MEM_ERR;
- }
- assert(byte >= prefix->offset);
- assert((byte - prefix->offset) <= prefix->len);
- byte -= prefix->offset;
- if (pos+1 < len) {
- /** Create remainder of the string. */
- if (!ldns_radix_str_create(
- &prefix->array[byte], key, pos+1,
- len)) {
- LDNS_FREE(add);
- return LDNS_STATUS_MEM_ERR;
- }
- }
- /** Add new node. */
- add->parent = prefix;
- add->parent_index = byte;
- prefix->array[byte].edge = add;
- } else if (prefix->array[byte-prefix->offset].edge == NULL) {
- /** Use existing element. */
- /**
- * Example 4: 'edns'
- * | [0]
- * --| [d+ns] dns
- * --| [e+dns] edns
- * --| [l+dns] ldns
- **/
- byte -= prefix->offset;
- if (pos+1 < len) {
- /** Create remainder of the string. */
- if (!ldns_radix_str_create(
- &prefix->array[byte], key, pos+1,
- len)) {
- LDNS_FREE(add);
- return LDNS_STATUS_MEM_ERR;
- }
- }
- /** Add new node. */
- add->parent = prefix;
- add->parent_index = byte;
- prefix->array[byte].edge = add;
- } else {
- /**
- * Use existing element, but it has a shared prefix,
- * we need a split.
- */
- if (!ldns_radix_array_split(&prefix->array[byte-(prefix->offset)],
- key, pos+1, len, add)) {
- LDNS_FREE(add);
- return LDNS_STATUS_MEM_ERR;
- }
- }
- }
-
- tree->count ++;
- return LDNS_STATUS_OK;
-}
-
-
-/**
- * Delete data from the tree.
- *
- */
-void* ldns_radix_delete(ldns_radix_t* tree, const uint8_t* key, radix_strlen_t len)
-{
- ldns_radix_node_t* del = ldns_radix_search(tree, key, len);
- void* data = NULL;
- if (del) {
- tree->count--;
- data = del->data;
- del->data = NULL;
- ldns_radix_del_fix(tree, del);
- return data;
- }
- return NULL;
-}
-
-
-/**
- * Search data in the tree.
- *
- */
-ldns_radix_node_t*
-ldns_radix_search(ldns_radix_t* tree, const uint8_t* key, radix_strlen_t len)
-{
- ldns_radix_node_t* node = NULL;
- radix_strlen_t pos = 0;
- uint8_t byte = 0;
-
- if (!tree || !key) {
- return NULL;
- }
- node = tree->root;
- while (node) {
- if (pos == len) {
- return node->data?node:NULL;
- }
- byte = key[pos];
- if (byte < node->offset) {
- return NULL;
- }
- byte -= node->offset;
- if (byte >= node->len) {
- return NULL;
- }
- pos++;
- if (node->array[byte].len > 0) {
- /** Must match additional string. */
- if (pos + node->array[byte].len > len) {
- return NULL;
- }
- if (memcmp(&key[pos], node->array[byte].str,
- node->array[byte].len) != 0) {
- return NULL;
- }
- pos += node->array[byte].len;
- }
- node = node->array[byte].edge;
- }
- return NULL;
-}
-
-
-/**
- * Search data in the tree, and if not found, find the closest smaller
- * element in the tree.
- *
- */
-int
-ldns_radix_find_less_equal(ldns_radix_t* tree, const uint8_t* key,
- radix_strlen_t len, ldns_radix_node_t** result)
-{
- ldns_radix_node_t* node = NULL;
- radix_strlen_t pos = 0;
- uint8_t byte;
- int memcmp_res = 0;
-
- if (!tree || !tree->root || !key) {
- *result = NULL;
- return 0;
- }
-
- node = tree->root;
- while (pos < len) {
- byte = key[pos];
- if (byte < node->offset) {
- /**
- * No exact match. The lesser is in this or the
- * previous node.
- */
- ldns_radix_self_or_prev(node, result);
- return 0;
- }
- byte -= node->offset;
- if (byte >= node->len) {
- /**
- * No exact match. The lesser is in this node or the
- * last of this array, or something before this node.
- */
- *result = ldns_radix_last_in_subtree_incl_self(node);
- if (*result == NULL) {
- *result = ldns_radix_prev(node);
- }
- return 0;
- }
- pos++;
- if (!node->array[byte].edge) {
- /**
- * No exact match. Find the previous in the array
- * from this index.
- */
- *result = ldns_radix_prev_from_index(node, byte);
- if (*result == NULL) {
- ldns_radix_self_or_prev(node, result);
- }
- return 0;
- }
- if (node->array[byte].len != 0) {
- /** Must match additional string. */
- if (pos + node->array[byte].len > len) {
- /** Additional string is longer than key. */
- if (memcmp(&key[pos], node->array[byte].str,
- len-pos) <= 0) {
- /** Key is before this node. */
- *result = ldns_radix_prev(
- node->array[byte].edge);
- } else {
- /** Key is after additional string. */
- *result = ldns_radix_last_in_subtree_incl_self(node->array[byte].edge);
- if (*result == NULL) {
- *result = ldns_radix_prev(node->array[byte].edge);
- }
- }
- return 0;
- }
- memcmp_res = memcmp(&key[pos], node->array[byte].str,
- node->array[byte].len);
- if (memcmp_res < 0) {
- *result = ldns_radix_prev(
- node->array[byte].edge);
- return 0;
- } else if (memcmp_res > 0) {
- *result = ldns_radix_last_in_subtree_incl_self(node->array[byte].edge);
- if (*result == NULL) {
- *result = ldns_radix_prev(node->array[byte].edge);
- }
- return 0;
- }
-
- pos += node->array[byte].len;
- }
- node = node->array[byte].edge;
- }
- if (node->data) {
- /** Exact match. */
- *result = node;
- return 1;
- }
- /** There is a node which is an exact match, but has no element. */
- *result = ldns_radix_prev(node);
- return 0;
-}
-
-
-/**
- * Get the first element in the tree.
- *
- */
-ldns_radix_node_t*
-ldns_radix_first(const ldns_radix_t* tree)
-{
- ldns_radix_node_t* first = NULL;
- if (!tree || !tree->root) {
- return NULL;
- }
- first = tree->root;
- if (first->data) {
- return first;
- }
- return ldns_radix_next(first);
-}
-
-
-/**
- * Get the last element in the tree.
- *
- */
-ldns_radix_node_t*
-ldns_radix_last(const ldns_radix_t* tree)
-{
- if (!tree || !tree->root) {
- return NULL;
- }
- return ldns_radix_last_in_subtree_incl_self(tree->root);
-}
-
-
-/**
- * Next element.
- *
- */
-ldns_radix_node_t*
-ldns_radix_next(ldns_radix_node_t* node)
-{
- if (!node) {
- return NULL;
- }
- if (node->len) {
- /** Go down: most-left child is the next. */
- ldns_radix_node_t* next = ldns_radix_next_in_subtree(node);
- if (next) {
- return next;
- }
- }
- /** No elements in subtree, get to parent and go down next branch. */
- while (node->parent) {
- uint8_t index = node->parent_index;
- node = node->parent;
- index++;
- for (; index < node->len; index++) {
- if (node->array[index].edge) {
- ldns_radix_node_t* next;
- /** Node itself. */
- if (node->array[index].edge->data) {
- return node->array[index].edge;
- }
- /** Dive into subtree. */
- next = ldns_radix_next_in_subtree(node);
- if (next) {
- return next;
- }
- }
- }
- }
- return NULL;
-}
-
-
-/**
- * Previous element.
- *
- */
-ldns_radix_node_t*
-ldns_radix_prev(ldns_radix_node_t* node)
-{
- if (!node) {
- return NULL;
- }
-
- /** Get to parent and go down previous branch. */
- while (node->parent) {
- uint8_t index = node->parent_index;
- ldns_radix_node_t* prev;
- node = node->parent;
- assert(node->len > 0);
- prev = ldns_radix_prev_from_index(node, index);
- if (prev) {
- return prev;
- }
- if (node->data) {
- return node;
- }
- }
- return NULL;
-}
-
-
-/**
- * Print node.
- *
- */
-static void
-ldns_radix_node_print(FILE* fd, ldns_radix_node_t* node,
- uint8_t i, uint8_t* str, radix_strlen_t len, unsigned d)
-{
- uint8_t j;
- if (!node) {
- return;
- }
- for (j = 0; j < d; j++) {
- fprintf(fd, "--");
- }
- if (str) {
- radix_strlen_t l;
- fprintf(fd, "| [%u+", (unsigned) i);
- for (l=0; l < len; l++) {
- fprintf(fd, "%c", (char) str[l]);
- }
- fprintf(fd, "]%u", (unsigned) len);
- } else {
- fprintf(fd, "| [%u]", (unsigned) i);
- }
-
- if (node->data) {
- fprintf(fd, " %s", (char*) node->data);
- }
- fprintf(fd, "\n");
-
- for (j = 0; j < node->len; j++) {
- if (node->array[j].edge) {
- ldns_radix_node_print(fd, node->array[j].edge, j,
- node->array[j].str, node->array[j].len, d+1);
- }
- }
- return;
-}
-
-
-/**
- * Print radix tree.
- *
- */
-void
-ldns_radix_printf(FILE* fd, const ldns_radix_t* tree)
-{
- if (!fd || !tree) {
- return;
- }
- if (!tree->root) {
- fprintf(fd, "; empty radix tree\n");
- return;
- }
- ldns_radix_node_print(fd, tree->root, 0, NULL, 0, 0);
- return;
-}
-
-
-/**
- * Join two radix trees.
- *
- */
-ldns_status
-ldns_radix_join(ldns_radix_t* tree1, ldns_radix_t* tree2)
-{
- ldns_radix_node_t* cur_node, *next_node;
- ldns_status status;
- if (!tree2 || !tree2->root) {
- return LDNS_STATUS_OK;
- }
- /** Add all elements from tree2 into tree1. */
-
- cur_node = ldns_radix_first(tree2);
- while (cur_node) {
- status = LDNS_STATUS_NO_DATA;
- /** Insert current node into tree1 */
- if (cur_node->data) {
- status = ldns_radix_insert(tree1, cur_node->key,
- cur_node->klen, cur_node->data);
- /** Exist errors may occur */
- if (status != LDNS_STATUS_OK &&
- status != LDNS_STATUS_EXISTS_ERR) {
- return status;
- }
- }
- next_node = ldns_radix_next(cur_node);
- if (status == LDNS_STATUS_OK) {
- (void) ldns_radix_delete(tree2, cur_node->key,
- cur_node->klen);
- }
- cur_node = next_node;
- }
-
- return LDNS_STATUS_OK;
-}
-
-
-/**
- * Split a radix tree intwo.
- *
- */
-ldns_status
-ldns_radix_split(ldns_radix_t* tree1, size_t num, ldns_radix_t** tree2)
-{
- size_t count = 0;
- ldns_radix_node_t* cur_node;
- ldns_status status = LDNS_STATUS_OK;
- if (!tree1 || !tree1->root || num == 0) {
- return LDNS_STATUS_OK;
- }
- if (!tree2) {
- return LDNS_STATUS_NULL;
- }
- if (!*tree2) {
- *tree2 = ldns_radix_create();
- if (!*tree2) {
- return LDNS_STATUS_MEM_ERR;
- }
- }
- cur_node = ldns_radix_first(tree1);
- while (count < num && cur_node) {
- if (cur_node->data) {
- /** Delete current node from tree1. */
- uint8_t* cur_key = cur_node->key;
- radix_strlen_t cur_len = cur_node->klen;
- void* cur_data = ldns_radix_delete(tree1, cur_key,
- cur_len);
- /** Insert current node into tree2/ */
- if (!cur_data) {
- return LDNS_STATUS_NO_DATA;
- }
- status = ldns_radix_insert(*tree2, cur_key, cur_len,
- cur_data);
- if (status != LDNS_STATUS_OK &&
- status != LDNS_STATUS_EXISTS_ERR) {
- return status;
- }
-/*
- if (status == LDNS_STATUS_OK) {
- cur_node->key = NULL;
- cur_node->klen = 0;
- }
-*/
- /** Update count; get first element from tree1 again. */
- count++;
- cur_node = ldns_radix_first(tree1);
- } else {
- cur_node = ldns_radix_next(cur_node);
- }
- }
- return LDNS_STATUS_OK;
-}
-
-
-/**
- * Call function for all nodes in the tree, such that leaf nodes are
- * called before parent nodes.
- *
- */
-void
-ldns_radix_traverse_postorder(ldns_radix_node_t* node,
- void (*func)(ldns_radix_node_t*, void*), void* arg)
-{
- uint8_t i;
- if (!node) {
- return;
- }
- for (i=0; i < node->len; i++) {
- ldns_radix_traverse_postorder(node->array[i].edge,
- func, arg);
- }
- /** Call user function */
- (*func)(node, arg);
- return;
-}
-
-
-/** Static helper functions */
-
-/**
- * Find a prefix of the key.
- * @param tree: tree.
- * @param key: key.
- * @param len: length of key.
- * @param result: the longest prefix, the entry itself if *pos==len,
- * otherwise an array entry.
- * @param pos: position in string where next unmatched byte is.
- * If *pos==len, an exact match is found.
- * If *pos== 0, a "" match was found.
- * @return 0 (false) if no prefix found.
- *
- */
-static int
-ldns_radix_find_prefix(ldns_radix_t* tree, uint8_t* key,
- radix_strlen_t len, ldns_radix_node_t** result, radix_strlen_t* respos)
-{
- /** Start searching at the root node */
- ldns_radix_node_t* n = tree->root;
- radix_strlen_t pos = 0;
- uint8_t byte;
- *respos = 0;
- *result = n;
- if (!n) {
- /** No root, no prefix found */
- return 0;
- }
- /** For each node, look if we can make further progress */
- while (n) {
- if (pos == len) {
- /** Exact match */
- return 1;
- }
- byte = key[pos];
- if (byte < n->offset) {
- /** key < node */
- return 1;
- }
- byte -= n->offset;
- if (byte >= n->len) {
- /** key > node */
- return 1;
- }
- /** So far, the trie matches */
- pos++;
- if (n->array[byte].len != 0) {
- /** Must match additional string */
- if (pos + n->array[byte].len > len) {
- return 1; /* no match at child node */
- }
- if (memcmp(&key[pos], n->array[byte].str,
- n->array[byte].len) != 0) {
- return 1; /* no match at child node */
- }
- pos += n->array[byte].len;
- }
- /** Continue searching prefix at this child node */
- n = n->array[byte].edge;
- if (!n) {
- return 1;
- }
- /** Update the prefix node */
- *respos = pos;
- *result = n;
- }
- /** Done */
- return 1;
-}
-
-
-/**
- * Make space in the node's array for another byte.
- * @param node: node.
- * @param byte: byte.
- * @return 1 if successful, 0 otherwise.
- *
- */
-static int
-ldns_radix_array_space(ldns_radix_node_t* node, uint8_t byte)
-{
- /** Is there an array? */
- if (!node->array) {
- assert(node->capacity == 0);
- /** No array, create new array */
- node->array = LDNS_MALLOC(ldns_radix_array_t);
- if (!node->array) {
- return 0;
- }
- memset(&node->array[0], 0, sizeof(ldns_radix_array_t));
- node->len = 1;
- node->capacity = 1;
- node->offset = byte;
- return 1;
- }
- /** Array exist */
- assert(node->array != NULL);
- assert(node->capacity > 0);
-
- if (node->len == 0) {
- /** Unused array */
- node->len = 1;
- node->offset = byte;
- } else if (byte < node->offset) {
- /** Byte is below the offset */
- uint8_t index;
- uint16_t need = node->offset - byte;
- /** Is there enough capacity? */
- if (node->len + need > node->capacity) {
- /** Not enough capacity, grow array */
- if (!ldns_radix_array_grow(node,
- (unsigned) (node->len + need))) {
- return 0; /* failed to grow array */
- }
- }
- /** Move items to the end */
- memmove(&node->array[need], &node->array[0],
- node->len*sizeof(ldns_radix_array_t));
- /** Fix parent index */
- for (index = 0; index < node->len; index++) {
- if (node->array[index+need].edge) {
- node->array[index+need].edge->parent_index =
- index + need;
- }
- }
- /** Zero the first */
- memset(&node->array[0], 0, need*sizeof(ldns_radix_array_t));
- node->len += need;
- node->offset = byte;
- } else if (byte - node->offset >= node->len) {
- /** Byte does not fit in array */
- uint16_t need = (byte - node->offset) - node->len + 1;
- /** Is there enough capacity? */
- if (node->len + need > node->capacity) {
- /** Not enough capacity, grow array */
- if (!ldns_radix_array_grow(node,
- (unsigned) (node->len + need))) {
- return 0; /* failed to grow array */
- }
- }
- /** Zero the added items */
- memset(&node->array[node->len], 0,
- need*sizeof(ldns_radix_array_t));
- node->len += need;
- }
- return 1;
-}
-
-
-/**
- * Grow the array.
- * @param node: node.
- * @param need: number of elements the array at least need to grow.
- * Can't be bigger than 256.
- * @return: 0 if failed, 1 if was successful.
- *
- */
-static int
-ldns_radix_array_grow(ldns_radix_node_t* node, unsigned need)
-{
- unsigned size = ((unsigned)node->capacity)*2;
- ldns_radix_array_t* a = NULL;
- if (need > size) {
- size = need;
- }
- if (size > 256) {
- size = 256;
- }
- a = LDNS_XMALLOC(ldns_radix_array_t, size);
- if (!a) {
- return 0;
- }
- assert(node->len <= node->capacity);
- assert(node->capacity < size);
- memcpy(&a[0], &node->array[0], node->len*sizeof(ldns_radix_array_t));
- LDNS_FREE(node->array);
- node->array = a;
- node->capacity = size;
- return 1;
-}
-
-
-/**
- * Create a prefix in the array string.
- * @param array: array.
- * @param key: key.
- * @param pos: start position in key.
- * @param len: length of key.
- * @return 0 if failed, 1 if was successful.
- *
- */
-static int
-ldns_radix_str_create(ldns_radix_array_t* array, uint8_t* key,
- radix_strlen_t pos, radix_strlen_t len)
-{
- array->str = LDNS_XMALLOC(uint8_t, (len-pos));
- if (!array->str) {
- return 0;
- }
- memmove(array->str, key+pos, len-pos);
- array->len = (len-pos);
- return 1;
-}
-
-
-/**
- * Allocate remainder from prefixes for a split.
- * @param prefixlen: length of prefix.
- * @param longer_str: the longer string.
- * @param longer_len: the longer string length.
- * @param split_str: the split string.
- * @param split_len: the split string length.
- * @return 0 if failed, 1 if successful.
- *
- */
-static int
-ldns_radix_prefix_remainder(radix_strlen_t prefix_len,
- uint8_t* longer_str, radix_strlen_t longer_len,
- uint8_t** split_str, radix_strlen_t* split_len)
-{
- *split_len = longer_len - prefix_len;
- *split_str = LDNS_XMALLOC(uint8_t, (*split_len));
- if (!*split_str) {
- return 0;
- }
- memmove(*split_str, longer_str+prefix_len, longer_len-prefix_len);
- return 1;
-}
-
-
-/**
- * Create a split when two nodes have a shared prefix.
- * @param array: array.
- * @param key: key.
- * @param pos: start position in key.
- * @param len: length of the key.
- * @param add: node to be added.
- * @return 0 if failed, 1 if was successful.
- *
- */
-static int
-ldns_radix_array_split(ldns_radix_array_t* array, uint8_t* key,
- radix_strlen_t pos, radix_strlen_t len, ldns_radix_node_t* add)
-{
- uint8_t* str_to_add = key + pos;
- radix_strlen_t strlen_to_add = len - pos;
-
- if (ldns_radix_str_is_prefix(str_to_add, strlen_to_add,
- array->str, array->len)) {
- /** The string to add is a prefix of the existing string */
- uint8_t* split_str = NULL, *dup_str = NULL;
- radix_strlen_t split_len = 0;
- /**
- * Example 5: 'ld'
- * | [0]
- * --| [d+ns] dns
- * --| [e+dns] edns
- * --| [l+d] ld
- * ----| [n+s] ldns
- **/
- assert(strlen_to_add < array->len);
- /** Store the remainder in the split string */
- if (array->len - strlen_to_add > 1) {
- if (!ldns_radix_prefix_remainder(strlen_to_add+1,
- array->str, array->len, &split_str,
- &split_len)) {
- return 0;
- }
- }
- /** Duplicate the string to add */
- if (strlen_to_add != 0) {
- dup_str = LDNS_XMALLOC(uint8_t, strlen_to_add);
- if (!dup_str) {
- LDNS_FREE(split_str);
- return 0;
- }
- memcpy(dup_str, str_to_add, strlen_to_add);
- }
- /** Make space in array for the new node */
- if (!ldns_radix_array_space(add,
- array->str[strlen_to_add])) {
- LDNS_FREE(split_str);
- LDNS_FREE(dup_str);
- return 0;
- }
- /**
- * The added node should go direct under the existing parent.
- * The existing node should go under the added node.
- */
- add->parent = array->edge->parent;
- add->parent_index = array->edge->parent_index;
- add->array[0].edge = array->edge;
- add->array[0].str = split_str;
- add->array[0].len = split_len;
- array->edge->parent = add;
- array->edge->parent_index = 0;
- LDNS_FREE(array->str);
- array->edge = add;
- array->str = dup_str;
- array->len = strlen_to_add;
- } else if (ldns_radix_str_is_prefix(array->str, array->len,
- str_to_add, strlen_to_add)) {
- /** The existing string is a prefix of the string to add */
- /**
- * Example 6: 'dns-ng'
- * | [0]
- * --| [d+ns] dns
- * ----| [-+ng] dns-ng
- * --| [e+dns] edns
- * --| [l+d] ld
- * ----| [n+s] ldns
- **/
- uint8_t* split_str = NULL;
- radix_strlen_t split_len = 0;
- assert(array->len < strlen_to_add);
- if (strlen_to_add - array->len > 1) {
- if (!ldns_radix_prefix_remainder(array->len+1,
- str_to_add, strlen_to_add, &split_str,
- &split_len)) {
- return 0;
- }
- }
- /** Make space in array for the new node */
- if (!ldns_radix_array_space(array->edge,
- str_to_add[array->len])) {
- LDNS_FREE(split_str);
- return 0;
- }
- /**
- * The added node should go direct under the existing node.
- */
- add->parent = array->edge;
- add->parent_index = str_to_add[array->len] -
- array->edge->offset;
- array->edge->array[add->parent_index].edge = add;
- array->edge->array[add->parent_index].str = split_str;
- array->edge->array[add->parent_index].len = split_len;
- } else {
- /** Create a new split node. */
- /**
- * Example 7: 'dndns'
- * | [0]
- * --| [d+n]
- * ----| [d+ns] dndns
- * ----| [s] dns
- * ------| [-+ng] dns-ng
- * --| [e+dns] edns
- * --| [l+d] ld
- * ----| [n+s] ldns
- **/
- ldns_radix_node_t* common = NULL;
- uint8_t* common_str = NULL, *s1 = NULL, *s2 = NULL;
- radix_strlen_t common_len = 0, l1 = 0, l2 = 0;
- common_len = ldns_radix_str_common(array->str, array->len,
- str_to_add, strlen_to_add);
- assert(common_len < array->len);
- assert(common_len < strlen_to_add);
- /** Create the new common node. */
- common = ldns_radix_new_node(NULL, (uint8_t*)"", 0);
- if (!common) {
- return 0;
- }
- if (array->len - common_len > 1) {
- if (!ldns_radix_prefix_remainder(common_len+1,
- array->str, array->len, &s1, &l1)) {
- LDNS_FREE(common);
- return 0;
- }
- }
- if (strlen_to_add - common_len > 1) {
- if (!ldns_radix_prefix_remainder(common_len+1,
- str_to_add, strlen_to_add, &s2, &l2)) {
- LDNS_FREE(common);
- LDNS_FREE(s1);
- return 0;
- }
- }
- /** Create the shared prefix. */
- if (common_len > 0) {
- common_str = LDNS_XMALLOC(uint8_t, common_len);
- if (!common_str) {
- LDNS_FREE(common);
- LDNS_FREE(s1);
- LDNS_FREE(s2);
- return 0;
- }
- memcpy(common_str, str_to_add, common_len);
- }
- /** Make space in the common node array. */
- if (!ldns_radix_array_space(common, array->str[common_len]) ||
- !ldns_radix_array_space(common, str_to_add[common_len])) {
- LDNS_FREE(common->array);
- LDNS_FREE(common);
- LDNS_FREE(common_str);
- LDNS_FREE(s1);
- LDNS_FREE(s2);
- return 0;
- }
- /**
- * The common node should go direct under the parent node.
- * The added and existing nodes go under the common node.
- */
- common->parent = array->edge->parent;
- common->parent_index = array->edge->parent_index;
- array->edge->parent = common;
- array->edge->parent_index = array->str[common_len] -
- common->offset;
- add->parent = common;
- add->parent_index = str_to_add[common_len] - common->offset;
- common->array[array->edge->parent_index].edge = array->edge;
- common->array[array->edge->parent_index].str = s1;
- common->array[array->edge->parent_index].len = l1;
- common->array[add->parent_index].edge = add;
- common->array[add->parent_index].str = s2;
- common->array[add->parent_index].len = l2;
- LDNS_FREE(array->str);
- array->edge = common;
- array->str = common_str;
- array->len = common_len;
- }
- return 1;
-}
-
-
-/**
- * Check if one string prefix of other string.
- * @param str1: one string.
- * @param len1: one string length.
- * @param str2: other string.
- * @param len2: other string length.
- * @return 1 if prefix, 0 otherwise.
- *
- */
-static int
-ldns_radix_str_is_prefix(uint8_t* str1, radix_strlen_t len1,
- uint8_t* str2, radix_strlen_t len2)
-{
- if (len1 == 0) {
- return 1; /* empty prefix is also a prefix */
- }
- if (len1 > len2) {
- return 0; /* len1 is longer so str1 cannot be a prefix */
- }
- return (memcmp(str1, str2, len1) == 0);
-}
-
-
-/**
- * Return the number of bytes in common for the two strings.
- * @param str1: one string.
- * @param len1: one string length.
- * @param str2: other string.
- * @param len2: other string length.
- * @return length of substring that the two strings have in common.
- *
- */
-static radix_strlen_t
-ldns_radix_str_common(uint8_t* str1, radix_strlen_t len1,
- uint8_t* str2, radix_strlen_t len2)
-{
- radix_strlen_t i, max = (len1<len2)?len1:len2;
- for (i=0; i<max; i++) {
- if (str1[i] != str2[i]) {
- return i;
- }
- }
- return max;
-}
-
-
-/**
- * Find the next element in the subtree of this node.
- * @param node: node.
- * @return: node with next element.
- *
- */
-static ldns_radix_node_t*
-ldns_radix_next_in_subtree(ldns_radix_node_t* node)
-{
- uint16_t i;
- ldns_radix_node_t* next;
- /** Try every subnode. */
- for (i = 0; i < node->len; i++) {
- if (node->array[i].edge) {
- /** Node itself. */
- if (node->array[i].edge->data) {
- return node->array[i].edge;
- }
- /** Dive into subtree. */
- next = ldns_radix_next_in_subtree(node->array[i].edge);
- if (next) {
- return next;
- }
- }
- }
- return NULL;
-}
-
-
-/**
- * Find the previous element in the array of this node, from index.
- * @param node: node.
- * @param index: index.
- * @return previous node from index.
- *
- */
-static ldns_radix_node_t*
-ldns_radix_prev_from_index(ldns_radix_node_t* node, uint8_t index)
-{
- uint8_t i = index;
- while (i > 0) {
- i--;
- if (node->array[i].edge) {
- ldns_radix_node_t* prev =
- ldns_radix_last_in_subtree_incl_self(node);
- if (prev) {
- return prev;
- }
- }
- }
- return NULL;
-}
-
-
-/**
- * Find last node in subtree, or this node (if have data).
- * @param node: node.
- * @return last node in subtree, or this node, or NULL.
- *
- */
-static ldns_radix_node_t*
-ldns_radix_last_in_subtree_incl_self(ldns_radix_node_t* node)
-{
- ldns_radix_node_t* last = ldns_radix_last_in_subtree(node);
- if (last) {
- return last;
- } else if (node->data) {
- return node;
- }
- return NULL;
-}
-
-
-/**
- * Find last node in subtree.
- * @param node: node.
- * @return last node in subtree.
- *
- */
-static ldns_radix_node_t*
-ldns_radix_last_in_subtree(ldns_radix_node_t* node)
-{
- int i;
- /** Look for the most right leaf node. */
- for (i=(int)(node->len)-1; i >= 0; i--) {
- if (node->array[i].edge) {
- /** Keep looking for the most right leaf node. */
- if (node->array[i].edge->len > 0) {
- ldns_radix_node_t* last =
- ldns_radix_last_in_subtree(
- node->array[i].edge);
- if (last) {
- return last;
- }
- }
- /** Could this be the most right leaf node? */
- if (node->array[i].edge->data) {
- return node->array[i].edge;
- }
- }
- }
- return NULL;
-}
-
-
-/**
- * Fix tree after deleting element.
- * @param tree: tree.
- * @param node: node with deleted element.
- *
- */
-static void
-ldns_radix_del_fix(ldns_radix_t* tree, ldns_radix_node_t* node)
-{
- while (node) {
- if (node->data) {
- /** Thou should not delete nodes with data attached. */
- return;
- } else if (node->len == 1 && node->parent) {
- /** Node with one child is fold back into. */
- ldns_radix_cleanup_onechild(node);
- return;
- } else if (node->len == 0) {
- /** Leaf node. */
- ldns_radix_node_t* parent = node->parent;
- if (!parent) {
- /** The root is a leaf node. */
- ldns_radix_node_free(node, NULL);
- tree->root = NULL;
- return;
- }
- /** Cleanup leaf node and continue with parent. */
- ldns_radix_cleanup_leaf(node);
- node = parent;
- } else {
- /**
- * Node cannot be deleted, because it has edge nodes
- * and no parent to fix up to.
- */
- return;
- }
- }
- /** Not reached. */
- return;
-}
-
-
-/**
- * Clean up a node with one child.
- * @param node: node with one child.
- *
- */
-static void
-ldns_radix_cleanup_onechild(ldns_radix_node_t* node)
-{
- uint8_t* join_str;
- radix_strlen_t join_len;
- uint8_t parent_index = node->parent_index;
- ldns_radix_node_t* child = node->array[0].edge;
- ldns_radix_node_t* parent = node->parent;
-
- /** Node has one child, merge the child node into the parent node. */
- assert(parent_index < parent->len);
- join_len = parent->array[parent_index].len + node->array[0].len + 1;
-
- join_str = LDNS_XMALLOC(uint8_t, join_len);
- if (!join_str) {
- /**
- * Cleanup failed due to out of memory.
- * This tree is now inefficient, with the empty node still
- * existing, but it is still valid.
- */
- return;
- }
-
- memcpy(join_str, parent->array[parent_index].str,
- parent->array[parent_index].len);
- join_str[parent->array[parent_index].len] = child->parent_index +
- node->offset;
- memmove(join_str + parent->array[parent_index].len+1,
- node->array[0].str, node->array[0].len);
-
- LDNS_FREE(parent->array[parent_index].str);
- parent->array[parent_index].str = join_str;
- parent->array[parent_index].len = join_len;
- parent->array[parent_index].edge = child;
- child->parent = parent;
- child->parent_index = parent_index;
- ldns_radix_node_free(node, NULL);
- return;
-}
-
-
-/**
- * Clean up a leaf node.
- * @param node: leaf node.
- *
- */
-static void
-ldns_radix_cleanup_leaf(ldns_radix_node_t* node)
-{
- uint8_t parent_index = node->parent_index;
- ldns_radix_node_t* parent = node->parent;
- /** Delete lead node and fix parent array. */
- assert(parent_index < parent->len);
- ldns_radix_node_free(node, NULL);
- LDNS_FREE(parent->array[parent_index].str);
- parent->array[parent_index].str = NULL;
- parent->array[parent_index].len = 0;
- parent->array[parent_index].edge = NULL;
- /** Fix array in parent. */
- if (parent->len == 1) {
- ldns_radix_node_array_free(parent);
- } else if (parent_index == 0) {
- ldns_radix_node_array_free_front(parent);
- } else {
- ldns_radix_node_array_free_end(parent);
- }
- return;
-}
-
-
-/**
- * Free a radix node.
- * @param node: node.
- * @param arg: user argument.
- *
- */
-static void
-ldns_radix_node_free(ldns_radix_node_t* node, void* arg)
-{
- uint16_t i;
- (void) arg;
- if (!node) {
- return;
- }
- for (i=0; i < node->len; i++) {
- LDNS_FREE(node->array[i].str);
- }
- node->key = NULL;
- node->klen = 0;
- LDNS_FREE(node->array);
- LDNS_FREE(node);
- return;
-}
-
-
-/**
- * Free select edge array.
- * @param node: node.
- *
- */
-static void
-ldns_radix_node_array_free(ldns_radix_node_t* node)
-{
- node->offset = 0;
- node->len = 0;
- LDNS_FREE(node->array);
- node->array = NULL;
- node->capacity = 0;
- return;
-}
-
-
-/**
- * Free front of select edge array.
- * @param node: node.
- *
- */
-static void
-ldns_radix_node_array_free_front(ldns_radix_node_t* node)
-{
- uint16_t i, n = 0;
- /** Remove until a non NULL entry. */
- while (n < node->len && node->array[n].edge == NULL) {
- n++;
- }
- if (n == 0) {
- return;
- }
- if (n == node->len) {
- ldns_radix_node_array_free(node);
- return;
- }
- assert(n < node->len);
- assert((int) n <= (255 - (int) node->offset));
- memmove(&node->array[0], &node->array[n],
- (node->len - n)*sizeof(ldns_radix_array_t));
- node->offset += n;
- node->len -= n;
- for (i=0; i < node->len; i++) {
- if (node->array[i].edge) {
- node->array[i].edge->parent_index = i;
- }
- }
- ldns_radix_array_reduce(node);
- return;
-}
-
-
-/**
- * Free front of select edge array.
- * @param node: node.
- *
- */
-static void
-ldns_radix_node_array_free_end(ldns_radix_node_t* node)
-{
- uint16_t n = 0;
- /** Shorten array. */
- while (n < node->len && node->array[node->len-1-n].edge == NULL) {
- n++;
- }
- if (n == 0) {
- return;
- }
- if (n == node->len) {
- ldns_radix_node_array_free(node);
- return;
- }
- assert(n < node->len);
- node->len -= n;
- ldns_radix_array_reduce(node);
- return;
-}
-
-
-/**
- * Reduce the capacity of the array if needed.
- * @param node: node.
- *
- */
-static void
-ldns_radix_array_reduce(ldns_radix_node_t* node)
-{
- if (node->len <= node->capacity/2 && node->len != node->capacity) {
- ldns_radix_array_t* a = LDNS_XMALLOC(ldns_radix_array_t,
- node->len);
- if (!a) {
- return;
- }
- memcpy(a, node->array, sizeof(ldns_radix_array_t)*node->len);
- LDNS_FREE(node->array);
- node->array = a;
- node->capacity = node->len;
- }
- return;
-}
-
-
-/**
- * Return this element if it exists, the previous otherwise.
- * @param node: from this node.
- * @param result: result node.
- *
- */
-static void
-ldns_radix_self_or_prev(ldns_radix_node_t* node, ldns_radix_node_t** result)
-{
- if (node->data) {
- *result = node;
- } else {
- *result = ldns_radix_prev(node);
- }
- return;
-}
diff --git a/ldns/rbtree.c b/ldns/rbtree.c
deleted file mode 100644
index 01ae9c7..0000000
--- a/ldns/rbtree.c
+++ /dev/null
@@ -1,670 +0,0 @@
-/*
- * rbtree.c -- generic red black tree
- *
- * Taken from Unbound, modified for ldns
- *
- * Copyright (c) 2001-2008, NLnet Labs. All rights reserved.
- *
- * This software is open source.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * Neither the name of the NLNET LABS nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-/**
- * \file
- * Implementation of a redblack tree.
- */
-
-#include <ldns/config.h>
-#include <ldns/rbtree.h>
-#include <ldns/util.h>
-#include <stdlib.h>
-
-/** Node colour black */
-#define BLACK 0
-/** Node colour red */
-#define RED 1
-
-/** the NULL node, global alloc */
-ldns_rbnode_t ldns_rbtree_null_node = {
- LDNS_RBTREE_NULL, /* Parent. */
- LDNS_RBTREE_NULL, /* Left. */
- LDNS_RBTREE_NULL, /* Right. */
- NULL, /* Key. */
- NULL, /* Data. */
- BLACK /* Color. */
-};
-
-/** rotate subtree left (to preserve redblack property) */
-static void ldns_rbtree_rotate_left(ldns_rbtree_t *rbtree, ldns_rbnode_t *node);
-/** rotate subtree right (to preserve redblack property) */
-static void ldns_rbtree_rotate_right(ldns_rbtree_t *rbtree, ldns_rbnode_t *node);
-/** Fixup node colours when insert happened */
-static void ldns_rbtree_insert_fixup(ldns_rbtree_t *rbtree, ldns_rbnode_t *node);
-/** Fixup node colours when delete happened */
-static void ldns_rbtree_delete_fixup(ldns_rbtree_t* rbtree, ldns_rbnode_t* child, ldns_rbnode_t* child_parent);
-
-/*
- * Creates a new red black tree, intializes and returns a pointer to it.
- *
- * Return NULL on failure.
- *
- */
-ldns_rbtree_t *
-ldns_rbtree_create (int (*cmpf)(const void *, const void *))
-{
- ldns_rbtree_t *rbtree;
-
- /* Allocate memory for it */
- rbtree = (ldns_rbtree_t *) LDNS_MALLOC(ldns_rbtree_t);
- if (!rbtree) {
- return NULL;
- }
-
- /* Initialize it */
- ldns_rbtree_init(rbtree, cmpf);
-
- return rbtree;
-}
-
-void
-ldns_rbtree_init(ldns_rbtree_t *rbtree, int (*cmpf)(const void *, const void *))
-{
- /* Initialize it */
- rbtree->root = LDNS_RBTREE_NULL;
- rbtree->count = 0;
- rbtree->cmp = cmpf;
-}
-
-void
-ldns_rbtree_free(ldns_rbtree_t *rbtree)
-{
- LDNS_FREE(rbtree);
-}
-
-/*
- * Rotates the node to the left.
- *
- */
-static void
-ldns_rbtree_rotate_left(ldns_rbtree_t *rbtree, ldns_rbnode_t *node)
-{
- ldns_rbnode_t *right = node->right;
- node->right = right->left;
- if (right->left != LDNS_RBTREE_NULL)
- right->left->parent = node;
-
- right->parent = node->parent;
-
- if (node->parent != LDNS_RBTREE_NULL) {
- if (node == node->parent->left) {
- node->parent->left = right;
- } else {
- node->parent->right = right;
- }
- } else {
- rbtree->root = right;
- }
- right->left = node;
- node->parent = right;
-}
-
-/*
- * Rotates the node to the right.
- *
- */
-static void
-ldns_rbtree_rotate_right(ldns_rbtree_t *rbtree, ldns_rbnode_t *node)
-{
- ldns_rbnode_t *left = node->left;
- node->left = left->right;
- if (left->right != LDNS_RBTREE_NULL)
- left->right->parent = node;
-
- left->parent = node->parent;
-
- if (node->parent != LDNS_RBTREE_NULL) {
- if (node == node->parent->right) {
- node->parent->right = left;
- } else {
- node->parent->left = left;
- }
- } else {
- rbtree->root = left;
- }
- left->right = node;
- node->parent = left;
-}
-
-static void
-ldns_rbtree_insert_fixup(ldns_rbtree_t *rbtree, ldns_rbnode_t *node)
-{
- ldns_rbnode_t *uncle;
-
- /* While not at the root and need fixing... */
- while (node != rbtree->root && node->parent->color == RED) {
- /* If our parent is left child of our grandparent... */
- if (node->parent == node->parent->parent->left) {
- uncle = node->parent->parent->right;
-
- /* If our uncle is red... */
- if (uncle->color == RED) {
- /* Paint the parent and the uncle black... */
- node->parent->color = BLACK;
- uncle->color = BLACK;
-
- /* And the grandparent red... */
- node->parent->parent->color = RED;
-
- /* And continue fixing the grandparent */
- node = node->parent->parent;
- } else { /* Our uncle is black... */
- /* Are we the right child? */
- if (node == node->parent->right) {
- node = node->parent;
- ldns_rbtree_rotate_left(rbtree, node);
- }
- /* Now we're the left child, repaint and rotate... */
- node->parent->color = BLACK;
- node->parent->parent->color = RED;
- ldns_rbtree_rotate_right(rbtree, node->parent->parent);
- }
- } else {
- uncle = node->parent->parent->left;
-
- /* If our uncle is red... */
- if (uncle->color == RED) {
- /* Paint the parent and the uncle black... */
- node->parent->color = BLACK;
- uncle->color = BLACK;
-
- /* And the grandparent red... */
- node->parent->parent->color = RED;
-
- /* And continue fixing the grandparent */
- node = node->parent->parent;
- } else { /* Our uncle is black... */
- /* Are we the right child? */
- if (node == node->parent->left) {
- node = node->parent;
- ldns_rbtree_rotate_right(rbtree, node);
- }
- /* Now we're the right child, repaint and rotate... */
- node->parent->color = BLACK;
- node->parent->parent->color = RED;
- ldns_rbtree_rotate_left(rbtree, node->parent->parent);
- }
- }
- }
- rbtree->root->color = BLACK;
-}
-
-void
-ldns_rbtree_insert_vref(ldns_rbnode_t *data, void *rbtree)
-{
- (void) ldns_rbtree_insert((ldns_rbtree_t *) rbtree,
- data);
-}
-
-/*
- * Inserts a node into a red black tree.
- *
- * Returns NULL on failure or the pointer to the newly added node
- * otherwise.
- */
-ldns_rbnode_t *
-ldns_rbtree_insert (ldns_rbtree_t *rbtree, ldns_rbnode_t *data)
-{
- /* XXX Not necessary, but keeps compiler quiet... */
- int r = 0;
-
- /* We start at the root of the tree */
- ldns_rbnode_t *node = rbtree->root;
- ldns_rbnode_t *parent = LDNS_RBTREE_NULL;
-
- /* Lets find the new parent... */
- while (node != LDNS_RBTREE_NULL) {
- /* Compare two keys, do we have a duplicate? */
- if ((r = rbtree->cmp(data->key, node->key)) == 0) {
- return NULL;
- }
- parent = node;
-
- if (r < 0) {
- node = node->left;
- } else {
- node = node->right;
- }
- }
-
- /* Initialize the new node */
- data->parent = parent;
- data->left = data->right = LDNS_RBTREE_NULL;
- data->color = RED;
- rbtree->count++;
-
- /* Insert it into the tree... */
- if (parent != LDNS_RBTREE_NULL) {
- if (r < 0) {
- parent->left = data;
- } else {
- parent->right = data;
- }
- } else {
- rbtree->root = data;
- }
-
- /* Fix up the red-black properties... */
- ldns_rbtree_insert_fixup(rbtree, data);
-
- return data;
-}
-
-/*
- * Searches the red black tree, returns the data if key is found or NULL otherwise.
- *
- */
-ldns_rbnode_t *
-ldns_rbtree_search (ldns_rbtree_t *rbtree, const void *key)
-{
- ldns_rbnode_t *node;
-
- if (ldns_rbtree_find_less_equal(rbtree, key, &node)) {
- return node;
- } else {
- return NULL;
- }
-}
-
-/** helpers for delete: swap node colours */
-static void swap_int8(uint8_t* x, uint8_t* y)
-{
- uint8_t t = *x; *x = *y; *y = t;
-}
-
-/** helpers for delete: swap node pointers */
-static void swap_np(ldns_rbnode_t** x, ldns_rbnode_t** y)
-{
- ldns_rbnode_t* t = *x; *x = *y; *y = t;
-}
-
-/** Update parent pointers of child trees of 'parent' */
-static void change_parent_ptr(ldns_rbtree_t* rbtree, ldns_rbnode_t* parent, ldns_rbnode_t* old, ldns_rbnode_t* new)
-{
- if(parent == LDNS_RBTREE_NULL)
- {
- if(rbtree->root == old) rbtree->root = new;
- return;
- }
- if(parent->left == old) parent->left = new;
- if(parent->right == old) parent->right = new;
-}
-/** Update parent pointer of a node 'child' */
-static void change_child_ptr(ldns_rbnode_t* child, ldns_rbnode_t* old, ldns_rbnode_t* new)
-{
- if(child == LDNS_RBTREE_NULL) return;
- if(child->parent == old) child->parent = new;
-}
-
-ldns_rbnode_t*
-ldns_rbtree_delete(ldns_rbtree_t *rbtree, const void *key)
-{
- ldns_rbnode_t *to_delete;
- ldns_rbnode_t *child;
- if((to_delete = ldns_rbtree_search(rbtree, key)) == 0) return 0;
- rbtree->count--;
-
- /* make sure we have at most one non-leaf child */
- if(to_delete->left != LDNS_RBTREE_NULL &&
- to_delete->right != LDNS_RBTREE_NULL)
- {
- /* swap with smallest from right subtree (or largest from left) */
- ldns_rbnode_t *smright = to_delete->right;
- while(smright->left != LDNS_RBTREE_NULL)
- smright = smright->left;
- /* swap the smright and to_delete elements in the tree,
- * but the ldns_rbnode_t is first part of user data struct
- * so cannot just swap the keys and data pointers. Instead
- * readjust the pointers left,right,parent */
-
- /* swap colors - colors are tied to the position in the tree */
- swap_int8(&to_delete->color, &smright->color);
-
- /* swap child pointers in parents of smright/to_delete */
- change_parent_ptr(rbtree, to_delete->parent, to_delete, smright);
- if(to_delete->right != smright)
- change_parent_ptr(rbtree, smright->parent, smright, to_delete);
-
- /* swap parent pointers in children of smright/to_delete */
- change_child_ptr(smright->left, smright, to_delete);
- change_child_ptr(smright->left, smright, to_delete);
- change_child_ptr(smright->right, smright, to_delete);
- change_child_ptr(smright->right, smright, to_delete);
- change_child_ptr(to_delete->left, to_delete, smright);
- if(to_delete->right != smright)
- change_child_ptr(to_delete->right, to_delete, smright);
- if(to_delete->right == smright)
- {
- /* set up so after swap they work */
- to_delete->right = to_delete;
- smright->parent = smright;
- }
-
- /* swap pointers in to_delete/smright nodes */
- swap_np(&to_delete->parent, &smright->parent);
- swap_np(&to_delete->left, &smright->left);
- swap_np(&to_delete->right, &smright->right);
-
- /* now delete to_delete (which is at the location where the smright previously was) */
- }
-
- if(to_delete->left != LDNS_RBTREE_NULL) child = to_delete->left;
- else child = to_delete->right;
-
- /* unlink to_delete from the tree, replace to_delete with child */
- change_parent_ptr(rbtree, to_delete->parent, to_delete, child);
- change_child_ptr(child, to_delete, to_delete->parent);
-
- if(to_delete->color == RED)
- {
- /* if node is red then the child (black) can be swapped in */
- }
- else if(child->color == RED)
- {
- /* change child to BLACK, removing a RED node is no problem */
- if(child!=LDNS_RBTREE_NULL) child->color = BLACK;
- }
- else ldns_rbtree_delete_fixup(rbtree, child, to_delete->parent);
-
- /* unlink completely */
- to_delete->parent = LDNS_RBTREE_NULL;
- to_delete->left = LDNS_RBTREE_NULL;
- to_delete->right = LDNS_RBTREE_NULL;
- to_delete->color = BLACK;
- return to_delete;
-}
-
-static void ldns_rbtree_delete_fixup(ldns_rbtree_t* rbtree, ldns_rbnode_t* child, ldns_rbnode_t* child_parent)
-{
- ldns_rbnode_t* sibling;
- int go_up = 1;
-
- /* determine sibling to the node that is one-black short */
- if(child_parent->right == child) sibling = child_parent->left;
- else sibling = child_parent->right;
-
- while(go_up)
- {
- if(child_parent == LDNS_RBTREE_NULL)
- {
- /* removed parent==black from root, every path, so ok */
- return;
- }
-
- if(sibling->color == RED)
- { /* rotate to get a black sibling */
- child_parent->color = RED;
- sibling->color = BLACK;
- if(child_parent->right == child)
- ldns_rbtree_rotate_right(rbtree, child_parent);
- else ldns_rbtree_rotate_left(rbtree, child_parent);
- /* new sibling after rotation */
- if(child_parent->right == child) sibling = child_parent->left;
- else sibling = child_parent->right;
- }
-
- if(child_parent->color == BLACK
- && sibling->color == BLACK
- && sibling->left->color == BLACK
- && sibling->right->color == BLACK)
- { /* fixup local with recolor of sibling */
- if(sibling != LDNS_RBTREE_NULL)
- sibling->color = RED;
-
- child = child_parent;
- child_parent = child_parent->parent;
- /* prepare to go up, new sibling */
- if(child_parent->right == child) sibling = child_parent->left;
- else sibling = child_parent->right;
- }
- else go_up = 0;
- }
-
- if(child_parent->color == RED
- && sibling->color == BLACK
- && sibling->left->color == BLACK
- && sibling->right->color == BLACK)
- {
- /* move red to sibling to rebalance */
- if(sibling != LDNS_RBTREE_NULL)
- sibling->color = RED;
- child_parent->color = BLACK;
- return;
- }
-
- /* get a new sibling, by rotating at sibling. See which child
- of sibling is red */
- if(child_parent->right == child
- && sibling->color == BLACK
- && sibling->right->color == RED
- && sibling->left->color == BLACK)
- {
- sibling->color = RED;
- sibling->right->color = BLACK;
- ldns_rbtree_rotate_left(rbtree, sibling);
- /* new sibling after rotation */
- if(child_parent->right == child) sibling = child_parent->left;
- else sibling = child_parent->right;
- }
- else if(child_parent->left == child
- && sibling->color == BLACK
- && sibling->left->color == RED
- && sibling->right->color == BLACK)
- {
- sibling->color = RED;
- sibling->left->color = BLACK;
- ldns_rbtree_rotate_right(rbtree, sibling);
- /* new sibling after rotation */
- if(child_parent->right == child) sibling = child_parent->left;
- else sibling = child_parent->right;
- }
-
- /* now we have a black sibling with a red child. rotate and exchange colors. */
- sibling->color = child_parent->color;
- child_parent->color = BLACK;
- if(child_parent->right == child)
- {
- sibling->left->color = BLACK;
- ldns_rbtree_rotate_right(rbtree, child_parent);
- }
- else
- {
- sibling->right->color = BLACK;
- ldns_rbtree_rotate_left(rbtree, child_parent);
- }
-}
-
-int
-ldns_rbtree_find_less_equal(ldns_rbtree_t *rbtree, const void *key, ldns_rbnode_t **result)
-{
- int r;
- ldns_rbnode_t *node;
-
- /* We start at root... */
- node = rbtree->root;
-
- *result = NULL;
-
- /* While there are children... */
- while (node != LDNS_RBTREE_NULL) {
- r = rbtree->cmp(key, node->key);
- if (r == 0) {
- /* Exact match */
- *result = node;
- return 1;
- }
- if (r < 0) {
- node = node->left;
- } else {
- /* Temporary match */
- *result = node;
- node = node->right;
- }
- }
- return 0;
-}
-
-/*
- * Finds the first element in the red black tree
- *
- */
-ldns_rbnode_t *
-ldns_rbtree_first(const ldns_rbtree_t *rbtree)
-{
- ldns_rbnode_t *node = rbtree->root;
-
- if (rbtree->root != LDNS_RBTREE_NULL) {
- for (node = rbtree->root; node->left != LDNS_RBTREE_NULL; node = node->left);
- }
- return node;
-}
-
-ldns_rbnode_t *
-ldns_rbtree_last(const ldns_rbtree_t *rbtree)
-{
- ldns_rbnode_t *node = rbtree->root;
-
- if (rbtree->root != LDNS_RBTREE_NULL) {
- for (node = rbtree->root; node->right != LDNS_RBTREE_NULL; node = node->right);
- }
- return node;
-}
-
-/*
- * Returns the next node...
- *
- */
-ldns_rbnode_t *
-ldns_rbtree_next(ldns_rbnode_t *node)
-{
- ldns_rbnode_t *parent;
-
- if (node->right != LDNS_RBTREE_NULL) {
- /* One right, then keep on going left... */
- for (node = node->right;
- node->left != LDNS_RBTREE_NULL;
- node = node->left);
- } else {
- parent = node->parent;
- while (parent != LDNS_RBTREE_NULL && node == parent->right) {
- node = parent;
- parent = parent->parent;
- }
- node = parent;
- }
- return node;
-}
-
-ldns_rbnode_t *
-ldns_rbtree_previous(ldns_rbnode_t *node)
-{
- ldns_rbnode_t *parent;
-
- if (node->left != LDNS_RBTREE_NULL) {
- /* One left, then keep on going right... */
- for (node = node->left;
- node->right != LDNS_RBTREE_NULL;
- node = node->right);
- } else {
- parent = node->parent;
- while (parent != LDNS_RBTREE_NULL && node == parent->left) {
- node = parent;
- parent = parent->parent;
- }
- node = parent;
- }
- return node;
-}
-
-/**
- * split off elements number of elements from the start
- * of the name tree and return a new tree
- */
-ldns_rbtree_t *
-ldns_rbtree_split(ldns_rbtree_t *tree,
- size_t elements)
-{
- ldns_rbtree_t *new_tree;
- ldns_rbnode_t *cur_node;
- ldns_rbnode_t *move_node;
- size_t count = 0;
-
- new_tree = ldns_rbtree_create(tree->cmp);
-
- cur_node = ldns_rbtree_first(tree);
- while (count < elements && cur_node != LDNS_RBTREE_NULL) {
- move_node = ldns_rbtree_delete(tree, cur_node->key);
- (void)ldns_rbtree_insert(new_tree, move_node);
- cur_node = ldns_rbtree_first(tree);
- count++;
- }
-
- return new_tree;
-}
-
-/*
- * add all node from the second tree to the first (removing them from the
- * second), and fix up nsec(3)s if present
- */
-void
-ldns_rbtree_join(ldns_rbtree_t *tree1, ldns_rbtree_t *tree2)
-{
- ldns_traverse_postorder(tree2, ldns_rbtree_insert_vref, tree1);
-}
-
-/** recursive descent traverse */
-static void
-traverse_post(void (*func)(ldns_rbnode_t*, void*), void* arg,
- ldns_rbnode_t* node)
-{
- if(!node || node == LDNS_RBTREE_NULL)
- return;
- /* recurse */
- traverse_post(func, arg, node->left);
- traverse_post(func, arg, node->right);
- /* call user func */
- (*func)(node, arg);
-}
-
-void
-ldns_traverse_postorder(ldns_rbtree_t* tree,
- void (*func)(ldns_rbnode_t*, void*), void* arg)
-{
- traverse_post(func, arg, tree->root);
-}
diff --git a/ldns/rdata.c b/ldns/rdata.c
deleted file mode 100644
index caf853d..0000000
--- a/ldns/rdata.c
+++ /dev/null
@@ -1,760 +0,0 @@
-/*
- * rdata.c
- *
- * rdata implementation
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2004-2006
- *
- * See the file LICENSE for the license
- */
-
-#include <ldns/config.h>
-
-#include <ldns/ldns.h>
-
-/*
- * Access functions
- * do this as functions to get type checking
- */
-
-/* read */
-size_t
-ldns_rdf_size(const ldns_rdf *rd)
-{
- assert(rd != NULL);
- return rd->_size;
-}
-
-ldns_rdf_type
-ldns_rdf_get_type(const ldns_rdf *rd)
-{
- assert(rd != NULL);
- return rd->_type;
-}
-
-uint8_t *
-ldns_rdf_data(const ldns_rdf *rd)
-{
- assert(rd != NULL);
- return rd->_data;
-}
-
-/* write */
-void
-ldns_rdf_set_size(ldns_rdf *rd, size_t size)
-{
- assert(rd != NULL);
- rd->_size = size;
-}
-
-void
-ldns_rdf_set_type(ldns_rdf *rd, ldns_rdf_type type)
-{
- assert(rd != NULL);
- rd->_type = type;
-}
-
-void
-ldns_rdf_set_data(ldns_rdf *rd, void *data)
-{
- /* only copy the pointer */
- assert(rd != NULL);
- rd->_data = data;
-}
-
-/* for types that allow it, return
- * the native/host order type */
-uint8_t
-ldns_rdf2native_int8(const ldns_rdf *rd)
-{
- uint8_t data;
-
- /* only allow 8 bit rdfs */
- if (ldns_rdf_size(rd) != LDNS_RDF_SIZE_BYTE) {
- return 0;
- }
-
- memcpy(&data, ldns_rdf_data(rd), sizeof(data));
- return data;
-}
-
-uint16_t
-ldns_rdf2native_int16(const ldns_rdf *rd)
-{
- uint16_t data;
-
- /* only allow 16 bit rdfs */
- if (ldns_rdf_size(rd) != LDNS_RDF_SIZE_WORD) {
- return 0;
- }
-
- memcpy(&data, ldns_rdf_data(rd), sizeof(data));
- return ntohs(data);
-}
-
-uint32_t
-ldns_rdf2native_int32(const ldns_rdf *rd)
-{
- uint32_t data;
-
- /* only allow 32 bit rdfs */
- if (ldns_rdf_size(rd) != LDNS_RDF_SIZE_DOUBLEWORD) {
- return 0;
- }
-
- memcpy(&data, ldns_rdf_data(rd), sizeof(data));
- return ntohl(data);
-}
-
-time_t
-ldns_rdf2native_time_t(const ldns_rdf *rd)
-{
- uint32_t data;
-
- /* only allow 32 bit rdfs */
- if (ldns_rdf_size(rd) != LDNS_RDF_SIZE_DOUBLEWORD ||
- ldns_rdf_get_type(rd) != LDNS_RDF_TYPE_TIME) {
- return 0;
- }
- memcpy(&data, ldns_rdf_data(rd), sizeof(data));
- return (time_t)ntohl(data);
-}
-
-ldns_rdf *
-ldns_native2rdf_int8(ldns_rdf_type type, uint8_t value)
-{
- return ldns_rdf_new_frm_data(type, LDNS_RDF_SIZE_BYTE, &value);
-}
-
-ldns_rdf *
-ldns_native2rdf_int16(ldns_rdf_type type, uint16_t value)
-{
- uint16_t *rdf_data = LDNS_XMALLOC(uint16_t, 1);
- ldns_rdf* rdf;
- if (!rdf_data) {
- return NULL;
- }
- ldns_write_uint16(rdf_data, value);
- rdf = ldns_rdf_new(type, LDNS_RDF_SIZE_WORD, rdf_data);
- if(!rdf)
- LDNS_FREE(rdf_data);
- return rdf;
-}
-
-ldns_rdf *
-ldns_native2rdf_int32(ldns_rdf_type type, uint32_t value)
-{
- uint32_t *rdf_data = LDNS_XMALLOC(uint32_t, 1);
- ldns_rdf* rdf;
- if (!rdf_data) {
- return NULL;
- }
- ldns_write_uint32(rdf_data, value);
- rdf = ldns_rdf_new(type, LDNS_RDF_SIZE_DOUBLEWORD, rdf_data);
- if(!rdf)
- LDNS_FREE(rdf_data);
- return rdf;
-}
-
-ldns_rdf *
-ldns_native2rdf_int16_data(size_t size, uint8_t *data)
-{
- uint8_t *rdf_data = LDNS_XMALLOC(uint8_t, size + 2);
- ldns_rdf* rdf;
- if (!rdf_data) {
- return NULL;
- }
- ldns_write_uint16(rdf_data, size);
- memcpy(rdf_data + 2, data, size);
- rdf = ldns_rdf_new(LDNS_RDF_TYPE_INT16_DATA, size + 2, rdf_data);
- if(!rdf)
- LDNS_FREE(rdf_data);
- return rdf;
-}
-
-/* note: data must be allocated memory */
-ldns_rdf *
-ldns_rdf_new(ldns_rdf_type type, size_t size, void *data)
-{
- ldns_rdf *rd;
- rd = LDNS_MALLOC(ldns_rdf);
- if (!rd) {
- return NULL;
- }
- ldns_rdf_set_size(rd, size);
- ldns_rdf_set_type(rd, type);
- ldns_rdf_set_data(rd, data);
- return rd;
-}
-
-ldns_rdf *
-ldns_rdf_new_frm_data(ldns_rdf_type type, size_t size, const void *data)
-{
- ldns_rdf *rdf;
-
- /* if the size is too big, fail */
- if (size > LDNS_MAX_RDFLEN) {
- return NULL;
- }
-
- /* allocate space */
- rdf = LDNS_MALLOC(ldns_rdf);
- if (!rdf) {
- return NULL;
- }
- rdf->_data = LDNS_XMALLOC(uint8_t, size);
- if (!rdf->_data) {
- LDNS_FREE(rdf);
- return NULL;
- }
-
- /* set the values */
- ldns_rdf_set_type(rdf, type);
- ldns_rdf_set_size(rdf, size);
- memcpy(rdf->_data, data, size);
-
- return rdf;
-}
-
-ldns_rdf *
-ldns_rdf_clone(const ldns_rdf *rd)
-{
- assert(rd != NULL);
- return (ldns_rdf_new_frm_data( ldns_rdf_get_type(rd),
- ldns_rdf_size(rd), ldns_rdf_data(rd)));
-}
-
-void
-ldns_rdf_deep_free(ldns_rdf *rd)
-{
- if (rd) {
- if (rd->_data) {
- LDNS_FREE(rd->_data);
- }
- LDNS_FREE(rd);
- }
-}
-
-void
-ldns_rdf_free(ldns_rdf *rd)
-{
- if (rd) {
- LDNS_FREE(rd);
- }
-}
-
-ldns_rdf *
-ldns_rdf_new_frm_str(ldns_rdf_type type, const char *str)
-{
- ldns_rdf *rdf = NULL;
- ldns_status status;
-
- switch (type) {
- case LDNS_RDF_TYPE_DNAME:
- status = ldns_str2rdf_dname(&rdf, str);
- break;
- case LDNS_RDF_TYPE_INT8:
- status = ldns_str2rdf_int8(&rdf, str);
- break;
- case LDNS_RDF_TYPE_INT16:
- status = ldns_str2rdf_int16(&rdf, str);
- break;
- case LDNS_RDF_TYPE_INT32:
- status = ldns_str2rdf_int32(&rdf, str);
- break;
- case LDNS_RDF_TYPE_A:
- status = ldns_str2rdf_a(&rdf, str);
- break;
- case LDNS_RDF_TYPE_AAAA:
- status = ldns_str2rdf_aaaa(&rdf, str);
- break;
- case LDNS_RDF_TYPE_STR:
- status = ldns_str2rdf_str(&rdf, str);
- break;
- case LDNS_RDF_TYPE_APL:
- status = ldns_str2rdf_apl(&rdf, str);
- break;
- case LDNS_RDF_TYPE_B64:
- status = ldns_str2rdf_b64(&rdf, str);
- break;
- case LDNS_RDF_TYPE_B32_EXT:
- status = ldns_str2rdf_b32_ext(&rdf, str);
- break;
- case LDNS_RDF_TYPE_HEX:
- status = ldns_str2rdf_hex(&rdf, str);
- break;
- case LDNS_RDF_TYPE_NSEC:
- status = ldns_str2rdf_nsec(&rdf, str);
- break;
- case LDNS_RDF_TYPE_TYPE:
- status = ldns_str2rdf_type(&rdf, str);
- break;
- case LDNS_RDF_TYPE_CLASS:
- status = ldns_str2rdf_class(&rdf, str);
- break;
- case LDNS_RDF_TYPE_CERT_ALG:
- status = ldns_str2rdf_cert_alg(&rdf, str);
- break;
- case LDNS_RDF_TYPE_ALG:
- status = ldns_str2rdf_alg(&rdf, str);
- break;
- case LDNS_RDF_TYPE_UNKNOWN:
- status = ldns_str2rdf_unknown(&rdf, str);
- break;
- case LDNS_RDF_TYPE_TIME:
- status = ldns_str2rdf_time(&rdf, str);
- break;
- case LDNS_RDF_TYPE_PERIOD:
- status = ldns_str2rdf_period(&rdf, str);
- break;
- case LDNS_RDF_TYPE_HIP:
- status = ldns_str2rdf_hip(&rdf, str);
- break;
- case LDNS_RDF_TYPE_SERVICE:
- status = ldns_str2rdf_service(&rdf, str);
- break;
- case LDNS_RDF_TYPE_LOC:
- status = ldns_str2rdf_loc(&rdf, str);
- break;
- case LDNS_RDF_TYPE_WKS:
- status = ldns_str2rdf_wks(&rdf, str);
- break;
- case LDNS_RDF_TYPE_NSAP:
- status = ldns_str2rdf_nsap(&rdf, str);
- break;
- case LDNS_RDF_TYPE_ATMA:
- status = ldns_str2rdf_atma(&rdf, str);
- break;
- case LDNS_RDF_TYPE_IPSECKEY:
- status = ldns_str2rdf_ipseckey(&rdf, str);
- break;
- case LDNS_RDF_TYPE_NSEC3_SALT:
- status = ldns_str2rdf_nsec3_salt(&rdf, str);
- break;
- case LDNS_RDF_TYPE_NSEC3_NEXT_OWNER:
- status = ldns_str2rdf_b32_ext(&rdf, str);
- break;
- case LDNS_RDF_TYPE_ILNP64:
- status = ldns_str2rdf_ilnp64(&rdf, str);
- break;
- case LDNS_RDF_TYPE_EUI48:
- status = ldns_str2rdf_eui48(&rdf, str);
- break;
- case LDNS_RDF_TYPE_EUI64:
- status = ldns_str2rdf_eui64(&rdf, str);
- break;
- case LDNS_RDF_TYPE_TAG:
- status = ldns_str2rdf_tag(&rdf, str);
- break;
- case LDNS_RDF_TYPE_LONG_STR:
- status = ldns_str2rdf_long_str(&rdf, str);
- break;
- case LDNS_RDF_TYPE_CERTIFICATE_USAGE:
- status = ldns_str2rdf_certificate_usage(&rdf, str);
- break;
- case LDNS_RDF_TYPE_SELECTOR:
- status = ldns_str2rdf_selector(&rdf, str);
- break;
- case LDNS_RDF_TYPE_MATCHING_TYPE:
- status = ldns_str2rdf_matching_type(&rdf, str);
- break;
- case LDNS_RDF_TYPE_AMTRELAY:
- status = ldns_str2rdf_amtrelay(&rdf, str);
- break;
- case LDNS_RDF_TYPE_NONE:
- default:
- /* default default ??? */
- status = LDNS_STATUS_ERR;
- break;
- }
- if (LDNS_STATUS_OK == status) {
- ldns_rdf_set_type(rdf, type);
- return rdf;
- }
- if (rdf) {
- LDNS_FREE(rdf);
- }
- return NULL;
-}
-
-ldns_status
-ldns_rdf_new_frm_fp(ldns_rdf **rdf, ldns_rdf_type type, FILE *fp)
-{
- return ldns_rdf_new_frm_fp_l(rdf, type, fp, NULL);
-}
-
-ldns_status
-ldns_rdf_new_frm_fp_l(ldns_rdf **rdf, ldns_rdf_type type, FILE *fp, int *line_nr)
-{
- char *line;
- ldns_rdf *r;
- ssize_t t;
-
- line = LDNS_XMALLOC(char, LDNS_MAX_LINELEN + 1);
- if (!line) {
- return LDNS_STATUS_MEM_ERR;
- }
-
- /* read an entire line in from the file */
- if ((t = ldns_fget_token_l(fp, line, LDNS_PARSE_SKIP_SPACE, 0, line_nr)) == -1 || t == 0) {
- LDNS_FREE(line);
- return LDNS_STATUS_SYNTAX_RDATA_ERR;
- }
- r = ldns_rdf_new_frm_str(type, (const char*) line);
- LDNS_FREE(line);
- if (rdf) {
- *rdf = r;
- return LDNS_STATUS_OK;
- } else {
- return LDNS_STATUS_NULL;
- }
-}
-
-ldns_rdf *
-ldns_rdf_address_reverse(const ldns_rdf *rd)
-{
- uint8_t buf_4[LDNS_IP4ADDRLEN];
- uint8_t buf_6[LDNS_IP6ADDRLEN * 2];
- ldns_rdf *rev;
- ldns_rdf *in_addr;
- ldns_rdf *ret_dname;
- uint8_t octet;
- uint8_t nnibble;
- uint8_t nibble;
- uint8_t i, j;
-
- char *char_dname;
- int nbit;
-
- if (ldns_rdf_get_type(rd) != LDNS_RDF_TYPE_A &&
- ldns_rdf_get_type(rd) != LDNS_RDF_TYPE_AAAA) {
- return NULL;
- }
-
- in_addr = NULL;
- ret_dname = NULL;
-
- switch(ldns_rdf_get_type(rd)) {
- case LDNS_RDF_TYPE_A:
- /* the length of the buffer is 4 */
- buf_4[3] = ldns_rdf_data(rd)[0];
- buf_4[2] = ldns_rdf_data(rd)[1];
- buf_4[1] = ldns_rdf_data(rd)[2];
- buf_4[0] = ldns_rdf_data(rd)[3];
- in_addr = ldns_dname_new_frm_str("in-addr.arpa.");
- if (!in_addr) {
- return NULL;
- }
- /* make a new rdf and convert that back */
- rev = ldns_rdf_new_frm_data( LDNS_RDF_TYPE_A,
- LDNS_IP4ADDRLEN, (void*)&buf_4);
- if (!rev) {
- LDNS_FREE(in_addr);
- return NULL;
- }
-
- /* convert rev to a string */
- char_dname = ldns_rdf2str(rev);
- if (!char_dname) {
- LDNS_FREE(in_addr);
- ldns_rdf_deep_free(rev);
- return NULL;
- }
- /* transform back to rdf with type dname */
- ret_dname = ldns_dname_new_frm_str(char_dname);
- if (!ret_dname) {
- LDNS_FREE(in_addr);
- ldns_rdf_deep_free(rev);
- LDNS_FREE(char_dname);
- return NULL;
- }
- /* not needed anymore */
- ldns_rdf_deep_free(rev);
- LDNS_FREE(char_dname);
- break;
- case LDNS_RDF_TYPE_AAAA:
- /* some foo magic to reverse the nibbles ... */
-
- for (nbit = 127; nbit >= 0; nbit = nbit - 4) {
- /* calculate octet (8 bit) */
- octet = ( ((unsigned int) nbit) & 0x78) >> 3;
- /* calculate nibble */
- nnibble = ( ((unsigned int) nbit) & 0x04) >> 2;
- /* extract nibble */
- nibble = (ldns_rdf_data(rd)[octet] & ( 0xf << (4 * (1 -
- nnibble)) ) ) >> ( 4 * (1 -
- nnibble));
-
- buf_6[(LDNS_IP6ADDRLEN * 2 - 1) -
- (octet * 2 + nnibble)] =
- (uint8_t)ldns_int_to_hexdigit((int)nibble);
- }
-
- char_dname = LDNS_XMALLOC(char, (LDNS_IP6ADDRLEN * 4));
- if (!char_dname) {
- return NULL;
- }
- char_dname[LDNS_IP6ADDRLEN * 4 - 1] = '\0'; /* closure */
-
- /* walk the string and add . 's */
- for (i = 0, j = 0; i < LDNS_IP6ADDRLEN * 2; i++, j = j + 2) {
- char_dname[j] = (char)buf_6[i];
- if (i != LDNS_IP6ADDRLEN * 2 - 1) {
- char_dname[j + 1] = '.';
- }
- }
- in_addr = ldns_dname_new_frm_str("ip6.arpa.");
- if (!in_addr) {
- LDNS_FREE(char_dname);
- return NULL;
- }
-
- /* convert rev to a string */
- ret_dname = ldns_dname_new_frm_str(char_dname);
- LDNS_FREE(char_dname);
- if (!ret_dname) {
- ldns_rdf_deep_free(in_addr);
- return NULL;
- }
- break;
- default:
- break;
- }
- /* add the suffix */
- rev = ldns_dname_cat_clone(ret_dname, in_addr);
-
- ldns_rdf_deep_free(ret_dname);
- ldns_rdf_deep_free(in_addr);
- return rev;
-}
-
-ldns_status
-ldns_rdf_hip_get_alg_hit_pk(ldns_rdf *rdf, uint8_t* alg,
- uint8_t *hit_size, uint8_t** hit,
- uint16_t *pk_size, uint8_t** pk)
-{
- uint8_t *data;
- size_t rdf_size;
-
- if (! rdf || ! alg || ! hit || ! hit_size || ! pk || ! pk_size) {
- return LDNS_STATUS_INVALID_POINTER;
- } else if (ldns_rdf_get_type(rdf) != LDNS_RDF_TYPE_HIP) {
- return LDNS_STATUS_INVALID_RDF_TYPE;
- } else if ((rdf_size = ldns_rdf_size(rdf)) < 6) {
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
- data = ldns_rdf_data(rdf);
- *hit_size = data[0];
- *alg = data[1];
- *pk_size = ldns_read_uint16(data + 2);
- *hit = data + 4;
- *pk = data + 4 + *hit_size;
- if (*hit_size == 0 || *pk_size == 0 ||
- rdf_size < (size_t) *hit_size + *pk_size + 4) {
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
- return LDNS_STATUS_OK;
-}
-
-ldns_status
-ldns_rdf_hip_new_frm_alg_hit_pk(ldns_rdf** rdf, uint8_t alg,
- uint8_t hit_size, uint8_t *hit,
- uint16_t pk_size, uint8_t *pk)
-{
- uint8_t *data;
-
- if (! rdf) {
- return LDNS_STATUS_INVALID_POINTER;
- }
- if (4 + hit_size + pk_size > LDNS_MAX_RDFLEN) {
- return LDNS_STATUS_RDATA_OVERFLOW;
- }
- data = LDNS_XMALLOC(uint8_t, 4 + hit_size + pk_size);
- if (data == NULL) {
- return LDNS_STATUS_MEM_ERR;
- }
- data[0] = hit_size;
- data[1] = alg;
- ldns_write_uint16(data + 2, pk_size);
- memcpy(data + 4, hit, hit_size);
- memcpy(data + 4 + hit_size, pk, pk_size);
- *rdf = ldns_rdf_new(LDNS_RDF_TYPE_HIP, 4 + hit_size + pk_size, data);
- if (! *rdf) {
- LDNS_FREE(data);
- return LDNS_STATUS_MEM_ERR;
- }
- return LDNS_STATUS_OK;
-}
-
-ldns_status
-ldns_octet(char *word, size_t *length)
-{
- char *s;
- char *p;
- *length = 0;
-
- for (s = p = word; *s != '\0'; s++,p++) {
- switch (*s) {
- case '.':
- if (s[1] == '.') {
- return LDNS_STATUS_EMPTY_LABEL;
- }
- *p = *s;
- (*length)++;
- break;
- case '\\':
- if ('0' <= s[1] && s[1] <= '9' &&
- '0' <= s[2] && s[2] <= '9' &&
- '0' <= s[3] && s[3] <= '9') {
- /* \DDD seen */
- int val = ((s[1] - '0') * 100 +
- (s[2] - '0') * 10 + (s[3] - '0'));
-
- if (0 <= val && val <= 255) {
- /* this also handles \0 */
- s += 3;
- *p = val;
- (*length)++;
- } else {
- return LDNS_STATUS_DDD_OVERFLOW;
- }
- } else {
- /* an espaced character, like \<space> ?
- * remove the '\' keep the rest */
- *p = *++s;
- (*length)++;
- }
- break;
- case '\"':
- /* non quoted " Is either first or the last character in
- * the string */
-
- *p = *++s; /* skip it */
- (*length)++;
- /* I'm not sure if this is needed in libdns... MG */
- if ( *s == '\0' ) {
- /* ok, it was the last one */
- *p = '\0';
- return LDNS_STATUS_OK;
- }
- break;
- default:
- *p = *s;
- (*length)++;
- break;
- }
- }
- *p = '\0';
- return LDNS_STATUS_OK;
-}
-
-int
-ldns_rdf_compare(const ldns_rdf *rd1, const ldns_rdf *rd2)
-{
- uint16_t i1, i2, i;
- uint8_t *d1, *d2;
-
- /* only when both are not NULL we can say anything about them */
- if (!rd1 && !rd2) {
- return 0;
- }
- if (!rd1 || !rd2) {
- return -1;
- }
- i1 = ldns_rdf_size(rd1);
- i2 = ldns_rdf_size(rd2);
-
- if (i1 < i2) {
- return -1;
- } else if (i1 > i2) {
- return +1;
- } else {
- d1 = (uint8_t*)ldns_rdf_data(rd1);
- d2 = (uint8_t*)ldns_rdf_data(rd2);
- for(i = 0; i < i1; i++) {
- if (d1[i] < d2[i]) {
- return -1;
- } else if (d1[i] > d2[i]) {
- return +1;
- }
- }
- }
- return 0;
-}
-
-uint32_t
-ldns_str2period(const char *nptr, const char **endptr)
-{
- int sign = 0;
- uint32_t i = 0;
- uint32_t seconds = 0;
-
- for(*endptr = nptr; **endptr; (*endptr)++) {
- switch (**endptr) {
- case ' ':
- case '\t':
- break;
- case '-':
- if(sign == 0) {
- sign = -1;
- } else {
- return seconds;
- }
- break;
- case '+':
- if(sign == 0) {
- sign = 1;
- } else {
- return seconds;
- }
- break;
- case 's':
- case 'S':
- seconds += i;
- i = 0;
- break;
- case 'm':
- case 'M':
- seconds += i * 60;
- i = 0;
- break;
- case 'h':
- case 'H':
- seconds += i * 60 * 60;
- i = 0;
- break;
- case 'd':
- case 'D':
- seconds += i * 60 * 60 * 24;
- i = 0;
- break;
- case 'w':
- case 'W':
- seconds += i * 60 * 60 * 24 * 7;
- i = 0;
- break;
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- i *= 10;
- i += (**endptr - '0');
- break;
- default:
- seconds += i;
- /* disregard signedness */
- return seconds;
- }
- }
- seconds += i;
- /* disregard signedness */
- return seconds;
-}
diff --git a/ldns/resolver.c b/ldns/resolver.c
deleted file mode 100644
index 84dfe95..0000000
--- a/ldns/resolver.c
+++ /dev/null
@@ -1,1598 +0,0 @@
-/*
- * resolver.c
- *
- * resolver implementation
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2004-2006
- *
- * See the file LICENSE for the license
- */
-
-#include <ldns/config.h>
-
-#include <ldns/ldns.h>
-#include <strings.h>
-
-/* Access function for reading
- * and setting the different Resolver
- * options */
-
-/* read */
-uint16_t
-ldns_resolver_port(const ldns_resolver *r)
-{
- return r->_port;
-}
-
-ldns_rdf *
-ldns_resolver_source(const ldns_resolver *r)
-{
- return r->_source;
-}
-
-uint16_t
-ldns_resolver_edns_udp_size(const ldns_resolver *r)
-{
- return r->_edns_udp_size;
-}
-
-uint8_t
-ldns_resolver_retry(const ldns_resolver *r)
-{
- return r->_retry;
-}
-
-uint8_t
-ldns_resolver_retrans(const ldns_resolver *r)
-{
- return r->_retrans;
-}
-
-bool
-ldns_resolver_fallback(const ldns_resolver *r)
-{
- return r->_fallback;
-}
-
-uint8_t
-ldns_resolver_ip6(const ldns_resolver *r)
-{
- return r->_ip6;
-}
-
-bool
-ldns_resolver_recursive(const ldns_resolver *r)
-{
- return r->_recursive;
-}
-
-bool
-ldns_resolver_debug(const ldns_resolver *r)
-{
- return r->_debug;
-}
-
-bool
-ldns_resolver_dnsrch(const ldns_resolver *r)
-{
- return r->_dnsrch;
-}
-
-bool
-ldns_resolver_fail(const ldns_resolver *r)
-{
- return r->_fail;
-}
-
-bool
-ldns_resolver_defnames(const ldns_resolver *r)
-{
- return r->_defnames;
-}
-
-ldns_rdf *
-ldns_resolver_domain(const ldns_resolver *r)
-{
- return r->_domain;
-}
-
-ldns_rdf **
-ldns_resolver_searchlist(const ldns_resolver *r)
-{
- return r->_searchlist;
-}
-
-ldns_rdf **
-ldns_resolver_nameservers(const ldns_resolver *r)
-{
- return r->_nameservers;
-}
-
-size_t
-ldns_resolver_nameserver_count(const ldns_resolver *r)
-{
- return r->_nameserver_count;
-}
-
-bool
-ldns_resolver_dnssec(const ldns_resolver *r)
-{
- return r->_dnssec;
-}
-
-bool
-ldns_resolver_dnssec_cd(const ldns_resolver *r)
-{
- return r->_dnssec_cd;
-}
-
-ldns_rr_list *
-ldns_resolver_dnssec_anchors(const ldns_resolver *r)
-{
- return r->_dnssec_anchors;
-}
-
-bool
-ldns_resolver_trusted_key(const ldns_resolver *r, ldns_rr_list * keys, ldns_rr_list * trusted_keys)
-{
- size_t i;
- bool result = false;
-
- ldns_rr_list * trust_anchors;
- ldns_rr * cur_rr;
-
- if (!r || !keys) { return false; }
-
- trust_anchors = ldns_resolver_dnssec_anchors(r);
-
- if (!trust_anchors) { return false; }
-
- for (i = 0; i < ldns_rr_list_rr_count(keys); i++) {
-
- cur_rr = ldns_rr_list_rr(keys, i);
- if (ldns_rr_list_contains_rr(trust_anchors, cur_rr)) {
- if (trusted_keys) { ldns_rr_list_push_rr(trusted_keys, cur_rr); }
- result = true;
- }
- }
-
- return result;
-}
-
-bool
-ldns_resolver_igntc(const ldns_resolver *r)
-{
- return r->_igntc;
-}
-
-bool
-ldns_resolver_usevc(const ldns_resolver *r)
-{
- return r->_usevc;
-}
-
-size_t *
-ldns_resolver_rtt(const ldns_resolver *r)
-{
- return r->_rtt;
-}
-
-size_t
-ldns_resolver_nameserver_rtt(const ldns_resolver *r, size_t pos)
-{
- size_t *rtt;
-
- assert(r != NULL);
-
- rtt = ldns_resolver_rtt(r);
-
- if (pos >= ldns_resolver_nameserver_count(r)) {
- /* error ?*/
- return 0;
- } else {
- return rtt[pos];
- }
-
-}
-
-struct timeval
-ldns_resolver_timeout(const ldns_resolver *r)
-{
- return r->_timeout;
-}
-
-const char *
-ldns_resolver_tsig_keyname(const ldns_resolver *r)
-{
- return r->_tsig_keyname;
-}
-
-const char *
-ldns_resolver_tsig_algorithm(const ldns_resolver *r)
-{
- return r->_tsig_algorithm;
-}
-
-const char *
-ldns_resolver_tsig_keydata(const ldns_resolver *r)
-{
- return r->_tsig_keydata;
-}
-
-bool
-ldns_resolver_random(const ldns_resolver *r)
-{
- return r->_random;
-}
-
-size_t
-ldns_resolver_searchlist_count(const ldns_resolver *r)
-{
- return r->_searchlist_count;
-}
-
-/* write */
-void
-ldns_resolver_set_port(ldns_resolver *r, uint16_t p)
-{
- r->_port = p;
-}
-
-void
-ldns_resolver_set_source(ldns_resolver *r, ldns_rdf *s)
-{
- r->_source = s;
-}
-
-ldns_rdf *
-ldns_resolver_pop_nameserver(ldns_resolver *r)
-{
- ldns_rdf **nameservers;
- ldns_rdf *pop;
- size_t ns_count;
- size_t *rtt;
-
- assert(r != NULL);
-
- ns_count = ldns_resolver_nameserver_count(r);
- nameservers = ldns_resolver_nameservers(r);
- rtt = ldns_resolver_rtt(r);
- if (ns_count == 0 || !nameservers) {
- return NULL;
- }
-
- pop = nameservers[ns_count - 1];
-
- if (ns_count == 1) {
- LDNS_FREE(nameservers);
- LDNS_FREE(rtt);
-
- ldns_resolver_set_nameservers(r, NULL);
- ldns_resolver_set_rtt(r, NULL);
- } else {
- nameservers = LDNS_XREALLOC(nameservers, ldns_rdf *,
- (ns_count - 1));
- rtt = LDNS_XREALLOC(rtt, size_t, (ns_count - 1));
-
- ldns_resolver_set_nameservers(r, nameservers);
- ldns_resolver_set_rtt(r, rtt);
- }
- /* decr the count */
- ldns_resolver_dec_nameserver_count(r);
- return pop;
-}
-
-ldns_status
-ldns_resolver_push_nameserver(ldns_resolver *r, const ldns_rdf *n)
-{
- ldns_rdf **nameservers;
- size_t ns_count;
- size_t *rtt;
-
- if (ldns_rdf_get_type(n) != LDNS_RDF_TYPE_A &&
- ldns_rdf_get_type(n) != LDNS_RDF_TYPE_AAAA) {
- return LDNS_STATUS_ERR;
- }
-
- ns_count = ldns_resolver_nameserver_count(r);
- nameservers = ldns_resolver_nameservers(r);
- rtt = ldns_resolver_rtt(r);
-
- /* make room for the next one */
- if (ns_count == 0) {
- nameservers = LDNS_XMALLOC(ldns_rdf *, 1);
- } else {
- nameservers = LDNS_XREALLOC(nameservers, ldns_rdf *, (ns_count + 1));
- }
- if(!nameservers)
- return LDNS_STATUS_MEM_ERR;
-
- /* set the new value in the resolver */
- ldns_resolver_set_nameservers(r, nameservers);
-
- /* don't forget the rtt */
- if (ns_count == 0) {
- rtt = LDNS_XMALLOC(size_t, 1);
- } else {
- rtt = LDNS_XREALLOC(rtt, size_t, (ns_count + 1));
- }
- if(!rtt)
- return LDNS_STATUS_MEM_ERR;
-
- /* slide n in its slot. */
- /* we clone it here, because then we can free the original
- * rr's where it stood */
- nameservers[ns_count] = ldns_rdf_clone(n);
- rtt[ns_count] = LDNS_RESOLV_RTT_MIN;
- ldns_resolver_incr_nameserver_count(r);
- ldns_resolver_set_rtt(r, rtt);
- return LDNS_STATUS_OK;
-}
-
-ldns_status
-ldns_resolver_push_nameserver_rr(ldns_resolver *r, const ldns_rr *rr)
-{
- ldns_rdf *address;
- if ((!rr) || (ldns_rr_get_type(rr) != LDNS_RR_TYPE_A &&
- ldns_rr_get_type(rr) != LDNS_RR_TYPE_AAAA)) {
- return LDNS_STATUS_ERR;
- }
- address = ldns_rr_rdf(rr, 0); /* extract the ip number */
- if (address) {
- return ldns_resolver_push_nameserver(r, address);
- } else {
- return LDNS_STATUS_ERR;
- }
-}
-
-ldns_status
-ldns_resolver_push_nameserver_rr_list(ldns_resolver *r, const ldns_rr_list *rrlist)
-{
- ldns_rr *rr;
- ldns_status stat;
- size_t i;
-
- stat = LDNS_STATUS_OK;
- if (rrlist) {
- for(i = 0; i < ldns_rr_list_rr_count(rrlist); i++) {
- rr = ldns_rr_list_rr(rrlist, i);
- if (ldns_resolver_push_nameserver_rr(r, rr) != LDNS_STATUS_OK) {
- stat = LDNS_STATUS_ERR;
- break;
- }
- }
- return stat;
- } else {
- return LDNS_STATUS_ERR;
- }
-}
-
-void
-ldns_resolver_set_edns_udp_size(ldns_resolver *r, uint16_t s)
-{
- r->_edns_udp_size = s;
-}
-
-void
-ldns_resolver_set_recursive(ldns_resolver *r, bool re)
-{
- r->_recursive = re;
-}
-
-void
-ldns_resolver_set_dnssec(ldns_resolver *r, bool d)
-{
- r->_dnssec = d;
-}
-
-void
-ldns_resolver_set_dnssec_cd(ldns_resolver *r, bool d)
-{
- r->_dnssec_cd = d;
-}
-
-void
-ldns_resolver_set_dnssec_anchors(ldns_resolver *r, ldns_rr_list * l)
-{
- r->_dnssec_anchors = l;
-}
-
-ldns_status
-ldns_resolver_push_dnssec_anchor(ldns_resolver *r, ldns_rr *rr)
-{
- ldns_rr_list * trust_anchors;
-
- if ((!rr) || (ldns_rr_get_type(rr) != LDNS_RR_TYPE_DNSKEY &&
- ldns_rr_get_type(rr) != LDNS_RR_TYPE_DS)) {
-
- return LDNS_STATUS_ERR;
- }
-
- if (!(trust_anchors = ldns_resolver_dnssec_anchors(r))) { /* Initialize */
- trust_anchors = ldns_rr_list_new();
- ldns_resolver_set_dnssec_anchors(r, trust_anchors);
- }
-
- return (ldns_rr_list_push_rr(trust_anchors, ldns_rr_clone(rr))) ? LDNS_STATUS_OK : LDNS_STATUS_ERR;
-}
-
-void
-ldns_resolver_set_igntc(ldns_resolver *r, bool i)
-{
- r->_igntc = i;
-}
-
-void
-ldns_resolver_set_usevc(ldns_resolver *r, bool vc)
-{
- r->_usevc = vc;
-}
-
-void
-ldns_resolver_set_debug(ldns_resolver *r, bool d)
-{
- r->_debug = d;
-}
-
-void
-ldns_resolver_set_ip6(ldns_resolver *r, uint8_t ip6)
-{
- r->_ip6 = ip6;
-}
-
-void
-ldns_resolver_set_fail(ldns_resolver *r, bool f)
-{
- r->_fail =f;
-}
-
-static void
-ldns_resolver_set_searchlist_count(ldns_resolver *r, size_t c)
-{
- r->_searchlist_count = c;
-}
-
-void
-ldns_resolver_set_nameserver_count(ldns_resolver *r, size_t c)
-{
- r->_nameserver_count = c;
-}
-
-void
-ldns_resolver_set_dnsrch(ldns_resolver *r, bool d)
-{
- r->_dnsrch = d;
-}
-
-void
-ldns_resolver_set_retry(ldns_resolver *r, uint8_t retry)
-{
- r->_retry = retry;
-}
-
-void
-ldns_resolver_set_retrans(ldns_resolver *r, uint8_t retrans)
-{
- r->_retrans = retrans;
-}
-
-void
-ldns_resolver_set_fallback(ldns_resolver *r, bool fallback)
-{
- r->_fallback = fallback;
-}
-
-void
-ldns_resolver_set_nameservers(ldns_resolver *r, ldns_rdf **n)
-{
- r->_nameservers = n;
-}
-
-void
-ldns_resolver_set_defnames(ldns_resolver *r, bool d)
-{
- r->_defnames = d;
-}
-
-void
-ldns_resolver_set_rtt(ldns_resolver *r, size_t *rtt)
-{
- r->_rtt = rtt;
-}
-
-void
-ldns_resolver_set_nameserver_rtt(ldns_resolver *r, size_t pos, size_t value)
-{
- size_t *rtt;
-
- assert(r != NULL);
-
- rtt = ldns_resolver_rtt(r);
-
- if (pos >= ldns_resolver_nameserver_count(r)) {
- /* error ?*/
- } else {
- rtt[pos] = value;
- }
-
-}
-
-void
-ldns_resolver_incr_nameserver_count(ldns_resolver *r)
-{
- size_t c;
-
- c = ldns_resolver_nameserver_count(r);
- ldns_resolver_set_nameserver_count(r, ++c);
-}
-
-void
-ldns_resolver_dec_nameserver_count(ldns_resolver *r)
-{
- size_t c;
-
- c = ldns_resolver_nameserver_count(r);
- if (c == 0) {
- return;
- } else {
- ldns_resolver_set_nameserver_count(r, --c);
- }
-}
-
-void
-ldns_resolver_set_domain(ldns_resolver *r, ldns_rdf *d)
-{
- r->_domain = d;
-}
-
-void
-ldns_resolver_set_timeout(ldns_resolver *r, struct timeval timeout)
-{
- r->_timeout.tv_sec = timeout.tv_sec;
- r->_timeout.tv_usec = timeout.tv_usec;
-}
-
-void
-ldns_resolver_push_searchlist(ldns_resolver *r, ldns_rdf *d)
-{
- ldns_rdf **searchlist;
- size_t list_count;
-
- if (ldns_rdf_get_type(d) != LDNS_RDF_TYPE_DNAME) {
- return;
- }
-
- list_count = ldns_resolver_searchlist_count(r);
- searchlist = ldns_resolver_searchlist(r);
-
- searchlist = LDNS_XREALLOC(searchlist, ldns_rdf *, (list_count + 1));
- if (searchlist) {
- r->_searchlist = searchlist;
-
- searchlist[list_count] = ldns_rdf_clone(d);
- ldns_resolver_set_searchlist_count(r, list_count + 1);
- } /* no way to report mem err */
-}
-
-void
-ldns_resolver_set_tsig_keyname(ldns_resolver *r, const char *tsig_keyname)
-{
- LDNS_FREE(r->_tsig_keyname);
- r->_tsig_keyname = strdup(tsig_keyname);
-}
-
-void
-ldns_resolver_set_tsig_algorithm(ldns_resolver *r, const char *tsig_algorithm)
-{
- LDNS_FREE(r->_tsig_algorithm);
- r->_tsig_algorithm = strdup(tsig_algorithm);
-}
-
-void
-ldns_resolver_set_tsig_keydata(ldns_resolver *r, const char *tsig_keydata)
-{
- LDNS_FREE(r->_tsig_keydata);
- r->_tsig_keydata = strdup(tsig_keydata);
-}
-
-void
-ldns_resolver_set_random(ldns_resolver *r, bool b)
-{
- r->_random = b;
-}
-
-/* more sophisticated functions */
-ldns_resolver *
-ldns_resolver_new(void)
-{
- ldns_resolver *r;
-
- r = LDNS_MALLOC(ldns_resolver);
- if (!r) {
- return NULL;
- }
-
- r->_searchlist = NULL;
- r->_nameservers = NULL;
- r->_rtt = NULL;
-
- /* defaults are filled out */
- ldns_resolver_set_searchlist_count(r, 0);
- ldns_resolver_set_nameserver_count(r, 0);
- ldns_resolver_set_usevc(r, 0);
- ldns_resolver_set_port(r, LDNS_PORT);
- ldns_resolver_set_domain(r, NULL);
- ldns_resolver_set_defnames(r, false);
- ldns_resolver_set_retry(r, 3);
- ldns_resolver_set_retrans(r, 2);
- ldns_resolver_set_fallback(r, true);
- ldns_resolver_set_fail(r, false);
- ldns_resolver_set_edns_udp_size(r, 0);
- ldns_resolver_set_dnssec(r, false);
- ldns_resolver_set_dnssec_cd(r, false);
- ldns_resolver_set_dnssec_anchors(r, NULL);
- ldns_resolver_set_ip6(r, LDNS_RESOLV_INETANY);
- ldns_resolver_set_igntc(r, false);
- ldns_resolver_set_recursive(r, false);
- ldns_resolver_set_dnsrch(r, true);
- ldns_resolver_set_source(r, NULL);
- ldns_resolver_set_ixfr_serial(r, 0);
-
- /* randomize the nameserver to be queried
- * when there are multiple
- */
- ldns_resolver_set_random(r, true);
-
- ldns_resolver_set_debug(r, 0);
-
- r->_timeout.tv_sec = LDNS_DEFAULT_TIMEOUT_SEC;
- r->_timeout.tv_usec = LDNS_DEFAULT_TIMEOUT_USEC;
-
- r->_socket = -1;
- r->_axfr_soa_count = 0;
- r->_axfr_i = 0;
- r->_cur_axfr_pkt = NULL;
-
- r->_tsig_keyname = NULL;
- r->_tsig_keydata = NULL;
- r->_tsig_algorithm = NULL;
- return r;
-}
-
-ldns_resolver *
-ldns_resolver_clone(ldns_resolver *src)
-{
- ldns_resolver *dst;
- size_t i;
-
- assert(src != NULL);
-
- if (!(dst = LDNS_MALLOC(ldns_resolver))) return NULL;
- (void) memcpy(dst, src, sizeof(ldns_resolver));
-
- if (dst->_searchlist_count == 0)
- dst->_searchlist = NULL;
- else {
- if (!(dst->_searchlist =
- LDNS_XMALLOC(ldns_rdf *, dst->_searchlist_count)))
- goto error;
- for (i = 0; i < dst->_searchlist_count; i++)
- if (!(dst->_searchlist[i] =
- ldns_rdf_clone(src->_searchlist[i]))) {
- dst->_searchlist_count = i;
- goto error_searchlist;
- }
- }
- if (dst->_nameserver_count == 0) {
- dst->_nameservers = NULL;
- dst->_rtt = NULL;
- } else {
- if (!(dst->_nameservers =
- LDNS_XMALLOC(ldns_rdf *, dst->_nameserver_count)))
- goto error_searchlist;
- for (i = 0; i < dst->_nameserver_count; i++)
- if (!(dst->_nameservers[i] =
- ldns_rdf_clone(src->_nameservers[i]))) {
- dst->_nameserver_count = i;
- goto error_nameservers;
- }
- if (!(dst->_rtt =
- LDNS_XMALLOC(size_t, dst->_nameserver_count)))
- goto error_nameservers;
- (void) memcpy(dst->_rtt, src->_rtt,
- sizeof(size_t) * dst->_nameserver_count);
- }
- if (dst->_domain && (!(dst->_domain = ldns_rdf_clone(src->_domain))))
- goto error_rtt;
-
- if (dst->_tsig_keyname &&
- (!(dst->_tsig_keyname = strdup(src->_tsig_keyname))))
- goto error_domain;
-
- if (dst->_tsig_keydata &&
- (!(dst->_tsig_keydata = strdup(src->_tsig_keydata))))
- goto error_tsig_keyname;
-
- if (dst->_tsig_algorithm &&
- (!(dst->_tsig_algorithm = strdup(src->_tsig_algorithm))))
- goto error_tsig_keydata;
-
- if (dst->_cur_axfr_pkt &&
- (!(dst->_cur_axfr_pkt = ldns_pkt_clone(src->_cur_axfr_pkt))))
- goto error_tsig_algorithm;
-
- if (dst->_dnssec_anchors &&
- (!(dst->_dnssec_anchors=ldns_rr_list_clone(src->_dnssec_anchors))))
- goto error_cur_axfr_pkt;
-
- return dst;
-
-error_cur_axfr_pkt:
- ldns_pkt_free(dst->_cur_axfr_pkt);
-error_tsig_algorithm:
- LDNS_FREE(dst->_tsig_algorithm);
-error_tsig_keydata:
- LDNS_FREE(dst->_tsig_keydata);
-error_tsig_keyname:
- LDNS_FREE(dst->_tsig_keyname);
-error_domain:
- ldns_rdf_deep_free(dst->_domain);
-error_rtt:
- LDNS_FREE(dst->_rtt);
-error_nameservers:
- for (i = 0; i < dst->_nameserver_count; i++)
- ldns_rdf_deep_free(dst->_nameservers[i]);
- LDNS_FREE(dst->_nameservers);
-error_searchlist:
- for (i = 0; i < dst->_searchlist_count; i++)
- ldns_rdf_deep_free(dst->_searchlist[i]);
- LDNS_FREE(dst->_searchlist);
-error:
- LDNS_FREE(dst);
- return NULL;
-}
-
-
-ldns_status
-ldns_resolver_new_frm_fp(ldns_resolver **res, FILE *fp)
-{
- return ldns_resolver_new_frm_fp_l(res, fp, NULL);
-}
-
-ldns_status
-ldns_resolver_new_frm_fp_l(ldns_resolver **res, FILE *fp, int *line_nr)
-{
- ldns_resolver *r = NULL;
- const char *keyword[LDNS_RESOLV_KEYWORDS];
- char word[LDNS_MAX_LINELEN + 1];
- int8_t expect;
- uint8_t i;
- ldns_rdf *tmp;
-#ifdef HAVE_SSL
- ldns_rr *tmp_rr;
-#endif
- ssize_t gtr, bgtr;
- ldns_buffer *b;
- int lnr = 0, oldline;
- FILE* myfp = fp;
- if(!line_nr) line_nr = &lnr;
-
- if(!fp) {
- myfp = fopen("/etc/resolv.conf", "r");
- if(!myfp)
- return LDNS_STATUS_FILE_ERR;
- }
-
- /* do this better
- * expect =
- * 0: keyword
- * 1: default domain dname
- * 2: NS aaaa or a record
- */
-
- /* recognized keywords */
- keyword[LDNS_RESOLV_NAMESERVER] = "nameserver";
- keyword[LDNS_RESOLV_DEFDOMAIN] = "domain";
- keyword[LDNS_RESOLV_SEARCH] = "search";
- /* these two are read but not used atm TODO */
- keyword[LDNS_RESOLV_SORTLIST] = "sortlist";
- keyword[LDNS_RESOLV_OPTIONS] = "options";
- keyword[LDNS_RESOLV_ANCHOR] = "anchor";
-
- r = ldns_resolver_new();
- if (!r) {
- if(!fp) fclose(myfp);
- return LDNS_STATUS_MEM_ERR;
- }
-
- gtr = 1;
- word[0] = 0;
- oldline = *line_nr;
- expect = LDNS_RESOLV_KEYWORD;
- while (gtr > 0) {
- /* check comments */
- if (word[0] == '#') {
- word[0]='x';
- if(oldline == *line_nr) {
- /* skip until end of line */
- int c;
- do {
- c = fgetc(myfp);
- } while(c != EOF && c != '\n');
- if(c=='\n') (*line_nr)++;
- }
- /* and read next to prepare for further parsing */
- oldline = *line_nr;
- continue;
- }
- oldline = *line_nr;
- switch(expect) {
- case LDNS_RESOLV_KEYWORD:
- /* keyword */
- gtr = ldns_fget_token_l(myfp, word, LDNS_PARSE_NORMAL, 0, line_nr);
- if (gtr != 0) {
- if(word[0] == '#') continue;
- for(i = 0; i < LDNS_RESOLV_KEYWORDS; i++) {
- if (strcasecmp(keyword[i], word) == 0) {
- /* chosen the keyword and
- * expect values carefully
- */
- expect = i;
- break;
- }
- }
- /* no keyword recognized */
- if (expect == LDNS_RESOLV_KEYWORD) {
- /* skip line */
- /*
- ldns_resolver_deep_free(r);
- if(!fp) fclose(myfp);
- return LDNS_STATUS_SYNTAX_KEYWORD_ERR;
- */
- }
- }
- break;
- case LDNS_RESOLV_DEFDOMAIN:
- /* default domain dname */
- gtr = ldns_fget_token_l(myfp, word, LDNS_PARSE_NORMAL, 0, line_nr);
- if (gtr == 0) {
- if(!fp) fclose(myfp);
- ldns_resolver_deep_free(r);
- return LDNS_STATUS_SYNTAX_MISSING_VALUE_ERR;
- }
- if(word[0] == '#') {
- expect = LDNS_RESOLV_KEYWORD;
- continue;
- }
- tmp = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_DNAME, word);
- if (!tmp) {
- if(!fp) fclose(myfp);
- ldns_resolver_deep_free(r);
- return LDNS_STATUS_SYNTAX_DNAME_ERR;
- }
-
- /* DOn't free, because we copy the pointer */
- ldns_resolver_set_domain(r, tmp);
- expect = LDNS_RESOLV_KEYWORD;
- break;
- case LDNS_RESOLV_NAMESERVER:
- /* NS aaaa or a record */
- gtr = ldns_fget_token_l(myfp, word, LDNS_PARSE_NORMAL, 0, line_nr);
- if (gtr == 0) {
- if(!fp) fclose(myfp);
- ldns_resolver_deep_free(r);
- return LDNS_STATUS_SYNTAX_MISSING_VALUE_ERR;
- }
- if(word[0] == '#') {
- expect = LDNS_RESOLV_KEYWORD;
- continue;
- }
- if(strchr(word, '%')) {
- /* snip off interface labels,
- * fe80::222:19ff:fe31:4222%eth0 */
- strchr(word, '%')[0]=0;
- }
- tmp = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_AAAA, word);
- if (!tmp) {
- /* try ip4 */
- tmp = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_A, word);
- }
- /* could not parse it, exit */
- if (!tmp) {
- ldns_resolver_deep_free(r);
- if(!fp) fclose(myfp);
- return LDNS_STATUS_SYNTAX_ERR;
- }
- (void)ldns_resolver_push_nameserver(r, tmp);
- ldns_rdf_deep_free(tmp);
- expect = LDNS_RESOLV_KEYWORD;
- break;
- case LDNS_RESOLV_SEARCH:
- /* search list domain dname */
- gtr = ldns_fget_token_l(myfp, word, LDNS_PARSE_SKIP_SPACE, 0, line_nr);
- b = LDNS_MALLOC(ldns_buffer);
- if(!b) {
- ldns_resolver_deep_free(r);
- if(!fp) fclose(myfp);
- return LDNS_STATUS_MEM_ERR;
- }
-
- ldns_buffer_new_frm_data(b, word, (size_t) gtr);
- if(ldns_buffer_status(b) != LDNS_STATUS_OK) {
- LDNS_FREE(b);
- ldns_resolver_deep_free(r);
- if(!fp) fclose(myfp);
- return LDNS_STATUS_MEM_ERR;
- }
- bgtr = ldns_bget_token(b, word, LDNS_PARSE_NORMAL, (size_t) gtr + 1);
- while (bgtr > 0) {
- gtr -= bgtr;
- if(word[0] == '#') {
- expect = LDNS_RESOLV_KEYWORD;
- break;
- }
- tmp = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_DNAME, word);
- if (!tmp) {
- ldns_resolver_deep_free(r);
- ldns_buffer_free(b);
- if(!fp) fclose(myfp);
- return LDNS_STATUS_SYNTAX_DNAME_ERR;
- }
-
- ldns_resolver_push_searchlist(r, tmp);
-
- ldns_rdf_deep_free(tmp);
- bgtr = ldns_bget_token(b, word, LDNS_PARSE_NORMAL,
- (size_t) gtr + 1);
- }
- ldns_buffer_free(b);
- if (expect != LDNS_RESOLV_KEYWORD) {
- gtr = 1;
- expect = LDNS_RESOLV_KEYWORD;
- }
- break;
- case LDNS_RESOLV_SORTLIST:
- gtr = ldns_fget_token_l(myfp, word, LDNS_PARSE_SKIP_SPACE, 0, line_nr);
- /* sortlist not implemented atm */
- expect = LDNS_RESOLV_KEYWORD;
- break;
- case LDNS_RESOLV_OPTIONS:
- gtr = ldns_fget_token_l(myfp, word, LDNS_PARSE_SKIP_SPACE, 0, line_nr);
- /* options not implemented atm */
- expect = LDNS_RESOLV_KEYWORD;
- break;
- case LDNS_RESOLV_ANCHOR:
- /* a file containing a DNSSEC trust anchor */
- gtr = ldns_fget_token_l(myfp, word, LDNS_PARSE_NORMAL, 0, line_nr);
- if (gtr == 0) {
- ldns_resolver_deep_free(r);
- if(!fp) fclose(myfp);
- return LDNS_STATUS_SYNTAX_MISSING_VALUE_ERR;
- }
- if(word[0] == '#') {
- expect = LDNS_RESOLV_KEYWORD;
- continue;
- }
-
-#ifdef HAVE_SSL
- tmp_rr = ldns_read_anchor_file(word);
- (void) ldns_resolver_push_dnssec_anchor(r, tmp_rr);
- ldns_rr_free(tmp_rr);
-#endif
- expect = LDNS_RESOLV_KEYWORD;
- break;
- }
- }
-
- if(!fp)
- fclose(myfp);
-
- if (res) {
- *res = r;
- return LDNS_STATUS_OK;
- } else {
- ldns_resolver_deep_free(r);
- return LDNS_STATUS_NULL;
- }
-}
-
-ldns_status
-ldns_resolver_new_frm_file(ldns_resolver **res, const char *filename)
-{
- ldns_resolver *r;
- FILE *fp;
- ldns_status s;
-
- if (!filename) {
- fp = fopen(LDNS_RESOLV_CONF, "r");
-
- } else {
- fp = fopen(filename, "r");
- }
- if (!fp) {
- return LDNS_STATUS_FILE_ERR;
- }
-
- s = ldns_resolver_new_frm_fp(&r, fp);
- fclose(fp);
- if (s == LDNS_STATUS_OK) {
- if (res) {
- *res = r;
- return LDNS_STATUS_OK;
- } else {
- ldns_resolver_free(r);
- return LDNS_STATUS_NULL;
- }
- }
- return s;
-}
-
-void
-ldns_resolver_free(ldns_resolver *res)
-{
- LDNS_FREE(res);
-}
-
-void
-ldns_resolver_deep_free(ldns_resolver *res)
-{
- size_t i;
-
- if (res) {
- close_socket(res->_socket);
-
- if (res->_searchlist) {
- for (i = 0; i < ldns_resolver_searchlist_count(res); i++) {
- ldns_rdf_deep_free(res->_searchlist[i]);
- }
- LDNS_FREE(res->_searchlist);
- }
- if (res->_nameservers) {
- for (i = 0; i < res->_nameserver_count; i++) {
- ldns_rdf_deep_free(res->_nameservers[i]);
- }
- LDNS_FREE(res->_nameservers);
- }
- if (ldns_resolver_domain(res)) {
- ldns_rdf_deep_free(ldns_resolver_domain(res));
- }
- if (res->_tsig_keyname) {
- LDNS_FREE(res->_tsig_keyname);
- }
- if (res->_tsig_keydata) {
- LDNS_FREE(res->_tsig_keydata);
- }
- if (res->_tsig_algorithm) {
- LDNS_FREE(res->_tsig_algorithm);
- }
-
- if (res->_cur_axfr_pkt) {
- ldns_pkt_free(res->_cur_axfr_pkt);
- }
-
- if (res->_rtt) {
- LDNS_FREE(res->_rtt);
- }
- if (res->_dnssec_anchors) {
- ldns_rr_list_deep_free(res->_dnssec_anchors);
- }
- LDNS_FREE(res);
- }
-}
-
-ldns_status
-ldns_resolver_search_status(ldns_pkt** pkt,
- ldns_resolver *r, const ldns_rdf *name,
- ldns_rr_type t, ldns_rr_class c, uint16_t flags)
-{
- ldns_rdf *new_name;
- ldns_rdf **search_list;
- size_t i;
- ldns_status s = LDNS_STATUS_OK;
- ldns_rdf root_dname = { 1, LDNS_RDF_TYPE_DNAME, (void *)"" };
-
- if (ldns_dname_absolute(name)) {
- /* query as-is */
- return ldns_resolver_query_status(pkt, r, name, t, c, flags);
- } else if (ldns_resolver_dnsrch(r)) {
- search_list = ldns_resolver_searchlist(r);
- for (i = 0; i <= ldns_resolver_searchlist_count(r); i++) {
- if (i == ldns_resolver_searchlist_count(r)) {
- new_name = ldns_dname_cat_clone(name,
- &root_dname);
- } else {
- new_name = ldns_dname_cat_clone(name,
- search_list[i]);
- }
-
- s = ldns_resolver_query_status(pkt, r,
- new_name, t, c, flags);
- ldns_rdf_deep_free(new_name);
-
- if (pkt && *pkt) {
- if (s == LDNS_STATUS_OK &&
- ldns_pkt_get_rcode(*pkt) ==
- LDNS_RCODE_NOERROR) {
-
- return LDNS_STATUS_OK;
- }
- ldns_pkt_free(*pkt);
- *pkt = NULL;
- }
- }
- }
- return s;
-}
-
-ldns_pkt *
-ldns_resolver_search(const ldns_resolver *r,const ldns_rdf *name,
- ldns_rr_type t, ldns_rr_class c, uint16_t flags)
-{
- ldns_pkt* pkt = NULL;
- if (ldns_resolver_search_status(&pkt, (ldns_resolver *)r,
- name, t, c, flags) != LDNS_STATUS_OK) {
- ldns_pkt_free(pkt);
- return NULL;
- }
- return pkt;
-}
-
-ldns_status
-ldns_resolver_query_status(ldns_pkt** pkt,
- ldns_resolver *r, const ldns_rdf *name,
- ldns_rr_type t, ldns_rr_class c, uint16_t flags)
-{
- ldns_rdf *newname;
- ldns_status status;
-
- if (!ldns_resolver_defnames(r) || !ldns_resolver_domain(r)) {
- return ldns_resolver_send(pkt, r, name, t, c, flags);
- }
-
- newname = ldns_dname_cat_clone(name, ldns_resolver_domain(r));
- if (!newname) {
- return LDNS_STATUS_MEM_ERR;
- }
- status = ldns_resolver_send(pkt, r, newname, t, c, flags);
- ldns_rdf_free(newname);
- return status;
-}
-
-ldns_pkt *
-ldns_resolver_query(const ldns_resolver *r, const ldns_rdf *name,
- ldns_rr_type t, ldns_rr_class c, uint16_t flags)
-{
- ldns_pkt* pkt = NULL;
- if (ldns_resolver_query_status(&pkt, (ldns_resolver *)r,
- name, t, c, flags) != LDNS_STATUS_OK) {
- ldns_pkt_free(pkt);
- return NULL;
- }
- return pkt;
-}
-
-static size_t *
-ldns_resolver_backup_rtt(ldns_resolver *r)
-{
- size_t *new_rtt;
- size_t *old_rtt = ldns_resolver_rtt(r);
-
- if (old_rtt && ldns_resolver_nameserver_count(r)) {
- new_rtt = LDNS_XMALLOC(size_t
- , ldns_resolver_nameserver_count(r));
- if (!new_rtt) return NULL;
- memcpy(new_rtt, old_rtt, sizeof(size_t)
- * ldns_resolver_nameserver_count(r));
- ldns_resolver_set_rtt(r, new_rtt);
- return old_rtt;
- }
- return NULL;
-}
-
-static void
-ldns_resolver_restore_rtt(ldns_resolver *r, size_t *old_rtt)
-{
- size_t *cur_rtt = ldns_resolver_rtt(r);
-
- if (cur_rtt) {
- LDNS_FREE(cur_rtt);
- }
- ldns_resolver_set_rtt(r, old_rtt);
-}
-
-ldns_status
-ldns_resolver_send_pkt(ldns_pkt **answer, ldns_resolver *r,
- ldns_pkt *query_pkt)
-{
- ldns_pkt *answer_pkt = NULL;
- ldns_status stat = LDNS_STATUS_OK;
- size_t *rtt;
-
- stat = ldns_send(&answer_pkt, (ldns_resolver *)r, query_pkt);
- if (stat != LDNS_STATUS_OK) {
- if(answer_pkt) {
- ldns_pkt_free(answer_pkt);
- answer_pkt = NULL;
- }
- } else {
- /* if tc=1 fall back to EDNS and/or TCP */
- /* check for tcp first (otherwise we don't care about tc=1) */
- if (!ldns_resolver_usevc(r) && ldns_resolver_fallback(r)) {
- if (ldns_pkt_tc(answer_pkt)) {
- /* was EDNS0 set? */
- if (ldns_pkt_edns_udp_size(query_pkt) == 0) {
- ldns_pkt_set_edns_udp_size(query_pkt
- , 4096);
- ldns_pkt_free(answer_pkt);
- answer_pkt = NULL;
- /* Nameservers should not become
- * unreachable because fragments are
- * dropped (network error). We might
- * still have success with TCP.
- * Therefore maintain reachability
- * statuses of the nameservers by
- * backup and restore the rtt list.
- */
- rtt = ldns_resolver_backup_rtt(r);
- stat = ldns_send(&answer_pkt, r
- , query_pkt);
- ldns_resolver_restore_rtt(r, rtt);
- }
- /* either way, if it is still truncated, use TCP */
- if (stat != LDNS_STATUS_OK ||
- ldns_pkt_tc(answer_pkt)) {
- ldns_resolver_set_usevc(r, true);
- ldns_pkt_free(answer_pkt);
- answer_pkt = NULL;
- stat = ldns_send(&answer_pkt, r, query_pkt);
- ldns_resolver_set_usevc(r, false);
- }
- }
- }
- }
-
- if (answer && answer_pkt) {
- *answer = answer_pkt;
- }
-
- return stat;
-}
-
-ldns_status
-ldns_resolver_prepare_query_pkt(ldns_pkt **query_pkt, ldns_resolver *r,
- const ldns_rdf *name, ldns_rr_type t,
- ldns_rr_class c, uint16_t flags)
-{
- struct timeval now;
- ldns_rr* soa = NULL;
-
- /* prepare a question pkt from the parameters
- * and then send this */
- if (t == LDNS_RR_TYPE_IXFR) {
- ldns_rdf *owner_rdf;
- ldns_rdf *mname_rdf;
- ldns_rdf *rname_rdf;
- ldns_rdf *serial_rdf;
- ldns_rdf *refresh_rdf;
- ldns_rdf *retry_rdf;
- ldns_rdf *expire_rdf;
- ldns_rdf *minimum_rdf;
- soa = ldns_rr_new();
-
- if (!soa) {
- return LDNS_STATUS_ERR;
- }
- owner_rdf = ldns_rdf_clone(name);
- if (!owner_rdf) {
- ldns_rr_free(soa);
- return LDNS_STATUS_ERR;
- }
- ldns_rr_set_owner(soa, owner_rdf);
- ldns_rr_set_type(soa, LDNS_RR_TYPE_SOA);
- ldns_rr_set_class(soa, c);
- ldns_rr_set_question(soa, false);
- if (ldns_str2rdf_dname(&mname_rdf, ".") != LDNS_STATUS_OK) {
- ldns_rr_free(soa);
- return LDNS_STATUS_ERR;
- } else ldns_rr_push_rdf(soa, mname_rdf);
- if (ldns_str2rdf_dname(&rname_rdf, ".") != LDNS_STATUS_OK) {
- ldns_rr_free(soa);
- return LDNS_STATUS_ERR;
- } else ldns_rr_push_rdf(soa, rname_rdf);
- serial_rdf = ldns_native2rdf_int32(LDNS_RDF_TYPE_INT32, ldns_resolver_get_ixfr_serial(r));
- if (!serial_rdf) {
- ldns_rr_free(soa);
- return LDNS_STATUS_ERR;
- } else ldns_rr_push_rdf(soa, serial_rdf);
- refresh_rdf = ldns_native2rdf_int32(LDNS_RDF_TYPE_INT32, 0);
- if (!refresh_rdf) {
- ldns_rr_free(soa);
- return LDNS_STATUS_ERR;
- } else ldns_rr_push_rdf(soa, refresh_rdf);
- retry_rdf = ldns_native2rdf_int32(LDNS_RDF_TYPE_INT32, 0);
- if (!retry_rdf) {
- ldns_rr_free(soa);
- return LDNS_STATUS_ERR;
- } else ldns_rr_push_rdf(soa, retry_rdf);
- expire_rdf = ldns_native2rdf_int32(LDNS_RDF_TYPE_INT32, 0);
- if (!expire_rdf) {
- ldns_rr_free(soa);
- return LDNS_STATUS_ERR;
- } else ldns_rr_push_rdf(soa, expire_rdf);
- minimum_rdf = ldns_native2rdf_int32(LDNS_RDF_TYPE_INT32, 0);
- if (!minimum_rdf) {
- ldns_rr_free(soa);
- return LDNS_STATUS_ERR;
- } else ldns_rr_push_rdf(soa, minimum_rdf);
-
- *query_pkt = ldns_pkt_ixfr_request_new(ldns_rdf_clone(name),
- c, flags, soa);
- } else {
- *query_pkt = ldns_pkt_query_new(ldns_rdf_clone(name), t, c, flags);
- }
- if (!*query_pkt) {
- ldns_rr_free(soa);
- return LDNS_STATUS_ERR;
- }
-
- /* set DO bit if necessary */
- if (ldns_resolver_dnssec(r)) {
- if (ldns_resolver_edns_udp_size(r) == 0) {
- ldns_resolver_set_edns_udp_size(r, 4096);
- }
- ldns_pkt_set_edns_do(*query_pkt, true);
- if (ldns_resolver_dnssec_cd(r) || (flags & LDNS_CD)) {
- ldns_pkt_set_cd(*query_pkt, true);
- }
- }
-
- /* transfer the udp_edns_size from the resolver to the packet */
- if (ldns_resolver_edns_udp_size(r) != 0) {
- ldns_pkt_set_edns_udp_size(*query_pkt, ldns_resolver_edns_udp_size(r));
- }
-
- /* set the timestamp */
- now.tv_sec = time(NULL);
- now.tv_usec = 0;
- ldns_pkt_set_timestamp(*query_pkt, now);
-
-
- if (ldns_resolver_debug(r)) {
- ldns_pkt_print(stdout, *query_pkt);
- }
-
- /* only set the id if it is not set yet */
- if (ldns_pkt_id(*query_pkt) == 0) {
- ldns_pkt_set_random_id(*query_pkt);
- }
-
- return LDNS_STATUS_OK;
-}
-
-ldns_status
-ldns_resolver_send(ldns_pkt **answer, ldns_resolver *r, const ldns_rdf *name,
- ldns_rr_type t, ldns_rr_class c, uint16_t flags)
-{
- ldns_pkt *query_pkt;
- ldns_pkt *answer_pkt;
- ldns_status status;
-
- assert(r != NULL);
- assert(name != NULL);
-
- answer_pkt = NULL;
-
- /* do all the preprocessing here, then fire of an query to
- * the network */
-
- if (0 == t) {
- t= LDNS_RR_TYPE_A;
- }
- if (0 == c) {
- c= LDNS_RR_CLASS_IN;
- }
- if (0 == ldns_resolver_nameserver_count(r)) {
- return LDNS_STATUS_RES_NO_NS;
- }
- if (ldns_rdf_get_type(name) != LDNS_RDF_TYPE_DNAME) {
- return LDNS_STATUS_RES_QUERY;
- }
-
- status = ldns_resolver_prepare_query_pkt(&query_pkt, r, name,
- t, c, flags);
- if (status != LDNS_STATUS_OK) {
- return status;
- }
-
- /* if tsig values are set, tsign it */
- /* TODO: make last 3 arguments optional too? maybe make complete
- rr instead of separate values in resolver (and packet)
- Jelte
- should this go in pkt_prepare?
- */
- if (ldns_resolver_tsig_keyname(r) && ldns_resolver_tsig_keydata(r)) {
-#ifdef HAVE_SSL
- status = ldns_pkt_tsig_sign(query_pkt,
- ldns_resolver_tsig_keyname(r),
- ldns_resolver_tsig_keydata(r),
- 300, ldns_resolver_tsig_algorithm(r), NULL);
- if (status != LDNS_STATUS_OK) {
- ldns_pkt_free(query_pkt);
- return LDNS_STATUS_CRYPTO_TSIG_ERR;
- }
-#else
- ldns_pkt_free(query_pkt);
- return LDNS_STATUS_CRYPTO_TSIG_ERR;
-#endif /* HAVE_SSL */
- }
-
- status = ldns_resolver_send_pkt(&answer_pkt, r, query_pkt);
- ldns_pkt_free(query_pkt);
-
- /* allows answer to be NULL when not interested in return value */
- if (answer) {
- *answer = answer_pkt;
- }
- return status;
-}
-
-ldns_rr *
-ldns_axfr_next(ldns_resolver *resolver)
-{
- ldns_rr *cur_rr;
- uint8_t *packet_wire;
- size_t packet_wire_size;
- ldns_status status;
-
- /* check if start() has been called */
- if (!resolver || resolver->_socket == -1) {
- return NULL;
- }
-
- if (resolver->_cur_axfr_pkt) {
- if (resolver->_axfr_i == ldns_pkt_ancount(resolver->_cur_axfr_pkt)) {
- ldns_pkt_free(resolver->_cur_axfr_pkt);
- resolver->_cur_axfr_pkt = NULL;
- return ldns_axfr_next(resolver);
- }
- cur_rr = ldns_rr_clone(ldns_rr_list_rr(
- ldns_pkt_answer(resolver->_cur_axfr_pkt),
- resolver->_axfr_i));
- resolver->_axfr_i++;
- if (ldns_rr_get_type(cur_rr) == LDNS_RR_TYPE_SOA) {
- resolver->_axfr_soa_count++;
- if (resolver->_axfr_soa_count >= 2) {
-
- close_socket(resolver->_socket);
-
- ldns_pkt_free(resolver->_cur_axfr_pkt);
- resolver->_cur_axfr_pkt = NULL;
- }
- }
- return cur_rr;
- } else {
- packet_wire = ldns_tcp_read_wire_timeout(resolver->_socket, &packet_wire_size, resolver->_timeout);
- if(!packet_wire)
- return NULL;
-
- status = ldns_wire2pkt(&resolver->_cur_axfr_pkt, packet_wire,
- packet_wire_size);
- LDNS_FREE(packet_wire);
-
- resolver->_axfr_i = 0;
- if (status != LDNS_STATUS_OK) {
- /* TODO: make status return type of this function (...api change) */
-#ifdef STDERR_MSGS
- fprintf(stderr, "Error parsing rr during AXFR: %s\n", ldns_get_errorstr_by_id(status));
-#endif
-
- /* we must now also close the socket, otherwise subsequent uses of the
- same resolver structure will fail because the link is still open or
- in an undefined state */
-
- close_socket(resolver->_socket);
-
- return NULL;
- } else if (ldns_pkt_get_rcode(resolver->_cur_axfr_pkt) != 0) {
-#ifdef STDERR_MSGS
- ldns_lookup_table *rcode = ldns_lookup_by_id(
- ldns_rcodes,(int) ldns_pkt_get_rcode(
- resolver->_cur_axfr_pkt));
- if (rcode) {
- fprintf(stderr, "Error in AXFR: %s\n",
- rcode->name);
- } else {
- fprintf(stderr, "Error in AXFR: %d\n",
- (int) ldns_pkt_get_rcode(
- resolver->_cur_axfr_pkt));
- }
-#endif
-
- /* we must now also close the socket, otherwise subsequent uses of the
- same resolver structure will fail because the link is still open or
- in an undefined state */
-
- close_socket(resolver->_socket);
-
- return NULL;
- } else {
- return ldns_axfr_next(resolver);
- }
-
- }
-
-}
-
-/* this function is needed to abort a transfer that is in progress;
- * without it an aborted transfer will lead to the AXFR code in the
- * library staying in an indetermined state because the socket for the
- * AXFR is never closed
- */
-void
-ldns_axfr_abort(ldns_resolver *resolver)
-{
- /* Only abort if an actual AXFR is in progress */
- if (resolver->_socket != -1)
- {
-#ifndef USE_WINSOCK
- close(resolver->_socket);
-#else
- closesocket(resolver->_socket);
-#endif
- resolver->_socket = -1;
- }
-}
-
-bool
-ldns_axfr_complete(const ldns_resolver *res)
-{
- /* complete when soa count is 2? */
- return res->_axfr_soa_count == 2;
-}
-
-ldns_pkt *
-ldns_axfr_last_pkt(const ldns_resolver *res)
-{
- return res->_cur_axfr_pkt;
-}
-
-void
-ldns_resolver_set_ixfr_serial(ldns_resolver *r, uint32_t serial)
-{
- r->_serial = serial;
-}
-
-uint32_t
-ldns_resolver_get_ixfr_serial(const ldns_resolver *res)
-{
- return res->_serial;
-}
-
-
-/* random isn't really that good */
-void
-ldns_resolver_nameservers_randomize(ldns_resolver *r)
-{
- uint16_t i, j;
- ldns_rdf **ns, *tmpns;
- size_t *rtt, tmprtt;
-
- /* should I check for ldns_resolver_random?? */
- assert(r != NULL);
-
- ns = ldns_resolver_nameservers(r);
- rtt = ldns_resolver_rtt(r);
- for (i = 0; i < ldns_resolver_nameserver_count(r); i++) {
- j = ldns_get_random() % ldns_resolver_nameserver_count(r);
- tmpns = ns[i];
- ns[i] = ns[j];
- ns[j] = tmpns;
- tmprtt = rtt[i];
- rtt[i] = rtt[j];
- rtt[j] = tmprtt;
- }
- ldns_resolver_set_nameservers(r, ns);
-}
-
diff --git a/ldns/rr.c b/ldns/rr.c
deleted file mode 100644
index 6642aca..0000000
--- a/ldns/rr.c
+++ /dev/null
@@ -1,2760 +0,0 @@
-/* rr.c
- *
- * access functions for ldns_rr -
- * a Net::DNS like library for C
- * LibDNS Team @ NLnet Labs
- *
- * (c) NLnet Labs, 2004-2006
- * See the file LICENSE for the license
- */
-#include <ldns/config.h>
-
-#include <ldns/ldns.h>
-
-#include <strings.h>
-#include <limits.h>
-
-#include <errno.h>
-
-#define LDNS_SYNTAX_DATALEN 16
-#define LDNS_TTL_DATALEN 21
-#define LDNS_RRLIST_INIT 8
-
-ldns_rr *
-ldns_rr_new(void)
-{
- ldns_rr *rr;
- rr = LDNS_MALLOC(ldns_rr);
- if (!rr) {
- return NULL;
- }
-
- ldns_rr_set_owner(rr, NULL);
- ldns_rr_set_question(rr, false);
- ldns_rr_set_rd_count(rr, 0);
- rr->_rdata_fields = NULL;
- ldns_rr_set_class(rr, LDNS_RR_CLASS_IN);
- ldns_rr_set_ttl(rr, LDNS_DEFAULT_TTL);
- return rr;
-}
-
-ldns_rr *
-ldns_rr_new_frm_type(ldns_rr_type t)
-{
- ldns_rr *rr;
- const ldns_rr_descriptor *desc;
- size_t i;
-
- rr = LDNS_MALLOC(ldns_rr);
- if (!rr) {
- return NULL;
- }
-
- desc = ldns_rr_descript(t);
-
- rr->_rdata_fields = LDNS_XMALLOC(ldns_rdf *, ldns_rr_descriptor_minimum(desc));
- if(!rr->_rdata_fields) {
- LDNS_FREE(rr);
- return NULL;
- }
- for (i = 0; i < ldns_rr_descriptor_minimum(desc); i++) {
- rr->_rdata_fields[i] = NULL;
- }
-
- ldns_rr_set_owner(rr, NULL);
- ldns_rr_set_question(rr, false);
- /* set the count to minimum */
- ldns_rr_set_rd_count(rr, ldns_rr_descriptor_minimum(desc));
- ldns_rr_set_class(rr, LDNS_RR_CLASS_IN);
- ldns_rr_set_ttl(rr, LDNS_DEFAULT_TTL);
- ldns_rr_set_type(rr, t);
- return rr;
-}
-
-void
-ldns_rr_free(ldns_rr *rr)
-{
- size_t i;
- if (rr) {
- if (ldns_rr_owner(rr)) {
- ldns_rdf_deep_free(ldns_rr_owner(rr));
- }
- for (i = 0; i < ldns_rr_rd_count(rr); i++) {
- ldns_rdf_deep_free(ldns_rr_rdf(rr, i));
- }
- LDNS_FREE(rr->_rdata_fields);
- LDNS_FREE(rr);
- }
-}
-
-/* Syntactic sugar for ldns_rr_new_frm_str_internal */
-INLINE bool
-ldns_rdf_type_maybe_quoted(ldns_rdf_type rdf_type)
-{
- return rdf_type == LDNS_RDF_TYPE_STR ||
- rdf_type == LDNS_RDF_TYPE_LONG_STR;
-}
-
-/*
- * trailing spaces are allowed
- * leading spaces are not allowed
- * allow ttl to be optional
- * class is optional too
- * if ttl is missing, and default_ttl is 0, use DEF_TTL
- * allow ttl to be written as 1d3h
- * So the RR should look like. e.g.
- * miek.nl. 3600 IN MX 10 elektron.atoom.net
- * or
- * miek.nl. 1h IN MX 10 elektron.atoom.net
- * or
- * miek.nl. IN MX 10 elektron.atoom.net
- */
-static ldns_status
-ldns_rr_new_frm_str_internal(ldns_rr **newrr, const char *str,
- uint32_t default_ttl, const ldns_rdf *origin,
- ldns_rdf **prev, bool question)
-{
- ldns_rr *new;
- const ldns_rr_descriptor *desc;
- ldns_rr_type rr_type;
- ldns_buffer *rr_buf = NULL;
- ldns_buffer *rd_buf = NULL;
- uint32_t ttl_val;
- char *owner = NULL;
- char *ttl = NULL;
- ldns_rr_class clas_val;
- char *clas = NULL;
- char *type = NULL;
- size_t type_sz;
- char *rdata = NULL;
- char *rd = NULL;
- char *xtok = NULL; /* For RDF types with spaces (i.e. extra tokens) */
- size_t rd_strlen;
- const char *delimiters;
- ssize_t c;
- ldns_rdf *owner_dname;
- const char* endptr;
- int was_unknown_rr_format = 0;
- ldns_status status = LDNS_STATUS_OK;
-
- /* used for types with unknown number of rdatas */
- bool done;
- bool quoted;
-
- ldns_rdf *r = NULL;
- uint16_t r_cnt;
- uint16_t r_min;
- uint16_t r_max;
- size_t pre_data_pos;
-
- uint16_t hex_data_size;
- char *hex_data_str = NULL;
- uint16_t cur_hex_data_size;
- size_t hex_pos = 0;
- uint8_t *hex_data = NULL;
-
- new = ldns_rr_new();
-
- owner = LDNS_XMALLOC(char, LDNS_MAX_DOMAINLEN + 1);
- ttl = LDNS_XMALLOC(char, LDNS_TTL_DATALEN);
- clas = LDNS_XMALLOC(char, LDNS_SYNTAX_DATALEN);
- rdata = LDNS_XMALLOC(char, LDNS_MAX_PACKETLEN + 1);
- rr_buf = LDNS_MALLOC(ldns_buffer);
- rd_buf = LDNS_MALLOC(ldns_buffer);
- rd = LDNS_XMALLOC(char, LDNS_MAX_RDFLEN);
- xtok = LDNS_XMALLOC(char, LDNS_MAX_RDFLEN);
- if (rr_buf) {
- rr_buf->_data = NULL;
- }
- if (rd_buf) {
- rd_buf->_data = NULL;
- }
- if (!new || !owner || !ttl || !clas || !rdata ||
- !rr_buf || !rd_buf || !rd || !xtok) {
-
- goto memerror;
- }
-
- ldns_buffer_new_frm_data(rr_buf, (char*)str, strlen(str));
-
- /* split the rr in its parts -1 signals trouble */
- if (ldns_bget_token(rr_buf, owner, "\t\n ", LDNS_MAX_DOMAINLEN) == -1){
-
- status = LDNS_STATUS_SYNTAX_ERR;
- goto error;
- }
-
- if (ldns_bget_token(rr_buf, ttl, "\t\n ", LDNS_TTL_DATALEN) == -1) {
-
- status = LDNS_STATUS_SYNTAX_TTL_ERR;
- goto error;
- }
- ttl_val = (uint32_t) ldns_str2period(ttl, &endptr);
-
- if (strlen(ttl) > 0 && !isdigit((int) ttl[0])) {
- /* ah, it's not there or something */
- if (default_ttl == 0) {
- ttl_val = LDNS_DEFAULT_TTL;
- } else {
- ttl_val = default_ttl;
- }
- /* we not ASSUMING the TTL is missing and that
- * the rest of the RR is still there. That is
- * CLASS TYPE RDATA
- * so ttl value we read is actually the class
- */
- clas_val = ldns_get_rr_class_by_name(ttl);
- /* class can be left out too, assume IN, current
- * token must be type
- */
- if (clas_val == 0) {
- clas_val = LDNS_RR_CLASS_IN;
- type_sz = strlen(ttl) + 1;
- type = LDNS_XMALLOC(char, type_sz);
- if (!type) {
- goto memerror;
- }
- strlcpy(type, ttl, type_sz);
- }
- } else {
- if (-1 == ldns_bget_token(
- rr_buf, clas, "\t\n ", LDNS_SYNTAX_DATALEN)) {
-
- status = LDNS_STATUS_SYNTAX_CLASS_ERR;
- goto error;
- }
- clas_val = ldns_get_rr_class_by_name(clas);
- /* class can be left out too, assume IN, current
- * token must be type
- */
- if (clas_val == 0) {
- clas_val = LDNS_RR_CLASS_IN;
- type_sz = strlen(clas) + 1;
- type = LDNS_XMALLOC(char, type_sz);
- if (!type) {
- goto memerror;
- }
- strlcpy(type, clas, type_sz);
- }
- }
- /* the rest should still be waiting for us */
-
- if (!type) {
- type = LDNS_XMALLOC(char, LDNS_SYNTAX_DATALEN);
- if (!type) {
- goto memerror;
- }
- if (-1 == ldns_bget_token(
- rr_buf, type, "\t\n ", LDNS_SYNTAX_DATALEN)) {
-
- status = LDNS_STATUS_SYNTAX_TYPE_ERR;
- goto error;
- }
- }
-
- if (ldns_bget_token(rr_buf, rdata, "\0", LDNS_MAX_PACKETLEN) == -1) {
- /* apparently we are done, and it's only a question RR
- * so do not set status and go to ldnserror here
- */
- }
- ldns_buffer_new_frm_data(rd_buf, rdata, strlen(rdata));
-
- if (strlen(owner) <= 1 && strncmp(owner, "@", 1) == 0) {
- if (origin) {
- ldns_rr_set_owner(new, ldns_rdf_clone(origin));
- } else if (prev && *prev) {
- ldns_rr_set_owner(new, ldns_rdf_clone(*prev));
- } else {
- /* default to root */
- ldns_rr_set_owner(new, ldns_dname_new_frm_str("."));
- }
-
- /* @ also overrides prev */
- if (prev) {
- ldns_rdf_deep_free(*prev);
- *prev = ldns_rdf_clone(ldns_rr_owner(new));
- if (!*prev) {
- goto memerror;
- }
- }
- } else {
- if (strlen(owner) == 0) {
- /* no ownername was given, try prev, if that fails
- * origin, else default to root */
- if (prev && *prev) {
- ldns_rr_set_owner(new, ldns_rdf_clone(*prev));
- } else if (origin) {
- ldns_rr_set_owner(new, ldns_rdf_clone(origin));
- } else {
- ldns_rr_set_owner(new,
- ldns_dname_new_frm_str("."));
- }
- if(!ldns_rr_owner(new)) {
- goto memerror;
- }
- } else {
- owner_dname = ldns_dname_new_frm_str(owner);
- if (!owner_dname) {
- status = LDNS_STATUS_SYNTAX_ERR;
- goto error;
- }
-
- ldns_rr_set_owner(new, owner_dname);
- if (!ldns_dname_str_absolute(owner) && origin) {
- if(ldns_dname_cat(ldns_rr_owner(new), origin)
- != LDNS_STATUS_OK) {
-
- status = LDNS_STATUS_SYNTAX_ERR;
- goto error;
- }
- }
- if (prev) {
- ldns_rdf_deep_free(*prev);
- *prev = ldns_rdf_clone(ldns_rr_owner(new));
- if (!*prev) {
- goto error;
- }
- }
- }
- }
- LDNS_FREE(owner);
-
- ldns_rr_set_question(new, question);
-
- ldns_rr_set_ttl(new, ttl_val);
- LDNS_FREE(ttl);
-
- ldns_rr_set_class(new, clas_val);
- LDNS_FREE(clas);
-
- rr_type = ldns_get_rr_type_by_name(type);
- LDNS_FREE(type);
-
- desc = ldns_rr_descript((uint16_t)rr_type);
- ldns_rr_set_type(new, rr_type);
- if (desc) {
- /* only the rdata remains */
- r_max = ldns_rr_descriptor_maximum(desc);
- r_min = ldns_rr_descriptor_minimum(desc);
- } else {
- r_min = 0;
- r_max = 1;
- }
-
- for (done = false, r_cnt = 0; !done && r_cnt < r_max; r_cnt++) {
- quoted = false;
-
- switch (ldns_rr_descriptor_field_type(desc, r_cnt)) {
- case LDNS_RDF_TYPE_B64 :
- case LDNS_RDF_TYPE_HEX : /* These rdf types may con- */
- case LDNS_RDF_TYPE_LOC : /* tain whitespace, only if */
- case LDNS_RDF_TYPE_WKS : /* it is the last rd field. */
- case LDNS_RDF_TYPE_IPSECKEY :
- case LDNS_RDF_TYPE_AMTRELAY :
- case LDNS_RDF_TYPE_NSEC : if (r_cnt == r_max - 1) {
- delimiters = "\n";
- break;
- }
- /* fallthrough */
- default : delimiters = "\n\t ";
- }
-
- if (ldns_rdf_type_maybe_quoted(
- ldns_rr_descriptor_field_type(
- desc, r_cnt)) &&
- ldns_buffer_remaining(rd_buf) > 0){
-
- /* skip spaces */
- while (*(ldns_buffer_current(rd_buf)) == ' ') {
- ldns_buffer_skip(rd_buf, 1);
- }
-
- if (*(ldns_buffer_current(rd_buf)) == '\"') {
- delimiters = "\"\0";
- ldns_buffer_skip(rd_buf, 1);
- quoted = true;
- } else if (ldns_rr_descriptor_field_type(desc, r_cnt)
- == LDNS_RDF_TYPE_LONG_STR) {
-
- status = LDNS_STATUS_SYNTAX_RDATA_ERR;
- goto error;
- }
- }
-
- /* because number of fields can be variable, we can't rely on
- * _maximum() only
- */
-
- /* skip spaces */
- while (ldns_buffer_position(rd_buf) < ldns_buffer_limit(rd_buf)
- && *(ldns_buffer_current(rd_buf)) == ' '
- && !quoted) {
-
- ldns_buffer_skip(rd_buf, 1);
- }
-
- pre_data_pos = ldns_buffer_position(rd_buf);
- if (-1 == (c = ldns_bget_token(
- rd_buf, rd, delimiters, LDNS_MAX_RDFLEN))) {
-
- done = true;
- (void)done; /* we're breaking, so done not read anymore */
- break;
- }
- /* hmmz, rfc3597 specifies that any type can be represented
- * with \# method, which can contain spaces...
- * it does specify size though...
- */
- rd_strlen = strlen(rd);
-
- /* unknown RR data */
- if (strncmp(rd, "\\#", 2) == 0 && !quoted &&
- (rd_strlen == 2 || rd[2]==' ')) {
-
- was_unknown_rr_format = 1;
- /* go back to before \#
- * and skip it while setting delimiters better
- */
- ldns_buffer_set_position(rd_buf, pre_data_pos);
- delimiters = "\n\t ";
- (void)ldns_bget_token(rd_buf, rd,
- delimiters, LDNS_MAX_RDFLEN);
- /* read rdata octet length */
- c = ldns_bget_token(rd_buf, rd,
- delimiters, LDNS_MAX_RDFLEN);
- if (c == -1) {
- /* something goes very wrong here */
- status = LDNS_STATUS_SYNTAX_RDATA_ERR;
- goto error;
- }
- hex_data_size = (uint16_t) atoi(rd);
- /* copy hex chars into hex str (2 chars per byte) */
- hex_data_str = LDNS_XMALLOC(char, 2*hex_data_size + 1);
- if (!hex_data_str) {
- /* malloc error */
- goto memerror;
- }
- cur_hex_data_size = 0;
- while(cur_hex_data_size < 2 * hex_data_size) {
- c = ldns_bget_token(rd_buf, rd,
- delimiters, LDNS_MAX_RDFLEN);
- if (c == -1) {
- status = LDNS_STATUS_SYNTAX_RDATA_ERR;
- goto error;
- }
- rd_strlen = strlen(rd);
- if ((size_t)cur_hex_data_size + rd_strlen >
- 2 * (size_t)hex_data_size) {
- status = LDNS_STATUS_SYNTAX_RDATA_ERR;
- goto error;
- }
- strlcpy(hex_data_str + cur_hex_data_size, rd,
- rd_strlen + 1);
-
- cur_hex_data_size += rd_strlen;
- }
- hex_data_str[cur_hex_data_size] = '\0';
-
- /* correct the rdf type */
- /* if *we* know the type, interpret it as wireformat */
- if (desc) {
- hex_pos = 0;
- hex_data =
- LDNS_XMALLOC(uint8_t, hex_data_size+2);
-
- if (!hex_data) {
- goto memerror;
- }
- ldns_write_uint16(hex_data, hex_data_size);
- ldns_hexstring_to_data(
- hex_data + 2, hex_data_str);
- status = ldns_wire2rdf(new, hex_data,
- hex_data_size + 2, &hex_pos);
- if (status != LDNS_STATUS_OK) {
- goto error;
- }
- LDNS_FREE(hex_data);
- } else {
- r = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_HEX,
- hex_data_str);
- if (!r) {
- goto memerror;
- }
- ldns_rdf_set_type(r, LDNS_RDF_TYPE_UNKNOWN);
- if (!ldns_rr_push_rdf(new, r)) {
- goto memerror;
- }
- }
- LDNS_FREE(hex_data_str);
-
- } else if(rd_strlen > 0 || quoted) {
- /* Normal RR */
- switch(ldns_rr_descriptor_field_type(desc, r_cnt)) {
-
- case LDNS_RDF_TYPE_HEX:
- case LDNS_RDF_TYPE_B64:
- /* When this is the last rdata field, then the
- * rest should be read in (cause then these
- * rdf types may contain spaces).
- */
- if (r_cnt == r_max - 1) {
- c = ldns_bget_token(rd_buf, xtok,
- "\n", LDNS_MAX_RDFLEN);
- if (c != -1) {
- (void) strncat(rd, xtok,
- LDNS_MAX_RDFLEN -
- strlen(rd) - 1);
- }
- }
- r = ldns_rdf_new_frm_str(
- ldns_rr_descriptor_field_type(
- desc, r_cnt), rd);
- break;
-
- case LDNS_RDF_TYPE_HIP:
- /*
- * In presentation format this RDATA type has
- * three tokens: An algorithm byte, then a
- * variable length HIT (in hexbytes) and then
- * a variable length Public Key (in base64).
- *
- * We have just read the algorithm, so we need
- * two more tokens: HIT and Public Key.
- */
- do {
- /* Read and append HIT */
- if (ldns_bget_token(rd_buf,
- xtok, delimiters,
- LDNS_MAX_RDFLEN) == -1)
- break;
-
- (void) strncat(rd, " ",
- LDNS_MAX_RDFLEN -
- strlen(rd) - 1);
- (void) strncat(rd, xtok,
- LDNS_MAX_RDFLEN -
- strlen(rd) - 1);
-
- /* Read and append Public Key*/
- if (ldns_bget_token(rd_buf,
- xtok, delimiters,
- LDNS_MAX_RDFLEN) == -1)
- break;
-
- (void) strncat(rd, " ",
- LDNS_MAX_RDFLEN -
- strlen(rd) - 1);
- (void) strncat(rd, xtok,
- LDNS_MAX_RDFLEN -
- strlen(rd) - 1);
- } while (false);
-
- r = ldns_rdf_new_frm_str(
- ldns_rr_descriptor_field_type(
- desc, r_cnt), rd);
- break;
-
- case LDNS_RDF_TYPE_DNAME:
- r = ldns_rdf_new_frm_str(
- ldns_rr_descriptor_field_type(
- desc, r_cnt), rd);
-
- /* check if the origin should be used
- * or concatenated
- */
- if (r && ldns_rdf_size(r) > 1 &&
- ldns_rdf_data(r)[0] == 1 &&
- ldns_rdf_data(r)[1] == '@') {
-
- ldns_rdf_deep_free(r);
-
- r = origin ? ldns_rdf_clone(origin)
-
- : ( rr_type == LDNS_RR_TYPE_SOA ?
-
- ldns_rdf_clone(
- ldns_rr_owner(new))
-
- : ldns_rdf_new_frm_str(
- LDNS_RDF_TYPE_DNAME, ".")
- );
-
- } else if (r && rd_strlen >= 1 && origin &&
- !ldns_dname_str_absolute(rd)) {
-
- status = ldns_dname_cat(r, origin);
- if (status != LDNS_STATUS_OK) {
- goto error;
- }
- }
- break;
- default:
- r = ldns_rdf_new_frm_str(
- ldns_rr_descriptor_field_type(
- desc, r_cnt), rd);
- break;
- }
- if (!r) {
- status = LDNS_STATUS_SYNTAX_RDATA_ERR;
- goto error;
- }
- ldns_rr_push_rdf(new, r);
- }
- if (quoted) {
- if (ldns_buffer_available(rd_buf, 1)) {
- ldns_buffer_skip(rd_buf, 1);
- } else {
- done = true;
- }
- }
-
- } /* for (done = false, r_cnt = 0; !done && r_cnt < r_max; r_cnt++) */
- LDNS_FREE(rd);
- LDNS_FREE(xtok);
- ldns_buffer_free(rr_buf);
- LDNS_FREE(rdata);
- if (ldns_buffer_remaining(rd_buf) > 0) {
- ldns_buffer_free(rd_buf);
- ldns_rr_free(new);
- return LDNS_STATUS_SYNTAX_SUPERFLUOUS_TEXT_ERR;
- }
- ldns_buffer_free(rd_buf);
-
- if (!question && desc && !was_unknown_rr_format &&
- ldns_rr_rd_count(new) < r_min) {
-
- ldns_rr_free(new);
- return LDNS_STATUS_SYNTAX_MISSING_VALUE_ERR;
- }
-
- if (newrr) {
- *newrr = new;
- } else {
- /* Maybe the caller just wanted to see if it would parse? */
- ldns_rr_free(new);
- }
- return LDNS_STATUS_OK;
-
-memerror:
- status = LDNS_STATUS_MEM_ERR;
-error:
- if (rd_buf && rd_buf->_data) {
- ldns_buffer_free(rd_buf);
- } else {
- LDNS_FREE(rd_buf);
- }
- if (rr_buf && rr_buf->_data) {
- ldns_buffer_free(rr_buf);
- } else {
- LDNS_FREE(rr_buf);
- }
- LDNS_FREE(type);
- LDNS_FREE(owner);
- LDNS_FREE(ttl);
- LDNS_FREE(clas);
- LDNS_FREE(hex_data);
- LDNS_FREE(hex_data_str);
- LDNS_FREE(xtok);
- LDNS_FREE(rd);
- LDNS_FREE(rdata);
- ldns_rr_free(new);
- return status;
-}
-
-ldns_status
-ldns_rr_new_frm_str(ldns_rr **newrr, const char *str,
- uint32_t default_ttl, const ldns_rdf *origin,
- ldns_rdf **prev)
-{
- return ldns_rr_new_frm_str_internal(newrr,
- str,
- default_ttl,
- origin,
- prev,
- false);
-}
-
-ldns_status
-ldns_rr_new_question_frm_str(ldns_rr **newrr, const char *str,
- const ldns_rdf *origin, ldns_rdf **prev)
-{
- return ldns_rr_new_frm_str_internal(newrr,
- str,
- 0,
- origin,
- prev,
- true);
-}
-
-/* Strip whitespace from the start and the end of <line>. */
-static char *
-ldns_strip_ws(char *line)
-{
- char *s = line, *e;
-
- for (s = line; *s && isspace((unsigned char)*s); s++)
- ;
-
- for (e = strchr(s, 0); e > s+2 && isspace((unsigned char)e[-1]) && e[-2] != '\\'; e--)
- ;
- *e = 0;
-
- return s;
-}
-
-ldns_status
-ldns_rr_new_frm_fp(ldns_rr **newrr, FILE *fp, uint32_t *ttl, ldns_rdf **origin, ldns_rdf **prev)
-{
- return ldns_rr_new_frm_fp_l(newrr, fp, ttl, origin, prev, NULL);
-}
-
-ldns_status
-ldns_rr_new_frm_fp_l(ldns_rr **newrr, FILE *fp, uint32_t *default_ttl, ldns_rdf **origin, ldns_rdf **prev, int *line_nr)
-{
- char *line;
- const char *endptr; /* unused */
- ldns_rr *rr;
- uint32_t ttl;
- ldns_rdf *tmp;
- ldns_status s;
- ssize_t size;
-
- if (default_ttl) {
- ttl = *default_ttl;
- } else {
- ttl = 0;
- }
-
- line = LDNS_XMALLOC(char, LDNS_MAX_LINELEN + 1);
- if (!line) {
- return LDNS_STATUS_MEM_ERR;
- }
-
- /* read an entire line in from the file */
- if ((size = ldns_fget_token_l(fp, line, LDNS_PARSE_SKIP_SPACE, LDNS_MAX_LINELEN, line_nr)) == -1) {
- LDNS_FREE(line);
- /* if last line was empty, we are now at feof, which is not
- * always a parse error (happens when for instance last line
- * was a comment)
- */
- return LDNS_STATUS_SYNTAX_ERR;
- }
-
- /* we can have the situation, where we've read ok, but still got
- * no bytes to play with, in this case size is 0
- */
- if (size == 0) {
- LDNS_FREE(line);
- return LDNS_STATUS_SYNTAX_EMPTY;
- }
-
- if (strncmp(line, "$ORIGIN", 7) == 0 && isspace((unsigned char)line[7])) {
- if (*origin) {
- ldns_rdf_deep_free(*origin);
- *origin = NULL;
- }
- tmp = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_DNAME,
- ldns_strip_ws(line + 8));
- if (!tmp) {
- /* could not parse what next to $ORIGIN */
- LDNS_FREE(line);
- return LDNS_STATUS_SYNTAX_DNAME_ERR;
- }
- *origin = tmp;
- s = LDNS_STATUS_SYNTAX_ORIGIN;
- } else if (strncmp(line, "$TTL", 4) == 0 && isspace((unsigned char)line[4])) {
- if (default_ttl) {
- *default_ttl = ldns_str2period(
- ldns_strip_ws(line + 5), &endptr);
- }
- s = LDNS_STATUS_SYNTAX_TTL;
- } else if (strncmp(line, "$INCLUDE", 8) == 0) {
- s = LDNS_STATUS_SYNTAX_INCLUDE;
- } else if (!*ldns_strip_ws(line)) {
- LDNS_FREE(line);
- return LDNS_STATUS_SYNTAX_EMPTY;
- } else {
- if (origin && *origin) {
- s = ldns_rr_new_frm_str(&rr, (const char*) line, ttl, *origin, prev);
- } else {
- s = ldns_rr_new_frm_str(&rr, (const char*) line, ttl, NULL, prev);
- }
- }
- LDNS_FREE(line);
- if (s == LDNS_STATUS_OK) {
- if (newrr) {
- *newrr = rr;
- } else {
- /* Just testing if it would parse? */
- ldns_rr_free(rr);
- }
- }
- return s;
-}
-
-void
-ldns_rr_set_owner(ldns_rr *rr, ldns_rdf *owner)
-{
- rr->_owner = owner;
-}
-
-void
-ldns_rr_set_question(ldns_rr *rr, bool question)
-{
- rr->_rr_question = question;
-}
-
-void
-ldns_rr_set_ttl(ldns_rr *rr, uint32_t ttl)
-{
- rr->_ttl = ttl;
-}
-
-void
-ldns_rr_set_rd_count(ldns_rr *rr, size_t count)
-{
- rr->_rd_count = count;
-}
-
-void
-ldns_rr_set_type(ldns_rr *rr, ldns_rr_type rr_type)
-{
- rr->_rr_type = rr_type;
-}
-
-void
-ldns_rr_set_class(ldns_rr *rr, ldns_rr_class rr_class)
-{
- rr->_rr_class = rr_class;
-}
-
-ldns_rdf *
-ldns_rr_set_rdf(ldns_rr *rr, const ldns_rdf *f, size_t position)
-{
- size_t rd_count;
- ldns_rdf *pop;
-
- rd_count = ldns_rr_rd_count(rr);
- if (position < rd_count) {
- /* dicard the old one */
- pop = rr->_rdata_fields[position];
- rr->_rdata_fields[position] = (ldns_rdf*)f;
- return pop;
- } else {
- return NULL;
- }
-}
-
-bool
-ldns_rr_push_rdf(ldns_rr *rr, const ldns_rdf *f)
-{
- size_t rd_count;
- ldns_rdf **rdata_fields;
-
- rd_count = ldns_rr_rd_count(rr);
-
- /* grow the array */
- rdata_fields = LDNS_XREALLOC(
- rr->_rdata_fields, ldns_rdf *, rd_count + 1);
- if (!rdata_fields) {
- return false;
- }
-
- /* add the new member */
- rr->_rdata_fields = rdata_fields;
- rr->_rdata_fields[rd_count] = (ldns_rdf*)f;
-
- ldns_rr_set_rd_count(rr, rd_count + 1);
- return true;
-}
-
-ldns_rdf *
-ldns_rr_pop_rdf(ldns_rr *rr)
-{
- size_t rd_count;
- ldns_rdf *pop;
- ldns_rdf** newrd;
-
- rd_count = ldns_rr_rd_count(rr);
-
- if (rd_count == 0) {
- return NULL;
- }
-
- pop = rr->_rdata_fields[rd_count - 1];
-
- /* try to shrink the array */
- if(rd_count > 1) {
- newrd = LDNS_XREALLOC(
- rr->_rdata_fields, ldns_rdf *, rd_count - 1);
- if(newrd)
- rr->_rdata_fields = newrd;
- } else {
- LDNS_FREE(rr->_rdata_fields);
- }
-
- ldns_rr_set_rd_count(rr, rd_count - 1);
- return pop;
-}
-
-ldns_rdf *
-ldns_rr_rdf(const ldns_rr *rr, size_t nr)
-{
- if (rr && nr < ldns_rr_rd_count(rr)) {
- return rr->_rdata_fields[nr];
- } else {
- return NULL;
- }
-}
-
-ldns_rdf *
-ldns_rr_owner(const ldns_rr *rr)
-{
- return rr->_owner;
-}
-
-bool
-ldns_rr_is_question(const ldns_rr *rr)
-{
- return rr->_rr_question;
-}
-
-uint32_t
-ldns_rr_ttl(const ldns_rr *rr)
-{
- return rr->_ttl;
-}
-
-size_t
-ldns_rr_rd_count(const ldns_rr *rr)
-{
- return rr->_rd_count;
-}
-
-ldns_rr_type
-ldns_rr_get_type(const ldns_rr *rr)
-{
- return rr->_rr_type;
-}
-
-ldns_rr_class
-ldns_rr_get_class(const ldns_rr *rr)
-{
- return rr->_rr_class;
-}
-
-/* rr_lists */
-
-size_t
-ldns_rr_list_rr_count(const ldns_rr_list *rr_list)
-{
- if (rr_list) {
- return rr_list->_rr_count;
- } else {
- return 0;
- }
-}
-
-ldns_rr *
-ldns_rr_list_set_rr(ldns_rr_list *rr_list, const ldns_rr *r, size_t count)
-{
- ldns_rr *old;
-
- if (count > ldns_rr_list_rr_count(rr_list)) {
- return NULL;
- }
-
- old = ldns_rr_list_rr(rr_list, count);
-
- /* overwrite old's pointer */
- rr_list->_rrs[count] = (ldns_rr*)r;
- return old;
-}
-
-void
-ldns_rr_list_set_rr_count(ldns_rr_list *rr_list, size_t count)
-{
- assert(count <= rr_list->_rr_capacity);
- rr_list->_rr_count = count;
-}
-
-ldns_rr *
-ldns_rr_list_rr(const ldns_rr_list *rr_list, size_t nr)
-{
- if (nr < ldns_rr_list_rr_count(rr_list)) {
- return rr_list->_rrs[nr];
- } else {
- return NULL;
- }
-}
-
-ldns_rr_list *
-ldns_rr_list_new(void)
-{
- ldns_rr_list *rr_list = LDNS_MALLOC(ldns_rr_list);
- if(!rr_list) return NULL;
- rr_list->_rr_count = 0;
- rr_list->_rr_capacity = 0;
- rr_list->_rrs = NULL;
- return rr_list;
-}
-
-void
-ldns_rr_list_free(ldns_rr_list *rr_list)
-{
- if (rr_list) {
- LDNS_FREE(rr_list->_rrs);
- LDNS_FREE(rr_list);
- }
-}
-
-void
-ldns_rr_list_deep_free(ldns_rr_list *rr_list)
-{
- size_t i;
-
- if (rr_list) {
- for (i=0; i < ldns_rr_list_rr_count(rr_list); i++) {
- ldns_rr_free(ldns_rr_list_rr(rr_list, i));
- }
- LDNS_FREE(rr_list->_rrs);
- LDNS_FREE(rr_list);
- }
-}
-
-
-/* add right to left. So we modify *left! */
-bool
-ldns_rr_list_cat(ldns_rr_list *left, const ldns_rr_list *right)
-{
- size_t r_rr_count;
- size_t i;
-
- if (!left) {
- return false;
- }
-
- if (right) {
- r_rr_count = ldns_rr_list_rr_count(right);
- } else {
- r_rr_count = 0;
- }
-
- /* push right to left */
- for(i = 0; i < r_rr_count; i++) {
- ldns_rr_list_push_rr(left, ldns_rr_list_rr(right, i));
- }
- return true;
-}
-
-ldns_rr_list *
-ldns_rr_list_cat_clone(const ldns_rr_list *left, const ldns_rr_list *right)
-{
- size_t l_rr_count;
- size_t r_rr_count;
- size_t i;
- ldns_rr_list *cat;
-
- if (left) {
- l_rr_count = ldns_rr_list_rr_count(left);
- } else {
- return ldns_rr_list_clone(right);
- }
-
- if (right) {
- r_rr_count = ldns_rr_list_rr_count(right);
- } else {
- r_rr_count = 0;
- }
-
- cat = ldns_rr_list_new();
-
- if (!cat) {
- return NULL;
- }
-
- /* left */
- for(i = 0; i < l_rr_count; i++) {
- ldns_rr_list_push_rr(cat,
- ldns_rr_clone(ldns_rr_list_rr(left, i)));
- }
- /* right */
- for(i = 0; i < r_rr_count; i++) {
- ldns_rr_list_push_rr(cat,
- ldns_rr_clone(ldns_rr_list_rr(right, i)));
- }
- return cat;
-}
-
-ldns_rr_list *
-ldns_rr_list_subtype_by_rdf(const ldns_rr_list *l, const ldns_rdf *r, size_t pos)
-{
- size_t i;
- ldns_rr_list *subtyped;
- ldns_rdf *list_rdf;
-
- subtyped = ldns_rr_list_new();
-
- for(i = 0; i < ldns_rr_list_rr_count(l); i++) {
- list_rdf = ldns_rr_rdf(
- ldns_rr_list_rr(l, i),
- pos);
- if (!list_rdf) {
- /* pos is too large or any other error */
- ldns_rr_list_deep_free(subtyped);
- return NULL;
- }
-
- if (ldns_rdf_compare(list_rdf, r) == 0) {
- /* a match */
- ldns_rr_list_push_rr(subtyped,
- ldns_rr_clone(ldns_rr_list_rr(l, i)));
- }
- }
-
- if (ldns_rr_list_rr_count(subtyped) > 0) {
- return subtyped;
- } else {
- ldns_rr_list_free(subtyped);
- return NULL;
- }
-}
-
-bool
-ldns_rr_list_push_rr(ldns_rr_list *rr_list, const ldns_rr *rr)
-{
- size_t rr_count;
- size_t cap;
-
- rr_count = ldns_rr_list_rr_count(rr_list);
- cap = rr_list->_rr_capacity;
-
- /* grow the array */
- if(rr_count+1 > cap) {
- ldns_rr **rrs;
-
- if(cap == 0)
- cap = LDNS_RRLIST_INIT; /* initial list size */
- else cap *= 2;
- rrs = LDNS_XREALLOC(rr_list->_rrs, ldns_rr *, cap);
- if (!rrs) {
- return false;
- }
- rr_list->_rrs = rrs;
- rr_list->_rr_capacity = cap;
- }
-
- /* add the new member */
- rr_list->_rrs[rr_count] = (ldns_rr*)rr;
-
- ldns_rr_list_set_rr_count(rr_list, rr_count + 1);
- return true;
-}
-
-bool
-ldns_rr_list_push_rr_list(ldns_rr_list *rr_list, const ldns_rr_list *push_list)
-{
- size_t i;
-
- for(i = 0; i < ldns_rr_list_rr_count(push_list); i++) {
- if (!ldns_rr_list_push_rr(rr_list,
- ldns_rr_list_rr(push_list, i))) {
- return false;
- }
- }
- return true;
-}
-
-ldns_rr *
-ldns_rr_list_pop_rr(ldns_rr_list *rr_list)
-{
- size_t rr_count;
- size_t cap;
- ldns_rr *pop;
-
- rr_count = ldns_rr_list_rr_count(rr_list);
-
- if (rr_count == 0) {
- return NULL;
- }
-
- cap = rr_list->_rr_capacity;
- pop = ldns_rr_list_rr(rr_list, rr_count - 1);
-
- /* shrink the array */
- if(cap > LDNS_RRLIST_INIT && rr_count-1 <= cap/2) {
- ldns_rr** a;
- cap /= 2;
- a = LDNS_XREALLOC(rr_list->_rrs, ldns_rr *, cap);
- if(a) {
- rr_list->_rrs = a;
- rr_list->_rr_capacity = cap;
- }
- }
-
- ldns_rr_list_set_rr_count(rr_list, rr_count - 1);
-
- return pop;
-}
-
-ldns_rr_list *
-ldns_rr_list_pop_rr_list(ldns_rr_list *rr_list, size_t howmany)
-{
- /* pop a number of rr's and put them in a rr_list */
- ldns_rr_list *popped;
- ldns_rr *p;
- size_t i = howmany;
-
- popped = ldns_rr_list_new();
-
- if (!popped) {
- return NULL;
- }
-
-
- while(i > 0 &&
- (p = ldns_rr_list_pop_rr(rr_list)) != NULL) {
- ldns_rr_list_push_rr(popped, p);
- i--;
- }
-
- if (i == howmany) { /* so i <= 0 */
- ldns_rr_list_free(popped);
- return NULL;
- } else {
- return popped;
- }
-}
-
-
-bool
-ldns_rr_list_contains_rr(const ldns_rr_list *rr_list, const ldns_rr *rr)
-{
- size_t i;
-
- if (!rr_list || !rr || ldns_rr_list_rr_count(rr_list) == 0) {
- return false;
- }
-
- for (i = 0; i < ldns_rr_list_rr_count(rr_list); i++) {
- if (rr == ldns_rr_list_rr(rr_list, i)) {
- return true;
- } else if (ldns_rr_compare(rr, ldns_rr_list_rr(rr_list, i)) == 0) {
- return true;
- }
- }
- return false;
-}
-
-bool
-ldns_is_rrset(const ldns_rr_list *rr_list)
-{
- ldns_rr_type t;
- ldns_rr_class c;
- ldns_rdf *o;
- ldns_rr *tmp;
- size_t i;
-
- if (!rr_list || ldns_rr_list_rr_count(rr_list) == 0) {
- return false;
- }
-
- tmp = ldns_rr_list_rr(rr_list, 0);
-
- t = ldns_rr_get_type(tmp);
- c = ldns_rr_get_class(tmp);
- o = ldns_rr_owner(tmp);
-
- /* compare these with the rest of the rr_list, start with 1 */
- for (i = 1; i < ldns_rr_list_rr_count(rr_list); i++) {
- tmp = ldns_rr_list_rr(rr_list, i);
- if (t != ldns_rr_get_type(tmp)) {
- return false;
- }
- if (c != ldns_rr_get_class(tmp)) {
- return false;
- }
- if (ldns_rdf_compare(o, ldns_rr_owner(tmp)) != 0) {
- return false;
- }
- }
- return true;
-}
-
-bool
-ldns_rr_set_push_rr(ldns_rr_list *rr_list, ldns_rr *rr)
-{
- size_t rr_count;
- size_t i;
- ldns_rr *last;
-
- assert(rr != NULL);
-
- rr_count = ldns_rr_list_rr_count(rr_list);
-
- if (rr_count == 0) {
- /* nothing there, so checking it is
- * not needed */
- return ldns_rr_list_push_rr(rr_list, rr);
- } else {
- /* check with the final rr in the rr_list */
- last = ldns_rr_list_rr(rr_list, rr_count - 1);
-
- if (ldns_rr_get_class(last) != ldns_rr_get_class(rr)) {
- return false;
- }
- if (ldns_rr_get_type(last) != ldns_rr_get_type(rr)) {
- return false;
- }
- /* only check if not equal to RRSIG */
- if (ldns_rr_get_type(rr) != LDNS_RR_TYPE_RRSIG) {
- if (ldns_rr_ttl(last) != ldns_rr_ttl(rr)) {
- return false;
- }
- }
- if (ldns_rdf_compare(ldns_rr_owner(last),
- ldns_rr_owner(rr)) != 0) {
- return false;
- }
- /* ok, still alive - check if the rr already
- * exists - if so, dont' add it */
- for(i = 0; i < rr_count; i++) {
- if(ldns_rr_compare(
- ldns_rr_list_rr(rr_list, i), rr) == 0) {
- return false;
- }
- }
- /* it's safe, push it */
- return ldns_rr_list_push_rr(rr_list, rr);
- }
-}
-
-ldns_rr *
-ldns_rr_set_pop_rr(ldns_rr_list *rr_list)
-{
- return ldns_rr_list_pop_rr(rr_list);
-}
-
-ldns_rr_list *
-ldns_rr_list_pop_rrset(ldns_rr_list *rr_list)
-{
- ldns_rr_list *rrset;
- ldns_rr *last_rr = NULL;
- ldns_rr *next_rr;
-
- if (!rr_list) {
- return NULL;
- }
-
- rrset = ldns_rr_list_new();
- if (!last_rr) {
- last_rr = ldns_rr_list_pop_rr(rr_list);
- if (!last_rr) {
- ldns_rr_list_free(rrset);
- return NULL;
- } else {
- ldns_rr_list_push_rr(rrset, last_rr);
- }
- }
-
- if (ldns_rr_list_rr_count(rr_list) > 0) {
- next_rr = ldns_rr_list_rr(rr_list, ldns_rr_list_rr_count(rr_list) - 1);
- } else {
- next_rr = NULL;
- }
-
- while (next_rr) {
- if (
- ldns_rdf_compare(ldns_rr_owner(next_rr),
- ldns_rr_owner(last_rr)) == 0
- &&
- ldns_rr_get_type(next_rr) == ldns_rr_get_type(last_rr)
- &&
- ldns_rr_get_class(next_rr) == ldns_rr_get_class(last_rr)
- ) {
- ldns_rr_list_push_rr(rrset, ldns_rr_list_pop_rr(rr_list));
- if (ldns_rr_list_rr_count(rr_list) > 0) {
- last_rr = next_rr;
- next_rr = ldns_rr_list_rr(rr_list, ldns_rr_list_rr_count(rr_list) - 1);
- } else {
- next_rr = NULL;
- }
- } else {
- next_rr = NULL;
- }
- }
-
- return rrset;
-}
-
-ldns_rr *
-ldns_rr_clone(const ldns_rr *rr)
-{
- size_t i;
- ldns_rr *new_rr;
-
- if (!rr) {
- return NULL;
- }
-
- new_rr = ldns_rr_new();
- if (!new_rr) {
- return NULL;
- }
- if (ldns_rr_owner(rr)) {
- ldns_rr_set_owner(new_rr, ldns_rdf_clone(ldns_rr_owner(rr)));
- }
- ldns_rr_set_ttl(new_rr, ldns_rr_ttl(rr));
- ldns_rr_set_type(new_rr, ldns_rr_get_type(rr));
- ldns_rr_set_class(new_rr, ldns_rr_get_class(rr));
- ldns_rr_set_question(new_rr, ldns_rr_is_question(rr));
-
- for (i = 0; i < ldns_rr_rd_count(rr); i++) {
- if (ldns_rr_rdf(rr,i)) {
- ldns_rr_push_rdf(new_rr, ldns_rdf_clone(ldns_rr_rdf(rr, i)));
- }
- }
-
- return new_rr;
-}
-
-ldns_rr_list *
-ldns_rr_list_clone(const ldns_rr_list *rrlist)
-{
- size_t i;
- ldns_rr_list *new_list;
- ldns_rr *r;
-
- if (!rrlist) {
- return NULL;
- }
-
- new_list = ldns_rr_list_new();
- if (!new_list) {
- return NULL;
- }
- for (i = 0; i < ldns_rr_list_rr_count(rrlist); i++) {
- r = ldns_rr_clone(
- ldns_rr_list_rr(rrlist, i)
- );
- if (!r) {
- /* huh, failure in cloning */
- ldns_rr_list_deep_free(new_list);
- return NULL;
- }
- ldns_rr_list_push_rr(new_list, r);
- }
- return new_list;
-}
-
-
-static int
-qsort_schwartz_rr_compare(const void *a, const void *b)
-{
- int result = 0;
- ldns_rr *rr1, *rr2;
- ldns_buffer *rr1_buf, *rr2_buf;
- struct ldns_schwartzian_compare_struct *sa = *(struct ldns_schwartzian_compare_struct **) a;
- struct ldns_schwartzian_compare_struct *sb = *(struct ldns_schwartzian_compare_struct **) b;
- /* if we are doing 2wire, we need to do lowercasing on the dname (and maybe on the rdata)
- * this must be done for comparison only, so we need to have a temp var for both buffers,
- * which is only used when the transformed object value isn't there yet
- */
- ldns_rr *canonical_a, *canonical_b;
-
- rr1 = (ldns_rr *) sa->original_object;
- rr2 = (ldns_rr *) sb->original_object;
-
- result = ldns_rr_compare_no_rdata(rr1, rr2);
-
- if (result == 0) {
- if (!sa->transformed_object) {
- canonical_a = ldns_rr_clone(sa->original_object);
- ldns_rr2canonical(canonical_a);
- sa->transformed_object = ldns_buffer_new(ldns_rr_uncompressed_size(canonical_a));
- if (ldns_rr2buffer_wire(sa->transformed_object, canonical_a, LDNS_SECTION_ANY) != LDNS_STATUS_OK) {
- ldns_buffer_free((ldns_buffer *)sa->transformed_object);
- sa->transformed_object = NULL;
- ldns_rr_free(canonical_a);
- return 0;
- }
- ldns_rr_free(canonical_a);
- }
- if (!sb->transformed_object) {
- canonical_b = ldns_rr_clone(sb->original_object);
- ldns_rr2canonical(canonical_b);
- sb->transformed_object = ldns_buffer_new(ldns_rr_uncompressed_size(canonical_b));
- if (ldns_rr2buffer_wire(sb->transformed_object, canonical_b, LDNS_SECTION_ANY) != LDNS_STATUS_OK) {
- ldns_buffer_free((ldns_buffer *)sa->transformed_object);
- ldns_buffer_free((ldns_buffer *)sb->transformed_object);
- sa->transformed_object = NULL;
- sb->transformed_object = NULL;
- ldns_rr_free(canonical_b);
- return 0;
- }
- ldns_rr_free(canonical_b);
- }
- rr1_buf = (ldns_buffer *) sa->transformed_object;
- rr2_buf = (ldns_buffer *) sb->transformed_object;
-
- result = ldns_rr_compare_wire(rr1_buf, rr2_buf);
- }
-
- return result;
-}
-
-void
-ldns_rr_list_sort(ldns_rr_list *unsorted)
-{
- struct ldns_schwartzian_compare_struct **sortables;
- size_t item_count;
- size_t i;
-
- if (unsorted) {
- item_count = ldns_rr_list_rr_count(unsorted);
-
- sortables = LDNS_XMALLOC(struct ldns_schwartzian_compare_struct *,
- item_count);
- if(!sortables) return; /* no way to return error */
- for (i = 0; i < item_count; i++) {
- sortables[i] = LDNS_XMALLOC(struct ldns_schwartzian_compare_struct, 1);
- if(!sortables[i]) {
- /* free the allocated parts */
- while(i>0) {
- i--;
- LDNS_FREE(sortables[i]);
- }
- /* no way to return error */
- LDNS_FREE(sortables);
- return;
- }
- sortables[i]->original_object = ldns_rr_list_rr(unsorted, i);
- sortables[i]->transformed_object = NULL;
- }
- qsort(sortables,
- item_count,
- sizeof(struct ldns_schwartzian_compare_struct *),
- qsort_schwartz_rr_compare);
- for (i = 0; i < item_count; i++) {
- unsorted->_rrs[i] = sortables[i]->original_object;
- if (sortables[i]->transformed_object) {
- ldns_buffer_free(sortables[i]->transformed_object);
- }
- LDNS_FREE(sortables[i]);
- }
- LDNS_FREE(sortables);
- }
-}
-
-int
-ldns_rr_compare_no_rdata(const ldns_rr *rr1, const ldns_rr *rr2)
-{
- size_t rr1_len;
- size_t rr2_len;
- size_t offset;
-
- assert(rr1 != NULL);
- assert(rr2 != NULL);
-
- rr1_len = ldns_rr_uncompressed_size(rr1);
- rr2_len = ldns_rr_uncompressed_size(rr2);
-
- if (ldns_dname_compare(ldns_rr_owner(rr1), ldns_rr_owner(rr2)) < 0) {
- return -1;
- } else if (ldns_dname_compare(ldns_rr_owner(rr1), ldns_rr_owner(rr2)) > 0) {
- return 1;
- }
-
- /* should return -1 if rr1 comes before rr2, so need to do rr1 - rr2, not rr2 - rr1 */
- if (ldns_rr_get_class(rr1) != ldns_rr_get_class(rr2)) {
- return ldns_rr_get_class(rr1) - ldns_rr_get_class(rr2);
- }
-
- /* should return -1 if rr1 comes before rr2, so need to do rr1 - rr2, not rr2 - rr1 */
- if (ldns_rr_get_type(rr1) != ldns_rr_get_type(rr2)) {
- return ldns_rr_get_type(rr1) - ldns_rr_get_type(rr2);
- }
-
- /* offset is the owername length + ttl + type + class + rdlen == start of wire format rdata */
- offset = ldns_rdf_size(ldns_rr_owner(rr1)) + 4 + 2 + 2 + 2;
- /* if either record doesn't have any RDATA... */
- if (offset > rr1_len || offset > rr2_len) {
- if (rr1_len == rr2_len) {
- return 0;
- }
- return ((int) rr2_len - (int) rr1_len);
- }
-
- return 0;
-}
-
-int ldns_rr_compare_wire(const ldns_buffer *rr1_buf, const ldns_buffer *rr2_buf)
-{
- size_t rr1_len, rr2_len, min_len, i, offset;
-
- rr1_len = ldns_buffer_capacity(rr1_buf);
- rr2_len = ldns_buffer_capacity(rr2_buf);
-
- /* jump past dname (checked in earlier part)
- * and especially past TTL */
- offset = 0;
- while (offset < rr1_len && *ldns_buffer_at(rr1_buf, offset) != 0) {
- offset += *ldns_buffer_at(rr1_buf, offset) + 1;
- }
- /* jump to rdata section (PAST the rdata length field, otherwise
- rrs with different lengths might be sorted erroneously */
- offset += 11;
- min_len = (rr1_len < rr2_len) ? rr1_len : rr2_len;
- /* Compare RRs RDATA byte for byte. */
- for(i = offset; i < min_len; i++) {
- if (*ldns_buffer_at(rr1_buf,i) < *ldns_buffer_at(rr2_buf,i)) {
- return -1;
- } else if (*ldns_buffer_at(rr1_buf,i) > *ldns_buffer_at(rr2_buf,i)) {
- return +1;
- }
- }
-
- /* If both RDATAs are the same up to min_len, then the shorter one sorts first. */
- if (rr1_len < rr2_len) {
- return -1;
- } else if (rr1_len > rr2_len) {
- return +1;
- }
- /* The RDATAs are equal. */
- return 0;
-
-}
-
-int
-ldns_rr_compare(const ldns_rr *rr1, const ldns_rr *rr2)
-{
- int result;
- size_t rr1_len, rr2_len;
-
- ldns_buffer *rr1_buf;
- ldns_buffer *rr2_buf;
-
- result = ldns_rr_compare_no_rdata(rr1, rr2);
- if (result == 0) {
- rr1_len = ldns_rr_uncompressed_size(rr1);
- rr2_len = ldns_rr_uncompressed_size(rr2);
-
- rr1_buf = ldns_buffer_new(rr1_len);
- rr2_buf = ldns_buffer_new(rr2_len);
-
- if (ldns_rr2buffer_wire_canonical(rr1_buf,
- rr1,
- LDNS_SECTION_ANY)
- != LDNS_STATUS_OK) {
- ldns_buffer_free(rr1_buf);
- ldns_buffer_free(rr2_buf);
- return 0;
- }
- if (ldns_rr2buffer_wire_canonical(rr2_buf,
- rr2,
- LDNS_SECTION_ANY)
- != LDNS_STATUS_OK) {
- ldns_buffer_free(rr1_buf);
- ldns_buffer_free(rr2_buf);
- return 0;
- }
-
- result = ldns_rr_compare_wire(rr1_buf, rr2_buf);
-
- ldns_buffer_free(rr1_buf);
- ldns_buffer_free(rr2_buf);
- }
-
- return result;
-}
-
-/* convert dnskey to a ds with the given algorithm,
- * then compare the result with the given ds */
-static int
-ldns_rr_compare_ds_dnskey(ldns_rr *ds,
- ldns_rr *dnskey)
-{
- ldns_rr *ds_gen;
- bool result = false;
- ldns_hash algo;
-
- if (!dnskey || !ds ||
- ldns_rr_get_type(ds) != LDNS_RR_TYPE_DS ||
- ldns_rr_get_type(dnskey) != LDNS_RR_TYPE_DNSKEY) {
- return false;
- }
-
- if (ldns_rr_rdf(ds, 2) == NULL) {
- return false;
- }
- algo = ldns_rdf2native_int8(ldns_rr_rdf(ds, 2));
-
- ds_gen = ldns_key_rr2ds(dnskey, algo);
- if (ds_gen) {
- result = ldns_rr_compare(ds, ds_gen) == 0;
- ldns_rr_free(ds_gen);
- }
- return result;
-}
-
-bool
-ldns_rr_compare_ds(const ldns_rr *orr1, const ldns_rr *orr2)
-{
- bool result;
- ldns_rr *rr1 = ldns_rr_clone(orr1);
- ldns_rr *rr2 = ldns_rr_clone(orr2);
-
- /* set ttls to zero */
- ldns_rr_set_ttl(rr1, 0);
- ldns_rr_set_ttl(rr2, 0);
-
- if (ldns_rr_get_type(rr1) == LDNS_RR_TYPE_DS &&
- ldns_rr_get_type(rr2) == LDNS_RR_TYPE_DNSKEY) {
- result = ldns_rr_compare_ds_dnskey(rr1, rr2);
- } else if (ldns_rr_get_type(rr1) == LDNS_RR_TYPE_DNSKEY &&
- ldns_rr_get_type(rr2) == LDNS_RR_TYPE_DS) {
- result = ldns_rr_compare_ds_dnskey(rr2, rr1);
- } else {
- result = (ldns_rr_compare(rr1, rr2) == 0);
- }
-
- ldns_rr_free(rr1);
- ldns_rr_free(rr2);
-
- return result;
-}
-
-int
-ldns_rr_list_compare(const ldns_rr_list *rrl1, const ldns_rr_list *rrl2)
-{
- size_t i = 0;
- int rr_cmp;
-
- assert(rrl1 != NULL);
- assert(rrl2 != NULL);
-
- for (i = 0; i < ldns_rr_list_rr_count(rrl1) && i < ldns_rr_list_rr_count(rrl2); i++) {
- rr_cmp = ldns_rr_compare(ldns_rr_list_rr(rrl1, i), ldns_rr_list_rr(rrl2, i));
- if (rr_cmp != 0) {
- return rr_cmp;
- }
- }
-
- if (i == ldns_rr_list_rr_count(rrl1) &&
- i != ldns_rr_list_rr_count(rrl2)) {
- return 1;
- } else if (i == ldns_rr_list_rr_count(rrl2) &&
- i != ldns_rr_list_rr_count(rrl1)) {
- return -1;
- } else {
- return 0;
- }
-}
-
-size_t
-ldns_rr_uncompressed_size(const ldns_rr *r)
-{
- size_t rrsize;
- size_t i;
-
- rrsize = 0;
- /* add all the rdf sizes */
- for(i = 0; i < ldns_rr_rd_count(r); i++) {
- rrsize += ldns_rdf_size(ldns_rr_rdf(r, i));
- }
- /* ownername */
- rrsize += ldns_rdf_size(ldns_rr_owner(r));
- rrsize += LDNS_RR_OVERHEAD;
- return rrsize;
-}
-
-void
-ldns_rr2canonical(ldns_rr *rr)
-{
- uint16_t i;
-
- if (!rr) {
- return;
- }
-
- ldns_dname2canonical(ldns_rr_owner(rr));
-
- /*
- * lowercase the rdata dnames if the rr type is one
- * of the list in chapter 7 of RFC3597
- * Also added RRSIG, because a "Signer's Name" should be canonicalized
- * too. See dnssec-bis-updates-16. We can add it to this list because
- * the "Signer's Name" is the only dname type rdata field in a RRSIG.
- */
- switch(ldns_rr_get_type(rr)) {
- case LDNS_RR_TYPE_NS:
- case LDNS_RR_TYPE_MD:
- case LDNS_RR_TYPE_MF:
- case LDNS_RR_TYPE_CNAME:
- case LDNS_RR_TYPE_SOA:
- case LDNS_RR_TYPE_MB:
- case LDNS_RR_TYPE_MG:
- case LDNS_RR_TYPE_MR:
- case LDNS_RR_TYPE_PTR:
- case LDNS_RR_TYPE_MINFO:
- case LDNS_RR_TYPE_MX:
- case LDNS_RR_TYPE_RP:
- case LDNS_RR_TYPE_AFSDB:
- case LDNS_RR_TYPE_RT:
- case LDNS_RR_TYPE_SIG:
- case LDNS_RR_TYPE_PX:
- case LDNS_RR_TYPE_NXT:
- case LDNS_RR_TYPE_NAPTR:
- case LDNS_RR_TYPE_KX:
- case LDNS_RR_TYPE_SRV:
- case LDNS_RR_TYPE_DNAME:
- case LDNS_RR_TYPE_A6:
- case LDNS_RR_TYPE_RRSIG:
- for (i = 0; i < ldns_rr_rd_count(rr); i++) {
- ldns_dname2canonical(ldns_rr_rdf(rr, i));
- }
- return;
- default:
- /* do nothing */
- return;
- }
-}
-
-void
-ldns_rr_list2canonical(const ldns_rr_list *rr_list)
-{
- size_t i;
- for (i = 0; i < ldns_rr_list_rr_count(rr_list); i++) {
- ldns_rr2canonical(ldns_rr_list_rr(rr_list, i));
- }
-}
-
-uint8_t
-ldns_rr_label_count(const ldns_rr *rr)
-{
- if (!rr) {
- return 0;
- }
- return ldns_dname_label_count(
- ldns_rr_owner(rr));
-}
-
-/** \cond */
-static const ldns_rdf_type type_0_wireformat[] = { LDNS_RDF_TYPE_UNKNOWN };
-static const ldns_rdf_type type_a_wireformat[] = { LDNS_RDF_TYPE_A };
-static const ldns_rdf_type type_ns_wireformat[] = { LDNS_RDF_TYPE_DNAME };
-static const ldns_rdf_type type_md_wireformat[] = { LDNS_RDF_TYPE_DNAME };
-static const ldns_rdf_type type_mf_wireformat[] = { LDNS_RDF_TYPE_DNAME };
-static const ldns_rdf_type type_cname_wireformat[] = { LDNS_RDF_TYPE_DNAME };
-static const ldns_rdf_type type_soa_wireformat[] = {
- LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_INT32,
- LDNS_RDF_TYPE_PERIOD, LDNS_RDF_TYPE_PERIOD, LDNS_RDF_TYPE_PERIOD,
- LDNS_RDF_TYPE_PERIOD
-};
-static const ldns_rdf_type type_mb_wireformat[] = { LDNS_RDF_TYPE_DNAME };
-static const ldns_rdf_type type_mg_wireformat[] = { LDNS_RDF_TYPE_DNAME };
-static const ldns_rdf_type type_mr_wireformat[] = { LDNS_RDF_TYPE_DNAME };
-static const ldns_rdf_type type_wks_wireformat[] = {
- LDNS_RDF_TYPE_A, LDNS_RDF_TYPE_WKS
-};
-static const ldns_rdf_type type_ptr_wireformat[] = { LDNS_RDF_TYPE_DNAME };
-static const ldns_rdf_type type_hinfo_wireformat[] = {
- LDNS_RDF_TYPE_STR, LDNS_RDF_TYPE_STR
-};
-static const ldns_rdf_type type_minfo_wireformat[] = {
- LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_DNAME
-};
-static const ldns_rdf_type type_mx_wireformat[] = {
- LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_DNAME
-};
-static const ldns_rdf_type type_rp_wireformat[] = {
- LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_DNAME
-};
-static const ldns_rdf_type type_afsdb_wireformat[] = {
- LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_DNAME
-};
-static const ldns_rdf_type type_x25_wireformat[] = { LDNS_RDF_TYPE_STR };
-static const ldns_rdf_type type_isdn_wireformat[] = {
- LDNS_RDF_TYPE_STR, LDNS_RDF_TYPE_STR
-};
-static const ldns_rdf_type type_rt_wireformat[] = {
- LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_DNAME
-};
-static const ldns_rdf_type type_nsap_wireformat[] = {
- LDNS_RDF_TYPE_NSAP
-};
-static const ldns_rdf_type type_nsap_ptr_wireformat[] = {
- LDNS_RDF_TYPE_STR
-};
-static const ldns_rdf_type type_sig_wireformat[] = {
- LDNS_RDF_TYPE_TYPE, LDNS_RDF_TYPE_ALG, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT32,
- LDNS_RDF_TYPE_TIME, LDNS_RDF_TYPE_TIME, LDNS_RDF_TYPE_INT16,
- LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_B64
-};
-static const ldns_rdf_type type_key_wireformat[] = {
- LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_B64
-};
-static const ldns_rdf_type type_px_wireformat[] = {
- LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_DNAME
-};
-static const ldns_rdf_type type_gpos_wireformat[] = {
- LDNS_RDF_TYPE_STR, LDNS_RDF_TYPE_STR, LDNS_RDF_TYPE_STR
-};
-static const ldns_rdf_type type_aaaa_wireformat[] = { LDNS_RDF_TYPE_AAAA };
-static const ldns_rdf_type type_loc_wireformat[] = { LDNS_RDF_TYPE_LOC };
-static const ldns_rdf_type type_nxt_wireformat[] = {
- LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_UNKNOWN
-};
-static const ldns_rdf_type type_eid_wireformat[] = {
- LDNS_RDF_TYPE_HEX
-};
-static const ldns_rdf_type type_nimloc_wireformat[] = {
- LDNS_RDF_TYPE_HEX
-};
-static const ldns_rdf_type type_srv_wireformat[] = {
- LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_DNAME
-};
-static const ldns_rdf_type type_atma_wireformat[] = {
- LDNS_RDF_TYPE_ATMA
-};
-static const ldns_rdf_type type_naptr_wireformat[] = {
- LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_STR, LDNS_RDF_TYPE_STR, LDNS_RDF_TYPE_STR, LDNS_RDF_TYPE_DNAME
-};
-static const ldns_rdf_type type_kx_wireformat[] = {
- LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_DNAME
-};
-static const ldns_rdf_type type_cert_wireformat[] = {
- LDNS_RDF_TYPE_CERT_ALG, LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_ALG, LDNS_RDF_TYPE_B64
-};
-static const ldns_rdf_type type_a6_wireformat[] = { LDNS_RDF_TYPE_UNKNOWN };
-static const ldns_rdf_type type_dname_wireformat[] = { LDNS_RDF_TYPE_DNAME };
-static const ldns_rdf_type type_sink_wireformat[] = { LDNS_RDF_TYPE_INT8,
- LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_B64
-};
-static const ldns_rdf_type type_apl_wireformat[] = {
- LDNS_RDF_TYPE_APL
-};
-static const ldns_rdf_type type_ds_wireformat[] = {
- LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_ALG, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_HEX
-};
-static const ldns_rdf_type type_sshfp_wireformat[] = {
- LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_HEX
-};
-static const ldns_rdf_type type_ipseckey_wireformat[] = {
- LDNS_RDF_TYPE_IPSECKEY
-};
-static const ldns_rdf_type type_rrsig_wireformat[] = {
- LDNS_RDF_TYPE_TYPE, LDNS_RDF_TYPE_ALG, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT32,
- LDNS_RDF_TYPE_TIME, LDNS_RDF_TYPE_TIME, LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_B64
-};
-static const ldns_rdf_type type_nsec_wireformat[] = {
- LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_NSEC
-};
-static const ldns_rdf_type type_dhcid_wireformat[] = {
- LDNS_RDF_TYPE_B64
-};
-static const ldns_rdf_type type_talink_wireformat[] = {
- LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_DNAME
-};
-#ifdef RRTYPE_OPENPGPKEY
-static const ldns_rdf_type type_openpgpkey_wireformat[] = {
- LDNS_RDF_TYPE_B64
-};
-#endif
-static const ldns_rdf_type type_csync_wireformat[] = {
- LDNS_RDF_TYPE_INT32, LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_NSEC
-};
-static const ldns_rdf_type type_zonemd_wireformat[] = {
- LDNS_RDF_TYPE_INT32,
- LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_HEX
-};
-
-/* nsec3 is some vars, followed by same type of data of nsec */
-static const ldns_rdf_type type_nsec3_wireformat[] = {
-/* LDNS_RDF_TYPE_NSEC3_VARS, LDNS_RDF_TYPE_NSEC3_NEXT_OWNER, LDNS_RDF_TYPE_NSEC*/
- LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_NSEC3_SALT, LDNS_RDF_TYPE_NSEC3_NEXT_OWNER, LDNS_RDF_TYPE_NSEC
-};
-
-static const ldns_rdf_type type_nsec3param_wireformat[] = {
-/* LDNS_RDF_TYPE_NSEC3_PARAMS_VARS*/
- LDNS_RDF_TYPE_INT8,
- LDNS_RDF_TYPE_INT8,
- LDNS_RDF_TYPE_INT16,
- LDNS_RDF_TYPE_NSEC3_SALT
-};
-
-static const ldns_rdf_type type_dnskey_wireformat[] = {
- LDNS_RDF_TYPE_INT16,
- LDNS_RDF_TYPE_INT8,
- LDNS_RDF_TYPE_ALG,
- LDNS_RDF_TYPE_B64
-};
-static const ldns_rdf_type type_tkey_wireformat[] = {
- LDNS_RDF_TYPE_DNAME,
- LDNS_RDF_TYPE_TIME,
- LDNS_RDF_TYPE_TIME,
- LDNS_RDF_TYPE_INT16,
- LDNS_RDF_TYPE_INT16,
- LDNS_RDF_TYPE_INT16_DATA,
- LDNS_RDF_TYPE_INT16_DATA,
-};
-static const ldns_rdf_type type_tsig_wireformat[] = {
- LDNS_RDF_TYPE_DNAME,
- LDNS_RDF_TYPE_TSIGTIME,
- LDNS_RDF_TYPE_INT16,
- LDNS_RDF_TYPE_INT16_DATA,
- LDNS_RDF_TYPE_INT16,
- LDNS_RDF_TYPE_INT16,
- LDNS_RDF_TYPE_INT16_DATA
-};
-static const ldns_rdf_type type_tlsa_wireformat[] = {
- LDNS_RDF_TYPE_CERTIFICATE_USAGE,
- LDNS_RDF_TYPE_SELECTOR,
- LDNS_RDF_TYPE_MATCHING_TYPE,
- LDNS_RDF_TYPE_HEX
-};
-static const ldns_rdf_type type_hip_wireformat[] = {
- LDNS_RDF_TYPE_HIP
-};
-static const ldns_rdf_type type_nid_wireformat[] = {
- LDNS_RDF_TYPE_INT16,
- LDNS_RDF_TYPE_ILNP64
-};
-static const ldns_rdf_type type_l32_wireformat[] = {
- LDNS_RDF_TYPE_INT16,
- LDNS_RDF_TYPE_A
-};
-static const ldns_rdf_type type_l64_wireformat[] = {
- LDNS_RDF_TYPE_INT16,
- LDNS_RDF_TYPE_ILNP64
-};
-static const ldns_rdf_type type_lp_wireformat[] = {
- LDNS_RDF_TYPE_INT16,
- LDNS_RDF_TYPE_DNAME
-};
-static const ldns_rdf_type type_eui48_wireformat[] = {
- LDNS_RDF_TYPE_EUI48
-};
-static const ldns_rdf_type type_eui64_wireformat[] = {
- LDNS_RDF_TYPE_EUI64
-};
-static const ldns_rdf_type type_uri_wireformat[] = {
- LDNS_RDF_TYPE_INT16,
- LDNS_RDF_TYPE_INT16,
- LDNS_RDF_TYPE_LONG_STR
-};
-static const ldns_rdf_type type_caa_wireformat[] = {
- LDNS_RDF_TYPE_INT8,
- LDNS_RDF_TYPE_TAG,
- LDNS_RDF_TYPE_LONG_STR
-};
-#ifdef RRTYPE_DOA
-static const ldns_rdf_type type_doa_wireformat[] = {
- LDNS_RDF_TYPE_INT32,
- LDNS_RDF_TYPE_INT32,
- LDNS_RDF_TYPE_INT8,
- LDNS_RDF_TYPE_STR,
- LDNS_RDF_TYPE_B64
-};
-#endif
-#ifdef RRTYPE_AMTRELAY
-static const ldns_rdf_type type_amtrelay_wireformat[] = {
- LDNS_RDF_TYPE_AMTRELAY
-};
-#endif
-
-
-/** \endcond */
-
-/** \cond */
-/* All RR's defined in 1035 are well known and can thus
- * be compressed. See RFC3597. These RR's are:
- * CNAME HINFO MB MD MF MG MINFO MR MX NULL NS PTR SOA TXT
- */
-static ldns_rr_descriptor rdata_field_descriptors[] = {
- /* 0 */
- { 0, NULL, 0, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 1 */
- {LDNS_RR_TYPE_A, "A", 1, 1, type_a_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 2 */
- {LDNS_RR_TYPE_NS, "NS", 1, 1, type_ns_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_COMPRESS, 1 },
- /* 3 */
- {LDNS_RR_TYPE_MD, "MD", 1, 1, type_md_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_COMPRESS, 1 },
- /* 4 */
- {LDNS_RR_TYPE_MF, "MF", 1, 1, type_mf_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_COMPRESS, 1 },
- /* 5 */
- {LDNS_RR_TYPE_CNAME, "CNAME", 1, 1, type_cname_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_COMPRESS, 1 },
- /* 6 */
- {LDNS_RR_TYPE_SOA, "SOA", 7, 7, type_soa_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_COMPRESS, 2 },
- /* 7 */
- {LDNS_RR_TYPE_MB, "MB", 1, 1, type_mb_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_COMPRESS, 1 },
- /* 8 */
- {LDNS_RR_TYPE_MG, "MG", 1, 1, type_mg_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_COMPRESS, 1 },
- /* 9 */
- {LDNS_RR_TYPE_MR, "MR", 1, 1, type_mr_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_COMPRESS, 1 },
- /* 10 */
- {LDNS_RR_TYPE_NULL, "NULL", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 11 */
- {LDNS_RR_TYPE_WKS, "WKS", 2, 2, type_wks_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 12 */
- {LDNS_RR_TYPE_PTR, "PTR", 1, 1, type_ptr_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_COMPRESS, 1 },
- /* 13 */
- {LDNS_RR_TYPE_HINFO, "HINFO", 2, 2, type_hinfo_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 14 */
- {LDNS_RR_TYPE_MINFO, "MINFO", 2, 2, type_minfo_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_COMPRESS, 2 },
- /* 15 */
- {LDNS_RR_TYPE_MX, "MX", 2, 2, type_mx_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_COMPRESS, 1 },
- /* 16 */
- {LDNS_RR_TYPE_TXT, "TXT", 1, 0, NULL, LDNS_RDF_TYPE_STR, LDNS_RR_NO_COMPRESS, 0 },
- /* 17 */
- {LDNS_RR_TYPE_RP, "RP", 2, 2, type_rp_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 2 },
- /* 18 */
- {LDNS_RR_TYPE_AFSDB, "AFSDB", 2, 2, type_afsdb_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
- /* 19 */
- {LDNS_RR_TYPE_X25, "X25", 1, 1, type_x25_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 20 */
- {LDNS_RR_TYPE_ISDN, "ISDN", 1, 2, type_isdn_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 21 */
- {LDNS_RR_TYPE_RT, "RT", 2, 2, type_rt_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
- /* 22 */
- {LDNS_RR_TYPE_NSAP, "NSAP", 1, 1, type_nsap_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 23 */
- {LDNS_RR_TYPE_NSAP_PTR, "NSAP-PTR", 1, 1, type_nsap_ptr_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 24 */
- {LDNS_RR_TYPE_SIG, "SIG", 9, 9, type_sig_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
- /* 25 */
- {LDNS_RR_TYPE_KEY, "KEY", 4, 4, type_key_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 26 */
- {LDNS_RR_TYPE_PX, "PX", 3, 3, type_px_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 2 },
- /* 27 */
- {LDNS_RR_TYPE_GPOS, "GPOS", 3, 3, type_gpos_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 28 */
- {LDNS_RR_TYPE_AAAA, "AAAA", 1, 1, type_aaaa_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 29 */
- {LDNS_RR_TYPE_LOC, "LOC", 1, 1, type_loc_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 30 */
- {LDNS_RR_TYPE_NXT, "NXT", 2, 2, type_nxt_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
- /* 31 */
- {LDNS_RR_TYPE_EID, "EID", 1, 1, type_eid_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 32 */
- {LDNS_RR_TYPE_NIMLOC, "NIMLOC", 1, 1, type_nimloc_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 33 */
- {LDNS_RR_TYPE_SRV, "SRV", 4, 4, type_srv_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
- /* 34 */
- {LDNS_RR_TYPE_ATMA, "ATMA", 1, 1, type_atma_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 35 */
- {LDNS_RR_TYPE_NAPTR, "NAPTR", 6, 6, type_naptr_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
- /* 36 */
- {LDNS_RR_TYPE_KX, "KX", 2, 2, type_kx_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
- /* 37 */
- {LDNS_RR_TYPE_CERT, "CERT", 4, 4, type_cert_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 38 */
- {LDNS_RR_TYPE_A6, "A6", 1, 1, type_a6_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 39 */
- {LDNS_RR_TYPE_DNAME, "DNAME", 1, 1, type_dname_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
- /* 40 */
- {LDNS_RR_TYPE_SINK, "SINK", 1, 1, type_sink_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 41 */
- {LDNS_RR_TYPE_OPT, "OPT", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 42 */
- {LDNS_RR_TYPE_APL, "APL", 0, 0, type_apl_wireformat, LDNS_RDF_TYPE_APL, LDNS_RR_NO_COMPRESS, 0 },
- /* 43 */
- {LDNS_RR_TYPE_DS, "DS", 4, 4, type_ds_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 44 */
- {LDNS_RR_TYPE_SSHFP, "SSHFP", 3, 3, type_sshfp_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 45 */
- {LDNS_RR_TYPE_IPSECKEY, "IPSECKEY", 1, 1, type_ipseckey_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 46 */
- {LDNS_RR_TYPE_RRSIG, "RRSIG", 9, 9, type_rrsig_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
- /* 47 */
- {LDNS_RR_TYPE_NSEC, "NSEC", 1, 2, type_nsec_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
- /* 48 */
- {LDNS_RR_TYPE_DNSKEY, "DNSKEY", 4, 4, type_dnskey_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 49 */
- {LDNS_RR_TYPE_DHCID, "DHCID", 1, 1, type_dhcid_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 50 */
- {LDNS_RR_TYPE_NSEC3, "NSEC3", 5, 6, type_nsec3_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 51 */
- {LDNS_RR_TYPE_NSEC3PARAM, "NSEC3PARAM", 4, 4, type_nsec3param_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 52 */
- {LDNS_RR_TYPE_TLSA, "TLSA", 4, 4, type_tlsa_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-
- {LDNS_RR_TYPE_SMIMEA, "SMIMEA", 4, 4, type_tlsa_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE54", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-
- /* 55
- * Hip ends with 0 or more Rendezvous Servers represented as dname's.
- * Hence the LDNS_RDF_TYPE_DNAME _variable field and the _maximum field
- * set to 0.
- */
- {LDNS_RR_TYPE_HIP, "HIP", 1, 1, type_hip_wireformat, LDNS_RDF_TYPE_DNAME, LDNS_RR_NO_COMPRESS, 0 },
-
-#ifdef RRTYPE_NINFO
- /* 56 */
- {LDNS_RR_TYPE_NINFO, "NINFO", 1, 0, NULL, LDNS_RDF_TYPE_STR, LDNS_RR_NO_COMPRESS, 0 },
-#else
-{LDNS_RR_TYPE_NULL, "TYPE56", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-#endif
-#ifdef RRTYPE_RKEY
- /* 57 */
- {LDNS_RR_TYPE_RKEY, "RKEY", 4, 4, type_key_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-#else
-{LDNS_RR_TYPE_NULL, "TYPE57", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-#endif
- /* 58 */
- {LDNS_RR_TYPE_TALINK, "TALINK", 2, 2, type_talink_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 2 },
-
- /* 59 */
- {LDNS_RR_TYPE_CDS, "CDS", 4, 4, type_ds_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 60 */
- {LDNS_RR_TYPE_CDNSKEY, "CDNSKEY", 4, 4, type_dnskey_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-
-#ifdef RRTYPE_OPENPGPKEY
- /* 61 */
- {LDNS_RR_TYPE_OPENPGPKEY, "OPENPGPKEY", 1, 1, type_openpgpkey_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-#else
-{LDNS_RR_TYPE_NULL, "TYPE61", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-#endif
-
-{LDNS_RR_TYPE_CSYNC, "CSYNC", 3, 3, type_csync_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_ZONEMD, "ZONEMD", 4, 4, type_zonemd_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE64", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE65", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE66", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE67", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE68", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE69", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE70", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE71", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE72", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE73", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE74", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE75", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE76", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE77", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE78", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE79", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE80", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE81", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE82", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE83", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE84", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE85", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE86", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE87", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE88", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE89", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE90", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE91", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE92", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE93", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE94", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE95", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE96", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE97", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE98", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-
- /* 99 */
- {LDNS_RR_TYPE_SPF, "SPF", 1, 0, NULL, LDNS_RDF_TYPE_STR, LDNS_RR_NO_COMPRESS, 0 },
-
- /* UINFO [IANA-Reserved] */
-{LDNS_RR_TYPE_NULL, "TYPE100", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* UID [IANA-Reserved] */
-{LDNS_RR_TYPE_NULL, "TYPE101", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* GID [IANA-Reserved] */
-{LDNS_RR_TYPE_NULL, "TYPE102", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* UNSPEC [IANA-Reserved] */
-{LDNS_RR_TYPE_NULL, "TYPE103", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-
- /* 104 */
- {LDNS_RR_TYPE_NID, "NID", 2, 2, type_nid_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 105 */
- {LDNS_RR_TYPE_L32, "L32", 2, 2, type_l32_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 106 */
- {LDNS_RR_TYPE_L64, "L64", 2, 2, type_l64_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 107 */
- {LDNS_RR_TYPE_LP, "LP", 2, 2, type_lp_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
- /* 108 */
- {LDNS_RR_TYPE_EUI48, "EUI48", 1, 1, type_eui48_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 109 */
- {LDNS_RR_TYPE_EUI64, "EUI64", 1, 1, type_eui64_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-
-{LDNS_RR_TYPE_NULL, "TYPE110", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE111", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE112", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE113", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE114", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE115", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE116", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE117", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE118", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE119", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE120", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE121", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE122", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE123", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE124", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE125", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE126", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE127", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE128", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE129", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE130", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE131", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE132", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE133", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE134", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE135", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE136", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE137", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE138", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE139", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE140", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE141", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE142", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE143", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE144", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE145", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE146", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE147", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE148", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE149", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE150", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE151", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE152", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE153", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE154", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE155", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE156", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE157", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE158", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE159", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE160", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE161", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE162", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE163", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE164", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE165", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE166", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE167", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE168", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE169", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE170", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE171", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE172", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE173", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE174", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE175", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE176", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE177", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE178", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE179", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE180", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE181", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE182", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE183", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE184", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE185", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE186", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE187", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE188", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE189", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE190", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE191", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE192", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE193", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE194", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE195", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE196", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE197", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE198", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE199", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE200", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE201", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE202", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE203", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE204", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE205", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE206", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE207", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE208", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE209", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE210", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE211", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE212", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE213", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE214", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE215", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE216", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE217", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE218", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE219", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE220", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE221", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE222", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE223", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE224", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE225", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE226", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE227", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE228", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE229", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE230", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE231", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE232", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE233", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE234", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE235", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE236", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE237", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE238", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE239", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE240", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE241", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE242", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE243", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE244", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE245", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE246", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE247", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-{LDNS_RR_TYPE_NULL, "TYPE248", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-
- /* LDNS_RDF_TYPE_INT16_DATA takes two fields (length and data) as one.
- * So, unlike RFC 2930 spec, we have 7 min/max rdf's i.s.o. 8/9.
- */
- /* 249 */
- {LDNS_RR_TYPE_TKEY, "TKEY", 7, 7, type_tkey_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
- /* LDNS_RDF_TYPE_INT16_DATA takes two fields (length and data) as one.
- * So, unlike RFC 2930 spec, we have 7 min/max rdf's i.s.o. 8/9.
- */
- /* 250 */
- {LDNS_RR_TYPE_TSIG, "TSIG", 7, 7, type_tsig_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 1 },
-
- /* IXFR: A request for a transfer of an incremental zone transfer */
-{LDNS_RR_TYPE_NULL, "TYPE251", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* AXFR: A request for a transfer of an entire zone */
-{LDNS_RR_TYPE_NULL, "TYPE252", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* MAILB: A request for mailbox-related records (MB, MG or MR) */
-{LDNS_RR_TYPE_NULL, "TYPE253", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* MAILA: A request for mail agent RRs (Obsolete - see MX) */
-{LDNS_RR_TYPE_NULL, "TYPE254", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* ANY: A request for all (available) records */
-{LDNS_RR_TYPE_NULL, "TYPE255", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-
- /* 256 */
- {LDNS_RR_TYPE_URI, "URI", 3, 3, type_uri_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
- /* 257 */
- {LDNS_RR_TYPE_CAA, "CAA", 3, 3, type_caa_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-
-#ifdef RRTYPE_AVC
- /* 258 */
- {LDNS_RR_TYPE_AVC, "AVC", 1, 0, NULL, LDNS_RDF_TYPE_STR, LDNS_RR_NO_COMPRESS, 0 },
-#else
-{LDNS_RR_TYPE_NULL, "TYPE258", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-#endif
-#ifdef RRTYPE_DOA
- /* 259 */
- {LDNS_RR_TYPE_DOA, "DOA", 5, 5, type_doa_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-#else
-{LDNS_RR_TYPE_NULL, "TYPE259", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-#endif
-#ifdef RRTYPE_AMTRELAY
- /* 260 */
- {LDNS_RR_TYPE_AMTRELAY, "AMTRELAY", 1, 1, type_amtrelay_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-#else
-{LDNS_RR_TYPE_NULL, "TYPE260", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-#endif
-
-/* split in array, no longer contiguous */
-
-#ifdef RRTYPE_TA
- /* 32768 */
- {LDNS_RR_TYPE_TA, "TA", 4, 4, type_ds_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-#else
-{LDNS_RR_TYPE_NULL, "TYPE32768", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
-#endif
- /* 32769 */
- {LDNS_RR_TYPE_DLV, "DLV", 4, 4, type_ds_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 }
-};
-/** \endcond */
-
-/**
- * \def LDNS_RDATA_FIELD_DESCRIPTORS_COUNT
- * computes the number of rdata fields
- */
-#define LDNS_RDATA_FIELD_DESCRIPTORS_COUNT \
- (sizeof(rdata_field_descriptors)/sizeof(rdata_field_descriptors[0]))
-
-
-/*---------------------------------------------------------------------------*
- * The functions below return an bitmap RDF with the space required to set
- * or unset all known RR types. Arguably these functions are better situated
- * in rdata.c, however for the space calculation it is necesarry to walk
- * through rdata_field_descriptors which is not easily possible from anywhere
- * other than rr.c where it is declared static.
- *
- * Alternatively rr.c could have provided an iterator for rr_type or
- * rdf_descriptors, but this seemed overkill for internal use only.
- */
-static ldns_rr_descriptor* rdata_field_descriptors_end =
- &rdata_field_descriptors[LDNS_RDATA_FIELD_DESCRIPTORS_COUNT];
-
-/* From RFC3845:
- *
- * 2.1.2. The List of Type Bit Map(s) Field
- *
- * The RR type space is split into 256 window blocks, each representing
- * the low-order 8 bits of the 16-bit RR type space. Each block that
- * has at least one active RR type is encoded using a single octet
- * window number (from 0 to 255), a single octet bitmap length (from 1
- * to 32) indicating the number of octets used for the window block's
- * bitmap, and up to 32 octets (256 bits) of bitmap.
- *
- * Window blocks are present in the NSEC RR RDATA in increasing
- * numerical order.
- *
- * "|" denotes concatenation
- *
- * Type Bit Map(s) Field = ( Window Block # | Bitmap Length | Bitmap ) +
- *
- * <cut>
- *
- * Blocks with no types present MUST NOT be included. Trailing zero
- * octets in the bitmap MUST be omitted. The length of each block's
- * bitmap is determined by the type code with the largest numerical
- * value within that block, among the set of RR types present at the
- * NSEC RR's owner name. Trailing zero octets not specified MUST be
- * interpreted as zero octets.
- */
-static ldns_status
-ldns_rdf_bitmap_known_rr_types_set(ldns_rdf** rdf, int value)
-{
- uint8_t window; /* most significant octet of type */
- uint8_t subtype; /* least significant octet of type */
- uint16_t windows[256] /* Max subtype per window */
-#ifndef S_SPLINT_S
- = { 0 }
-#endif
- ;
- ldns_rr_descriptor* d; /* used to traverse rdata_field_descriptors */
- size_t i; /* used to traverse windows array */
-
- size_t sz; /* size needed for type bitmap rdf */
- uint8_t* data = NULL; /* rdf data */
- uint8_t* dptr; /* used to itraverse rdf data */
-
- assert(rdf != NULL);
-
- /* Which windows need to be in the bitmap rdf?
- */
- for (d=rdata_field_descriptors; d < rdata_field_descriptors_end; d++) {
- window = d->_type >> 8;
- subtype = d->_type & 0xff;
- if (windows[window] < subtype) {
- windows[window] = subtype;
- }
- }
-
- /* How much space do we need in the rdf for those windows?
- */
- sz = 0;
- for (i = 0; i < 256; i++) {
- if (windows[i]) {
- sz += windows[i] / 8 + 3;
- }
- }
- if (sz > 0) {
- /* Format rdf data according RFC3845 Section 2.1.2 (see above)
- */
- dptr = data = LDNS_XMALLOC(uint8_t, sz);
- if (!data) {
- return LDNS_STATUS_MEM_ERR;
- }
- memset(data, value, sz);
- for (i = 0; i < 256; i++) {
- if (windows[i]) {
- *dptr++ = (uint8_t)i;
- *dptr++ = (uint8_t)(windows[i] / 8 + 1);
- dptr += dptr[-1];
- }
- }
- }
- /* Allocate and return rdf structure for the data
- */
- *rdf = ldns_rdf_new(LDNS_RDF_TYPE_BITMAP, sz, data);
- if (!*rdf) {
- LDNS_FREE(data);
- return LDNS_STATUS_MEM_ERR;
- }
- return LDNS_STATUS_OK;
-}
-
-ldns_status
-ldns_rdf_bitmap_known_rr_types_space(ldns_rdf** rdf)
-{
- return ldns_rdf_bitmap_known_rr_types_set(rdf, 0);
-}
-
-ldns_status
-ldns_rdf_bitmap_known_rr_types(ldns_rdf** rdf)
-{
- return ldns_rdf_bitmap_known_rr_types_set(rdf, 255);
-}
-/* End of RDF bitmap functions
- *---------------------------------------------------------------------------*/
-
-
-const ldns_rr_descriptor *
-ldns_rr_descript(uint16_t type)
-{
- size_t i;
- if (type < LDNS_RDATA_FIELD_DESCRIPTORS_COMMON) {
- return &rdata_field_descriptors[type];
- } else {
- /* because not all array index equals type code */
- for (i = LDNS_RDATA_FIELD_DESCRIPTORS_COMMON;
- i < LDNS_RDATA_FIELD_DESCRIPTORS_COUNT;
- i++) {
- if (rdata_field_descriptors[i]._type == type) {
- return &rdata_field_descriptors[i];
- }
- }
- return &rdata_field_descriptors[0];
- }
-}
-
-size_t
-ldns_rr_descriptor_minimum(const ldns_rr_descriptor *descriptor)
-{
- if (descriptor) {
- return descriptor->_minimum;
- } else {
- return 0;
- }
-}
-
-size_t
-ldns_rr_descriptor_maximum(const ldns_rr_descriptor *descriptor)
-{
- if (descriptor) {
- if (descriptor->_variable != LDNS_RDF_TYPE_NONE) {
- /* Should really be SIZE_MAX... bad FreeBSD. */
- return UINT_MAX;
- } else {
- return descriptor->_maximum;
- }
- } else {
- return 0;
- }
-}
-
-ldns_rdf_type
-ldns_rr_descriptor_field_type(const ldns_rr_descriptor *descriptor,
- size_t index)
-{
- assert(descriptor != NULL);
- assert(index < descriptor->_maximum
- || descriptor->_variable != LDNS_RDF_TYPE_NONE);
- if (index < descriptor->_maximum) {
- return descriptor->_wireformat[index];
- } else {
- return descriptor->_variable;
- }
-}
-
-ldns_rr_type
-ldns_get_rr_type_by_name(const char *name)
-{
- unsigned int i;
- const char *desc_name;
- const ldns_rr_descriptor *desc;
-
- /* TYPEXX representation */
- if (strlen(name) > 4 && strncasecmp(name, "TYPE", 4) == 0) {
- return atoi(name + 4);
- }
-
- /* Normal types */
- for (i = 0; i < (unsigned int) LDNS_RDATA_FIELD_DESCRIPTORS_COUNT; i++) {
- desc = &rdata_field_descriptors[i];
- desc_name = desc->_name;
- if(desc_name &&
- strlen(name) == strlen(desc_name) &&
- strncasecmp(name, desc_name, strlen(desc_name)) == 0) {
- /* because not all array index equals type code */
- return desc->_type;
- }
- }
-
- /* special cases for query types */
- if (strlen(name) == 4 && strncasecmp(name, "IXFR", 4) == 0) {
- return 251;
- } else if (strlen(name) == 4 && strncasecmp(name, "AXFR", 4) == 0) {
- return 252;
- } else if (strlen(name) == 5 && strncasecmp(name, "MAILB", 5) == 0) {
- return 253;
- } else if (strlen(name) == 5 && strncasecmp(name, "MAILA", 5) == 0) {
- return 254;
- } else if (strlen(name) == 3 && strncasecmp(name, "ANY", 3) == 0) {
- return 255;
- }
-
- return 0;
-}
-
-ldns_rr_class
-ldns_get_rr_class_by_name(const char *name)
-{
- ldns_lookup_table *lt;
-
- /* CLASSXX representation */
- if (strlen(name) > 5 && strncasecmp(name, "CLASS", 5) == 0) {
- return atoi(name + 5);
- }
-
- /* Normal types */
- lt = ldns_lookup_by_name(ldns_rr_classes, name);
-
- if (lt) {
- return lt->id;
- }
- return 0;
-}
-
-
-ldns_rr_type
-ldns_rdf2rr_type(const ldns_rdf *rd)
-{
- ldns_rr_type r;
-
- if (!rd) {
- return 0;
- }
-
- if (ldns_rdf_get_type(rd) != LDNS_RDF_TYPE_TYPE) {
- return 0;
- }
-
- r = (ldns_rr_type) ldns_rdf2native_int16(rd);
- return r;
-}
-
-ldns_rr_type
-ldns_rr_list_type(const ldns_rr_list *rr_list)
-{
- if (rr_list && ldns_rr_list_rr_count(rr_list) > 0) {
- return ldns_rr_get_type(ldns_rr_list_rr(rr_list, 0));
- } else {
- return 0;
- }
-}
-
-ldns_rdf *
-ldns_rr_list_owner(const ldns_rr_list *rr_list)
-{
- if (rr_list && ldns_rr_list_rr_count(rr_list) > 0) {
- return ldns_rr_owner(ldns_rr_list_rr(rr_list, 0));
- } else {
- return NULL;
- }
-}
diff --git a/ldns/rr_functions.c b/ldns/rr_functions.c
deleted file mode 100644
index 20a0bfa..0000000
--- a/ldns/rr_functions.c
+++ /dev/null
@@ -1,427 +0,0 @@
-/*
- * rr_function.c
- *
- * function that operate on specific rr types
- *
- * (c) NLnet Labs, 2004-2006
- * See the file LICENSE for the license
- */
-
-/*
- * These come strait from perldoc Net::DNS::RR::xxx
- * first the read variant, then the write. This is
- * not complete.
- */
-
-#include <ldns/config.h>
-
-#include <ldns/ldns.h>
-
-#include <limits.h>
-#include <strings.h>
-
-/**
- * return a specific rdf
- * \param[in] type type of RR
- * \param[in] rr the rr itself
- * \param[in] pos at which postion to get it
- * \return the rdf sought
- */
-static ldns_rdf *
-ldns_rr_function(ldns_rr_type type, const ldns_rr *rr, size_t pos)
-{
- if (!rr || ldns_rr_get_type(rr) != type) {
- return NULL;
- }
- return ldns_rr_rdf(rr, pos);
-}
-
-/**
- * set a specific rdf
- * \param[in] type type of RR
- * \param[in] rr the rr itself
- * \param[in] rdf the rdf to set
- * \param[in] pos at which postion to set it
- * \return true or false
- */
-static bool
-ldns_rr_set_function(ldns_rr_type type, ldns_rr *rr, ldns_rdf *rdf, size_t pos)
-{
- ldns_rdf *pop;
- if (!rr || ldns_rr_get_type(rr) != type) {
- return false;
- }
- pop = ldns_rr_set_rdf(rr, rdf, pos);
- ldns_rdf_deep_free(pop);
- return true;
-}
-
-/* A/AAAA records */
-ldns_rdf *
-ldns_rr_a_address(const ldns_rr *r)
-{
- /* 2 types to check, cannot use the macro */
- if (!r || (ldns_rr_get_type(r) != LDNS_RR_TYPE_A &&
- ldns_rr_get_type(r) != LDNS_RR_TYPE_AAAA)) {
- return NULL;
- }
- return ldns_rr_rdf(r, 0);
-}
-
-bool
-ldns_rr_a_set_address(ldns_rr *r, ldns_rdf *f)
-{
- /* 2 types to check, cannot use the macro... */
- ldns_rdf *pop;
- if (!r || (ldns_rr_get_type(r) != LDNS_RR_TYPE_A &&
- ldns_rr_get_type(r) != LDNS_RR_TYPE_AAAA)) {
- return false;
- }
- pop = ldns_rr_set_rdf(r, f, 0);
- if (pop) {
- LDNS_FREE(pop);
- return true;
- } else {
- return false;
- }
-}
-
-/* NS record */
-ldns_rdf *
-ldns_rr_ns_nsdname(const ldns_rr *r)
-{
- return ldns_rr_function(LDNS_RR_TYPE_NS, r, 0);
-}
-
-/* MX record */
-ldns_rdf *
-ldns_rr_mx_preference(const ldns_rr *r)
-{
- return ldns_rr_function(LDNS_RR_TYPE_MX, r, 0);
-}
-
-ldns_rdf *
-ldns_rr_mx_exchange(const ldns_rr *r)
-{
- return ldns_rr_function(LDNS_RR_TYPE_MX, r, 1);
-}
-
-/* RRSIG record */
-ldns_rdf *
-ldns_rr_rrsig_typecovered(const ldns_rr *r)
-{
- return ldns_rr_function(LDNS_RR_TYPE_RRSIG, r, 0);
-}
-
-bool
-ldns_rr_rrsig_set_typecovered(ldns_rr *r, ldns_rdf *f)
-{
- return ldns_rr_set_function(LDNS_RR_TYPE_RRSIG, r, f, 0);
-}
-
-ldns_rdf *
-ldns_rr_rrsig_algorithm(const ldns_rr *r)
-{
- return ldns_rr_function(LDNS_RR_TYPE_RRSIG, r, 1);
-}
-
-bool
-ldns_rr_rrsig_set_algorithm(ldns_rr *r, ldns_rdf *f)
-{
- return ldns_rr_set_function(LDNS_RR_TYPE_RRSIG, r, f, 1);
-}
-
-ldns_rdf *
-ldns_rr_rrsig_labels(const ldns_rr *r)
-{
- return ldns_rr_function(LDNS_RR_TYPE_RRSIG, r, 2);
-}
-
-bool
-ldns_rr_rrsig_set_labels(ldns_rr *r, ldns_rdf *f)
-{
- return ldns_rr_set_function(LDNS_RR_TYPE_RRSIG, r, f, 2);
-}
-
-ldns_rdf *
-ldns_rr_rrsig_origttl(const ldns_rr *r)
-{
- return ldns_rr_function(LDNS_RR_TYPE_RRSIG, r, 3);
-}
-
-bool
-ldns_rr_rrsig_set_origttl(ldns_rr *r, ldns_rdf *f)
-{
- return ldns_rr_set_function(LDNS_RR_TYPE_RRSIG, r, f, 3);
-}
-
-ldns_rdf *
-ldns_rr_rrsig_expiration(const ldns_rr *r)
-{
- return ldns_rr_function(LDNS_RR_TYPE_RRSIG, r, 4);
-}
-
-bool
-ldns_rr_rrsig_set_expiration(ldns_rr *r, ldns_rdf *f)
-{
- return ldns_rr_set_function(LDNS_RR_TYPE_RRSIG, r, f, 4);
-}
-
-ldns_rdf *
-ldns_rr_rrsig_inception(const ldns_rr *r)
-{
- return ldns_rr_function(LDNS_RR_TYPE_RRSIG, r, 5);
-}
-
-bool
-ldns_rr_rrsig_set_inception(ldns_rr *r, ldns_rdf *f)
-{
- return ldns_rr_set_function(LDNS_RR_TYPE_RRSIG, r, f, 5);
-}
-
-ldns_rdf *
-ldns_rr_rrsig_keytag(const ldns_rr *r)
-{
- return ldns_rr_function(LDNS_RR_TYPE_RRSIG, r, 6);
-}
-
-bool
-ldns_rr_rrsig_set_keytag(ldns_rr *r, ldns_rdf *f)
-{
- return ldns_rr_set_function(LDNS_RR_TYPE_RRSIG, r, f, 6);
-}
-
-ldns_rdf *
-ldns_rr_rrsig_signame(const ldns_rr *r)
-{
- return ldns_rr_function(LDNS_RR_TYPE_RRSIG, r, 7);
-}
-
-bool
-ldns_rr_rrsig_set_signame(ldns_rr *r, ldns_rdf *f)
-{
- return ldns_rr_set_function(LDNS_RR_TYPE_RRSIG, r, f, 7);
-}
-
-ldns_rdf *
-ldns_rr_rrsig_sig(const ldns_rr *r)
-{
- return ldns_rr_function(LDNS_RR_TYPE_RRSIG, r, 8);
-}
-
-bool
-ldns_rr_rrsig_set_sig(ldns_rr *r, ldns_rdf *f)
-{
- return ldns_rr_set_function(LDNS_RR_TYPE_RRSIG, r, f, 8);
-}
-
-/* DNSKEY record */
-ldns_rdf *
-ldns_rr_dnskey_flags(const ldns_rr *r)
-{
- return ldns_rr_function(LDNS_RR_TYPE_DNSKEY, r, 0);
-}
-
-bool
-ldns_rr_dnskey_set_flags(ldns_rr *r, ldns_rdf *f)
-{
- return ldns_rr_set_function(LDNS_RR_TYPE_DNSKEY, r, f, 0);
-}
-
-ldns_rdf *
-ldns_rr_dnskey_protocol(const ldns_rr *r)
-{
- return ldns_rr_function(LDNS_RR_TYPE_DNSKEY, r, 1);
-}
-
-bool
-ldns_rr_dnskey_set_protocol(ldns_rr *r, ldns_rdf *f)
-{
- return ldns_rr_set_function(LDNS_RR_TYPE_DNSKEY, r, f, 1);
-}
-
-ldns_rdf *
-ldns_rr_dnskey_algorithm(const ldns_rr *r)
-{
- return ldns_rr_function(LDNS_RR_TYPE_DNSKEY, r, 2);
-}
-
-bool
-ldns_rr_dnskey_set_algorithm(ldns_rr *r, ldns_rdf *f)
-{
- return ldns_rr_set_function(LDNS_RR_TYPE_DNSKEY, r, f, 2);
-}
-
-ldns_rdf *
-ldns_rr_dnskey_key(const ldns_rr *r)
-{
- return ldns_rr_function(LDNS_RR_TYPE_DNSKEY, r, 3);
-}
-
-bool
-ldns_rr_dnskey_set_key(ldns_rr *r, ldns_rdf *f)
-{
- return ldns_rr_set_function(LDNS_RR_TYPE_DNSKEY, r, f, 3);
-}
-
-size_t
-ldns_rr_dnskey_key_size_raw(const unsigned char* keydata,
- const size_t len,
- const ldns_algorithm alg)
-{
- /* for DSA keys */
- uint8_t t;
-
- /* for RSA keys */
- uint16_t exp;
- uint16_t int16;
-
- switch ((ldns_signing_algorithm)alg) {
- case LDNS_SIGN_DSA:
- case LDNS_SIGN_DSA_NSEC3:
- if (len > 0) {
- t = keydata[0];
- return (64 + t*8)*8;
- } else {
- return 0;
- }
- break;
- case LDNS_SIGN_RSAMD5:
- case LDNS_SIGN_RSASHA1:
- case LDNS_SIGN_RSASHA1_NSEC3:
-#ifdef USE_SHA2
- case LDNS_SIGN_RSASHA256:
- case LDNS_SIGN_RSASHA512:
-#endif
- if (len > 0) {
- if (keydata[0] == 0) {
- /* big exponent */
- if (len > 3) {
- memmove(&int16, keydata + 1, 2);
- exp = ntohs(int16);
- return (len - exp - 3)*8;
- } else {
- return 0;
- }
- } else {
- exp = keydata[0];
- return (len-exp-1)*8;
- }
- } else {
- return 0;
- }
- break;
-#ifdef USE_GOST
- case LDNS_SIGN_ECC_GOST:
- return 512;
-#endif
-#ifdef USE_ECDSA
- case LDNS_SIGN_ECDSAP256SHA256:
- return 256;
- case LDNS_SIGN_ECDSAP384SHA384:
- return 384;
-#endif
-#ifdef USE_ED25519
- case LDNS_SIGN_ED25519:
- return 256;
-#endif
-#ifdef USE_ED448
- case LDNS_SIGN_ED448:
- return 456;
-#endif
- case LDNS_SIGN_HMACMD5:
- return len;
- default:
- return 0;
- }
-}
-
-size_t
-ldns_rr_dnskey_key_size(const ldns_rr *key)
-{
- if (!key || !ldns_rr_dnskey_key(key)
- || !ldns_rr_dnskey_algorithm(key)) {
- return 0;
- }
- return ldns_rr_dnskey_key_size_raw((unsigned char*)ldns_rdf_data(ldns_rr_dnskey_key(key)),
- ldns_rdf_size(ldns_rr_dnskey_key(key)),
- ldns_rdf2native_int8(ldns_rr_dnskey_algorithm(key))
- );
-}
-
-uint32_t ldns_soa_serial_identity(uint32_t ATTR_UNUSED(unused), void *data)
-{
- return (uint32_t) (intptr_t) data;
-}
-
-uint32_t ldns_soa_serial_increment(uint32_t s, void *ATTR_UNUSED(unused))
-{
- return ldns_soa_serial_increment_by(s, (void *)1);
-}
-
-uint32_t ldns_soa_serial_increment_by(uint32_t s, void *data)
-{
- return s + (intptr_t) data;
-}
-
-uint32_t ldns_soa_serial_datecounter(uint32_t s, void *data)
-{
- struct tm tm;
- char s_str[11];
- int32_t new_s;
- time_t t = data ? (time_t) (intptr_t) data : ldns_time(NULL);
-
- (void) strftime(s_str, 11, "%Y%m%d00", localtime_r(&t, &tm));
- new_s = (int32_t) atoi(s_str);
- return new_s - ((int32_t) s) <= 0 ? s+1 : ((uint32_t) new_s);
-}
-
-uint32_t ldns_soa_serial_unixtime(uint32_t s, void *data)
-{
- int32_t new_s = data ? (int32_t) (intptr_t) data
- : (int32_t) ldns_time(NULL);
- return new_s - ((int32_t) s) <= 0 ? s+1 : ((uint32_t) new_s);
-}
-
-void
-ldns_rr_soa_increment(ldns_rr *soa)
-{
- ldns_rr_soa_increment_func_data(soa, ldns_soa_serial_increment, NULL);
-}
-
-void
-ldns_rr_soa_increment_func(ldns_rr *soa, ldns_soa_serial_increment_func_t f)
-{
- ldns_rr_soa_increment_func_data(soa, f, NULL);
-}
-
-void
-ldns_rr_soa_increment_func_data(ldns_rr *soa,
- ldns_soa_serial_increment_func_t f, void *data)
-{
- ldns_rdf *prev_soa_serial_rdf;
- if ( !soa || !f || ldns_rr_get_type(soa) != LDNS_RR_TYPE_SOA
- || !ldns_rr_rdf(soa, 2)) {
- return;
- }
- prev_soa_serial_rdf = ldns_rr_set_rdf(
- soa
- , ldns_native2rdf_int32(
- LDNS_RDF_TYPE_INT32
- , (*f)( ldns_rdf2native_int32(
- ldns_rr_rdf(soa, 2))
- , data
- )
- )
- , 2
- );
- LDNS_FREE(prev_soa_serial_rdf);
-}
-
-void
-ldns_rr_soa_increment_func_int(ldns_rr *soa,
- ldns_soa_serial_increment_func_t f, int data)
-{
- ldns_rr_soa_increment_func_data(soa, f, (void *) (intptr_t) data);
-}
-
diff --git a/ldns/sha1.c b/ldns/sha1.c
deleted file mode 100644
index 96e8f96..0000000
--- a/ldns/sha1.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * modified for ldns by Jelte Jansen, original taken from OpenBSD:
- *
- * SHA-1 in C
- * By Steve Reid <steve@edmweb.com>
- * 100% Public Domain
- *
- * Test Vectors (from FIPS PUB 180-1)
- * "abc"
- * A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D
- * "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
- * 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1
- * A million repetitions of "a"
- * 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F
-*/
-
-/* #define LITTLE_ENDIAN * This should be #define'd already, if true. */
-
-#include <ldns/config.h>
-#include <ldns/ldns.h>
-#include <strings.h>
-
-#define SHA1HANDSOFF 1 /* Copies data before messing with it. */
-#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
-
-/* blk0() and blk() perform the initial expand. */
-/* I got the idea of expanding during the round function from SSLeay */
-#if BYTE_ORDER == LITTLE_ENDIAN
-#define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \
- |(rol(block->l[i],8)&0x00FF00FF))
-#else
-#define blk0(i) block->l[i]
-#endif
-#define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \
- ^block->l[(i+2)&15]^block->l[i&15],1))
-
-/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */
-#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30);
-#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30);
-#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30);
-#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30);
-#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30);
-
-/* Hash a single 512-bit block. This is the core of the algorithm. */
-
-void
-ldns_sha1_transform(uint32_t state[5], const unsigned char buffer[LDNS_SHA1_BLOCK_LENGTH])
-{
- uint32_t a, b, c, d, e;
- typedef union {
- unsigned char c[64];
- unsigned int l[16];
- } CHAR64LONG16;
- CHAR64LONG16* block;
-#ifdef SHA1HANDSOFF
- unsigned char workspace[LDNS_SHA1_BLOCK_LENGTH];
-
- block = (CHAR64LONG16 *)workspace;
- memmove(block, buffer, LDNS_SHA1_BLOCK_LENGTH);
-#else
- block = (CHAR64LONG16 *)buffer;
-#endif
- /* Copy context->state[] to working vars */
- a = state[0];
- b = state[1];
- c = state[2];
- d = state[3];
- e = state[4];
-
- /* 4 rounds of 20 operations each. Loop unrolled. */
- R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3);
- R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7);
- R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11);
- R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15);
- R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);
- R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
- R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
- R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
- R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
- R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
- R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43);
- R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47);
- R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51);
- R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55);
- R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59);
- R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63);
- R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67);
- R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71);
- R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75);
- R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79);
-
- /* Add the working vars back into context.state[] */
- state[0] += a;
- state[1] += b;
- state[2] += c;
- state[3] += d;
- state[4] += e;
- /* Wipe variables */
- a = b = c = d = e = 0;
- (void)a;
-}
-
-
-/* SHA1Init - Initialize new context */
-
-void
-ldns_sha1_init(ldns_sha1_ctx *context)
-{
- /* SHA1 initialization constants */
- context->count = 0;
- context->state[0] = 0x67452301;
- context->state[1] = 0xEFCDAB89;
- context->state[2] = 0x98BADCFE;
- context->state[3] = 0x10325476;
- context->state[4] = 0xC3D2E1F0;
-}
-
-
-/* Run your data through this. */
-
-void
-ldns_sha1_update(ldns_sha1_ctx *context, const unsigned char *data, unsigned int len)
-{
- unsigned int i;
- unsigned int j;
-
- j = (unsigned)(uint32_t)((context->count >> 3) & 63);
- context->count += (len << 3);
- if ((j + len) > 63) {
- memmove(&context->buffer[j], data, (i = 64 - j));
- ldns_sha1_transform(context->state, context->buffer);
- for ( ; i + 63 < len; i += 64) {
- ldns_sha1_transform(context->state, &data[i]);
- }
- j = 0;
- }
- else i = 0;
- memmove(&context->buffer[j], &data[i], len - i);
-}
-
-
-/* Add padding and return the message digest. */
-
-void
-ldns_sha1_final(unsigned char digest[LDNS_SHA1_DIGEST_LENGTH], ldns_sha1_ctx *context)
-{
- unsigned int i;
- unsigned char finalcount[8];
-
- for (i = 0; i < 8; i++) {
- finalcount[i] = (unsigned char)((context->count >>
- ((7 - (i & 7)) * 8)) & 255); /* Endian independent */
- }
- ldns_sha1_update(context, (unsigned char *)"\200", 1);
- while ((context->count & 504) != 448) {
- ldns_sha1_update(context, (unsigned char *)"\0", 1);
- }
- ldns_sha1_update(context, finalcount, 8); /* Should cause a SHA1Transform() */
-
- if (digest != NULL)
- for (i = 0; i < LDNS_SHA1_DIGEST_LENGTH; i++) {
- digest[i] = (unsigned char)((context->state[i >> 2] >>
- ((3 - (i & 3)) * 8)) & 255);
- }
-#ifdef SHA1HANDSOFF /* make SHA1Transform overwrite its own static vars */
- ldns_sha1_transform(context->state, context->buffer);
-#endif
-}
-
-unsigned char *
-ldns_sha1(unsigned char *data, unsigned int data_len, unsigned char *digest)
-{
- ldns_sha1_ctx ctx;
- ldns_sha1_init(&ctx);
- ldns_sha1_update(&ctx, data, data_len);
- ldns_sha1_final(digest, &ctx);
- return digest;
-}
diff --git a/ldns/sha2.c b/ldns/sha2.c
deleted file mode 100644
index e0b1f4b..0000000
--- a/ldns/sha2.c
+++ /dev/null
@@ -1,998 +0,0 @@
-/*
- * FILE: sha2.c
- * AUTHOR: Aaron D. Gifford - http://www.aarongifford.com/
- *
- * Copyright (c) 2000-2001, Aaron D. Gifford
- * All rights reserved.
- *
- * Modified by Jelte Jansen to fit in ldns, and not clash with any
- * system-defined SHA code.
- * Changes:
- * - Renamed (external) functions and constants to fit ldns style
- * - Removed _End and _Data functions
- * - Added ldns_shaX(data, len, digest) convenience functions
- * - Removed prototypes of _Transform functions and made those static
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holder nor the names of contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $Id: sha2.c,v 1.1 2001/11/08 00:01:51 adg Exp adg $
- */
-
-#include <ldns/config.h>
-#include <string.h> /* memcpy()/memset() or bcopy()/bzero() */
-#include <assert.h> /* assert() */
-#include <ldns/sha2.h>
-
-/*
- * ASSERT NOTE:
- * Some sanity checking code is included using assert(). On my FreeBSD
- * system, this additional code can be removed by compiling with NDEBUG
- * defined. Check your own systems manpage on assert() to see how to
- * compile WITHOUT the sanity checking code on your system.
- *
- * UNROLLED TRANSFORM LOOP NOTE:
- * You can define SHA2_UNROLL_TRANSFORM to use the unrolled transform
- * loop version for the hash transform rounds (defined using macros
- * later in this file). Either define on the command line, for example:
- *
- * cc -DSHA2_UNROLL_TRANSFORM -o sha2 sha2.c sha2prog.c
- *
- * or define below:
- *
- * #define SHA2_UNROLL_TRANSFORM
- *
- */
-
-
-/*** SHA-256/384/512 Machine Architecture Definitions *****************/
-/*
- * BYTE_ORDER NOTE:
- *
- * Please make sure that your system defines BYTE_ORDER. If your
- * architecture is little-endian, make sure it also defines
- * LITTLE_ENDIAN and that the two (BYTE_ORDER and LITTLE_ENDIAN) are
- * equivilent.
- *
- * If your system does not define the above, then you can do so by
- * hand like this:
- *
- * #define LITTLE_ENDIAN 1234
- * #define BIG_ENDIAN 4321
- *
- * And for little-endian machines, add:
- *
- * #define BYTE_ORDER LITTLE_ENDIAN
- *
- * Or for big-endian machines:
- *
- * #define BYTE_ORDER BIG_ENDIAN
- *
- * The FreeBSD machine this was written on defines BYTE_ORDER
- * appropriately by including <sys/types.h> (which in turn includes
- * <machine/endian.h> where the appropriate definitions are actually
- * made).
- */
-#if !defined(BYTE_ORDER) || (BYTE_ORDER != LITTLE_ENDIAN && BYTE_ORDER != BIG_ENDIAN)
-#error Define BYTE_ORDER to be equal to either LITTLE_ENDIAN or BIG_ENDIAN
-#endif
-
-typedef uint8_t sha2_byte; /* Exactly 1 byte */
-typedef uint32_t sha2_word32; /* Exactly 4 bytes */
-#ifdef S_SPLINT_S
-typedef unsigned long long sha2_word64; /* lint 8 bytes */
-#else
-typedef uint64_t sha2_word64; /* Exactly 8 bytes */
-#endif
-
-/*** SHA-256/384/512 Various Length Definitions ***********************/
-/* NOTE: Most of these are in sha2.h */
-#define ldns_sha256_SHORT_BLOCK_LENGTH (LDNS_SHA256_BLOCK_LENGTH - 8)
-#define ldns_sha384_SHORT_BLOCK_LENGTH (LDNS_SHA384_BLOCK_LENGTH - 16)
-#define ldns_sha512_SHORT_BLOCK_LENGTH (LDNS_SHA512_BLOCK_LENGTH - 16)
-
-
-/*** ENDIAN REVERSAL MACROS *******************************************/
-#if BYTE_ORDER == LITTLE_ENDIAN
-#define REVERSE32(w,x) { \
- sha2_word32 tmp = (w); \
- tmp = (tmp >> 16) | (tmp << 16); \
- (x) = ((tmp & 0xff00ff00UL) >> 8) | ((tmp & 0x00ff00ffUL) << 8); \
-}
-#ifndef S_SPLINT_S
-#define REVERSE64(w,x) { \
- sha2_word64 tmp = (w); \
- tmp = (tmp >> 32) | (tmp << 32); \
- tmp = ((tmp & 0xff00ff00ff00ff00ULL) >> 8) | \
- ((tmp & 0x00ff00ff00ff00ffULL) << 8); \
- (x) = ((tmp & 0xffff0000ffff0000ULL) >> 16) | \
- ((tmp & 0x0000ffff0000ffffULL) << 16); \
-}
-#else /* splint */
-#define REVERSE64(w,x) /* splint */
-#endif /* splint */
-#endif /* BYTE_ORDER == LITTLE_ENDIAN */
-
-/*
- * Macro for incrementally adding the unsigned 64-bit integer n to the
- * unsigned 128-bit integer (represented using a two-element array of
- * 64-bit words):
- */
-#define ADDINC128(w,n) { \
- (w)[0] += (sha2_word64)(n); \
- if ((w)[0] < (n)) { \
- (w)[1]++; \
- } \
-}
-#ifdef S_SPLINT_S
-#undef ADDINC128
-#define ADDINC128(w,n) /* splint */
-#endif
-
-/*
- * Macros for copying blocks of memory and for zeroing out ranges
- * of memory. Using these macros makes it easy to switch from
- * using memset()/memcpy() and using bzero()/bcopy().
- *
- * Please define either SHA2_USE_MEMSET_MEMCPY or define
- * SHA2_USE_BZERO_BCOPY depending on which function set you
- * choose to use:
- */
-#if !defined(SHA2_USE_MEMSET_MEMCPY) && !defined(SHA2_USE_BZERO_BCOPY)
-/* Default to memset()/memcpy() if no option is specified */
-#define SHA2_USE_MEMSET_MEMCPY 1
-#endif
-#if defined(SHA2_USE_MEMSET_MEMCPY) && defined(SHA2_USE_BZERO_BCOPY)
-/* Abort with an error if BOTH options are defined */
-#error Define either SHA2_USE_MEMSET_MEMCPY or SHA2_USE_BZERO_BCOPY, not both!
-#endif
-
-#ifdef SHA2_USE_MEMSET_MEMCPY
-#define MEMSET_BZERO(p,l) memset((p), 0, (l))
-#define MEMCPY_BCOPY(d,s,l) memcpy((d), (s), (l))
-#endif
-#ifdef SHA2_USE_BZERO_BCOPY
-#define MEMSET_BZERO(p,l) bzero((p), (l))
-#define MEMCPY_BCOPY(d,s,l) bcopy((s), (d), (l))
-#endif
-
-
-/*** THE SIX LOGICAL FUNCTIONS ****************************************/
-/*
- * Bit shifting and rotation (used by the six SHA-XYZ logical functions:
- *
- * NOTE: The naming of R and S appears backwards here (R is a SHIFT and
- * S is a ROTATION) because the SHA-256/384/512 description document
- * (see http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf) uses this
- * same "backwards" definition.
- */
-/* Shift-right (used in SHA-256, SHA-384, and SHA-512): */
-#define R(b,x) ((x) >> (b))
-/* 32-bit Rotate-right (used in SHA-256): */
-#define S32(b,x) (((x) >> (b)) | ((x) << (32 - (b))))
-/* 64-bit Rotate-right (used in SHA-384 and SHA-512): */
-#define S64(b,x) (((x) >> (b)) | ((x) << (64 - (b))))
-
-/* Two of six logical functions used in SHA-256, SHA-384, and SHA-512: */
-#define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z)))
-#define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
-
-/* Four of six logical functions used in SHA-256: */
-#define Sigma0_256(x) (S32(2, (x)) ^ S32(13, (x)) ^ S32(22, (x)))
-#define Sigma1_256(x) (S32(6, (x)) ^ S32(11, (x)) ^ S32(25, (x)))
-#define sigma0_256(x) (S32(7, (x)) ^ S32(18, (x)) ^ R(3 , (x)))
-#define sigma1_256(x) (S32(17, (x)) ^ S32(19, (x)) ^ R(10, (x)))
-
-/* Four of six logical functions used in SHA-384 and SHA-512: */
-#define Sigma0_512(x) (S64(28, (x)) ^ S64(34, (x)) ^ S64(39, (x)))
-#define Sigma1_512(x) (S64(14, (x)) ^ S64(18, (x)) ^ S64(41, (x)))
-#define sigma0_512(x) (S64( 1, (x)) ^ S64( 8, (x)) ^ R( 7, (x)))
-#define sigma1_512(x) (S64(19, (x)) ^ S64(61, (x)) ^ R( 6, (x)))
-
-/*** SHA-XYZ INITIAL HASH VALUES AND CONSTANTS ************************/
-/* Hash constant words K for SHA-256: */
-static const sha2_word32 K256[64] = {
- 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL,
- 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL,
- 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL,
- 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL,
- 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL,
- 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL,
- 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL,
- 0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL,
- 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL,
- 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
- 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL,
- 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL,
- 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL,
- 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL,
- 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
- 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL
-};
-
-/* initial hash value H for SHA-256: */
-static const sha2_word32 ldns_sha256_initial_hash_value[8] = {
- 0x6a09e667UL,
- 0xbb67ae85UL,
- 0x3c6ef372UL,
- 0xa54ff53aUL,
- 0x510e527fUL,
- 0x9b05688cUL,
- 0x1f83d9abUL,
- 0x5be0cd19UL
-};
-
-/* Hash constant words K for SHA-384 and SHA-512: */
-static const sha2_word64 K512[80] = {
- 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL,
- 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL,
- 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
- 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL,
- 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL,
- 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
- 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL,
- 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL,
- 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL,
- 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL,
- 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL,
- 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
- 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL,
- 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL,
- 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL,
- 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL,
- 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL,
- 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
- 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL,
- 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL,
- 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL,
- 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL,
- 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL,
- 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
- 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL,
- 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL,
- 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL,
- 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL,
- 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL,
- 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
- 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL,
- 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL,
- 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL,
- 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL,
- 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL,
- 0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
- 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL,
- 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL,
- 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL,
- 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL
-};
-
-/* initial hash value H for SHA-384 */
-static const sha2_word64 sha384_initial_hash_value[8] = {
- 0xcbbb9d5dc1059ed8ULL,
- 0x629a292a367cd507ULL,
- 0x9159015a3070dd17ULL,
- 0x152fecd8f70e5939ULL,
- 0x67332667ffc00b31ULL,
- 0x8eb44a8768581511ULL,
- 0xdb0c2e0d64f98fa7ULL,
- 0x47b5481dbefa4fa4ULL
-};
-
-/* initial hash value H for SHA-512 */
-static const sha2_word64 sha512_initial_hash_value[8] = {
- 0x6a09e667f3bcc908ULL,
- 0xbb67ae8584caa73bULL,
- 0x3c6ef372fe94f82bULL,
- 0xa54ff53a5f1d36f1ULL,
- 0x510e527fade682d1ULL,
- 0x9b05688c2b3e6c1fULL,
- 0x1f83d9abfb41bd6bULL,
- 0x5be0cd19137e2179ULL
-};
-
-/*** SHA-256: *********************************************************/
-void ldns_sha256_init(ldns_sha256_CTX* context) {
- if (context == (ldns_sha256_CTX*)0) {
- return;
- }
- MEMCPY_BCOPY(context->state, ldns_sha256_initial_hash_value, LDNS_SHA256_DIGEST_LENGTH);
- MEMSET_BZERO(context->buffer, LDNS_SHA256_BLOCK_LENGTH);
- context->bitcount = 0;
-}
-
-#ifdef SHA2_UNROLL_TRANSFORM
-
-/* Unrolled SHA-256 round macros: */
-
-#if BYTE_ORDER == LITTLE_ENDIAN
-
-#define ROUND256_0_TO_15(a,b,c,d,e,f,g,h) \
- REVERSE32(*data++, W256[j]); \
- T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \
- K256[j] + W256[j]; \
- (d) += T1; \
- (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \
- j++
-
-
-#else /* BYTE_ORDER == LITTLE_ENDIAN */
-
-#define ROUND256_0_TO_15(a,b,c,d,e,f,g,h) \
- T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \
- K256[j] + (W256[j] = *data++); \
- (d) += T1; \
- (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \
- j++
-
-#endif /* BYTE_ORDER == LITTLE_ENDIAN */
-
-#define ROUND256(a,b,c,d,e,f,g,h) \
- s0 = W256[(j+1)&0x0f]; \
- s0 = sigma0_256(s0); \
- s1 = W256[(j+14)&0x0f]; \
- s1 = sigma1_256(s1); \
- T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + K256[j] + \
- (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0); \
- (d) += T1; \
- (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \
- j++
-
-static void ldns_sha256_Transform(ldns_sha256_CTX* context,
- const sha2_word32* data) {
- sha2_word32 a, b, c, d, e, f, g, h, s0, s1;
- sha2_word32 T1, *W256;
- int j;
-
- W256 = (sha2_word32*)context->buffer;
-
- /* initialize registers with the prev. intermediate value */
- a = context->state[0];
- b = context->state[1];
- c = context->state[2];
- d = context->state[3];
- e = context->state[4];
- f = context->state[5];
- g = context->state[6];
- h = context->state[7];
-
- j = 0;
- do {
- /* Rounds 0 to 15 (unrolled): */
- ROUND256_0_TO_15(a,b,c,d,e,f,g,h);
- ROUND256_0_TO_15(h,a,b,c,d,e,f,g);
- ROUND256_0_TO_15(g,h,a,b,c,d,e,f);
- ROUND256_0_TO_15(f,g,h,a,b,c,d,e);
- ROUND256_0_TO_15(e,f,g,h,a,b,c,d);
- ROUND256_0_TO_15(d,e,f,g,h,a,b,c);
- ROUND256_0_TO_15(c,d,e,f,g,h,a,b);
- ROUND256_0_TO_15(b,c,d,e,f,g,h,a);
- } while (j < 16);
-
- /* Now for the remaining rounds to 64: */
- do {
- ROUND256(a,b,c,d,e,f,g,h);
- ROUND256(h,a,b,c,d,e,f,g);
- ROUND256(g,h,a,b,c,d,e,f);
- ROUND256(f,g,h,a,b,c,d,e);
- ROUND256(e,f,g,h,a,b,c,d);
- ROUND256(d,e,f,g,h,a,b,c);
- ROUND256(c,d,e,f,g,h,a,b);
- ROUND256(b,c,d,e,f,g,h,a);
- } while (j < 64);
-
- /* Compute the current intermediate hash value */
- context->state[0] += a;
- context->state[1] += b;
- context->state[2] += c;
- context->state[3] += d;
- context->state[4] += e;
- context->state[5] += f;
- context->state[6] += g;
- context->state[7] += h;
-
- /* Clean up */
- a = b = c = d = e = f = g = h = T1 = 0;
-}
-
-#else /* SHA2_UNROLL_TRANSFORM */
-
-static void ldns_sha256_Transform(ldns_sha256_CTX* context,
- const sha2_word32* data) {
- sha2_word32 a, b, c, d, e, f, g, h, s0, s1;
- sha2_word32 T1, T2, *W256;
- int j;
-
- W256 = (sha2_word32*)context->buffer;
-
- /* initialize registers with the prev. intermediate value */
- a = context->state[0];
- b = context->state[1];
- c = context->state[2];
- d = context->state[3];
- e = context->state[4];
- f = context->state[5];
- g = context->state[6];
- h = context->state[7];
-
- j = 0;
- do {
-#if BYTE_ORDER == LITTLE_ENDIAN
- /* Copy data while converting to host byte order */
- REVERSE32(*data++,W256[j]);
- /* Apply the SHA-256 compression function to update a..h */
- T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + W256[j];
-#else /* BYTE_ORDER == LITTLE_ENDIAN */
- /* Apply the SHA-256 compression function to update a..h with copy */
- T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + (W256[j] = *data++);
-#endif /* BYTE_ORDER == LITTLE_ENDIAN */
- T2 = Sigma0_256(a) + Maj(a, b, c);
- h = g;
- g = f;
- f = e;
- e = d + T1;
- d = c;
- c = b;
- b = a;
- a = T1 + T2;
-
- j++;
- } while (j < 16);
-
- do {
- /* Part of the message block expansion: */
- s0 = W256[(j+1)&0x0f];
- s0 = sigma0_256(s0);
- s1 = W256[(j+14)&0x0f];
- s1 = sigma1_256(s1);
-
- /* Apply the SHA-256 compression function to update a..h */
- T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] +
- (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0);
- T2 = Sigma0_256(a) + Maj(a, b, c);
- h = g;
- g = f;
- f = e;
- e = d + T1;
- d = c;
- c = b;
- b = a;
- a = T1 + T2;
-
- j++;
- } while (j < 64);
-
- /* Compute the current intermediate hash value */
- context->state[0] += a;
- context->state[1] += b;
- context->state[2] += c;
- context->state[3] += d;
- context->state[4] += e;
- context->state[5] += f;
- context->state[6] += g;
- context->state[7] += h;
-
- /* Clean up */
- a = b = c = d = e = f = g = h = T1 = T2 = 0;
- (void)a;
-}
-
-#endif /* SHA2_UNROLL_TRANSFORM */
-
-void ldns_sha256_update(ldns_sha256_CTX* context, const sha2_byte *data, size_t len) {
- size_t freespace, usedspace;
-
- if (len == 0) {
- /* Calling with no data is valid - we do nothing */
- return;
- }
-
- /* Sanity check: */
- assert(context != (ldns_sha256_CTX*)0 && data != (sha2_byte*)0);
-
- usedspace = (context->bitcount >> 3) % LDNS_SHA256_BLOCK_LENGTH;
- if (usedspace > 0) {
- /* Calculate how much free space is available in the buffer */
- freespace = LDNS_SHA256_BLOCK_LENGTH - usedspace;
-
- if (len >= freespace) {
- /* Fill the buffer completely and process it */
- MEMCPY_BCOPY(&context->buffer[usedspace], data, freespace);
- context->bitcount += freespace << 3;
- len -= freespace;
- data += freespace;
- ldns_sha256_Transform(context, (sha2_word32*)context->buffer);
- } else {
- /* The buffer is not yet full */
- MEMCPY_BCOPY(&context->buffer[usedspace], data, len);
- context->bitcount += len << 3;
- /* Clean up: */
- usedspace = freespace = 0;
- (void)usedspace;
- return;
- }
- }
- while (len >= LDNS_SHA256_BLOCK_LENGTH) {
- /* Process as many complete blocks as we can */
- ldns_sha256_Transform(context, (sha2_word32*)data);
- context->bitcount += LDNS_SHA256_BLOCK_LENGTH << 3;
- len -= LDNS_SHA256_BLOCK_LENGTH;
- data += LDNS_SHA256_BLOCK_LENGTH;
- }
- if (len > 0) {
- /* There's left-overs, so save 'em */
- MEMCPY_BCOPY(context->buffer, data, len);
- context->bitcount += len << 3;
- }
- /* Clean up: */
- usedspace = freespace = 0;
- (void)usedspace;
-}
-
-typedef union _ldns_sha2_buffer_union {
- uint8_t* theChars;
- uint64_t* theLongs;
-} ldns_sha2_buffer_union;
-
-void ldns_sha256_final(sha2_byte digest[], ldns_sha256_CTX* context) {
- sha2_word32 *d = (sha2_word32*)digest;
- size_t usedspace;
- ldns_sha2_buffer_union cast_var;
-
- /* Sanity check: */
- assert(context != (ldns_sha256_CTX*)0);
-
- /* If no digest buffer is passed, we don't bother doing this: */
- if (digest != (sha2_byte*)0) {
- usedspace = (context->bitcount >> 3) % LDNS_SHA256_BLOCK_LENGTH;
-#if BYTE_ORDER == LITTLE_ENDIAN
- /* Convert FROM host byte order */
- REVERSE64(context->bitcount,context->bitcount);
-#endif
- if (usedspace > 0) {
- /* Begin padding with a 1 bit: */
- context->buffer[usedspace++] = 0x80;
-
- if (usedspace <= ldns_sha256_SHORT_BLOCK_LENGTH) {
- /* Set-up for the last transform: */
- MEMSET_BZERO(&context->buffer[usedspace], ldns_sha256_SHORT_BLOCK_LENGTH - usedspace);
- } else {
- if (usedspace < LDNS_SHA256_BLOCK_LENGTH) {
- MEMSET_BZERO(&context->buffer[usedspace], LDNS_SHA256_BLOCK_LENGTH - usedspace);
- }
- /* Do second-to-last transform: */
- ldns_sha256_Transform(context, (sha2_word32*)context->buffer);
-
- /* And set-up for the last transform: */
- MEMSET_BZERO(context->buffer, ldns_sha256_SHORT_BLOCK_LENGTH);
- }
- } else {
- /* Set-up for the last transform: */
- MEMSET_BZERO(context->buffer, ldns_sha256_SHORT_BLOCK_LENGTH);
-
- /* Begin padding with a 1 bit: */
- *context->buffer = 0x80;
- }
- /* Set the bit count: */
- cast_var.theChars = context->buffer;
- cast_var.theLongs[ldns_sha256_SHORT_BLOCK_LENGTH / 8] = context->bitcount;
-
- /* final transform: */
- ldns_sha256_Transform(context, (sha2_word32*)context->buffer);
-
-#if BYTE_ORDER == LITTLE_ENDIAN
- {
- /* Convert TO host byte order */
- int j;
- for (j = 0; j < 8; j++) {
- REVERSE32(context->state[j],context->state[j]);
- *d++ = context->state[j];
- }
- }
-#else
- MEMCPY_BCOPY(d, context->state, LDNS_SHA256_DIGEST_LENGTH);
-#endif
- }
-
- /* Clean up state data: */
- MEMSET_BZERO(context, sizeof(ldns_sha256_CTX));
- usedspace = 0;
- (void)usedspace;
-}
-
-unsigned char *
-ldns_sha256(unsigned char *data, unsigned int data_len, unsigned char *digest)
-{
- ldns_sha256_CTX ctx;
- ldns_sha256_init(&ctx);
- ldns_sha256_update(&ctx, data, data_len);
- ldns_sha256_final(digest, &ctx);
- return digest;
-}
-
-/*** SHA-512: *********************************************************/
-void ldns_sha512_init(ldns_sha512_CTX* context) {
- if (context == (ldns_sha512_CTX*)0) {
- return;
- }
- MEMCPY_BCOPY(context->state, sha512_initial_hash_value, LDNS_SHA512_DIGEST_LENGTH);
- MEMSET_BZERO(context->buffer, LDNS_SHA512_BLOCK_LENGTH);
- context->bitcount[0] = context->bitcount[1] = 0;
-}
-
-#ifdef SHA2_UNROLL_TRANSFORM
-
-/* Unrolled SHA-512 round macros: */
-#if BYTE_ORDER == LITTLE_ENDIAN
-
-#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) \
- REVERSE64(*data++, W512[j]); \
- T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \
- K512[j] + W512[j]; \
- (d) += T1, \
- (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)), \
- j++
-
-
-#else /* BYTE_ORDER == LITTLE_ENDIAN */
-
-#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) \
- T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \
- K512[j] + (W512[j] = *data++); \
- (d) += T1; \
- (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \
- j++
-
-#endif /* BYTE_ORDER == LITTLE_ENDIAN */
-
-#define ROUND512(a,b,c,d,e,f,g,h) \
- s0 = W512[(j+1)&0x0f]; \
- s0 = sigma0_512(s0); \
- s1 = W512[(j+14)&0x0f]; \
- s1 = sigma1_512(s1); \
- T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + K512[j] + \
- (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0); \
- (d) += T1; \
- (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \
- j++
-
-static void ldns_sha512_Transform(ldns_sha512_CTX* context,
- const sha2_word64* data) {
- sha2_word64 a, b, c, d, e, f, g, h, s0, s1;
- sha2_word64 T1, *W512 = (sha2_word64*)context->buffer;
- int j;
-
- /* initialize registers with the prev. intermediate value */
- a = context->state[0];
- b = context->state[1];
- c = context->state[2];
- d = context->state[3];
- e = context->state[4];
- f = context->state[5];
- g = context->state[6];
- h = context->state[7];
-
- j = 0;
- do {
- ROUND512_0_TO_15(a,b,c,d,e,f,g,h);
- ROUND512_0_TO_15(h,a,b,c,d,e,f,g);
- ROUND512_0_TO_15(g,h,a,b,c,d,e,f);
- ROUND512_0_TO_15(f,g,h,a,b,c,d,e);
- ROUND512_0_TO_15(e,f,g,h,a,b,c,d);
- ROUND512_0_TO_15(d,e,f,g,h,a,b,c);
- ROUND512_0_TO_15(c,d,e,f,g,h,a,b);
- ROUND512_0_TO_15(b,c,d,e,f,g,h,a);
- } while (j < 16);
-
- /* Now for the remaining rounds up to 79: */
- do {
- ROUND512(a,b,c,d,e,f,g,h);
- ROUND512(h,a,b,c,d,e,f,g);
- ROUND512(g,h,a,b,c,d,e,f);
- ROUND512(f,g,h,a,b,c,d,e);
- ROUND512(e,f,g,h,a,b,c,d);
- ROUND512(d,e,f,g,h,a,b,c);
- ROUND512(c,d,e,f,g,h,a,b);
- ROUND512(b,c,d,e,f,g,h,a);
- } while (j < 80);
-
- /* Compute the current intermediate hash value */
- context->state[0] += a;
- context->state[1] += b;
- context->state[2] += c;
- context->state[3] += d;
- context->state[4] += e;
- context->state[5] += f;
- context->state[6] += g;
- context->state[7] += h;
-
- /* Clean up */
- a = b = c = d = e = f = g = h = T1 = 0;
-}
-
-#else /* SHA2_UNROLL_TRANSFORM */
-
-static void ldns_sha512_Transform(ldns_sha512_CTX* context,
- const sha2_word64* data) {
- sha2_word64 a, b, c, d, e, f, g, h, s0, s1;
- sha2_word64 T1, T2, *W512 = (sha2_word64*)context->buffer;
- int j;
-
- /* initialize registers with the prev. intermediate value */
- a = context->state[0];
- b = context->state[1];
- c = context->state[2];
- d = context->state[3];
- e = context->state[4];
- f = context->state[5];
- g = context->state[6];
- h = context->state[7];
-
- j = 0;
- do {
-#if BYTE_ORDER == LITTLE_ENDIAN
- /* Convert TO host byte order */
- REVERSE64(*data++, W512[j]);
- /* Apply the SHA-512 compression function to update a..h */
- T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + W512[j];
-#else /* BYTE_ORDER == LITTLE_ENDIAN */
- /* Apply the SHA-512 compression function to update a..h with copy */
- T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + (W512[j] = *data++);
-#endif /* BYTE_ORDER == LITTLE_ENDIAN */
- T2 = Sigma0_512(a) + Maj(a, b, c);
- h = g;
- g = f;
- f = e;
- e = d + T1;
- d = c;
- c = b;
- b = a;
- a = T1 + T2;
-
- j++;
- } while (j < 16);
-
- do {
- /* Part of the message block expansion: */
- s0 = W512[(j+1)&0x0f];
- s0 = sigma0_512(s0);
- s1 = W512[(j+14)&0x0f];
- s1 = sigma1_512(s1);
-
- /* Apply the SHA-512 compression function to update a..h */
- T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] +
- (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0);
- T2 = Sigma0_512(a) + Maj(a, b, c);
- h = g;
- g = f;
- f = e;
- e = d + T1;
- d = c;
- c = b;
- b = a;
- a = T1 + T2;
-
- j++;
- } while (j < 80);
-
- /* Compute the current intermediate hash value */
- context->state[0] += a;
- context->state[1] += b;
- context->state[2] += c;
- context->state[3] += d;
- context->state[4] += e;
- context->state[5] += f;
- context->state[6] += g;
- context->state[7] += h;
-
- /* Clean up */
- a = b = c = d = e = f = g = h = T1 = T2 = 0;
- (void)a;
-}
-
-#endif /* SHA2_UNROLL_TRANSFORM */
-
-void ldns_sha512_update(ldns_sha512_CTX* context, const sha2_byte *data, size_t len) {
- size_t freespace, usedspace;
-
- if (len == 0) {
- /* Calling with no data is valid - we do nothing */
- return;
- }
-
- /* Sanity check: */
- assert(context != (ldns_sha512_CTX*)0 && data != (sha2_byte*)0);
-
- usedspace = (context->bitcount[0] >> 3) % LDNS_SHA512_BLOCK_LENGTH;
- if (usedspace > 0) {
- /* Calculate how much free space is available in the buffer */
- freespace = LDNS_SHA512_BLOCK_LENGTH - usedspace;
-
- if (len >= freespace) {
- /* Fill the buffer completely and process it */
- MEMCPY_BCOPY(&context->buffer[usedspace], data, freespace);
- ADDINC128(context->bitcount, freespace << 3);
- len -= freespace;
- data += freespace;
- ldns_sha512_Transform(context, (sha2_word64*)context->buffer);
- } else {
- /* The buffer is not yet full */
- MEMCPY_BCOPY(&context->buffer[usedspace], data, len);
- ADDINC128(context->bitcount, len << 3);
- /* Clean up: */
- usedspace = freespace = 0;
- (void)usedspace;
- return;
- }
- }
- while (len >= LDNS_SHA512_BLOCK_LENGTH) {
- /* Process as many complete blocks as we can */
- ldns_sha512_Transform(context, (sha2_word64*)data);
- ADDINC128(context->bitcount, LDNS_SHA512_BLOCK_LENGTH << 3);
- len -= LDNS_SHA512_BLOCK_LENGTH;
- data += LDNS_SHA512_BLOCK_LENGTH;
- }
- if (len > 0) {
- /* There's left-overs, so save 'em */
- MEMCPY_BCOPY(context->buffer, data, len);
- ADDINC128(context->bitcount, len << 3);
- }
- /* Clean up: */
- usedspace = freespace = 0;
- (void)usedspace;
-}
-
-static void ldns_sha512_Last(ldns_sha512_CTX* context) {
- size_t usedspace;
- ldns_sha2_buffer_union cast_var;
-
- usedspace = (context->bitcount[0] >> 3) % LDNS_SHA512_BLOCK_LENGTH;
-#if BYTE_ORDER == LITTLE_ENDIAN
- /* Convert FROM host byte order */
- REVERSE64(context->bitcount[0],context->bitcount[0]);
- REVERSE64(context->bitcount[1],context->bitcount[1]);
-#endif
- if (usedspace > 0) {
- /* Begin padding with a 1 bit: */
- context->buffer[usedspace++] = 0x80;
-
- if (usedspace <= ldns_sha512_SHORT_BLOCK_LENGTH) {
- /* Set-up for the last transform: */
- MEMSET_BZERO(&context->buffer[usedspace], ldns_sha512_SHORT_BLOCK_LENGTH - usedspace);
- } else {
- if (usedspace < LDNS_SHA512_BLOCK_LENGTH) {
- MEMSET_BZERO(&context->buffer[usedspace], LDNS_SHA512_BLOCK_LENGTH - usedspace);
- }
- /* Do second-to-last transform: */
- ldns_sha512_Transform(context, (sha2_word64*)context->buffer);
-
- /* And set-up for the last transform: */
- MEMSET_BZERO(context->buffer, LDNS_SHA512_BLOCK_LENGTH - 2);
- }
- } else {
- /* Prepare for final transform: */
- MEMSET_BZERO(context->buffer, ldns_sha512_SHORT_BLOCK_LENGTH);
-
- /* Begin padding with a 1 bit: */
- *context->buffer = 0x80;
- }
- /* Store the length of input data (in bits): */
- cast_var.theChars = context->buffer;
- cast_var.theLongs[ldns_sha512_SHORT_BLOCK_LENGTH / 8] = context->bitcount[1];
- cast_var.theLongs[ldns_sha512_SHORT_BLOCK_LENGTH / 8 + 1] = context->bitcount[0];
-
- /* final transform: */
- ldns_sha512_Transform(context, (sha2_word64*)context->buffer);
-}
-
-void ldns_sha512_final(sha2_byte digest[], ldns_sha512_CTX* context) {
- sha2_word64 *d = (sha2_word64*)digest;
-
- /* Sanity check: */
- assert(context != (ldns_sha512_CTX*)0);
-
- /* If no digest buffer is passed, we don't bother doing this: */
- if (digest != (sha2_byte*)0) {
- ldns_sha512_Last(context);
-
- /* Save the hash data for output: */
-#if BYTE_ORDER == LITTLE_ENDIAN
- {
- /* Convert TO host byte order */
- int j;
- for (j = 0; j < 8; j++) {
- REVERSE64(context->state[j],context->state[j]);
- *d++ = context->state[j];
- }
- }
-#else
- MEMCPY_BCOPY(d, context->state, LDNS_SHA512_DIGEST_LENGTH);
-#endif
- }
-
- /* Zero out state data */
- MEMSET_BZERO(context, sizeof(ldns_sha512_CTX));
-}
-
-unsigned char *
-ldns_sha512(unsigned char *data, unsigned int data_len, unsigned char *digest)
-{
- ldns_sha512_CTX ctx;
- ldns_sha512_init(&ctx);
- ldns_sha512_update(&ctx, data, data_len);
- ldns_sha512_final(digest, &ctx);
- return digest;
-}
-
-/*** SHA-384: *********************************************************/
-void ldns_sha384_init(ldns_sha384_CTX* context) {
- if (context == (ldns_sha384_CTX*)0) {
- return;
- }
- MEMCPY_BCOPY(context->state, sha384_initial_hash_value, LDNS_SHA512_DIGEST_LENGTH);
- MEMSET_BZERO(context->buffer, LDNS_SHA384_BLOCK_LENGTH);
- context->bitcount[0] = context->bitcount[1] = 0;
-}
-
-void ldns_sha384_update(ldns_sha384_CTX* context, const sha2_byte* data, size_t len) {
- ldns_sha512_update((ldns_sha512_CTX*)context, data, len);
-}
-
-void ldns_sha384_final(sha2_byte digest[], ldns_sha384_CTX* context) {
- sha2_word64 *d = (sha2_word64*)digest;
-
- /* Sanity check: */
- assert(context != (ldns_sha384_CTX*)0);
-
- /* If no digest buffer is passed, we don't bother doing this: */
- if (digest != (sha2_byte*)0) {
- ldns_sha512_Last((ldns_sha512_CTX*)context);
-
- /* Save the hash data for output: */
-#if BYTE_ORDER == LITTLE_ENDIAN
- {
- /* Convert TO host byte order */
- int j;
- for (j = 0; j < 6; j++) {
- REVERSE64(context->state[j],context->state[j]);
- *d++ = context->state[j];
- }
- }
-#else
- MEMCPY_BCOPY(d, context->state, LDNS_SHA384_DIGEST_LENGTH);
-#endif
- }
-
- /* Zero out state data */
- MEMSET_BZERO(context, sizeof(ldns_sha384_CTX));
-}
-
-unsigned char *
-ldns_sha384(unsigned char *data, unsigned int data_len, unsigned char *digest)
-{
- ldns_sha384_CTX ctx;
- ldns_sha384_init(&ctx);
- ldns_sha384_update(&ctx, data, data_len);
- ldns_sha384_final(digest, &ctx);
- return digest;
-}
diff --git a/ldns/str2host.c b/ldns/str2host.c
deleted file mode 100644
index 0bf62d1..0000000
--- a/ldns/str2host.c
+++ /dev/null
@@ -1,1802 +0,0 @@
-/*
- * str2host.c
- *
- * conversion routines from the presentation format
- * to the host format
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2004-2006
- *
- * See the file LICENSE for the license
- */
-#include <ldns/config.h>
-
-#include <ldns/ldns.h>
-
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#include <time.h>
-
-#include <errno.h>
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-
-#include <limits.h>
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-
-ldns_status
-ldns_str2rdf_int16(ldns_rdf **rd, const char *shortstr)
-{
- char *end = NULL;
- uint16_t *r;
- r = LDNS_MALLOC(uint16_t);
- if(!r) return LDNS_STATUS_MEM_ERR;
-
- *r = htons((uint16_t)strtol((char *)shortstr, &end, 10));
-
- if(*end != 0) {
- LDNS_FREE(r);
- return LDNS_STATUS_INVALID_INT;
- } else {
- *rd = ldns_rdf_new_frm_data(
- LDNS_RDF_TYPE_INT16, sizeof(uint16_t), r);
- LDNS_FREE(r);
- return *rd?LDNS_STATUS_OK:LDNS_STATUS_MEM_ERR;
- }
-}
-
-ldns_status
-ldns_str2rdf_time(ldns_rdf **rd, const char *time)
-{
- /* convert a time YYYYDDMMHHMMSS to wireformat */
- uint32_t *r = NULL;
- struct tm tm;
- uint32_t l;
- char *end;
-
- /* Try to scan the time... */
- r = (uint32_t *)LDNS_MALLOC(uint32_t);
- if(!r) return LDNS_STATUS_MEM_ERR;
-
- memset(&tm, 0, sizeof(tm));
-
- if (strlen(time) == 14 &&
- sscanf(time, "%4d%2d%2d%2d%2d%2d", &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec) == 6
- ) {
- tm.tm_year -= 1900;
- tm.tm_mon--;
- /* Check values */
- if (tm.tm_year < 70) {
- goto bad_format;
- }
- if (tm.tm_mon < 0 || tm.tm_mon > 11) {
- goto bad_format;
- }
- if (tm.tm_mday < 1 || tm.tm_mday > 31) {
- goto bad_format;
- }
-
- if (tm.tm_hour < 0 || tm.tm_hour > 23) {
- goto bad_format;
- }
-
- if (tm.tm_min < 0 || tm.tm_min > 59) {
- goto bad_format;
- }
-
- if (tm.tm_sec < 0 || tm.tm_sec > 59) {
- goto bad_format;
- }
-
- l = htonl(ldns_mktime_from_utc(&tm));
- memcpy(r, &l, sizeof(uint32_t));
- *rd = ldns_rdf_new_frm_data(
- LDNS_RDF_TYPE_TIME, sizeof(uint32_t), r);
- LDNS_FREE(r);
- return *rd?LDNS_STATUS_OK:LDNS_STATUS_MEM_ERR;
- } else {
- /* handle it as 32 bits timestamp */
- l = htonl((uint32_t)strtol((char*)time, &end, 10));
- if(*end != 0) {
- LDNS_FREE(r);
- return LDNS_STATUS_ERR;
- } else {
- memcpy(r, &l, sizeof(uint32_t));
- *rd = ldns_rdf_new_frm_data(
- LDNS_RDF_TYPE_INT32, sizeof(uint32_t), r);
- LDNS_FREE(r);
- return *rd?LDNS_STATUS_OK:LDNS_STATUS_MEM_ERR;
- }
- }
-
- bad_format:
- LDNS_FREE(r);
- return LDNS_STATUS_INVALID_TIME;
-}
-
-ldns_status
-ldns_str2rdf_nsec3_salt(ldns_rdf **rd, const char *salt_str)
-{
- uint8_t salt_length;
- int c;
- int salt_length_str;
-
- uint8_t *salt;
- uint8_t *data;
- if(rd == NULL) {
- return LDNS_STATUS_NULL;
- }
-
- salt_length_str = (int)strlen(salt_str);
- if (salt_length_str == 1 && salt_str[0] == '-') {
- salt_length_str = 0;
- } else if (salt_length_str % 2 != 0) {
- return LDNS_STATUS_INVALID_HEX;
- }
- if (salt_length_str > 512) {
- return LDNS_STATUS_INVALID_HEX;
- }
-
- salt = LDNS_XMALLOC(uint8_t, salt_length_str / 2);
- if(!salt) {
- return LDNS_STATUS_MEM_ERR;
- }
- for (c = 0; c < salt_length_str; c += 2) {
- if (isxdigit((int) salt_str[c]) && isxdigit((int) salt_str[c+1])) {
- salt[c/2] = (uint8_t) ldns_hexdigit_to_int(salt_str[c]) * 16 +
- ldns_hexdigit_to_int(salt_str[c+1]);
- } else {
- LDNS_FREE(salt);
- return LDNS_STATUS_INVALID_HEX;
- }
- }
- salt_length = (uint8_t) (salt_length_str / 2);
-
- data = LDNS_XMALLOC(uint8_t, 1 + salt_length);
- if(!data) {
- LDNS_FREE(salt);
- return LDNS_STATUS_MEM_ERR;
- }
- data[0] = salt_length;
- memcpy(&data[1], salt, salt_length);
- *rd = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_NSEC3_SALT, 1 + salt_length, data);
- LDNS_FREE(data);
- LDNS_FREE(salt);
-
- return *rd?LDNS_STATUS_OK:LDNS_STATUS_MEM_ERR;
-}
-
-ldns_status
-ldns_str2rdf_period(ldns_rdf **rd,const char *period)
-{
- uint32_t p;
- const char *end;
-
- /* Allocate required space... */
- p = ldns_str2period(period, &end);
-
- if (*end != 0) {
- return LDNS_STATUS_ERR;
- } else {
- p = (uint32_t) htonl(p);
- *rd = ldns_rdf_new_frm_data(
- LDNS_RDF_TYPE_PERIOD, sizeof(uint32_t), &p);
- }
- return *rd?LDNS_STATUS_OK:LDNS_STATUS_MEM_ERR;
-}
-
-ldns_status
-ldns_str2rdf_int32(ldns_rdf **rd, const char *longstr)
-{
- char *end;
- uint32_t *r = NULL;
- uint32_t l;
-
- r = (uint32_t*)LDNS_MALLOC(uint32_t);
- if(!r) return LDNS_STATUS_MEM_ERR;
- errno = 0; /* must set to zero before call,
- note race condition on errno */
- if(*longstr == '-')
- l = htonl((uint32_t)strtol((char*)longstr, &end, 10));
- else l = htonl((uint32_t)strtoul((char*)longstr, &end, 10));
-
- if(*end != 0) {
- LDNS_FREE(r);
- return LDNS_STATUS_ERR;
- } else {
- if (errno == ERANGE) {
- LDNS_FREE(r);
- return LDNS_STATUS_SYNTAX_INTEGER_OVERFLOW;
- }
- memcpy(r, &l, sizeof(uint32_t));
- *rd = ldns_rdf_new_frm_data(
- LDNS_RDF_TYPE_INT32, sizeof(uint32_t), r);
- LDNS_FREE(r);
- return *rd?LDNS_STATUS_OK:LDNS_STATUS_MEM_ERR;
- }
-}
-
-ldns_status
-ldns_str2rdf_int8(ldns_rdf **rd, const char *bytestr)
-{
- char *end;
- uint8_t *r = NULL;
-
- r = LDNS_MALLOC(uint8_t);
- if(!r) return LDNS_STATUS_MEM_ERR;
-
- *r = (uint8_t)strtol((char*)bytestr, &end, 10);
-
- if(*end != 0) {
- LDNS_FREE(r);
- return LDNS_STATUS_ERR;
- } else {
- *rd = ldns_rdf_new_frm_data(
- LDNS_RDF_TYPE_INT8, sizeof(uint8_t), r);
- LDNS_FREE(r);
- return *rd?LDNS_STATUS_OK:LDNS_STATUS_MEM_ERR;
- }
-}
-
-
-/*
- * Checks whether the escaped value at **s is an decimal value or
- * a 'normally' escaped character (and not eos)
- *
- * The string pointer at *s is increased by either 0 (on error), 1 (on
- * normal escapes), or 3 (on decimals)
- *
- * Returns the number of bytes read from the escaped string, or
- * 0 on error
- */
-INLINE bool
-parse_escape(uint8_t *ch_p, const char** str_p)
-{
- uint16_t val;
-
- if ((*str_p)[0] && isdigit((unsigned char)(*str_p)[0]) &&
- (*str_p)[1] && isdigit((unsigned char)(*str_p)[1]) &&
- (*str_p)[2] && isdigit((unsigned char)(*str_p)[2])) {
-
- val = (uint16_t)(((*str_p)[0] - '0') * 100 +
- ((*str_p)[1] - '0') * 10 +
- ((*str_p)[2] - '0'));
-
- if (val > 255) {
- goto error;
- }
- *ch_p = (uint8_t)val;
- *str_p += 3;
- return true;
-
- } else if ((*str_p)[0] && !isdigit((unsigned char)(*str_p)[0])) {
-
- *ch_p = (uint8_t)*(*str_p)++;
- return true;
- }
-error:
- *str_p = NULL;
- return false; /* LDNS_STATUS_SYNTAX_BAD_ESCAPE */
-}
-
-INLINE bool
-parse_char(uint8_t *ch_p, const char** str_p)
-{
- switch (**str_p) {
-
- case '\0': return false;
-
- case '\\': *str_p += 1;
- return parse_escape(ch_p, str_p);
-
- default: *ch_p = (uint8_t)*(*str_p)++;
- return true;
- }
-}
-
-/*
- * No special care is taken, all dots are translated into
- * label seperators.
- * Could be made more efficient....we do 3 memcpy's in total...
- */
-ldns_status
-ldns_str2rdf_dname(ldns_rdf **d, const char *str)
-{
- size_t len;
-
- const char *s;
- uint8_t *q, *pq, label_len;
- uint8_t buf[LDNS_MAX_DOMAINLEN + 1];
- *d = NULL;
-
- len = strlen((char*)str);
- /* octet representation can make strings a lot longer than actual length */
- if (len > LDNS_MAX_DOMAINLEN * 4) {
- return LDNS_STATUS_DOMAINNAME_OVERFLOW;
- }
- if (0 == len) {
- return LDNS_STATUS_DOMAINNAME_UNDERFLOW;
- }
-
- /* root label */
- if (1 == len && *str == '.') {
- *d = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_DNAME, 1, "\0");
- return LDNS_STATUS_OK;
- }
-
- /* get on with the rest */
-
- /* s is on the current character in the string
- * pq points to where the labellength is going to go
- * label_len keeps track of the current label's length
- * q builds the dname inside the buf array
- */
- len = 0;
- q = buf+1;
- pq = buf;
- label_len = 0;
- for (s = str; *s; s++, q++) {
- if (q > buf + LDNS_MAX_DOMAINLEN) {
- return LDNS_STATUS_DOMAINNAME_OVERFLOW;
- }
- *q = 0;
- switch (*s) {
- case '.':
- if (label_len > LDNS_MAX_LABELLEN) {
- return LDNS_STATUS_LABEL_OVERFLOW;
- }
- if (label_len == 0) {
- return LDNS_STATUS_EMPTY_LABEL;
- }
- len += label_len + 1;
- *pq = label_len;
- label_len = 0;
- pq = q;
- break;
- case '\\':
- /* octet value or literal char */
- s += 1;
- if (! parse_escape(q, &s)) {
- return LDNS_STATUS_SYNTAX_BAD_ESCAPE;
- }
- s -= 1;
- label_len++;
- break;
- default:
- *q = (uint8_t)*s;
- label_len++;
- }
- }
-
- /* add root label if last char was not '.' */
- if (!ldns_dname_str_absolute(str)) {
- if (q > buf + LDNS_MAX_DOMAINLEN) {
- return LDNS_STATUS_DOMAINNAME_OVERFLOW;
- }
- if (label_len > LDNS_MAX_LABELLEN) {
- return LDNS_STATUS_LABEL_OVERFLOW;
- }
- if (label_len == 0) { /* label_len 0 but not . at end? */
- return LDNS_STATUS_EMPTY_LABEL;
- }
- len += label_len + 1;
- *pq = label_len;
- *q = 0;
- }
- len++;
-
- *d = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_DNAME, len, buf);
- return LDNS_STATUS_OK;
-}
-
-ldns_status
-ldns_str2rdf_a(ldns_rdf **rd, const char *str)
-{
- in_addr_t address;
- if (inet_pton(AF_INET, (char*)str, &address) != 1) {
- return LDNS_STATUS_INVALID_IP4;
- } else {
- *rd = ldns_rdf_new_frm_data(
- LDNS_RDF_TYPE_A, sizeof(address), &address);
- }
- return *rd?LDNS_STATUS_OK:LDNS_STATUS_MEM_ERR;
-}
-
-ldns_status
-ldns_str2rdf_aaaa(ldns_rdf **rd, const char *str)
-{
- uint8_t address[LDNS_IP6ADDRLEN + 1];
-
- if (inet_pton(AF_INET6, (char*)str, address) != 1) {
- return LDNS_STATUS_INVALID_IP6;
- } else {
- *rd = ldns_rdf_new_frm_data(
- LDNS_RDF_TYPE_AAAA, sizeof(address) - 1, &address);
- }
- return *rd?LDNS_STATUS_OK:LDNS_STATUS_MEM_ERR;
-}
-
-ldns_status
-ldns_str2rdf_str(ldns_rdf **rd, const char *str)
-{
- uint8_t *data, *dp, ch = 0;
- size_t length;
-
- /* Worst case space requirement. We'll realloc to actual size later. */
- dp = data = LDNS_XMALLOC(uint8_t, strlen(str) > 255 ? 256 : (strlen(str) + 1));
- if (! data) {
- return LDNS_STATUS_MEM_ERR;
- }
-
- /* Fill data (up to 255 characters) */
- while (parse_char(&ch, &str)) {
- if (dp - data >= 255) {
- LDNS_FREE(data);
- return LDNS_STATUS_INVALID_STR;
- }
- *++dp = ch;
- }
- if (! str) {
- LDNS_FREE(data);
- return LDNS_STATUS_SYNTAX_BAD_ESCAPE;
- }
- length = (size_t)(dp - data);
- /* Fix last length byte */
- data[0] = (uint8_t)length;
-
- /* Lose the overmeasure */
- data = LDNS_XREALLOC(dp = data, uint8_t, length + 1);
- if (! data) {
- LDNS_FREE(dp);
- return LDNS_STATUS_MEM_ERR;
- }
-
- /* Create rdf */
- *rd = ldns_rdf_new(LDNS_RDF_TYPE_STR, length + 1, data);
- if (! *rd) {
- LDNS_FREE(data);
- return LDNS_STATUS_MEM_ERR;
- }
- return LDNS_STATUS_OK;
-}
-
-ldns_status
-ldns_str2rdf_apl(ldns_rdf **rd, const char *str)
-{
- const char *my_str = str;
-
- char *my_ip_str;
- size_t ip_str_len;
-
- uint16_t family;
- bool negation;
- uint8_t afdlength = 0;
- uint8_t *afdpart;
- uint8_t prefix;
-
- uint8_t *data;
-
- size_t i = 0;
-
- /* [!]afi:address/prefix */
- if (strlen(my_str) < 2
- || strchr(my_str, ':') == NULL
- || strchr(my_str, '/') == NULL
- || strchr(my_str, ':') > strchr(my_str, '/')) {
- return LDNS_STATUS_INVALID_STR;
- }
-
- if (my_str[0] == '!') {
- negation = true;
- my_str += 1;
- } else {
- negation = false;
- }
-
- family = (uint16_t) atoi(my_str);
-
- my_str = strchr(my_str, ':') + 1;
-
- /* need ip addr and only ip addr for inet_pton */
- ip_str_len = (size_t) (strchr(my_str, '/') - my_str);
- my_ip_str = LDNS_XMALLOC(char, ip_str_len + 1);
- if(!my_ip_str) return LDNS_STATUS_MEM_ERR;
- strncpy(my_ip_str, my_str, ip_str_len + 1);
- my_ip_str[ip_str_len] = '\0';
-
- if (family == 1) {
- /* ipv4 */
- afdpart = LDNS_XMALLOC(uint8_t, 4);
- if(!afdpart) {
- LDNS_FREE(my_ip_str);
- return LDNS_STATUS_MEM_ERR;
- }
- if (inet_pton(AF_INET, my_ip_str, afdpart) == 0) {
- LDNS_FREE(my_ip_str);
- LDNS_FREE(afdpart);
- return LDNS_STATUS_INVALID_STR;
- }
- for (i = 0; i < 4; i++) {
- if (afdpart[i] != 0) {
- afdlength = i + 1;
- }
- }
- } else if (family == 2) {
- /* ipv6 */
- afdpart = LDNS_XMALLOC(uint8_t, 16);
- if(!afdpart) {
- LDNS_FREE(my_ip_str);
- return LDNS_STATUS_MEM_ERR;
- }
- if (inet_pton(AF_INET6, my_ip_str, afdpart) == 0) {
- LDNS_FREE(my_ip_str);
- LDNS_FREE(afdpart);
- return LDNS_STATUS_INVALID_STR;
- }
- for (i = 0; i < 16; i++) {
- if (afdpart[i] != 0) {
- afdlength = i + 1;
- }
- }
- } else {
- /* unknown family */
- LDNS_FREE(my_ip_str);
- return LDNS_STATUS_INVALID_STR;
- }
-
- my_str = strchr(my_str, '/') + 1;
- prefix = (uint8_t) atoi(my_str);
-
- data = LDNS_XMALLOC(uint8_t, 4 + afdlength);
- if(!data) {
- LDNS_FREE(afdpart);
- LDNS_FREE(my_ip_str);
- return LDNS_STATUS_INVALID_STR;
- }
- ldns_write_uint16(data, family);
- data[2] = prefix;
- data[3] = afdlength;
- if (negation) {
- /* set bit 1 of byte 3 */
- data[3] = data[3] | 0x80;
- }
-
- memcpy(data + 4, afdpart, afdlength);
-
- *rd = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_APL, afdlength + 4, data);
- LDNS_FREE(afdpart);
- LDNS_FREE(data);
- LDNS_FREE(my_ip_str);
-
- return *rd?LDNS_STATUS_OK:LDNS_STATUS_MEM_ERR;
-}
-
-ldns_status
-ldns_str2rdf_b64(ldns_rdf **rd, const char *str)
-{
- uint8_t *buffer;
- int16_t i;
-
- if ((*str == '-' || *str == '0') && str[1] == '\0') {
- *rd = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_B64, 0, NULL);
- return *rd ? LDNS_STATUS_OK : LDNS_STATUS_MEM_ERR;
- }
-
- buffer = LDNS_XMALLOC(uint8_t, ldns_b64_ntop_calculate_size(strlen(str)));
- if(!buffer) {
- return LDNS_STATUS_MEM_ERR;
- }
-
- i = (uint16_t)ldns_b64_pton((const char*)str, buffer,
- ldns_b64_ntop_calculate_size(strlen(str)));
- if (-1 == i) {
- LDNS_FREE(buffer);
- return LDNS_STATUS_INVALID_B64;
- } else {
- *rd = ldns_rdf_new_frm_data(
- LDNS_RDF_TYPE_B64, (uint16_t) i, buffer);
- }
- LDNS_FREE(buffer);
-
- return *rd?LDNS_STATUS_OK:LDNS_STATUS_MEM_ERR;
-}
-
-ldns_status
-ldns_str2rdf_b32_ext(ldns_rdf **rd, const char *str)
-{
- uint8_t *buffer;
- int i;
- /* first byte contains length of actual b32 data */
- size_t slen = strlen(str);
- size_t len = ldns_b32_pton_calculate_size(slen);
- if (len > 255) {
- return LDNS_STATUS_INVALID_B32_EXT;
- }
- buffer = LDNS_XMALLOC(uint8_t, len + 1);
- if(!buffer) {
- return LDNS_STATUS_MEM_ERR;
- }
- buffer[0] = len;
-
- i = ldns_b32_pton_extended_hex((const char*)str, slen, buffer + 1,
- ldns_b32_ntop_calculate_size(slen));
- if (i < 0) {
- LDNS_FREE(buffer);
- return LDNS_STATUS_INVALID_B32_EXT;
- } else {
- *rd = ldns_rdf_new_frm_data(
- LDNS_RDF_TYPE_B32_EXT, (uint16_t) i + 1, buffer);
- }
- LDNS_FREE(buffer);
-
- return *rd?LDNS_STATUS_OK:LDNS_STATUS_MEM_ERR;
-}
-
-ldns_status
-ldns_str2rdf_hex(ldns_rdf **rd, const char *str)
-{
- uint8_t *t, *t_orig;
- int i;
- size_t len;
-
- len = strlen(str);
-
- if (len > LDNS_MAX_RDFLEN * 2) {
- return LDNS_STATUS_LABEL_OVERFLOW;
- } else {
- t = LDNS_XMALLOC(uint8_t, (len / 2) + 1);
- if(!t) {
- return LDNS_STATUS_MEM_ERR;
- }
- t_orig = t;
- /* Now process octet by octet... */
- while (*str) {
- *t = 0;
- if (isspace((int) *str)) {
- str++;
- } else {
- for (i = 16; i >= 1; i -= 15) {
- while (*str && isspace((int) *str)) { str++; }
- if (*str) {
- if (isxdigit((int) *str)) {
- *t += ldns_hexdigit_to_int(*str) * i;
- } else {
- LDNS_FREE(t_orig);
- return LDNS_STATUS_ERR;
- }
- ++str;
- }
- }
- ++t;
- }
- }
- *rd = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_HEX,
- (size_t) (t - t_orig),
- t_orig);
- LDNS_FREE(t_orig);
- }
- return *rd?LDNS_STATUS_OK:LDNS_STATUS_MEM_ERR;
-}
-
-ldns_status
-ldns_str2rdf_nsec(ldns_rdf **rd, const char *str)
-{
- const char *delimiters = "\n\t ";
- char *token = LDNS_XMALLOC(char, LDNS_MAX_RDFLEN);
- ldns_buffer *str_buf;
- ssize_t c;
- uint16_t cur_type;
- size_t type_count = 0;
- ldns_rr_type type_list[65536];
- if(!token) return LDNS_STATUS_MEM_ERR;
- if(rd == NULL) {
- LDNS_FREE(token);
- return LDNS_STATUS_NULL;
- }
-
- str_buf = LDNS_MALLOC(ldns_buffer);
- if(!str_buf) {
- LDNS_FREE(token);
- return LDNS_STATUS_MEM_ERR;
- }
- ldns_buffer_new_frm_data(str_buf, (char *)str, strlen(str));
- if(ldns_buffer_status(str_buf) != LDNS_STATUS_OK) {
- LDNS_FREE(str_buf);
- LDNS_FREE(token);
- return LDNS_STATUS_MEM_ERR;
- }
-
- while ((c = ldns_bget_token(str_buf, token, delimiters, LDNS_MAX_RDFLEN)) != -1 && c != 0) {
- if(type_count >= sizeof(type_list)) {
- LDNS_FREE(str_buf);
- LDNS_FREE(token);
- return LDNS_STATUS_ERR;
- }
- cur_type = ldns_get_rr_type_by_name(token);
- type_list[type_count] = cur_type;
- type_count++;
- }
-
- *rd = ldns_dnssec_create_nsec_bitmap(type_list,
- type_count,
- LDNS_RR_TYPE_NSEC);
-
- LDNS_FREE(token);
- ldns_buffer_free(str_buf);
- return *rd?LDNS_STATUS_OK:LDNS_STATUS_MEM_ERR;
-}
-
-ldns_status
-ldns_str2rdf_type(ldns_rdf **rd, const char *str)
-{
- uint16_t type;
- type = htons(ldns_get_rr_type_by_name(str));
- /* ldns_rr_type is a 16 bit value */
- *rd = ldns_rdf_new_frm_data(
- LDNS_RDF_TYPE_TYPE, sizeof(uint16_t), &type);
- return *rd?LDNS_STATUS_OK:LDNS_STATUS_MEM_ERR;
-}
-
-ldns_status
-ldns_str2rdf_class(ldns_rdf **rd, const char *str)
-{
- uint16_t klass;
- klass = htons(ldns_get_rr_class_by_name(str));
- /* class is 16 bit */
- *rd = ldns_rdf_new_frm_data(
- LDNS_RDF_TYPE_CLASS, sizeof(uint16_t), &klass);
- return *rd?LDNS_STATUS_OK:LDNS_STATUS_MEM_ERR;
-}
-
-/* An certificate alg field can either be specified as a 8 bits number
- * or by its symbolic name. Handle both
- */
-ldns_status
-ldns_str2rdf_cert_alg(ldns_rdf **rd, const char *str)
-{
- ldns_lookup_table *lt;
- ldns_status st;
- uint8_t idd[2];
- lt = ldns_lookup_by_name(ldns_cert_algorithms, str);
- st = LDNS_STATUS_OK;
-
- if (lt) {
- ldns_write_uint16(idd, (uint16_t) lt->id);
- *rd = ldns_rdf_new_frm_data(
- LDNS_RDF_TYPE_INT16, sizeof(uint16_t), idd);
- if (!*rd) {
- st = LDNS_STATUS_ERR;
- }
- } else {
- /* try as-is (a number) */
- st = ldns_str2rdf_int16(rd, str);
- if (st == LDNS_STATUS_OK &&
- ldns_rdf2native_int16(*rd) == 0) {
- st = LDNS_STATUS_CERT_BAD_ALGORITHM;
- }
- }
-
- return st;
-}
-
-static ldns_lookup_table ldns_tlsa_certificate_usages[] = {
- { LDNS_TLSA_USAGE_PKIX_TA , "PKIX-TA" },
- { LDNS_TLSA_USAGE_PKIX_EE , "PKIX-EE" },
- { LDNS_TLSA_USAGE_DANE_TA , "DANE-TA" },
- { LDNS_TLSA_USAGE_DANE_EE , "DANE-EE" },
- { LDNS_TLSA_USAGE_PRIVCERT , "PrivCert" },
- { 0, NULL }
-};
-
-static ldns_lookup_table ldns_tlsa_selectors[] = {
- { LDNS_TLSA_SELECTOR_CERT , "Cert" },
- { LDNS_TLSA_SELECTOR_SPKI , "SPKI" },
- { LDNS_TLSA_SELECTOR_PRIVSEL , "PrivSel" },
- { 0, NULL }
-};
-
-static ldns_lookup_table ldns_tlsa_matching_types[] = {
- { LDNS_TLSA_MATCHING_TYPE_FULL , "Full" },
- { LDNS_TLSA_MATCHING_TYPE_SHA2_256 , "SHA2-256" },
- { LDNS_TLSA_MATCHING_TYPE_SHA2_512 , "SHA2-512" },
- { LDNS_TLSA_MATCHING_TYPE_PRIVMATCH , "PrivMatch" },
- { 0, NULL }
-};
-
-static ldns_status
-ldns_str2rdf_mnemonic4int8(ldns_lookup_table *lt,
- ldns_rdf **rd, const char *str)
-{
- if ((lt = ldns_lookup_by_name(lt, str))) {
- /* it was given as a integer */
- *rd = ldns_native2rdf_int8(LDNS_RDF_TYPE_INT8, (uint8_t) lt->id);
- if (!*rd)
- return LDNS_STATUS_ERR;
- else
- return LDNS_STATUS_OK;
- }
- return ldns_str2rdf_int8(rd, str);
-}
-
-/* An alg field can either be specified as a 8 bits number
- * or by its symbolic name. Handle both
- */
-ldns_status
-ldns_str2rdf_alg(ldns_rdf **rd, const char *str)
-{
- return ldns_str2rdf_mnemonic4int8(ldns_algorithms, rd, str);
-}
-
-ldns_status
-ldns_str2rdf_certificate_usage(ldns_rdf **rd, const char *str)
-{
- return ldns_str2rdf_mnemonic4int8(
- ldns_tlsa_certificate_usages, rd, str);
-}
-
-ldns_status
-ldns_str2rdf_selector(ldns_rdf **rd, const char *str)
-{
- return ldns_str2rdf_mnemonic4int8(ldns_tlsa_selectors, rd, str);
-}
-
-ldns_status
-ldns_str2rdf_matching_type(ldns_rdf **rd, const char *str)
-{
- return ldns_str2rdf_mnemonic4int8(ldns_tlsa_matching_types, rd, str);
-}
-
-ldns_status
-ldns_str2rdf_unknown( ATTR_UNUSED(ldns_rdf **rd)
- , ATTR_UNUSED(const char *str)
- )
-{
- /* this should be caught in an earlier time (general str2host for
- rr's */
- return LDNS_STATUS_NOT_IMPL;
-}
-
-ldns_status
-ldns_str2rdf_service( ATTR_UNUSED(ldns_rdf **rd)
- , ATTR_UNUSED(const char *str)
- )
-{
- /* is this used? is this actually WKS? or SRV? */
- return LDNS_STATUS_NOT_IMPL;
-}
-
-static int
-loc_parse_cm(char* my_str, char** endstr, uint8_t* m, uint8_t* e)
-{
- /* read <digits>[.<digits>][mM] */
- /* into mantissa exponent format for LOC type */
- uint32_t meters = 0, cm = 0, val;
- while (isblank((unsigned char)*my_str)) {
- my_str++;
- }
- meters = (uint32_t)strtol(my_str, &my_str, 10);
- if (*my_str == '.') {
- my_str++;
- cm = (uint32_t)strtol(my_str, &my_str, 10);
- }
- if (meters >= 1) {
- *e = 2;
- val = meters;
- } else {
- *e = 0;
- val = cm;
- }
- while(val >= 10) {
- (*e)++;
- val /= 10;
- }
- *m = (uint8_t)val;
-
- if (*e > 9)
- return 0;
- if (*my_str == 'm' || *my_str == 'M') {
- my_str++;
- }
- *endstr = my_str;
- return 1;
-}
-
-ldns_status
-ldns_str2rdf_loc(ldns_rdf **rd, const char *str)
-{
- uint32_t latitude = 0;
- uint32_t longitude = 0;
- uint32_t altitude = 0;
-
- uint8_t *data;
- uint32_t equator = (uint32_t) ldns_power(2, 31);
-
- uint32_t h = 0;
- uint32_t m = 0;
- uint8_t size_b = 1, size_e = 2;
- uint8_t horiz_pre_b = 1, horiz_pre_e = 6;
- uint8_t vert_pre_b = 1, vert_pre_e = 3;
-
- double s = 0.0;
- bool northerness;
- bool easterness;
-
- char *my_str = (char *) str;
-
- /* only support version 0 */
- if (isdigit((int) *my_str)) {
- h = (uint32_t) strtol(my_str, &my_str, 10);
- } else {
- return LDNS_STATUS_INVALID_STR;
- }
-
- while (isblank((int) *my_str)) {
- my_str++;
- }
-
- if (isdigit((int) *my_str)) {
- m = (uint32_t) strtol(my_str, &my_str, 10);
- } else if (*my_str == 'N' || *my_str == 'S') {
- goto north;
- } else {
- return LDNS_STATUS_INVALID_STR;
- }
-
- while (isblank((int) *my_str)) {
- my_str++;
- }
-
- if (isdigit((int) *my_str)) {
- s = strtod(my_str, &my_str);
- }
-north:
- while (isblank((int) *my_str)) {
- my_str++;
- }
-
- if (*my_str == 'N') {
- northerness = true;
- } else if (*my_str == 'S') {
- northerness = false;
- } else {
- return LDNS_STATUS_INVALID_STR;
- }
-
- my_str++;
-
- /* store number */
- s = 1000.0 * s;
- /* add a little to make floor in conversion a round */
- s += 0.0005;
- latitude = (uint32_t) s;
- latitude += 1000 * 60 * m;
- latitude += 1000 * 60 * 60 * h;
- if (northerness) {
- latitude = equator + latitude;
- } else {
- latitude = equator - latitude;
- }
- while (isblank((unsigned char)*my_str)) {
- my_str++;
- }
-
- if (isdigit((int) *my_str)) {
- h = (uint32_t) strtol(my_str, &my_str, 10);
- } else {
- return LDNS_STATUS_INVALID_STR;
- }
-
- while (isblank((int) *my_str)) {
- my_str++;
- }
-
- if (isdigit((int) *my_str)) {
- m = (uint32_t) strtol(my_str, &my_str, 10);
- } else if (*my_str == 'E' || *my_str == 'W') {
- goto east;
- } else {
- return LDNS_STATUS_INVALID_STR;
- }
-
- while (isblank((unsigned char)*my_str)) {
- my_str++;
- }
-
- if (isdigit((int) *my_str)) {
- s = strtod(my_str, &my_str);
- }
-
-east:
- while (isblank((unsigned char)*my_str)) {
- my_str++;
- }
-
- if (*my_str == 'E') {
- easterness = true;
- } else if (*my_str == 'W') {
- easterness = false;
- } else {
- return LDNS_STATUS_INVALID_STR;
- }
-
- my_str++;
-
- /* store number */
- s *= 1000.0;
- /* add a little to make floor in conversion a round */
- s += 0.0005;
- longitude = (uint32_t) s;
- longitude += 1000 * 60 * m;
- longitude += 1000 * 60 * 60 * h;
-
- if (easterness) {
- longitude += equator;
- } else {
- longitude = equator - longitude;
- }
-
- altitude = (uint32_t)(strtod(my_str, &my_str)*100.0 +
- 10000000.0 + 0.5);
- if (*my_str == 'm' || *my_str == 'M') {
- my_str++;
- }
-
- if (strlen(my_str) > 0) {
- if(!loc_parse_cm(my_str, &my_str, &size_b, &size_e))
- return LDNS_STATUS_INVALID_STR;
- }
-
- if (strlen(my_str) > 0) {
- if(!loc_parse_cm(my_str, &my_str, &horiz_pre_b, &horiz_pre_e))
- return LDNS_STATUS_INVALID_STR;
- }
-
- if (strlen(my_str) > 0) {
- if(!loc_parse_cm(my_str, &my_str, &vert_pre_b, &vert_pre_e))
- return LDNS_STATUS_INVALID_STR;
- }
-
- data = LDNS_XMALLOC(uint8_t, 16);
- if(!data) {
- return LDNS_STATUS_MEM_ERR;
- }
- data[0] = 0;
- data[1] = 0;
- data[1] = ((size_b << 4) & 0xf0) | (size_e & 0x0f);
- data[2] = ((horiz_pre_b << 4) & 0xf0) | (horiz_pre_e & 0x0f);
- data[3] = ((vert_pre_b << 4) & 0xf0) | (vert_pre_e & 0x0f);
- ldns_write_uint32(data + 4, latitude);
- ldns_write_uint32(data + 8, longitude);
- ldns_write_uint32(data + 12, altitude);
-
- *rd = ldns_rdf_new_frm_data(
- LDNS_RDF_TYPE_LOC, 16, data);
-
- LDNS_FREE(data);
- return *rd?LDNS_STATUS_OK:LDNS_STATUS_MEM_ERR;
-}
-
-ldns_status
-ldns_str2rdf_wks(ldns_rdf **rd, const char *str)
-{
- uint8_t *bitmap = NULL;
- uint8_t *data;
- int bm_len = 0;
-
- struct protoent *proto = NULL;
- struct servent *serv = NULL;
- int serv_port;
-
- ldns_buffer *str_buf;
-
- char *proto_str = NULL;
- char *lc_proto_str = NULL;
- char *token;
- char *lc_token;
- char *c;
- if(strlen(str) == 0)
- token = LDNS_XMALLOC(char, 50);
- else token = LDNS_XMALLOC(char, strlen(str)+2);
- if(!token) return LDNS_STATUS_MEM_ERR;
-
- str_buf = LDNS_MALLOC(ldns_buffer);
- if(!str_buf) {LDNS_FREE(token); return LDNS_STATUS_MEM_ERR;}
- ldns_buffer_new_frm_data(str_buf, (char *)str, strlen(str));
- if(ldns_buffer_status(str_buf) != LDNS_STATUS_OK) {
- LDNS_FREE(str_buf);
- LDNS_FREE(token);
- return LDNS_STATUS_MEM_ERR;
- }
-
- while(ldns_bget_token(str_buf, token, "\t\n ", strlen(str)) > 0) {
- if (!proto_str) {
- proto_str = strdup(token);
- lc_proto_str = strdup(token);
- for (c = lc_proto_str; *c; c++) {
- *c = tolower((unsigned char)*c);
- }
- if (!proto_str || !lc_proto_str) {
- free(proto_str);
- free(lc_proto_str);
- LDNS_FREE(bitmap);
- LDNS_FREE(token);
- ldns_buffer_free(str_buf);
- return LDNS_STATUS_INVALID_STR;
- }
- } else {
- serv = getservbyname(token, proto_str);
- if (!serv) {
- serv = getservbyname(token, lc_proto_str);
- }
- if (!serv && (lc_token = strdup(token))) {
- for (c = lc_token; *c; c++) {
- *c = tolower((unsigned char)*c);
- }
- serv = getservbyname(lc_token, proto_str);
- if (!serv) {
- serv = getservbyname(lc_token, lc_proto_str);
- }
- free(lc_token);
- }
- if (serv) {
- serv_port = (int) ntohs((uint16_t) serv->s_port);
- } else {
- serv_port = atoi(token);
- }
- if (serv_port < 0 || serv_port > 65535) {
- LDNS_FREE(bitmap);
- LDNS_FREE(token);
- ldns_buffer_free(str_buf);
- free(proto_str);
- free(lc_proto_str);
- return LDNS_STATUS_INVALID_STR;
- }
- if (serv_port / 8 >= bm_len) {
- uint8_t *b2 = LDNS_XREALLOC(bitmap, uint8_t, (serv_port / 8) + 1);
- if(!b2) {
- LDNS_FREE(bitmap);
- LDNS_FREE(token);
- ldns_buffer_free(str_buf);
- free(proto_str);
- free(lc_proto_str);
- return LDNS_STATUS_INVALID_STR;
- }
- bitmap = b2;
- /* set to zero to be sure */
- for (; bm_len <= serv_port / 8; bm_len++) {
- bitmap[bm_len] = 0;
- }
- }
- ldns_set_bit(bitmap + (serv_port / 8), 7 - (serv_port % 8), true);
- }
- }
-
- if (!proto_str || !bitmap) {
- LDNS_FREE(bitmap);
- LDNS_FREE(token);
- ldns_buffer_free(str_buf);
- free(proto_str);
- free(lc_proto_str);
- return LDNS_STATUS_INVALID_STR;
- }
-
- data = LDNS_XMALLOC(uint8_t, bm_len + 1);
- if(!data) {
- LDNS_FREE(token);
- ldns_buffer_free(str_buf);
- LDNS_FREE(bitmap);
- free(proto_str);
- free(lc_proto_str);
- return LDNS_STATUS_INVALID_STR;
- }
- if (proto_str)
- proto = getprotobyname(proto_str);
- if (!proto) {
- proto = getprotobyname(lc_proto_str);
- }
- if (proto) {
- data[0] = (uint8_t) proto->p_proto;
- } else if (proto_str) {
- data[0] = (uint8_t) atoi(proto_str);
- }
- memcpy(data + 1, bitmap, (size_t) bm_len);
-
- *rd = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_WKS, (uint16_t) (bm_len + 1), data);
-
- LDNS_FREE(data);
- LDNS_FREE(token);
- ldns_buffer_free(str_buf);
- LDNS_FREE(bitmap);
- free(proto_str);
- free(lc_proto_str);
-#ifdef HAVE_ENDSERVENT
- endservent();
-#endif
-#ifdef HAVE_ENDPROTOENT
- endprotoent();
-#endif
-
- if(!*rd) return LDNS_STATUS_MEM_ERR;
-
- return LDNS_STATUS_OK;
-}
-
-ldns_status
-ldns_str2rdf_nsap(ldns_rdf **rd, const char *str)
-{
- size_t len, i;
- char* nsap_str = (char*) str;
-
- /* just a hex string with optional dots? */
- if (str[0] != '0' || str[1] != 'x') {
- return LDNS_STATUS_INVALID_STR;
- } else {
- len = strlen(str);
- for (i=0; i < len; i++) {
- if (nsap_str[i] == '.')
- nsap_str[i] = ' ';
- }
- return ldns_str2rdf_hex(rd, str+2);
- }
-}
-
-ldns_status
-ldns_str2rdf_atma(ldns_rdf **rd, const char *str)
-{
- size_t len, i;
- char* atma_str = (char*) str;
- ldns_status status;
-
- /* just a hex string with optional dots? */
- len = strlen(str);
- for (i=0; i < len; i++) {
- if (atma_str[i] == '.')
- atma_str[i] = ' ';
- }
- status = ldns_str2rdf_hex(rd, str);
- if (status != LDNS_STATUS_OK) {
- ; /* probably in e.164 format than */
- }
- return status;
-}
-
-ldns_status
-ldns_str2rdf_ipseckey(ldns_rdf **rd, const char *str)
-{
- uint8_t precedence = 0;
- uint8_t gateway_type = 0;
- uint8_t algorithm = 0;
- char* gateway = NULL;
- char* publickey = NULL;
- uint8_t *data;
- ldns_buffer *str_buf;
- char *token;
- int token_count = 0;
- int ipseckey_len = 0;
- ldns_rdf* gateway_rdf = NULL;
- ldns_rdf* publickey_rdf = NULL;
- ldns_status status = LDNS_STATUS_OK;
-
- if(strlen(str) == 0)
- token = LDNS_XMALLOC(char, 256);
- else token = LDNS_XMALLOC(char, strlen(str)+2);
- if(!token) return LDNS_STATUS_MEM_ERR;
-
- str_buf = LDNS_MALLOC(ldns_buffer);
- if(!str_buf) {LDNS_FREE(token); return LDNS_STATUS_MEM_ERR;}
- ldns_buffer_new_frm_data(str_buf, (char *)str, strlen(str));
- if(ldns_buffer_status(str_buf) != LDNS_STATUS_OK) {
- LDNS_FREE(str_buf);
- LDNS_FREE(token);
- return LDNS_STATUS_MEM_ERR;
- }
- while(ldns_bget_token(str_buf, token, "\t\n ", strlen(str)) > 0) {
- switch (token_count) {
- case 0:
- precedence = (uint8_t)atoi(token);
- break;
- case 1:
- gateway_type = (uint8_t)atoi(token);
- break;
- case 2:
- algorithm = (uint8_t)atoi(token);
- break;
- case 3:
- gateway = strdup(token);
- if (!gateway || (gateway_type == 0 &&
- (token[0] != '.' || token[1] != '\0'))) {
- LDNS_FREE(gateway);
- LDNS_FREE(token);
- ldns_buffer_free(str_buf);
- return LDNS_STATUS_INVALID_STR;
- }
- break;
- case 4:
- publickey = strdup(token);
- break;
- default:
- LDNS_FREE(token);
- ldns_buffer_free(str_buf);
- return LDNS_STATUS_INVALID_STR;
- break;
- }
- token_count++;
- }
-
- if (!gateway || !publickey) {
- if (gateway)
- LDNS_FREE(gateway);
- if (publickey)
- LDNS_FREE(publickey);
- LDNS_FREE(token);
- ldns_buffer_free(str_buf);
- return LDNS_STATUS_INVALID_STR;
- }
-
- if (gateway_type == 1) {
- status = ldns_str2rdf_a(&gateway_rdf, gateway);
- } else if (gateway_type == 2) {
- status = ldns_str2rdf_aaaa(&gateway_rdf, gateway);
- } else if (gateway_type == 3) {
- status = ldns_str2rdf_dname(&gateway_rdf, gateway);
- } else if (gateway_type > 3) {
- status = LDNS_STATUS_INVALID_STR;
- }
-
- if (status != LDNS_STATUS_OK) {
- if (gateway)
- LDNS_FREE(gateway);
- if (publickey)
- LDNS_FREE(publickey);
- LDNS_FREE(token);
- ldns_buffer_free(str_buf);
- return LDNS_STATUS_INVALID_STR;
- }
-
- status = ldns_str2rdf_b64(&publickey_rdf, publickey);
-
- if (status != LDNS_STATUS_OK) {
- if (gateway)
- LDNS_FREE(gateway);
- if (publickey)
- LDNS_FREE(publickey);
- LDNS_FREE(token);
- ldns_buffer_free(str_buf);
- if (gateway_rdf) ldns_rdf_free(gateway_rdf);
- return LDNS_STATUS_INVALID_STR;
- }
-
- /* now copy all into one ipseckey rdf */
- if (gateway_type)
- ipseckey_len = 3 + (int)ldns_rdf_size(gateway_rdf) + (int)ldns_rdf_size(publickey_rdf);
- else
- ipseckey_len = 3 + (int)ldns_rdf_size(publickey_rdf);
-
- data = LDNS_XMALLOC(uint8_t, ipseckey_len);
- if(!data) {
- if (gateway)
- LDNS_FREE(gateway);
- if (publickey)
- LDNS_FREE(publickey);
- LDNS_FREE(token);
- ldns_buffer_free(str_buf);
- if (gateway_rdf) ldns_rdf_free(gateway_rdf);
- if (publickey_rdf) ldns_rdf_free(publickey_rdf);
- return LDNS_STATUS_MEM_ERR;
- }
-
- data[0] = precedence;
- data[1] = gateway_type;
- data[2] = algorithm;
-
- if (gateway_type) {
- memcpy(data + 3,
- ldns_rdf_data(gateway_rdf), ldns_rdf_size(gateway_rdf));
- memcpy(data + 3 + ldns_rdf_size(gateway_rdf),
- ldns_rdf_data(publickey_rdf), ldns_rdf_size(publickey_rdf));
- } else {
- memcpy(data + 3,
- ldns_rdf_data(publickey_rdf), ldns_rdf_size(publickey_rdf));
- }
-
- *rd = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_IPSECKEY, (uint16_t) ipseckey_len, data);
-
- if (gateway)
- LDNS_FREE(gateway);
- if (publickey)
- LDNS_FREE(publickey);
- LDNS_FREE(token);
- ldns_buffer_free(str_buf);
- ldns_rdf_free(gateway_rdf);
- ldns_rdf_free(publickey_rdf);
- LDNS_FREE(data);
- if(!*rd) return LDNS_STATUS_MEM_ERR;
- return LDNS_STATUS_OK;
-}
-
-ldns_status
-ldns_str2rdf_ilnp64(ldns_rdf **rd, const char *str)
-{
- unsigned int a, b, c, d;
- uint16_t shorts[4];
- int l;
-
- if (sscanf(str, "%4x:%4x:%4x:%4x%n", &a, &b, &c, &d, &l) != 4 ||
- l != (int)strlen(str) || /* more data to read */
- strpbrk(str, "+-") /* signed hexes */
- ) {
- return LDNS_STATUS_INVALID_ILNP64;
- } else {
- shorts[0] = htons(a);
- shorts[1] = htons(b);
- shorts[2] = htons(c);
- shorts[3] = htons(d);
- *rd = ldns_rdf_new_frm_data(
- LDNS_RDF_TYPE_ILNP64, 4 * sizeof(uint16_t), &shorts);
- }
- return *rd ? LDNS_STATUS_OK : LDNS_STATUS_MEM_ERR;
-}
-
-ldns_status
-ldns_str2rdf_eui48(ldns_rdf **rd, const char *str)
-{
- unsigned int a, b, c, d, e, f;
- uint8_t bytes[6];
- int l;
-
- if (sscanf(str, "%2x-%2x-%2x-%2x-%2x-%2x%n",
- &a, &b, &c, &d, &e, &f, &l) != 6 ||
- l != (int)strlen(str)) {
- return LDNS_STATUS_INVALID_EUI48;
- } else {
- bytes[0] = a;
- bytes[1] = b;
- bytes[2] = c;
- bytes[3] = d;
- bytes[4] = e;
- bytes[5] = f;
- *rd = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_EUI48, 6, &bytes);
- }
- return *rd ? LDNS_STATUS_OK : LDNS_STATUS_MEM_ERR;
-}
-
-ldns_status
-ldns_str2rdf_eui64(ldns_rdf **rd, const char *str)
-{
- unsigned int a, b, c, d, e, f, g, h;
- uint8_t bytes[8];
- int l;
-
- if (sscanf(str, "%2x-%2x-%2x-%2x-%2x-%2x-%2x-%2x%n",
- &a, &b, &c, &d, &e, &f, &g, &h, &l) != 8 ||
- l != (int)strlen(str)) {
- return LDNS_STATUS_INVALID_EUI64;
- } else {
- bytes[0] = a;
- bytes[1] = b;
- bytes[2] = c;
- bytes[3] = d;
- bytes[4] = e;
- bytes[5] = f;
- bytes[6] = g;
- bytes[7] = h;
- *rd = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_EUI64, 8, &bytes);
- }
- return *rd ? LDNS_STATUS_OK : LDNS_STATUS_MEM_ERR;
-}
-
-ldns_status
-ldns_str2rdf_tag(ldns_rdf **rd, const char *str)
-{
- uint8_t *data;
- const char* ptr;
-
- if (strlen(str) > 255) {
- return LDNS_STATUS_INVALID_TAG;
- }
- for (ptr = str; *ptr; ptr++) {
- if (! isalnum((unsigned char)*ptr)) {
- return LDNS_STATUS_INVALID_TAG;
- }
- }
- data = LDNS_XMALLOC(uint8_t, strlen(str) + 1);
- if (!data) {
- return LDNS_STATUS_MEM_ERR;
- }
- data[0] = strlen(str);
- memcpy(data + 1, str, strlen(str));
-
- *rd = ldns_rdf_new(LDNS_RDF_TYPE_TAG, strlen(str) + 1, data);
- if (!*rd) {
- LDNS_FREE(data);
- return LDNS_STATUS_MEM_ERR;
- }
- return LDNS_STATUS_OK;
-}
-
-ldns_status
-ldns_str2rdf_long_str(ldns_rdf **rd, const char *str)
-{
- uint8_t *data, *dp, ch = 0;
- size_t length;
-
- /* Worst case space requirement. We'll realloc to actual size later. */
- dp = data = LDNS_XMALLOC(uint8_t, strlen(str));
- if (! data) {
- return LDNS_STATUS_MEM_ERR;
- }
-
- /* Fill data with parsed bytes */
- while (parse_char(&ch, &str)) {
- *dp++ = ch;
- if (dp - data > LDNS_MAX_RDFLEN) {
- LDNS_FREE(data);
- return LDNS_STATUS_INVALID_STR;
- }
- }
- if (! str) {
- LDNS_FREE(data);
- return LDNS_STATUS_SYNTAX_BAD_ESCAPE;
- }
- if (!(length = (size_t)(dp - data))) {
- LDNS_FREE(data);
- return LDNS_STATUS_SYNTAX_EMPTY;
- }
- /* Lose the overmeasure */
- data = LDNS_XREALLOC(dp = data, uint8_t, length);
- if (! data) {
- LDNS_FREE(dp);
- return LDNS_STATUS_MEM_ERR;
- }
-
- /* Create rdf */
- *rd = ldns_rdf_new(LDNS_RDF_TYPE_LONG_STR, length, data);
- if (! *rd) {
- LDNS_FREE(data);
- return LDNS_STATUS_MEM_ERR;
- }
- return LDNS_STATUS_OK;
-}
-
-ldns_status
-ldns_str2rdf_hip(ldns_rdf **rd, const char *str)
-{
- const char *hit = str == NULL ? NULL : strchr(str, ' ');
- const char *pk = hit == NULL ? NULL : strchr(hit + 1, ' ');
- size_t hit_size = hit == NULL ? 0
- : pk == NULL ? strlen(hit + 1) : (size_t) (pk - hit) - 1;
- size_t pk_size = pk == NULL ? 0 : strlen(pk + 1);
- size_t hit_wire_size = (hit_size + 1) / 2;
- size_t pk_wire_size = ldns_b64_pton_calculate_size(pk_size);
- size_t rdf_size = 4 + hit_wire_size + pk_wire_size;
-
- char *endptr; /* utility var for strtol usage */
- int algorithm = str == NULL ? 0 : strtol(str, &endptr, 10);
-
- uint8_t *data, *dp;
- int hi, lo, written;
-
- if (hit_size == 0 || pk_size == 0 || (hit_size + 1) / 2 > 255
- || rdf_size > LDNS_MAX_RDFLEN
- || algorithm < 0 || algorithm > 255
- || (errno != 0 && algorithm == 0) /* out of range */
- || endptr == str /* no digits */) {
-
- return LDNS_STATUS_SYNTAX_ERR;
- }
- hit += 1;
- pk += 1;
- if ((data = LDNS_XMALLOC(uint8_t, rdf_size)) == NULL) {
-
- return LDNS_STATUS_MEM_ERR;
- }
- /* From RFC 5205 section 5. HIP RR Storage Format:
- *************************************************
-
- 0 1 2 3
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | HIT length | PK algorithm | PK length |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | |
- ~ HIT ~
- | |
- + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | | |
- +-+-+-+-+-+-+-+-+-+-+-+ +
- | Public Key |
- ~ ~
- | |
- + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | | |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
- | |
- ~ Rendezvous Servers ~
- | |
- + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | |
- +-+-+-+-+-+-+-+ */
-
- data[0] = (uint8_t) hit_wire_size;
- data[1] = (uint8_t) algorithm;
-
- for (dp = data + 4; *hit && *hit != ' '; dp++) {
-
- if ((hi = ldns_hexdigit_to_int(*hit++)) == -1 ||
- (lo = ldns_hexdigit_to_int(*hit++)) == -1) {
-
- LDNS_FREE(data);
- return LDNS_STATUS_INVALID_HEX;
- }
- *dp = (uint8_t) hi << 4 | lo;
- }
- if ((written = ldns_b64_pton(pk, dp, pk_wire_size)) <= 0) {
-
- LDNS_FREE(data);
- return LDNS_STATUS_INVALID_B64;
- }
-
- /* Because ldns_b64_pton_calculate_size isn't always correct:
- * (we have to fix it at some point)
- */
- pk_wire_size = (uint16_t) written;
- ldns_write_uint16(data + 2, pk_wire_size);
- rdf_size = 4 + hit_wire_size + pk_wire_size;
-
- /* Create rdf */
- if (! (*rd = ldns_rdf_new(LDNS_RDF_TYPE_HIP, rdf_size, data))) {
-
- LDNS_FREE(data);
- return LDNS_STATUS_MEM_ERR;
- }
- return LDNS_STATUS_OK;
-}
-
-
-/* Implementation mimics ldns_str2rdf_ipseckey */
-ldns_status
-ldns_str2rdf_amtrelay(ldns_rdf **rd, const char *str)
-{
- /* From draft-ietf-mboned-driad-amt-discovery
- * Section 4.2. AMTRELAY RData Format
- *************************************************
-
- 0 1 2 3
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | precedence |D| type | |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
- ~ relay ~
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
-
- uint8_t precedence = 0;
- uint8_t relay_type = 0;
- uint8_t discovery_optional = 0;
- char* relay = NULL;
- uint8_t *data;
- ldns_buffer *str_buf;
- char *token;
- int token_count = 0;
- int amtrelay_len = 0;
- ldns_rdf* relay_rdf = NULL;
- ldns_status status = LDNS_STATUS_OK;
-
- if(strlen(str) == 0)
- token = LDNS_XMALLOC(char, 256);
- else token = LDNS_XMALLOC(char, strlen(str)+2);
- if(!token) return LDNS_STATUS_MEM_ERR;
-
- str_buf = LDNS_MALLOC(ldns_buffer);
- if(!str_buf) {LDNS_FREE(token); return LDNS_STATUS_MEM_ERR;}
- ldns_buffer_new_frm_data(str_buf, (char *)str, strlen(str));
- if(ldns_buffer_status(str_buf) != LDNS_STATUS_OK) {
- LDNS_FREE(str_buf);
- LDNS_FREE(token);
- return LDNS_STATUS_MEM_ERR;
- }
- while(ldns_bget_token(str_buf, token, "\t\n ", strlen(str)) > 0) {
- switch (token_count) {
- case 0:
- precedence = (uint8_t)atoi(token);
- break;
- case 1:
- discovery_optional = (uint8_t)atoi(token);
- if (discovery_optional != 0 &&
- discovery_optional != 1) {
- LDNS_FREE(relay);
- LDNS_FREE(token);
- ldns_buffer_free(str_buf);
- return LDNS_STATUS_INVALID_STR;
- }
- break;
- case 2:
- relay_type = (uint8_t)atoi(token);
- break;
- case 3:
- relay = strdup(token);
- if (!relay || (relay_type == 0 &&
- (token[0] != '.' || token[1] != '\0'))) {
- LDNS_FREE(relay);
- LDNS_FREE(token);
- ldns_buffer_free(str_buf);
- return LDNS_STATUS_INVALID_STR;
- }
- break;
- default:
- LDNS_FREE(token);
- ldns_buffer_free(str_buf);
- return LDNS_STATUS_INVALID_STR;
- break;
- }
- token_count++;
- }
- if (!relay && relay_type > 0) {
- if (relay)
- LDNS_FREE(relay);
- LDNS_FREE(token);
- ldns_buffer_free(str_buf);
- return LDNS_STATUS_INVALID_STR;
- }
-
- if (relay_type == 1) {
- status = ldns_str2rdf_a(&relay_rdf, relay);
- } else if (relay_type == 2) {
- status = ldns_str2rdf_aaaa(&relay_rdf, relay);
- } else if (relay_type == 3) {
- status = ldns_str2rdf_dname(&relay_rdf, relay);
- } else if (relay_type > 3) {
- status = LDNS_STATUS_INVALID_STR;
- }
-
- if (status != LDNS_STATUS_OK) {
- if (relay)
- LDNS_FREE(relay);
- LDNS_FREE(token);
- ldns_buffer_free(str_buf);
- return LDNS_STATUS_INVALID_STR;
- }
-
- /* now copy all into one amtrelay rdf */
- if (relay_type)
- amtrelay_len = 2 + (int)ldns_rdf_size(relay_rdf);
- else
- amtrelay_len = 2;
-
- data = LDNS_XMALLOC(uint8_t, amtrelay_len);
- if(!data) {
- if (relay)
- LDNS_FREE(relay);
- LDNS_FREE(token);
- ldns_buffer_free(str_buf);
- if (relay_rdf) ldns_rdf_free(relay_rdf);
- return LDNS_STATUS_MEM_ERR;
- }
-
- data[0] = precedence;
- data[1] = relay_type;
- data[1] |= (discovery_optional << 7);
-
- if (relay_type) {
- memcpy(data + 2,
- ldns_rdf_data(relay_rdf), ldns_rdf_size(relay_rdf));
- }
- *rd = ldns_rdf_new_frm_data( LDNS_RDF_TYPE_AMTRELAY
- , (uint16_t) amtrelay_len, data);
-
- if (relay)
- LDNS_FREE(relay);
- LDNS_FREE(token);
- ldns_buffer_free(str_buf);
- ldns_rdf_free(relay_rdf);
- LDNS_FREE(data);
- if(!*rd) return LDNS_STATUS_MEM_ERR;
- return LDNS_STATUS_OK;
-}
diff --git a/ldns/tsig.c b/ldns/tsig.c
deleted file mode 100644
index 458861a..0000000
--- a/ldns/tsig.c
+++ /dev/null
@@ -1,488 +0,0 @@
-/*
- * tsig.c
- *
- * contains the functions needed for TSIG [RFC2845]
- *
- * (c) 2005-2006 NLnet Labs
- * See the file LICENSE for the license
- */
-
-#include <ldns/config.h>
-
-#include <ldns/ldns.h>
-
-#include <strings.h>
-
-#ifdef HAVE_SSL
-#include <openssl/hmac.h>
-#include <openssl/md5.h>
-#endif /* HAVE_SSL */
-
-const char *
-ldns_tsig_algorithm(const ldns_tsig_credentials *tc)
-{
- return tc->algorithm;
-}
-
-const char *
-ldns_tsig_keyname(const ldns_tsig_credentials *tc)
-{
- return tc->keyname;
-}
-
-const char *
-ldns_tsig_keydata(const ldns_tsig_credentials *tc)
-{
- return tc->keydata;
-}
-
-char *
-ldns_tsig_keyname_clone(const ldns_tsig_credentials *tc)
-{
- return strdup(tc->keyname);
-}
-
-char *
-ldns_tsig_keydata_clone(const ldns_tsig_credentials *tc)
-{
- return strdup(tc->keydata);
-}
-
-/*
- * Makes an exact copy of the wire, but with the tsig rr removed
- */
-static uint8_t *
-ldns_tsig_prepare_pkt_wire(const uint8_t *wire, size_t wire_len, size_t *result_len)
-{
- uint8_t *wire2 = NULL;
- uint16_t qd_count;
- uint16_t an_count;
- uint16_t ns_count;
- uint16_t ar_count;
- ldns_rr *rr;
-
- size_t pos;
- uint16_t i;
-
- ldns_status status;
-
- if(wire_len < LDNS_HEADER_SIZE) {
- return NULL;
- }
- /* fake parse the wire */
- qd_count = LDNS_QDCOUNT(wire);
- an_count = LDNS_ANCOUNT(wire);
- ns_count = LDNS_NSCOUNT(wire);
- ar_count = LDNS_ARCOUNT(wire);
-
- if (ar_count > 0) {
- ar_count--;
- } else {
- return NULL;
- }
-
- pos = LDNS_HEADER_SIZE;
-
- for (i = 0; i < qd_count; i++) {
- status = ldns_wire2rr(&rr, wire, wire_len, &pos, LDNS_SECTION_QUESTION);
- if (status != LDNS_STATUS_OK) {
- return NULL;
- }
- ldns_rr_free(rr);
- }
-
- for (i = 0; i < an_count; i++) {
- status = ldns_wire2rr(&rr, wire, wire_len, &pos, LDNS_SECTION_ANSWER);
- if (status != LDNS_STATUS_OK) {
- return NULL;
- }
- ldns_rr_free(rr);
- }
-
- for (i = 0; i < ns_count; i++) {
- status = ldns_wire2rr(&rr, wire, wire_len, &pos, LDNS_SECTION_AUTHORITY);
- if (status != LDNS_STATUS_OK) {
- return NULL;
- }
- ldns_rr_free(rr);
- }
-
- for (i = 0; i < ar_count; i++) {
- status = ldns_wire2rr(&rr, wire, wire_len, &pos,
- LDNS_SECTION_ADDITIONAL);
- if (status != LDNS_STATUS_OK) {
- return NULL;
- }
- ldns_rr_free(rr);
- }
-
- *result_len = pos;
- wire2 = LDNS_XMALLOC(uint8_t, *result_len);
- if(!wire2) {
- return NULL;
- }
- memcpy(wire2, wire, *result_len);
-
- ldns_write_uint16(wire2 + LDNS_ARCOUNT_OFF, ar_count);
-
- return wire2;
-}
-
-#ifdef HAVE_SSL
-static const EVP_MD *
-ldns_digest_function(char *name)
-{
- /* these are the mandatory algorithms from RFC4635 */
- /* The optional algorithms are not yet implemented */
- if (strcasecmp(name, "hmac-sha512.") == 0) {
-#ifdef HAVE_EVP_SHA512
- return EVP_sha512();
-#else
- return NULL;
-#endif
- } else if (strcasecmp(name, "hmac-shac384.") == 0) {
-#ifdef HAVE_EVP_SHA384
- return EVP_sha384();
-#else
- return NULL;
-#endif
- } else if (strcasecmp(name, "hmac-sha256.") == 0) {
-#ifdef HAVE_EVP_SHA256
- return EVP_sha256();
-#else
- return NULL;
-#endif
- } else if (strcasecmp(name, "hmac-sha1.") == 0) {
- return EVP_sha1();
- } else if (strcasecmp(name, "hmac-md5.sig-alg.reg.int.") == 0) {
- return EVP_md5();
- } else {
- return NULL;
- }
-}
-#endif
-
-#ifdef HAVE_SSL
-static ldns_status
-ldns_tsig_mac_new(ldns_rdf **tsig_mac, const uint8_t *pkt_wire, size_t pkt_wire_size,
- const char *key_data, const ldns_rdf *key_name_rdf, const ldns_rdf *fudge_rdf,
- const ldns_rdf *algorithm_rdf, const ldns_rdf *time_signed_rdf, const ldns_rdf *error_rdf,
- const ldns_rdf *other_data_rdf, const ldns_rdf *orig_mac_rdf, int tsig_timers_only)
-{
- ldns_status status;
- char *wireformat;
- int wiresize;
- unsigned char *mac_bytes = NULL;
- unsigned char *key_bytes = NULL;
- int key_size;
- const EVP_MD *digester;
- char *algorithm_name = NULL;
- unsigned int md_len = EVP_MAX_MD_SIZE;
- ldns_rdf *result = NULL;
- ldns_buffer *data_buffer = NULL;
- ldns_rdf *canonical_key_name_rdf = NULL;
- ldns_rdf *canonical_algorithm_rdf = NULL;
-
- if (key_name_rdf == NULL || algorithm_rdf == NULL) {
- return LDNS_STATUS_NULL;
- }
- canonical_key_name_rdf = ldns_rdf_clone(key_name_rdf);
- if (canonical_key_name_rdf == NULL) {
- return LDNS_STATUS_MEM_ERR;
- }
- canonical_algorithm_rdf = ldns_rdf_clone(algorithm_rdf);
- if (canonical_algorithm_rdf == NULL) {
- ldns_rdf_deep_free(canonical_key_name_rdf);
- return LDNS_STATUS_MEM_ERR;
- }
- /*
- * prepare the digestable information
- */
- data_buffer = ldns_buffer_new(LDNS_MAX_PACKETLEN);
- if (!data_buffer) {
- status = LDNS_STATUS_MEM_ERR;
- goto clean;
- }
- /* if orig_mac is not NULL, add it too */
- if (orig_mac_rdf) {
- (void) ldns_rdf2buffer_wire(data_buffer, orig_mac_rdf);
- }
- ldns_buffer_write(data_buffer, pkt_wire, pkt_wire_size);
- if (!tsig_timers_only) {
- ldns_dname2canonical(canonical_key_name_rdf);
- (void)ldns_rdf2buffer_wire(data_buffer,
- canonical_key_name_rdf);
- ldns_buffer_write_u16(data_buffer, LDNS_RR_CLASS_ANY);
- ldns_buffer_write_u32(data_buffer, 0);
- ldns_dname2canonical(canonical_algorithm_rdf);
- (void)ldns_rdf2buffer_wire(data_buffer,
- canonical_algorithm_rdf);
- }
- (void)ldns_rdf2buffer_wire(data_buffer, time_signed_rdf);
- (void)ldns_rdf2buffer_wire(data_buffer, fudge_rdf);
- if (!tsig_timers_only) {
- (void)ldns_rdf2buffer_wire(data_buffer, error_rdf);
- (void)ldns_rdf2buffer_wire(data_buffer, other_data_rdf);
- }
-
- wireformat = (char *) data_buffer->_data;
- wiresize = (int) ldns_buffer_position(data_buffer);
-
- algorithm_name = ldns_rdf2str(algorithm_rdf);
- if(!algorithm_name) {
- status = LDNS_STATUS_MEM_ERR;
- goto clean;
- }
-
- /* prepare the key */
- key_bytes = LDNS_XMALLOC(unsigned char,
- ldns_b64_pton_calculate_size(strlen(key_data)));
- if(!key_bytes) {
- status = LDNS_STATUS_MEM_ERR;
- goto clean;
- }
- key_size = ldns_b64_pton(key_data, key_bytes,
- ldns_b64_pton_calculate_size(strlen(key_data)));
- if (key_size < 0) {
- status = LDNS_STATUS_INVALID_B64;
- goto clean;
- }
- /* hmac it */
- /* 2 spare bytes for the length */
- mac_bytes = LDNS_XMALLOC(unsigned char, md_len+2);
- if(!mac_bytes) {
- status = LDNS_STATUS_MEM_ERR;
- goto clean;
- }
- memset(mac_bytes, 0, md_len+2);
-
- digester = ldns_digest_function(algorithm_name);
-
- if (digester) {
- (void) HMAC(digester, key_bytes, key_size, (void *)wireformat,
- (size_t) wiresize, mac_bytes + 2, &md_len);
-
- ldns_write_uint16(mac_bytes, md_len);
- result = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_INT16_DATA, md_len + 2,
- mac_bytes);
- } else {
- status = LDNS_STATUS_CRYPTO_UNKNOWN_ALGO;
- goto clean;
- }
- *tsig_mac = result;
- status = LDNS_STATUS_OK;
- clean:
- LDNS_FREE(mac_bytes);
- LDNS_FREE(key_bytes);
- LDNS_FREE(algorithm_name);
- ldns_buffer_free(data_buffer);
- ldns_rdf_deep_free(canonical_algorithm_rdf);
- ldns_rdf_deep_free(canonical_key_name_rdf);
- return status;
-}
-#endif /* HAVE_SSL */
-
-
-#ifdef HAVE_SSL
-bool
-ldns_pkt_tsig_verify(ldns_pkt *pkt, const uint8_t *wire, size_t wirelen, const char *key_name,
- const char *key_data, const ldns_rdf *orig_mac_rdf)
-{
- return ldns_pkt_tsig_verify_next(pkt, wire, wirelen, key_name, key_data, orig_mac_rdf, 0);
-}
-
-bool
-ldns_pkt_tsig_verify_next(ldns_pkt *pkt, const uint8_t *wire, size_t wirelen, const char* key_name,
- const char *key_data, const ldns_rdf *orig_mac_rdf, int tsig_timers_only)
-{
- ldns_rdf *fudge_rdf;
- ldns_rdf *algorithm_rdf;
- ldns_rdf *time_signed_rdf;
- ldns_rdf *orig_id_rdf;
- ldns_rdf *error_rdf;
- ldns_rdf *other_data_rdf;
- ldns_rdf *pkt_mac_rdf;
- ldns_rdf *my_mac_rdf;
- ldns_rdf *key_name_rdf = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_DNAME, key_name);
- uint16_t pkt_id, orig_pkt_id;
- ldns_status status;
-
- uint8_t *prepared_wire = NULL;
- size_t prepared_wire_size = 0;
-
- ldns_rr *orig_tsig = ldns_pkt_tsig(pkt);
-
- if (!orig_tsig || ldns_rr_rd_count(orig_tsig) <= 6) {
- ldns_rdf_deep_free(key_name_rdf);
- return false;
- }
- algorithm_rdf = ldns_rr_rdf(orig_tsig, 0);
- time_signed_rdf = ldns_rr_rdf(orig_tsig, 1);
- fudge_rdf = ldns_rr_rdf(orig_tsig, 2);
- pkt_mac_rdf = ldns_rr_rdf(orig_tsig, 3);
- orig_id_rdf = ldns_rr_rdf(orig_tsig, 4);
- error_rdf = ldns_rr_rdf(orig_tsig, 5);
- other_data_rdf = ldns_rr_rdf(orig_tsig, 6);
-
- /* remove temporarily */
- ldns_pkt_set_tsig(pkt, NULL);
- /* temporarily change the id to the original id */
- pkt_id = ldns_pkt_id(pkt);
- orig_pkt_id = ldns_rdf2native_int16(orig_id_rdf);
- ldns_pkt_set_id(pkt, orig_pkt_id);
-
- prepared_wire = ldns_tsig_prepare_pkt_wire(wire, wirelen, &prepared_wire_size);
-
- status = ldns_tsig_mac_new(&my_mac_rdf, prepared_wire, prepared_wire_size,
- key_data, key_name_rdf, fudge_rdf, algorithm_rdf,
- time_signed_rdf, error_rdf, other_data_rdf, orig_mac_rdf, tsig_timers_only);
-
- LDNS_FREE(prepared_wire);
-
- if (status != LDNS_STATUS_OK) {
- ldns_rdf_deep_free(key_name_rdf);
- return false;
- }
- /* Put back the values */
- ldns_pkt_set_tsig(pkt, orig_tsig);
- ldns_pkt_set_id(pkt, pkt_id);
-
- ldns_rdf_deep_free(key_name_rdf);
-
- if( ldns_rdf_size(pkt_mac_rdf) != ldns_rdf_size(my_mac_rdf)) {
- ldns_rdf_deep_free(my_mac_rdf);
- return false;
- }
- /* use time insensitive memory compare */
- if(CRYPTO_memcmp(ldns_rdf_data(pkt_mac_rdf), ldns_rdf_data(my_mac_rdf),
- ldns_rdf_size(my_mac_rdf)) == 0) {
- ldns_rdf_deep_free(my_mac_rdf);
- return true;
- } else {
- ldns_rdf_deep_free(my_mac_rdf);
- return false;
- }
-}
-#endif /* HAVE_SSL */
-
-#ifdef HAVE_SSL
-ldns_status
-ldns_pkt_tsig_sign(ldns_pkt *pkt, const char *key_name, const char *key_data,
- uint16_t fudge, const char *algorithm_name, const ldns_rdf *query_mac)
-{
- return ldns_pkt_tsig_sign_next(pkt, key_name, key_data, fudge, algorithm_name, query_mac, 0);
-}
-
-ldns_status
-ldns_pkt_tsig_sign_next(ldns_pkt *pkt, const char *key_name, const char *key_data,
- uint16_t fudge, const char *algorithm_name, const ldns_rdf *query_mac, int tsig_timers_only)
-{
- ldns_rr *tsig_rr;
- ldns_rdf *key_name_rdf = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_DNAME, key_name);
- ldns_rdf *fudge_rdf = NULL;
- ldns_rdf *orig_id_rdf = NULL;
- ldns_rdf *algorithm_rdf;
- ldns_rdf *error_rdf = NULL;
- ldns_rdf *mac_rdf = NULL;
- ldns_rdf *other_data_rdf = NULL;
-
- ldns_status status = LDNS_STATUS_OK;
-
- uint8_t *pkt_wire = NULL;
- size_t pkt_wire_len;
-
- struct timeval tv_time_signed;
- uint8_t *time_signed = NULL;
- ldns_rdf *time_signed_rdf = NULL;
-
- algorithm_rdf = ldns_rdf_new_frm_str(LDNS_RDF_TYPE_DNAME, algorithm_name);
- if(!key_name_rdf || !algorithm_rdf) {
- status = LDNS_STATUS_MEM_ERR;
- goto clean;
- }
-
- /* eww don't have create tsigtime rdf yet :( */
- /* bleh :p */
- if (gettimeofday(&tv_time_signed, NULL) == 0) {
- time_signed = LDNS_XMALLOC(uint8_t, 6);
- if(!time_signed) {
- status = LDNS_STATUS_MEM_ERR;
- goto clean;
- }
- ldns_write_uint64_as_uint48(time_signed,
- (uint64_t)tv_time_signed.tv_sec);
- } else {
- status = LDNS_STATUS_INTERNAL_ERR;
- goto clean;
- }
-
- time_signed_rdf = ldns_rdf_new(LDNS_RDF_TYPE_TSIGTIME, 6, time_signed);
- if(!time_signed_rdf) {
- LDNS_FREE(time_signed);
- status = LDNS_STATUS_MEM_ERR;
- goto clean;
- }
-
- fudge_rdf = ldns_native2rdf_int16(LDNS_RDF_TYPE_INT16, fudge);
-
- orig_id_rdf = ldns_native2rdf_int16(LDNS_RDF_TYPE_INT16, ldns_pkt_id(pkt));
-
- error_rdf = ldns_native2rdf_int16(LDNS_RDF_TYPE_INT16, 0);
-
- other_data_rdf = ldns_native2rdf_int16_data(0, NULL);
-
- if(!fudge_rdf || !orig_id_rdf || !error_rdf || !other_data_rdf) {
- status = LDNS_STATUS_MEM_ERR;
- goto clean;
- }
-
- if (ldns_pkt2wire(&pkt_wire, pkt, &pkt_wire_len) != LDNS_STATUS_OK) {
- status = LDNS_STATUS_ERR;
- goto clean;
- }
-
- status = ldns_tsig_mac_new(&mac_rdf, pkt_wire, pkt_wire_len,
- key_data, key_name_rdf, fudge_rdf, algorithm_rdf,
- time_signed_rdf, error_rdf, other_data_rdf, query_mac, tsig_timers_only);
-
- if (!mac_rdf) {
- goto clean;
- }
-
- LDNS_FREE(pkt_wire);
-
- /* Create the TSIG RR */
- tsig_rr = ldns_rr_new();
- if(!tsig_rr) {
- status = LDNS_STATUS_MEM_ERR;
- goto clean;
- }
- ldns_rr_set_owner(tsig_rr, key_name_rdf);
- ldns_rr_set_class(tsig_rr, LDNS_RR_CLASS_ANY);
- ldns_rr_set_type(tsig_rr, LDNS_RR_TYPE_TSIG);
- ldns_rr_set_ttl(tsig_rr, 0);
-
- ldns_rr_push_rdf(tsig_rr, algorithm_rdf);
- ldns_rr_push_rdf(tsig_rr, time_signed_rdf);
- ldns_rr_push_rdf(tsig_rr, fudge_rdf);
- ldns_rr_push_rdf(tsig_rr, mac_rdf);
- ldns_rr_push_rdf(tsig_rr, orig_id_rdf);
- ldns_rr_push_rdf(tsig_rr, error_rdf);
- ldns_rr_push_rdf(tsig_rr, other_data_rdf);
-
- ldns_pkt_set_tsig(pkt, tsig_rr);
-
- return status;
-
- clean:
- LDNS_FREE(pkt_wire);
- ldns_rdf_free(key_name_rdf);
- ldns_rdf_free(algorithm_rdf);
- ldns_rdf_free(time_signed_rdf);
- ldns_rdf_free(fudge_rdf);
- ldns_rdf_free(orig_id_rdf);
- ldns_rdf_free(error_rdf);
- ldns_rdf_free(other_data_rdf);
- return status;
-}
-#endif /* HAVE_SSL */
diff --git a/ldns/update.c b/ldns/update.c
deleted file mode 100644
index e799bdb..0000000
--- a/ldns/update.c
+++ /dev/null
@@ -1,325 +0,0 @@
-/* update.c
- *
- * Functions for RFC 2136 Dynamic Update
- *
- * Copyright (c) 2005-2008, NLnet Labs. All rights reserved.
- *
- * See LICENSE for the license.
- */
-
-#include <ldns/config.h>
-
-#include <ldns/ldns.h>
-
-#include <strings.h>
-#include <stdlib.h>
-#include <limits.h>
-
-/*
- * RFC 2136 sections mapped to RFC 1035:
- * zone/ZO -- QD/question
- * prerequisites/PR -- AN/answers
- * updates/UP -- NS/authority records
- * additional data/AD -- AR/additional records
- */
-
-ldns_pkt *
-ldns_update_pkt_new(ldns_rdf *zone_rdf, ldns_rr_class c,
- const ldns_rr_list *pr_rrlist, const ldns_rr_list *up_rrlist, const ldns_rr_list *ad_rrlist)
-{
- ldns_pkt *p;
-
- if (!zone_rdf || !up_rrlist) {
- return NULL;
- }
-
- if (c == 0) {
- c = LDNS_RR_CLASS_IN;
- }
-
- /* Create packet, fill in Zone Section. */
- p = ldns_pkt_query_new(zone_rdf, LDNS_RR_TYPE_SOA, c, LDNS_RD);
- if (!p) {
- return NULL;
- }
- zone_rdf = NULL; /* No longer safe to use. */
-
- ldns_pkt_set_opcode(p, LDNS_PACKET_UPDATE);
-
- ldns_rr_list_deep_free(p->_authority);
-
- ldns_pkt_set_authority(p, ldns_rr_list_clone(up_rrlist));
-
- ldns_update_set_upcount(p, ldns_rr_list_rr_count(up_rrlist));
-
- if (pr_rrlist) {
- ldns_rr_list_deep_free(p->_answer); /*XXX access function */
- ldns_pkt_set_answer(p, ldns_rr_list_clone(pr_rrlist));
- ldns_update_set_prcount(p, ldns_rr_list_rr_count(pr_rrlist));
- }
-
- if (ad_rrlist) {
- ldns_rr_list_deep_free(p->_additional);
- ldns_pkt_set_additional(p, ldns_rr_list_clone(ad_rrlist));
- ldns_update_set_adcount(p, ldns_rr_list_rr_count(ad_rrlist));
- }
- return p;
-}
-
-ldns_status
-ldns_update_pkt_tsig_add(ldns_pkt *p, const ldns_resolver *r)
-{
-#ifdef HAVE_SSL
- uint16_t fudge = 300; /* Recommended fudge. [RFC2845 6.4] */
- if (ldns_resolver_tsig_keyname(r) && ldns_resolver_tsig_keydata(r))
- return ldns_pkt_tsig_sign(p, ldns_resolver_tsig_keyname(r),
- ldns_resolver_tsig_keydata(r), fudge,
- ldns_resolver_tsig_algorithm(r), NULL);
-#else
- /* do nothing */
- (void)p;
- (void)r;
-#endif /* HAVE_SSL */
- /* No TSIG to do. */
- return LDNS_STATUS_OK;
-}
-
-/* Move to higher.c or similar? */
-/* XXX doc */
-ldns_status
-ldns_update_soa_mname(ldns_rdf *zone, ldns_resolver *r,
- ldns_rr_class c, ldns_rdf **mname)
-{
- ldns_rr *soa_rr;
- ldns_pkt *query, *resp;
-
- /* Nondestructive, so clone 'zone' here */
- query = ldns_pkt_query_new(ldns_rdf_clone(zone), LDNS_RR_TYPE_SOA,
- c, LDNS_RD);
- if (!query) {
- return LDNS_STATUS_ERR;
- }
-
- ldns_pkt_set_random_id(query);
- if (ldns_resolver_send_pkt(&resp, r, query) != LDNS_STATUS_OK) {
- ldns_pkt_free(query);
- return LDNS_STATUS_ERR;
- }
- ldns_pkt_free(query);
- if (!resp) {
- return LDNS_STATUS_ERR;
- }
-
- /* Expect a SOA answer. */
- *mname = NULL;
- while ((soa_rr = ldns_rr_list_pop_rr(ldns_pkt_answer(resp)))) {
- if (ldns_rr_get_type(soa_rr) != LDNS_RR_TYPE_SOA
- || ldns_rr_rdf(soa_rr, 0) == NULL)
- continue;
- /* [RFC1035 3.3.13] */
- *mname = ldns_rdf_clone(ldns_rr_rdf(soa_rr, 0));
- break;
- }
- ldns_pkt_free(resp);
-
- return *mname ? LDNS_STATUS_OK : LDNS_STATUS_ERR;
-}
-
-/* Try to get zone and MNAME from SOA queries. */
-ldns_status
-ldns_update_soa_zone_mname(const char *fqdn, ldns_resolver *r,
- ldns_rr_class c, ldns_rdf **zone_rdf, ldns_rdf **mname_rdf)
-{
- ldns_rr *soa_rr, *rr;
- ldns_rdf *soa_zone = NULL, *soa_mname = NULL;
- ldns_rdf *ipaddr, *fqdn_rdf, *tmp;
- ldns_rdf **nslist;
- ldns_pkt *query, *resp;
- ldns_resolver *tmp_r;
- size_t i;
-
- /*
- * XXX Ok, this cannot be the best way to find this...?
- * XXX (I run into weird cache-related stuff here)
- */
-
- /* Step 1 - first find a nameserver that should know *something* */
- fqdn_rdf = ldns_dname_new_frm_str(fqdn);
- query = ldns_pkt_query_new(fqdn_rdf, LDNS_RR_TYPE_SOA, c, LDNS_RD);
- if (!query) {
- return LDNS_STATUS_ERR;
- }
- fqdn_rdf = NULL;
-
- ldns_pkt_set_random_id(query);
- if (ldns_resolver_send_pkt(&resp, r, query) != LDNS_STATUS_OK) {
- ldns_pkt_free(query);
- return LDNS_STATUS_ERR;
- }
- ldns_pkt_free(query);
- if (!resp) {
- return LDNS_STATUS_ERR;
- }
-
- /* XXX Is it safe to only look in authority section here? */
- while ((soa_rr = ldns_rr_list_pop_rr(ldns_pkt_authority(resp)))) {
- if (ldns_rr_get_type(soa_rr) != LDNS_RR_TYPE_SOA
- || ldns_rr_rdf(soa_rr, 0) == NULL)
- continue;
- /* [RFC1035 3.3.13] */
- soa_mname = ldns_rdf_clone(ldns_rr_rdf(soa_rr, 0));
- break;
- }
- ldns_pkt_free(resp);
- if (!soa_rr) {
- return LDNS_STATUS_ERR;
- }
-
- /* Step 2 - find SOA MNAME IP address, add to resolver */
- query = ldns_pkt_query_new(soa_mname, LDNS_RR_TYPE_A, c, LDNS_RD);
- if (!query) {
- return LDNS_STATUS_ERR;
- }
- soa_mname = NULL;
-
- ldns_pkt_set_random_id(query);
- if (ldns_resolver_send_pkt(&resp, r, query) != LDNS_STATUS_OK) {
- ldns_pkt_free(query);
- return LDNS_STATUS_ERR;
- }
- ldns_pkt_free(query);
- if (!resp) {
- return LDNS_STATUS_ERR;
- }
-
- if (ldns_pkt_ancount(resp) == 0) {
- ldns_pkt_free(resp);
- return LDNS_STATUS_ERR;
- }
-
- /* XXX There may be more than one answer RR here. */
- rr = ldns_rr_list_pop_rr(ldns_pkt_answer(resp));
- ipaddr = ldns_rr_rdf(rr, 0);
-
- /* Put the SOA mname IP first in the nameserver list. */
- if (!(tmp_r = ldns_resolver_clone(r))) {
- return LDNS_STATUS_MEM_ERR;
- }
- nslist = ldns_resolver_nameservers(tmp_r);
- for (i = 0; i < ldns_resolver_nameserver_count(tmp_r); i++) {
- if (ldns_rdf_compare(ipaddr, nslist[i]) == 0) {
- if (i) {
- tmp = nslist[0];
- nslist[0] = nslist[i];
- nslist[i] = tmp;
- }
- break;
- }
- }
- if (i >= ldns_resolver_nameserver_count(tmp_r)) {
- /* SOA mname was not part of the resolver so add it first. */
- (void) ldns_resolver_push_nameserver(tmp_r, ipaddr);
- nslist = ldns_resolver_nameservers(tmp_r);
- i = ldns_resolver_nameserver_count(tmp_r) - 1;
- tmp = nslist[0];
- nslist[0] = nslist[i];
- nslist[i] = tmp;
- }
- ldns_pkt_free(resp);
-
- /* Make sure to ask the first in the list, i.e SOA mname */
- ldns_resolver_set_random(tmp_r, false);
-
- /* Step 3 - Redo SOA query, sending to SOA MNAME directly. */
- fqdn_rdf = ldns_dname_new_frm_str(fqdn);
- query = ldns_pkt_query_new(fqdn_rdf, LDNS_RR_TYPE_SOA, c, LDNS_RD);
- if (!query) {
- ldns_resolver_free(tmp_r);
- return LDNS_STATUS_ERR;
- }
- fqdn_rdf = NULL;
-
- ldns_pkt_set_random_id(query);
- if (ldns_resolver_send_pkt(&resp, tmp_r, query) != LDNS_STATUS_OK) {
- ldns_pkt_free(query);
- ldns_resolver_free(tmp_r);
- return LDNS_STATUS_ERR;
- }
- ldns_resolver_free(tmp_r);
- ldns_pkt_free(query);
- if (!resp) {
- return LDNS_STATUS_ERR;
- }
-
- /* XXX Is it safe to only look in authority section here, too? */
- while ((soa_rr = ldns_rr_list_pop_rr(ldns_pkt_authority(resp)))) {
- if (ldns_rr_get_type(soa_rr) != LDNS_RR_TYPE_SOA
- || ldns_rr_rdf(soa_rr, 0) == NULL)
- continue;
- /* [RFC1035 3.3.13] */
- soa_mname = ldns_rdf_clone(ldns_rr_rdf(soa_rr, 0));
- soa_zone = ldns_rdf_clone(ldns_rr_owner(soa_rr));
- break;
- }
- ldns_pkt_free(resp);
- if (!soa_rr) {
- return LDNS_STATUS_ERR;
- }
-
- /* That seems to have worked, pass results to caller. */
- *zone_rdf = soa_zone;
- *mname_rdf = soa_mname;
- return LDNS_STATUS_OK;
-}
-
-/*
- * ldns_update_{get,set}_{zo,pr,up,ad}count
- */
-
-uint16_t
-ldns_update_zocount(const ldns_pkt *p)
-{
- return ldns_pkt_qdcount(p);
-}
-
-uint16_t
-ldns_update_prcount(const ldns_pkt *p)
-{
- return ldns_pkt_ancount(p);
-}
-
-uint16_t
-ldns_update_upcount(const ldns_pkt *p)
-{
- return ldns_pkt_nscount(p);
-}
-
-uint16_t
-ldns_update_ad(const ldns_pkt *p)
-{
- return ldns_pkt_arcount(p);
-}
-
-void
-ldns_update_set_zo(ldns_pkt *p, uint16_t v)
-{
- ldns_pkt_set_qdcount(p, v);
-}
-
-void
-ldns_update_set_prcount(ldns_pkt *p, uint16_t v)
-{
- ldns_pkt_set_ancount(p, v);
-}
-
-void
-ldns_update_set_upcount(ldns_pkt *p, uint16_t v)
-{
- ldns_pkt_set_nscount(p, v);
-}
-
-void
-ldns_update_set_adcount(ldns_pkt *p, uint16_t v)
-{
- ldns_pkt_set_arcount(p, v);
-}
diff --git a/ldns/util.c b/ldns/util.c
deleted file mode 100644
index 1216134..0000000
--- a/ldns/util.c
+++ /dev/null
@@ -1,782 +0,0 @@
-/*
- * util.c
- *
- * some general memory functions
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2004-2006
- *
- * See the file LICENSE for the license
- */
-
-#include <ldns/config.h>
-
-#include <ldns/rdata.h>
-#include <ldns/rr.h>
-#include <ldns/util.h>
-#include <strings.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <sys/time.h>
-#include <time.h>
-#include <ctype.h>
-
-#ifdef HAVE_SSL
-#include <openssl/rand.h>
-#endif
-
-ldns_lookup_table *
-ldns_lookup_by_name(ldns_lookup_table *table, const char *name)
-{
- while (table->name != NULL) {
- if (strcasecmp(name, table->name) == 0)
- return table;
- table++;
- }
- return NULL;
-}
-
-ldns_lookup_table *
-ldns_lookup_by_id(ldns_lookup_table *table, int id)
-{
- while (table->name != NULL) {
- if (table->id == id)
- return table;
- table++;
- }
- return NULL;
-}
-
-int
-ldns_get_bit(uint8_t bits[], size_t index)
-{
- /*
- * The bits are counted from left to right, so bit #0 is the
- * left most bit.
- */
- return (int) (bits[index / 8] & (1 << (7 - index % 8)));
-}
-
-int
-ldns_get_bit_r(uint8_t bits[], size_t index)
-{
- /*
- * The bits are counted from right to left, so bit #0 is the
- * right most bit.
- */
- return (int) bits[index / 8] & (1 << (index % 8));
-}
-
-void
-ldns_set_bit(uint8_t *byte, int bit_nr, bool value)
-{
- /*
- * The bits are counted from right to left, so bit #0 is the
- * right most bit.
- */
- if (bit_nr >= 0 && bit_nr < 8) {
- if (value) {
- *byte = *byte | (0x01 << bit_nr);
- } else {
- *byte = *byte & ~(0x01 << bit_nr);
- }
- }
-}
-
-int
-ldns_hexdigit_to_int(char ch)
-{
- switch (ch) {
- case '0': return 0;
- case '1': return 1;
- case '2': return 2;
- case '3': return 3;
- case '4': return 4;
- case '5': return 5;
- case '6': return 6;
- case '7': return 7;
- case '8': return 8;
- case '9': return 9;
- case 'a': case 'A': return 10;
- case 'b': case 'B': return 11;
- case 'c': case 'C': return 12;
- case 'd': case 'D': return 13;
- case 'e': case 'E': return 14;
- case 'f': case 'F': return 15;
- default:
- return -1;
- }
-}
-
-char
-ldns_int_to_hexdigit(int i)
-{
- switch (i) {
- case 0: return '0';
- case 1: return '1';
- case 2: return '2';
- case 3: return '3';
- case 4: return '4';
- case 5: return '5';
- case 6: return '6';
- case 7: return '7';
- case 8: return '8';
- case 9: return '9';
- case 10: return 'a';
- case 11: return 'b';
- case 12: return 'c';
- case 13: return 'd';
- case 14: return 'e';
- case 15: return 'f';
- default:
- abort();
- }
-}
-
-int
-ldns_hexstring_to_data(uint8_t *data, const char *str)
-{
- size_t i;
-
- if (!str || !data) {
- return -1;
- }
-
- if (strlen(str) % 2 != 0) {
- return -2;
- }
-
- for (i = 0; i < strlen(str) / 2; i++) {
- data[i] =
- 16 * (uint8_t) ldns_hexdigit_to_int(str[i*2]) +
- (uint8_t) ldns_hexdigit_to_int(str[i*2 + 1]);
- }
-
- return (int) i;
-}
-
-const char *
-ldns_version(void)
-{
- return (char*)LDNS_VERSION;
-}
-
-/* Number of days per month (except for February in leap years). */
-static const int mdays[] = {
- 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
-};
-
-#define LDNS_MOD(x,y) (((x) % (y) < 0) ? ((x) % (y) + (y)) : ((x) % (y)))
-#define LDNS_DIV(x,y) (((x) % (y) < 0) ? ((x) / (y) - 1 ) : ((x) / (y)))
-
-static int
-is_leap_year(int year)
-{
- return LDNS_MOD(year, 4) == 0 && (LDNS_MOD(year, 100) != 0
- || LDNS_MOD(year, 400) == 0);
-}
-
-static int
-leap_days(int y1, int y2)
-{
- --y1;
- --y2;
- return (LDNS_DIV(y2, 4) - LDNS_DIV(y1, 4)) -
- (LDNS_DIV(y2, 100) - LDNS_DIV(y1, 100)) +
- (LDNS_DIV(y2, 400) - LDNS_DIV(y1, 400));
-}
-
-/*
- * Code adapted from Python 2.4.1 sources (Lib/calendar.py).
- */
-time_t
-ldns_mktime_from_utc(const struct tm *tm)
-{
- int year = 1900 + tm->tm_year;
- time_t days = 365 * ((time_t) year - 1970) + leap_days(1970, year);
- time_t hours;
- time_t minutes;
- time_t seconds;
- int i;
-
- for (i = 0; i < tm->tm_mon; ++i) {
- days += mdays[i];
- }
- if (tm->tm_mon > 1 && is_leap_year(year)) {
- ++days;
- }
- days += tm->tm_mday - 1;
-
- hours = days * 24 + tm->tm_hour;
- minutes = hours * 60 + tm->tm_min;
- seconds = minutes * 60 + tm->tm_sec;
-
- return seconds;
-}
-
-time_t
-mktime_from_utc(const struct tm *tm)
-{
- return ldns_mktime_from_utc(tm);
-}
-
-#if SIZEOF_TIME_T <= 4
-
-static void
-ldns_year_and_yday_from_days_since_epoch(int64_t days, struct tm *result)
-{
- int year = 1970;
- int new_year;
-
- while (days < 0 || days >= (int64_t) (is_leap_year(year) ? 366 : 365)) {
- new_year = year + (int) LDNS_DIV(days, 365);
- days -= (new_year - year) * 365;
- days -= leap_days(year, new_year);
- year = new_year;
- }
- result->tm_year = year;
- result->tm_yday = (int) days;
-}
-
-/* Number of days per month in a leap year. */
-static const int leap_year_mdays[] = {
- 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
-};
-
-static void
-ldns_mon_and_mday_from_year_and_yday(struct tm *result)
-{
- int idays = result->tm_yday;
- const int *mon_lengths = is_leap_year(result->tm_year) ?
- leap_year_mdays : mdays;
-
- result->tm_mon = 0;
- while (idays >= mon_lengths[result->tm_mon]) {
- idays -= mon_lengths[result->tm_mon++];
- }
- result->tm_mday = idays + 1;
-}
-
-static void
-ldns_wday_from_year_and_yday(struct tm *result)
-{
- result->tm_wday = 4 /* 1-1-1970 was a thursday */
- + LDNS_MOD((result->tm_year - 1970), 7) * LDNS_MOD(365, 7)
- + leap_days(1970, result->tm_year)
- + result->tm_yday;
- result->tm_wday = LDNS_MOD(result->tm_wday, 7);
- if (result->tm_wday < 0) {
- result->tm_wday += 7;
- }
-}
-
-static struct tm *
-ldns_gmtime64_r(int64_t clock, struct tm *result)
-{
- result->tm_isdst = 0;
- result->tm_sec = (int) LDNS_MOD(clock, 60);
- clock = LDNS_DIV(clock, 60);
- result->tm_min = (int) LDNS_MOD(clock, 60);
- clock = LDNS_DIV(clock, 60);
- result->tm_hour = (int) LDNS_MOD(clock, 24);
- clock = LDNS_DIV(clock, 24);
-
- ldns_year_and_yday_from_days_since_epoch(clock, result);
- ldns_mon_and_mday_from_year_and_yday(result);
- ldns_wday_from_year_and_yday(result);
- result->tm_year -= 1900;
-
- return result;
-}
-
-#endif /* SIZEOF_TIME_T <= 4 */
-
-static int64_t
-ldns_serial_arithmitics_time(int32_t time, time_t now)
-{
- int32_t offset = time - (int32_t) now;
- return (int64_t) now + offset;
-}
-
-
-struct tm *
-ldns_serial_arithmitics_gmtime_r(int32_t time, time_t now, struct tm *result)
-{
-#if SIZEOF_TIME_T <= 4
- int64_t secs_since_epoch = ldns_serial_arithmitics_time(time, now);
- return ldns_gmtime64_r(secs_since_epoch, result);
-#else
- time_t secs_since_epoch = ldns_serial_arithmitics_time(time, now);
- return gmtime_r(&secs_since_epoch, result);
-#endif
-}
-
-/**
- * Init the random source
- * applications should call this if they need entropy data within ldns
- * If openSSL is available, it is automatically seeded from /dev/urandom
- * or /dev/random
- *
- * If you need more entropy, or have no openssl available, this function
- * MUST be called at the start of the program
- *
- * If openssl *is* available, this function just adds more entropy
- **/
-int
-ldns_init_random(FILE *fd, unsigned int size)
-{
- /* if fp is given, seed srandom with data from file
- otherwise use /dev/urandom */
- FILE *rand_f;
- uint8_t *seed;
- size_t read = 0;
- unsigned int seed_i;
- struct timeval tv;
-
- /* we'll need at least sizeof(unsigned int) bytes for the
- standard prng seed */
- if (size < (unsigned int) sizeof(seed_i)){
- size = (unsigned int) sizeof(seed_i);
- }
-
- seed = LDNS_XMALLOC(uint8_t, size);
- if(!seed) {
- return 1;
- }
-
- if (!fd) {
- if ((rand_f = fopen("/dev/urandom", "r")) == NULL) {
- /* no readable /dev/urandom, try /dev/random */
- if ((rand_f = fopen("/dev/random", "r")) == NULL) {
- /* no readable /dev/random either, and no entropy
- source given. we'll have to improvise */
- for (read = 0; read < size; read++) {
- gettimeofday(&tv, NULL);
- seed[read] = (uint8_t) (tv.tv_usec % 256);
- }
- } else {
- read = fread(seed, 1, size, rand_f);
- }
- } else {
- read = fread(seed, 1, size, rand_f);
- }
- } else {
- rand_f = fd;
- read = fread(seed, 1, size, rand_f);
- }
-
- if (read < size) {
- LDNS_FREE(seed);
- if (!fd) fclose(rand_f);
- return 1;
- } else {
-#ifdef HAVE_SSL
- /* Seed the OpenSSL prng (most systems have it seeded
- automatically, in that case this call just adds entropy */
- RAND_seed(seed, (int) size);
-#else
- /* Seed the standard prng, only uses the first
- * unsigned sizeof(unsiged int) bytes found in the entropy pool
- */
- memcpy(&seed_i, seed, sizeof(seed_i));
- srandom(seed_i);
-#endif
- LDNS_FREE(seed);
- }
-
- if (!fd) {
- if (rand_f) fclose(rand_f);
- }
-
- return 0;
-}
-
-/**
- * Get random number.
- *
- */
-uint16_t
-ldns_get_random(void)
-{
- uint16_t rid = 0;
-#ifdef HAVE_SSL
- if (RAND_bytes((unsigned char*)&rid, 2) != 1) {
- rid = (uint16_t) random();
- }
-#else
- rid = (uint16_t) random();
-#endif
- return rid;
-}
-
-/*
- * BubbleBabble code taken from OpenSSH
- * Copyright (c) 2001 Carsten Raskgaard. All rights reserved.
- */
-char *
-ldns_bubblebabble(uint8_t *data, size_t len)
-{
- char vowels[] = { 'a', 'e', 'i', 'o', 'u', 'y' };
- char consonants[] = { 'b', 'c', 'd', 'f', 'g', 'h', 'k', 'l', 'm',
- 'n', 'p', 'r', 's', 't', 'v', 'z', 'x' };
- size_t i, j = 0, rounds, seed = 1;
- char *retval;
-
- rounds = (len / 2) + 1;
- retval = LDNS_XMALLOC(char, rounds * 6);
- if(!retval) return NULL;
- retval[j++] = 'x';
- for (i = 0; i < rounds; i++) {
- size_t idx0, idx1, idx2, idx3, idx4;
- if ((i + 1 < rounds) || (len % 2 != 0)) {
- idx0 = (((((size_t)(data[2 * i])) >> 6) & 3) +
- seed) % 6;
- idx1 = (((size_t)(data[2 * i])) >> 2) & 15;
- idx2 = ((((size_t)(data[2 * i])) & 3) +
- (seed / 6)) % 6;
- retval[j++] = vowels[idx0];
- retval[j++] = consonants[idx1];
- retval[j++] = vowels[idx2];
- if ((i + 1) < rounds) {
- idx3 = (((size_t)(data[(2 * i) + 1])) >> 4) & 15;
- idx4 = (((size_t)(data[(2 * i) + 1]))) & 15;
- retval[j++] = consonants[idx3];
- retval[j++] = '-';
- retval[j++] = consonants[idx4];
- seed = ((seed * 5) +
- ((((size_t)(data[2 * i])) * 7) +
- ((size_t)(data[(2 * i) + 1])))) % 36;
- }
- } else {
- idx0 = seed % 6;
- idx1 = 16;
- idx2 = seed / 6;
- retval[j++] = vowels[idx0];
- retval[j++] = consonants[idx1];
- retval[j++] = vowels[idx2];
- }
- }
- retval[j++] = 'x';
- retval[j++] = '\0';
- return retval;
-}
-
-/*
- * For backwards compatibility, because we have always exported this symbol.
- */
-#ifdef HAVE_B64_NTOP
-int ldns_b64_ntop(const uint8_t* src, size_t srclength,
- char *target, size_t targsize);
-{
- return b64_ntop(src, srclength, target, targsize);
-}
-#endif
-
-/*
- * For backwards compatibility, because we have always exported this symbol.
- */
-#ifdef HAVE_B64_PTON
-int ldns_b64_pton(const char* src, uint8_t *target, size_t targsize)
-{
- return b64_pton(src, target, targsize);
-}
-#endif
-
-
-static int
-ldns_b32_ntop_base(const uint8_t* src, size_t src_sz,
- char* dst, size_t dst_sz,
- bool extended_hex, bool add_padding)
-{
- size_t ret_sz;
- const char* b32 = extended_hex ? "0123456789abcdefghijklmnopqrstuv"
- : "abcdefghijklmnopqrstuvwxyz234567";
-
- size_t c = 0; /* c is used to carry partial base32 character over
- * byte boundaries for sizes with a remainder.
- * (i.e. src_sz % 5 != 0)
- */
-
- ret_sz = add_padding ? ldns_b32_ntop_calculate_size(src_sz)
- : ldns_b32_ntop_calculate_size_no_padding(src_sz);
-
- /* Do we have enough space? */
- if (dst_sz < ret_sz + 1)
- return -1;
-
- /* We know the size; terminate the string */
- dst[ret_sz] = '\0';
-
- /* First process all chunks of five */
- while (src_sz >= 5) {
- /* 00000... ........ ........ ........ ........ */
- dst[0] = b32[(src[0] ) >> 3];
-
- /* .....111 11...... ........ ........ ........ */
- dst[1] = b32[(src[0] & 0x07) << 2 | src[1] >> 6];
-
- /* ........ ..22222. ........ ........ ........ */
- dst[2] = b32[(src[1] & 0x3e) >> 1];
-
- /* ........ .......3 3333.... ........ ........ */
- dst[3] = b32[(src[1] & 0x01) << 4 | src[2] >> 4];
-
- /* ........ ........ ....4444 4....... ........ */
- dst[4] = b32[(src[2] & 0x0f) << 1 | src[3] >> 7];
-
- /* ........ ........ ........ .55555.. ........ */
- dst[5] = b32[(src[3] & 0x7c) >> 2];
-
- /* ........ ........ ........ ......66 666..... */
- dst[6] = b32[(src[3] & 0x03) << 3 | src[4] >> 5];
-
- /* ........ ........ ........ ........ ...77777 */
- dst[7] = b32[(src[4] & 0x1f) ];
-
- src_sz -= 5;
- src += 5;
- dst += 8;
- }
- /* Process what remains */
- switch (src_sz) {
- case 4: /* ........ ........ ........ ......66 666..... */
- dst[6] = b32[(src[3] & 0x03) << 3];
-
- /* ........ ........ ........ .55555.. ........ */
- dst[5] = b32[(src[3] & 0x7c) >> 2];
-
- /* ........ ........ ....4444 4....... ........ */
- c = src[3] >> 7 ;
- /* fallthrough */
- case 3: dst[4] = b32[(src[2] & 0x0f) << 1 | c];
-
- /* ........ .......3 3333.... ........ ........ */
- c = src[2] >> 4 ;
- /* fallthrough */
- case 2: dst[3] = b32[(src[1] & 0x01) << 4 | c];
-
- /* ........ ..22222. ........ ........ ........ */
- dst[2] = b32[(src[1] & 0x3e) >> 1];
-
- /* .....111 11...... ........ ........ ........ */
- c = src[1] >> 6 ;
- /* fallthrough */
- case 1: dst[1] = b32[(src[0] & 0x07) << 2 | c];
-
- /* 00000... ........ ........ ........ ........ */
- dst[0] = b32[ src[0] >> 3];
- }
- /* Add padding */
- if (add_padding) {
- switch (src_sz) {
- case 1: dst[2] = '=';
- dst[3] = '=';
- /* fallthrough */
- case 2: dst[4] = '=';
- /* fallthrough */
- case 3: dst[5] = '=';
- dst[6] = '=';
- /* fallthrough */
- case 4: dst[7] = '=';
- }
- }
- return (int)ret_sz;
-}
-
-int
-ldns_b32_ntop(const uint8_t* src, size_t src_sz, char* dst, size_t dst_sz)
-{
- return ldns_b32_ntop_base(src, src_sz, dst, dst_sz, false, true);
-}
-
-int
-ldns_b32_ntop_extended_hex(const uint8_t* src, size_t src_sz,
- char* dst, size_t dst_sz)
-{
- return ldns_b32_ntop_base(src, src_sz, dst, dst_sz, true, true);
-}
-
-#ifndef HAVE_B32_NTOP
-
-int
-b32_ntop(const uint8_t* src, size_t src_sz, char* dst, size_t dst_sz)
-{
- return ldns_b32_ntop_base(src, src_sz, dst, dst_sz, false, true);
-}
-
-int
-b32_ntop_extended_hex(const uint8_t* src, size_t src_sz,
- char* dst, size_t dst_sz)
-{
- return ldns_b32_ntop_base(src, src_sz, dst, dst_sz, true, true);
-}
-
-#endif /* ! HAVE_B32_NTOP */
-
-static int
-ldns_b32_pton_base(const char* src, size_t src_sz,
- uint8_t* dst, size_t dst_sz,
- bool extended_hex, bool check_padding)
-{
- size_t i = 0;
- char ch = '\0';
- uint8_t buf[8];
- uint8_t* start = dst;
-
- while (src_sz) {
- /* Collect 8 characters in buf (if possible) */
- for (i = 0; i < 8; i++) {
-
- do {
- ch = *src++;
- --src_sz;
-
- } while (isspace((unsigned char)ch) && src_sz > 0);
-
- if (ch == '=' || ch == '\0')
- break;
-
- else if (extended_hex)
-
- if (ch >= '0' && ch <= '9')
- buf[i] = (uint8_t)ch - '0';
- else if (ch >= 'a' && ch <= 'v')
- buf[i] = (uint8_t)ch - 'a' + 10;
- else if (ch >= 'A' && ch <= 'V')
- buf[i] = (uint8_t)ch - 'A' + 10;
- else
- return -1;
-
- else if (ch >= 'a' && ch <= 'z')
- buf[i] = (uint8_t)ch - 'a';
- else if (ch >= 'A' && ch <= 'Z')
- buf[i] = (uint8_t)ch - 'A';
- else if (ch >= '2' && ch <= '7')
- buf[i] = (uint8_t)ch - '2' + 26;
- else
- return -1;
- }
- /* Less that 8 characters. We're done. */
- if (i < 8)
- break;
-
- /* Enough space available at the destination? */
- if (dst_sz < 5)
- return -1;
-
- /* 00000... ........ ........ ........ ........ */
- /* .....111 11...... ........ ........ ........ */
- dst[0] = buf[0] << 3 | buf[1] >> 2;
-
- /* .....111 11...... ........ ........ ........ */
- /* ........ ..22222. ........ ........ ........ */
- /* ........ .......3 3333.... ........ ........ */
- dst[1] = buf[1] << 6 | buf[2] << 1 | buf[3] >> 4;
-
- /* ........ .......3 3333.... ........ ........ */
- /* ........ ........ ....4444 4....... ........ */
- dst[2] = buf[3] << 4 | buf[4] >> 1;
-
- /* ........ ........ ....4444 4....... ........ */
- /* ........ ........ ........ .55555.. ........ */
- /* ........ ........ ........ ......66 666..... */
- dst[3] = buf[4] << 7 | buf[5] << 2 | buf[6] >> 3;
-
- /* ........ ........ ........ ......66 666..... */
- /* ........ ........ ........ ........ ...77777 */
- dst[4] = buf[6] << 5 | buf[7];
-
- dst += 5;
- dst_sz -= 5;
- }
- /* Not ending on a eight byte boundary? */
- if (i > 0 && i < 8) {
-
- /* Enough space available at the destination? */
- if (dst_sz < (i + 1) / 2)
- return -1;
-
- switch (i) {
- case 7: /* ........ ........ ........ ......66 666..... */
- /* ........ ........ ........ .55555.. ........ */
- /* ........ ........ ....4444 4....... ........ */
- dst[3] = buf[4] << 7 | buf[5] << 2 | buf[6] >> 3;
- /* fallthrough */
-
- case 5: /* ........ ........ ....4444 4....... ........ */
- /* ........ .......3 3333.... ........ ........ */
- dst[2] = buf[3] << 4 | buf[4] >> 1;
- /* fallthrough */
-
- case 4: /* ........ .......3 3333.... ........ ........ */
- /* ........ ..22222. ........ ........ ........ */
- /* .....111 11...... ........ ........ ........ */
- dst[1] = buf[1] << 6 | buf[2] << 1 | buf[3] >> 4;
- /* fallthrough */
-
- case 2: /* .....111 11...... ........ ........ ........ */
- /* 00000... ........ ........ ........ ........ */
- dst[0] = buf[0] << 3 | buf[1] >> 2;
-
- break;
-
- default:
- return -1;
- }
- dst += (i + 1) / 2;
-
- if (check_padding) {
- /* Check remaining padding characters */
- if (ch != '=')
- return -1;
-
- /* One down, 8 - i - 1 more to come... */
- for (i = 8 - i - 1; i > 0; i--) {
-
- do {
- if (src_sz == 0)
- return -1;
- ch = *src++;
- src_sz--;
-
- } while (isspace((unsigned char)ch));
-
- if (ch != '=')
- return -1;
- }
- }
- }
- return dst - start;
-}
-
-int
-ldns_b32_pton(const char* src, size_t src_sz, uint8_t* dst, size_t dst_sz)
-{
- return ldns_b32_pton_base(src, src_sz, dst, dst_sz, false, true);
-}
-
-int
-ldns_b32_pton_extended_hex(const char* src, size_t src_sz,
- uint8_t* dst, size_t dst_sz)
-{
- return ldns_b32_pton_base(src, src_sz, dst, dst_sz, true, true);
-}
-
-#ifndef HAVE_B32_PTON
-
-int
-b32_pton(const char* src, size_t src_sz, uint8_t* dst, size_t dst_sz)
-{
- return ldns_b32_pton_base(src, src_sz, dst, dst_sz, false, true);
-}
-
-int
-b32_pton_extended_hex(const char* src, size_t src_sz,
- uint8_t* dst, size_t dst_sz)
-{
- return ldns_b32_pton_base(src, src_sz, dst, dst_sz, true, true);
-}
-
-#endif /* ! HAVE_B32_PTON */
-
diff --git a/ldns/wire2host.c b/ldns/wire2host.c
deleted file mode 100644
index 1473a94..0000000
--- a/ldns/wire2host.c
+++ /dev/null
@@ -1,497 +0,0 @@
-/*
- * wire2host.c
- *
- * conversion routines from the wire to the host
- * format.
- * This will usually just a re-ordering of the
- * data (as we store it in network format)
- *
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2004-2006
- *
- * See the file LICENSE for the license
- */
-
-
-#include <ldns/config.h>
-
-#include <ldns/ldns.h>
-/*#include <ldns/wire2host.h>*/
-
-#include <strings.h>
-#include <limits.h>
-
-
-
-/*
- * Set of macro's to deal with the dns message header as specified
- * in RFC1035 in portable way.
- *
- */
-
-/*
- *
- * 1 1 1 1 1 1
- * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
- * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- * | ID |
- * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- * |QR| Opcode |AA|TC|RD|RA| Z|AD|CD| RCODE |
- * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- * | QDCOUNT |
- * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- * | ANCOUNT |
- * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- * | NSCOUNT |
- * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- * | ARCOUNT |
- * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- *
- */
-
-
-/* allocates memory to *dname! */
-ldns_status
-ldns_wire2dname(ldns_rdf **dname, const uint8_t *wire, size_t max, size_t *pos)
-{
- uint8_t label_size;
- uint16_t pointer_target;
- uint8_t pointer_target_buf[2];
- size_t dname_pos = 0;
- size_t uncompressed_length = 0;
- size_t compression_pos = 0;
- uint8_t tmp_dname[LDNS_MAX_DOMAINLEN];
- unsigned int pointer_count = 0;
-
- if (pos == NULL) {
- return LDNS_STATUS_WIRE_RDATA_ERR;
- }
- if (*pos >= max) {
- return LDNS_STATUS_PACKET_OVERFLOW;
- }
- label_size = wire[*pos];
- while (label_size > 0) {
- /* compression */
- while (label_size >= 192) {
- if (compression_pos == 0) {
- compression_pos = *pos + 2;
- }
-
- pointer_count++;
-
- /* remove first two bits */
- if (*pos + 2 > max) {
- return LDNS_STATUS_PACKET_OVERFLOW;
- }
- pointer_target_buf[0] = wire[*pos] & 63;
- pointer_target_buf[1] = wire[*pos + 1];
- pointer_target = ldns_read_uint16(pointer_target_buf);
-
- if (pointer_target == 0) {
- return LDNS_STATUS_INVALID_POINTER;
- } else if (pointer_target >= max) {
- return LDNS_STATUS_INVALID_POINTER;
- } else if (pointer_count > LDNS_MAX_POINTERS) {
- return LDNS_STATUS_INVALID_POINTER;
- }
- *pos = pointer_target;
- label_size = wire[*pos];
- }
- if(label_size == 0)
- break; /* break from pointer to 0 byte */
- if (label_size > LDNS_MAX_LABELLEN) {
- return LDNS_STATUS_LABEL_OVERFLOW;
- }
- if (*pos + 1 + label_size > max) {
- return LDNS_STATUS_LABEL_OVERFLOW;
- }
-
- /* check space for labelcount itself */
- if (dname_pos + 1 > LDNS_MAX_DOMAINLEN) {
- return LDNS_STATUS_DOMAINNAME_OVERFLOW;
- }
- tmp_dname[dname_pos] = label_size;
- if (label_size > 0) {
- dname_pos++;
- }
- *pos = *pos + 1;
- if (dname_pos + label_size > LDNS_MAX_DOMAINLEN) {
- return LDNS_STATUS_DOMAINNAME_OVERFLOW;
- }
- memcpy(&tmp_dname[dname_pos], &wire[*pos], label_size);
- uncompressed_length += label_size + 1;
- dname_pos += label_size;
- *pos = *pos + label_size;
-
- if (*pos < max) {
- label_size = wire[*pos];
- }
- }
-
- if (compression_pos > 0) {
- *pos = compression_pos;
- } else {
- *pos = *pos + 1;
- }
-
- if (dname_pos >= LDNS_MAX_DOMAINLEN) {
- return LDNS_STATUS_DOMAINNAME_OVERFLOW;
- }
-
- tmp_dname[dname_pos] = 0;
- dname_pos++;
-
- *dname = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_DNAME,
- (uint16_t) dname_pos, tmp_dname);
- if (!*dname) {
- return LDNS_STATUS_MEM_ERR;
- }
- return LDNS_STATUS_OK;
-}
-
-/* maybe make this a goto error so data can be freed or something/ */
-#define LDNS_STATUS_CHECK_RETURN(st) {if (st != LDNS_STATUS_OK) { return st; }}
-#define LDNS_STATUS_CHECK_GOTO(st, label) {if (st != LDNS_STATUS_OK) { /*printf("STG %s:%d: status code %d\n", __FILE__, __LINE__, st);*/ goto label; }}
-
-ldns_status
-ldns_wire2rdf(ldns_rr *rr, const uint8_t *wire, size_t max, size_t *pos)
-{
- size_t end;
- size_t cur_rdf_length;
- uint8_t rdf_index;
- uint8_t *data;
- uint16_t rd_length;
- ldns_rdf *cur_rdf = NULL;
- ldns_rdf_type cur_rdf_type;
- const ldns_rr_descriptor *descriptor;
- ldns_status status;
-
- assert(rr != NULL);
-
- descriptor = ldns_rr_descript(ldns_rr_get_type(rr));
-
- if (*pos + 2 > max) {
- return LDNS_STATUS_PACKET_OVERFLOW;
- }
-
- rd_length = ldns_read_uint16(&wire[*pos]);
- *pos = *pos + 2;
-
- if (*pos + rd_length > max) {
- return LDNS_STATUS_PACKET_OVERFLOW;
- }
-
- end = *pos + (size_t) rd_length;
-
- rdf_index = 0;
- while (*pos < end &&
- rdf_index < ldns_rr_descriptor_maximum(descriptor)) {
-
- cur_rdf_length = 0;
-
- cur_rdf_type = ldns_rr_descriptor_field_type(
- descriptor, rdf_index);
-
- /* handle special cases immediately, set length
- for fixed length rdata and do them below */
- switch (cur_rdf_type) {
- case LDNS_RDF_TYPE_DNAME:
- status = ldns_wire2dname(&cur_rdf, wire, max, pos);
- LDNS_STATUS_CHECK_RETURN(status);
- break;
- case LDNS_RDF_TYPE_CLASS:
- case LDNS_RDF_TYPE_ALG:
- case LDNS_RDF_TYPE_CERTIFICATE_USAGE:
- case LDNS_RDF_TYPE_SELECTOR:
- case LDNS_RDF_TYPE_MATCHING_TYPE:
- case LDNS_RDF_TYPE_INT8:
- cur_rdf_length = LDNS_RDF_SIZE_BYTE;
- break;
- case LDNS_RDF_TYPE_TYPE:
- case LDNS_RDF_TYPE_INT16:
- case LDNS_RDF_TYPE_CERT_ALG:
- cur_rdf_length = LDNS_RDF_SIZE_WORD;
- break;
- case LDNS_RDF_TYPE_TIME:
- case LDNS_RDF_TYPE_INT32:
- case LDNS_RDF_TYPE_A:
- case LDNS_RDF_TYPE_PERIOD:
- cur_rdf_length = LDNS_RDF_SIZE_DOUBLEWORD;
- break;
- case LDNS_RDF_TYPE_TSIGTIME:
- case LDNS_RDF_TYPE_EUI48:
- cur_rdf_length = LDNS_RDF_SIZE_6BYTES;
- break;
- case LDNS_RDF_TYPE_ILNP64:
- case LDNS_RDF_TYPE_EUI64:
- cur_rdf_length = LDNS_RDF_SIZE_8BYTES;
- break;
- case LDNS_RDF_TYPE_AAAA:
- cur_rdf_length = LDNS_RDF_SIZE_16BYTES;
- break;
- case LDNS_RDF_TYPE_STR:
- case LDNS_RDF_TYPE_NSEC3_SALT:
- case LDNS_RDF_TYPE_TAG:
- /* len is stored in first byte
- * it should be in the rdf too, so just
- * copy len+1 from this position
- */
- cur_rdf_length = ((size_t) wire[*pos]) + 1;
- break;
-
- case LDNS_RDF_TYPE_INT16_DATA:
- if (*pos + 2 > end) {
- return LDNS_STATUS_PACKET_OVERFLOW;
- }
- cur_rdf_length =
- (size_t) ldns_read_uint16(&wire[*pos]) + 2;
- break;
- case LDNS_RDF_TYPE_HIP:
- if (*pos + 4 > end) {
- return LDNS_STATUS_PACKET_OVERFLOW;
- }
- cur_rdf_length =
- (size_t) wire[*pos] +
- (size_t) ldns_read_uint16(&wire[*pos + 2]) + 4;
- break;
- case LDNS_RDF_TYPE_B32_EXT:
- case LDNS_RDF_TYPE_NSEC3_NEXT_OWNER:
- /* length is stored in first byte */
- cur_rdf_length = ((size_t) wire[*pos]) + 1;
- break;
- case LDNS_RDF_TYPE_APL:
- case LDNS_RDF_TYPE_B64:
- case LDNS_RDF_TYPE_HEX:
- case LDNS_RDF_TYPE_NSEC:
- case LDNS_RDF_TYPE_UNKNOWN:
- case LDNS_RDF_TYPE_SERVICE:
- case LDNS_RDF_TYPE_LOC:
- case LDNS_RDF_TYPE_WKS:
- case LDNS_RDF_TYPE_NSAP:
- case LDNS_RDF_TYPE_ATMA:
- case LDNS_RDF_TYPE_IPSECKEY:
- case LDNS_RDF_TYPE_LONG_STR:
- case LDNS_RDF_TYPE_AMTRELAY:
- case LDNS_RDF_TYPE_NONE:
- /*
- * Read to end of rr rdata
- */
- cur_rdf_length = end - *pos;
- break;
- }
-
- /* fixed length rdata */
- if (cur_rdf_length > 0) {
- if (cur_rdf_length + *pos > end) {
- return LDNS_STATUS_PACKET_OVERFLOW;
- }
- data = LDNS_XMALLOC(uint8_t, rd_length);
- if (!data) {
- return LDNS_STATUS_MEM_ERR;
- }
- memcpy(data, &wire[*pos], cur_rdf_length);
-
- cur_rdf = ldns_rdf_new(cur_rdf_type,
- cur_rdf_length, data);
- *pos = *pos + cur_rdf_length;
- }
-
- if (cur_rdf) {
- ldns_rr_push_rdf(rr, cur_rdf);
- cur_rdf = NULL;
- }
-
- rdf_index++;
-
- } /* while (rdf_index < ldns_rr_descriptor_maximum(descriptor)) */
-
-
- return LDNS_STATUS_OK;
-}
-
-
-/* TODO:
- can *pos be incremented at READ_INT? or maybe use something like
- RR_CLASS(wire)?
- uhhm Jelte??
-*/
-ldns_status
-ldns_wire2rr(ldns_rr **rr_p, const uint8_t *wire, size_t max,
- size_t *pos, ldns_pkt_section section)
-{
- ldns_rdf *owner = NULL;
- ldns_rr *rr = ldns_rr_new();
- ldns_status status;
-
- status = ldns_wire2dname(&owner, wire, max, pos);
- LDNS_STATUS_CHECK_GOTO(status, status_error);
-
- ldns_rr_set_owner(rr, owner);
-
- if (*pos + 4 > max) {
- status = LDNS_STATUS_PACKET_OVERFLOW;
- goto status_error;
- }
-
- ldns_rr_set_type(rr, ldns_read_uint16(&wire[*pos]));
- *pos = *pos + 2;
-
- ldns_rr_set_class(rr, ldns_read_uint16(&wire[*pos]));
- *pos = *pos + 2;
-
- if (section != LDNS_SECTION_QUESTION) {
- if (*pos + 4 > max) {
- status = LDNS_STATUS_PACKET_OVERFLOW;
- goto status_error;
- }
- ldns_rr_set_ttl(rr, ldns_read_uint32(&wire[*pos]));
-
- *pos = *pos + 4;
- status = ldns_wire2rdf(rr, wire, max, pos);
-
- LDNS_STATUS_CHECK_GOTO(status, status_error);
- ldns_rr_set_question(rr, false);
- } else {
- ldns_rr_set_question(rr, true);
- }
-
- *rr_p = rr;
- return LDNS_STATUS_OK;
-
-status_error:
- ldns_rr_free(rr);
- return status;
-}
-
-static ldns_status
-ldns_wire2pkt_hdr(ldns_pkt *packet, const uint8_t *wire, size_t max, size_t *pos)
-{
- if (*pos + LDNS_HEADER_SIZE > max) {
- return LDNS_STATUS_WIRE_INCOMPLETE_HEADER;
- } else {
- ldns_pkt_set_id(packet, LDNS_ID_WIRE(wire));
- ldns_pkt_set_qr(packet, LDNS_QR_WIRE(wire));
- ldns_pkt_set_opcode(packet, LDNS_OPCODE_WIRE(wire));
- ldns_pkt_set_aa(packet, LDNS_AA_WIRE(wire));
- ldns_pkt_set_tc(packet, LDNS_TC_WIRE(wire));
- ldns_pkt_set_rd(packet, LDNS_RD_WIRE(wire));
- ldns_pkt_set_ra(packet, LDNS_RA_WIRE(wire));
- ldns_pkt_set_ad(packet, LDNS_AD_WIRE(wire));
- ldns_pkt_set_cd(packet, LDNS_CD_WIRE(wire));
- ldns_pkt_set_rcode(packet, LDNS_RCODE_WIRE(wire));
-
- ldns_pkt_set_qdcount(packet, LDNS_QDCOUNT(wire));
- ldns_pkt_set_ancount(packet, LDNS_ANCOUNT(wire));
- ldns_pkt_set_nscount(packet, LDNS_NSCOUNT(wire));
- ldns_pkt_set_arcount(packet, LDNS_ARCOUNT(wire));
-
- *pos += LDNS_HEADER_SIZE;
-
- return LDNS_STATUS_OK;
- }
-}
-
-ldns_status
-ldns_buffer2pkt_wire(ldns_pkt **packet, const ldns_buffer *buffer)
-{
- /* lazy */
- return ldns_wire2pkt(packet, ldns_buffer_begin(buffer),
- ldns_buffer_limit(buffer));
-
-}
-
-ldns_status
-ldns_wire2pkt(ldns_pkt **packet_p, const uint8_t *wire, size_t max)
-{
- size_t pos = 0;
- uint16_t i;
- ldns_rr *rr;
- ldns_pkt *packet = ldns_pkt_new();
- ldns_status status = LDNS_STATUS_OK;
- uint8_t have_edns = 0;
-
- uint8_t data[4];
-
- if (!packet) {
- return LDNS_STATUS_MEM_ERR;
- }
-
- status = ldns_wire2pkt_hdr(packet, wire, max, &pos);
- LDNS_STATUS_CHECK_GOTO(status, status_error);
-
- for (i = 0; i < ldns_pkt_qdcount(packet); i++) {
-
- status = ldns_wire2rr(&rr, wire, max, &pos, LDNS_SECTION_QUESTION);
- if (status == LDNS_STATUS_PACKET_OVERFLOW) {
- status = LDNS_STATUS_WIRE_INCOMPLETE_QUESTION;
- }
- LDNS_STATUS_CHECK_GOTO(status, status_error);
- if (!ldns_rr_list_push_rr(ldns_pkt_question(packet), rr)) {
- ldns_pkt_free(packet);
- return LDNS_STATUS_INTERNAL_ERR;
- }
- }
- for (i = 0; i < ldns_pkt_ancount(packet); i++) {
- status = ldns_wire2rr(&rr, wire, max, &pos, LDNS_SECTION_ANSWER);
- if (status == LDNS_STATUS_PACKET_OVERFLOW) {
- status = LDNS_STATUS_WIRE_INCOMPLETE_ANSWER;
- }
- LDNS_STATUS_CHECK_GOTO(status, status_error);
- if (!ldns_rr_list_push_rr(ldns_pkt_answer(packet), rr)) {
- ldns_pkt_free(packet);
- return LDNS_STATUS_INTERNAL_ERR;
- }
- }
- for (i = 0; i < ldns_pkt_nscount(packet); i++) {
- status = ldns_wire2rr(&rr, wire, max, &pos, LDNS_SECTION_AUTHORITY);
- if (status == LDNS_STATUS_PACKET_OVERFLOW) {
- status = LDNS_STATUS_WIRE_INCOMPLETE_AUTHORITY;
- }
- LDNS_STATUS_CHECK_GOTO(status, status_error);
- if (!ldns_rr_list_push_rr(ldns_pkt_authority(packet), rr)) {
- ldns_pkt_free(packet);
- return LDNS_STATUS_INTERNAL_ERR;
- }
- }
- for (i = 0; i < ldns_pkt_arcount(packet); i++) {
- status = ldns_wire2rr(&rr, wire, max, &pos, LDNS_SECTION_ADDITIONAL);
- if (status == LDNS_STATUS_PACKET_OVERFLOW) {
- status = LDNS_STATUS_WIRE_INCOMPLETE_ADDITIONAL;
- }
- LDNS_STATUS_CHECK_GOTO(status, status_error);
-
- if (ldns_rr_get_type(rr) == LDNS_RR_TYPE_OPT) {
- ldns_pkt_set_edns_udp_size(packet, ldns_rr_get_class(rr));
- ldns_write_uint32(data, ldns_rr_ttl(rr));
- ldns_pkt_set_edns_extended_rcode(packet, data[0]);
- ldns_pkt_set_edns_version(packet, data[1]);
- ldns_pkt_set_edns_z(packet, ldns_read_uint16(&data[2]));
- /* edns might not have rdfs */
- if (ldns_rr_rdf(rr, 0)) {
- ldns_rdf_deep_free(ldns_pkt_edns_data(packet));
- ldns_pkt_set_edns_data(packet, ldns_rdf_clone(ldns_rr_rdf(rr, 0)));
- }
- ldns_rr_free(rr);
- have_edns += 1;
- } else if (ldns_rr_get_type(rr) == LDNS_RR_TYPE_TSIG) {
- ldns_pkt_set_tsig(packet, rr);
- ldns_pkt_set_arcount(packet, ldns_pkt_arcount(packet) - 1);
- } else if (!ldns_rr_list_push_rr(ldns_pkt_additional(packet), rr)) {
- ldns_pkt_free(packet);
- return LDNS_STATUS_INTERNAL_ERR;
- }
- }
- ldns_pkt_set_size(packet, max);
- if(have_edns)
- ldns_pkt_set_arcount(packet, ldns_pkt_arcount(packet)
- - have_edns);
- packet->_edns_present = have_edns;
-
- *packet_p = packet;
- return status;
-
-status_error:
- ldns_pkt_free(packet);
- return status;
-}
diff --git a/ldns/zone.c b/ldns/zone.c
deleted file mode 100644
index e952074..0000000
--- a/ldns/zone.c
+++ /dev/null
@@ -1,317 +0,0 @@
-/* zone.c
- *
- * Functions for ldns_zone structure
- * a Net::DNS like library for C
- *
- * (c) NLnet Labs, 2005-2006
- * See the file LICENSE for the license
- */
-#include <ldns/config.h>
-
-#include <ldns/ldns.h>
-
-#include <strings.h>
-#include <limits.h>
-
-ldns_rr *
-ldns_zone_soa(const ldns_zone *z)
-{
- return z->_soa;
-}
-
-size_t
-ldns_zone_rr_count(const ldns_zone *z)
-{
- return ldns_rr_list_rr_count(z->_rrs);
-}
-
-void
-ldns_zone_set_soa(ldns_zone *z, ldns_rr *soa)
-{
- z->_soa = soa;
-}
-
-ldns_rr_list *
-ldns_zone_rrs(const ldns_zone *z)
-{
- return z->_rrs;
-}
-
-void
-ldns_zone_set_rrs(ldns_zone *z, ldns_rr_list *rrlist)
-{
- z->_rrs = rrlist;
-}
-
-bool
-ldns_zone_push_rr_list(ldns_zone *z, const ldns_rr_list *list)
-{
- return ldns_rr_list_cat(ldns_zone_rrs(z), list);
-}
-
-bool
-ldns_zone_push_rr(ldns_zone *z, ldns_rr *rr)
-{
- return ldns_rr_list_push_rr(ldns_zone_rrs(z), rr);
-}
-
-
-/*
- * Get the list of glue records in a zone
- * XXX: there should be a way for this to return error, other than NULL,
- * since NULL is a valid return
- */
-ldns_rr_list *
-ldns_zone_glue_rr_list(const ldns_zone *z)
-{
- /* when do we find glue? It means we find an IP address
- * (AAAA/A) for a nameserver listed in the zone
- *
- * Alg used here:
- * first find all the zonecuts (NS records)
- * find all the AAAA or A records (can be done it the
- * above loop).
- *
- * Check if the aaaa/a list are subdomains under the
- * NS domains.
- * If yes -> glue, if no -> not glue
- */
-
- ldns_rr_list *zone_cuts;
- ldns_rr_list *addr;
- ldns_rr_list *glue;
- ldns_rr *r, *ns, *a;
- ldns_rdf *dname_a, *ns_owner;
- size_t i,j;
-
- zone_cuts = NULL;
- addr = NULL;
- glue = NULL;
-
- /* we cannot determine glue in a 'zone' without a SOA */
- if (!ldns_zone_soa(z)) {
- return NULL;
- }
-
- zone_cuts = ldns_rr_list_new();
- if (!zone_cuts) goto memory_error;
- addr = ldns_rr_list_new();
- if (!addr) goto memory_error;
- glue = ldns_rr_list_new();
- if (!glue) goto memory_error;
-
- for(i = 0; i < ldns_zone_rr_count(z); i++) {
- r = ldns_rr_list_rr(ldns_zone_rrs(z), i);
- if (ldns_rr_get_type(r) == LDNS_RR_TYPE_A ||
- ldns_rr_get_type(r) == LDNS_RR_TYPE_AAAA) {
- /* possibly glue */
- if (!ldns_rr_list_push_rr(addr, r)) goto memory_error;
- continue;
- }
- if (ldns_rr_get_type(r) == LDNS_RR_TYPE_NS) {
- /* multiple zones will end up here -
- * for now; not a problem
- */
- /* don't add NS records for the current zone itself */
- if (ldns_rdf_compare(ldns_rr_owner(r),
- ldns_rr_owner(ldns_zone_soa(z))) != 0) {
- if (!ldns_rr_list_push_rr(zone_cuts, r)) goto memory_error;
- }
- continue;
- }
- }
-
- /* will sorting make it quicker ?? */
- for(i = 0; i < ldns_rr_list_rr_count(zone_cuts); i++) {
- ns = ldns_rr_list_rr(zone_cuts, i);
- ns_owner = ldns_rr_owner(ns);
-
- for(j = 0; j < ldns_rr_list_rr_count(addr); j++) {
- a = ldns_rr_list_rr(addr, j);
- dname_a = ldns_rr_owner(a);
-
- if (ldns_dname_is_subdomain(dname_a, ns_owner) ||
- ldns_dname_compare(dname_a, ns_owner) == 0) {
- /* GLUE! */
- if (!ldns_rr_list_push_rr(glue, a)) goto memory_error;
- }
- }
- }
-
- ldns_rr_list_free(addr);
- ldns_rr_list_free(zone_cuts);
-
- if (ldns_rr_list_rr_count(glue) == 0) {
- ldns_rr_list_free(glue);
- return NULL;
- } else {
- return glue;
- }
-
-memory_error:
- if (zone_cuts) {
- LDNS_FREE(zone_cuts);
- }
- if (addr) {
- ldns_rr_list_free(addr);
- }
- if (glue) {
- ldns_rr_list_free(glue);
- }
- return NULL;
-}
-
-ldns_zone *
-ldns_zone_new(void)
-{
- ldns_zone *z;
-
- z = LDNS_MALLOC(ldns_zone);
- if (!z) {
- return NULL;
- }
-
- z->_rrs = ldns_rr_list_new();
- if (!z->_rrs) {
- LDNS_FREE(z);
- return NULL;
- }
- ldns_zone_set_soa(z, NULL);
- return z;
-}
-
-/* we regocnize:
- * $TTL, $ORIGIN
- */
-ldns_status
-ldns_zone_new_frm_fp(ldns_zone **z, FILE *fp, const ldns_rdf *origin, uint32_t ttl, ldns_rr_class c)
-{
- return ldns_zone_new_frm_fp_l(z, fp, origin, ttl, c, NULL);
-}
-
-/* XXX: class is never used */
-ldns_status
-ldns_zone_new_frm_fp_l(ldns_zone **z, FILE *fp, const ldns_rdf *origin, uint32_t ttl,
- ldns_rr_class ATTR_UNUSED(c), int *line_nr)
-{
- ldns_zone *newzone;
- ldns_rr *rr;
- uint32_t my_ttl;
- ldns_rdf *my_origin;
- ldns_rdf *my_prev;
- bool soa_seen = false; /* 2 soa are an error */
- ldns_status s;
- ldns_status ret;
-
- /* most cases of error are memory problems */
- ret = LDNS_STATUS_MEM_ERR;
-
- newzone = NULL;
- my_origin = NULL;
- my_prev = NULL;
-
- my_ttl = ttl;
-
- if (origin) {
- my_origin = ldns_rdf_clone(origin);
- if (!my_origin) goto error;
- /* also set the prev */
- my_prev = ldns_rdf_clone(origin);
- if (!my_prev) goto error;
- }
-
- newzone = ldns_zone_new();
- if (!newzone) goto error;
-
- while(!feof(fp)) {
- s = ldns_rr_new_frm_fp_l(&rr, fp, &my_ttl, &my_origin, &my_prev, line_nr);
- switch (s) {
- case LDNS_STATUS_OK:
- if (ldns_rr_get_type(rr) == LDNS_RR_TYPE_SOA) {
- if (soa_seen) {
- /* second SOA
- * just skip, maybe we want to say
- * something??? */
- ldns_rr_free(rr);
- continue;
- }
- soa_seen = true;
- ldns_zone_set_soa(newzone, rr);
- /* set origin to soa if not specified */
- if (!my_origin) {
- my_origin = ldns_rdf_clone(ldns_rr_owner(rr));
- }
- continue;
- }
-
- /* a normal RR - as sofar the DNS is normal */
- if (!ldns_zone_push_rr(newzone, rr)) goto error;
-
- case LDNS_STATUS_SYNTAX_EMPTY:
- /* empty line was seen */
- case LDNS_STATUS_SYNTAX_TTL:
- /* the function set the ttl */
- break;
- case LDNS_STATUS_SYNTAX_ORIGIN:
- /* the function set the origin */
- break;
- case LDNS_STATUS_SYNTAX_INCLUDE:
- ret = LDNS_STATUS_SYNTAX_INCLUDE_ERR_NOTIMPL;
- break;
- default:
- ret = s;
- goto error;
- }
- }
-
- if (my_origin) {
- ldns_rdf_deep_free(my_origin);
- }
- if (my_prev) {
- ldns_rdf_deep_free(my_prev);
- }
- if (z) {
- *z = newzone;
- } else {
- ldns_zone_free(newzone);
- }
-
- return LDNS_STATUS_OK;
-
-error:
- if (my_origin) {
- ldns_rdf_deep_free(my_origin);
- }
- if (my_prev) {
- ldns_rdf_deep_free(my_prev);
- }
- if (newzone) {
- ldns_zone_free(newzone);
- }
- return ret;
-}
-
-void
-ldns_zone_sort(ldns_zone *zone)
-{
- ldns_rr_list *zrr;
- assert(zone != NULL);
-
- zrr = ldns_zone_rrs(zone);
- ldns_rr_list_sort(zrr);
-}
-
-void
-ldns_zone_free(ldns_zone *zone)
-{
- ldns_rr_list_free(zone->_rrs);
- LDNS_FREE(zone);
-}
-
-void
-ldns_zone_deep_free(ldns_zone *zone)
-{
- ldns_rr_free(zone->_soa);
- ldns_rr_list_deep_free(zone->_rrs);
- LDNS_FREE(zone);
-}