c# : winform : pdf viewer : Adding page to pdf software SDK cloud windows wpf web page class Ron%20Aitchison%20-%20Pro%20DNS%20and%20BIND%2010%20-%20201155-part1380

CHAPTER 13 ■ ZONE FILE REFERENCE 
551
described are either privately defined (NIMLOC, EID, and SINK), formally obsolete (GPOS, MD, MF, and 
NSAP-PTR), or not useful in a production environment (NULL, which is experimental and can’t be 
defined in a master zone file). Definitive RFC references are provided for all RRs. 
The RRs supported by both the current version of BIND (9.7.2-P2) and Windows (Windows 2008 
Server R2) are presented in Table 13–1. 
The current IETF policy regarding IPv6 addresses, forward mapping using AAAA RR, and reverse-
mapping using PTR RRs, is documented, and the experimental A6 RR is shown with examples. The 
NAPTR RR is illustrated with some examples. You are reminded that this brutally complicated RR only 
makes sense when read in conjunction with the application that will make use of the NAPTR RR. 
The descriptions of the RRs concerned with DNS security (DS, DNSKEY, KEY, NSEC, and RRSIG) 
should be read in conjunction with Chapters 10 and 11 as appropriate. A number of the RRs described 
are rarely used; you are cautioned that those defined as experimental may be withdrawn or changed at 
files and queried by clients. Using this procedure, it is possible for users to extend DNS capabilities using 
standard software. BIND 9.3+ supports the user-defined RR capability. 
Adding page to pdf - insert pages into PDF file in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Guide C# Users to Insert (Empty) PDF Page or Pages from a Supported File Format
add page number to pdf document; add pages to pdf in preview
Adding page to pdf - VB.NET PDF Page Insert Library: insert pages into PDF file in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Easy to Use VB.NET APIs to Add a New Blank Page to PDF Document
add page number to pdf reader; add and remove pages from a pdf
P A R T   IV 
■ ■ ■ 
Programming 
VB.NET PDF Library SDK to view, edit, convert, process PDF file
Perform annotation capabilities to mark, draw, and visualize objects on PDF document page. Capable of adding PDF file navigation features to your VB.NET program
add page number to pdf file; add page numbers to pdf using preview
C# PDF insert image Library: insert images into PDF in C#.net, ASP
image adding library control for PDF document, you can easily and quickly add an image, picture or logo to any position of specified PDF document file page.
add page number to pdf; adding page numbers to pdf files
C H A P T E R   14 
■ ■ ■ 
555
BIND APIs and 
Resolver Libraries 
This chapter is primarily intended for programmers and designers who wish to modify the basic 
functionality of BIND, need to interface to the libraries available with BIND, or need to interface to the 
standard DNS-related POSIX calls supported by libc. Reasonable knowledge of the C language is 
required to make sense of most of the information in this chapter. 
DNS Libraries and APIs 
A confusing number of library functions are available with BIND. They fall into three categories: 
• Standard BIND 9 libraries, including from BIND 9.7 a library called libirs which 
may now be separately built and exported. It uses /etc/resolv.conf but optionally 
adds a new file (dns.conf) to support addition functionality. This library includes 
DNSSEC-aware versions of the POSIX standard getaddrinfo(), getnameinfo(), 
gai_strerror() and freeaddrinfo() and is intended to support third party 
developers. See the “BIND 9 DNS Libraries” section later in this chapter.  
• The historic so-called res_ library set has been available for some time as 
libbind9, but it has been updated with newer BIND 9 and DNSSEC features. These 
library functions are controlled by resolv.conf (normally /etc/resolv.conf). This 
library is primarily concerned with providing programmatic access to the 
construction of DNS queries. This library is not described further in this edition, 
having been superseded by other libraries. 
• An lwres library set is new with BIND 9. This library is not widely implemented 
and is not described further in this book. 
In addition to the above BIND and standard libraries, the NSD project (open source Authoritative 
only name server) has also released a DNS library (ldns) that provides many features of interest to the 
DNS programmer; it may be obtained from www.nlnetlabs.nl/projects/ldns/. 
Although all the samples and most of the code descriptions use C, there are several  language 
author’s website for this book at www.netwidget.net/books/apress/dns. 
VB.NET PDF File & Page Process Library SDK for vb.net, ASP.NET
page modifying page, you will find detailed guidance on creating, loading, merge and splitting PDF pages and Files, adding a page into PDF document, deleting
add page to a pdf; adding page numbers to pdf in
C# PDF File & Page Process Library SDK for C#.net, ASP.NET, MVC
Provides you with examples for adding an (empty) page to a PDF and adding empty pages to a PDF from a supported file format, with customized options.
add page number pdf; add a page to pdf file
CHAPTER 14  BIND APIS AND RESOLVER LIBRARIES 
556 
POSIX Library 
The POSIX DNS calls are defined in IEEE 1003.1 - 2004 - POSIX.1. However, because IETF documents are 
freely available (unlike the IEEE documents), they are also described in RFC 3493, which has a status of 
INFORMATIONAL and defers to the IEEE specification as being definitive. The available POSIX DNS 
functions are listed with brief notes about their status, as follows: 
• gethostbyname(): Name to Address translation. IPv4 only. Not thread safe. 
• gethostbyaddr(): Number to Name (reverse-map) translation. IPv4 only. Not 
thread safe. 
• getaddrinfo(): Name to Address translation. IPv4 and IPv6. Thread safe. 
• freeaddrinfo(): Free resources used by getaddrinfo(). Thread safe. 
• getnameinfo(): Address to Name translation. IPv4 and IPv6. Thread safe. 
The functions gethostbyname2() and gethostbyaddr2() were tactical updates to enable a basic IPv6 
service and are now deprecated in favor of getnameinfo() and getaddrinfo(). The functions 
gethostbyname_r() and gethostbyaddr_r() were, again, tactical implementations to provide thread safe 
calls and were never defined formally. The functions getipnodebyname() and getipnodebyaddr() were 
defined in RFC 2553 and are deprecated in favor of getnameinfo() and getaddrinfo(), respectively. 
getnameinfo() and getaddrinfo() should be used for all new implementations (IPv4 or IPv6) using the 
interface described by RFC 3493. BIND 9 supplied non-standard but entirely compatible DNSSEC-aware 
versions of getaddrinfo() and getnameinfo() that are further described below in the “DNSSEC Aware 
getaddrinfo() and getnameinfo()” section. 
BIND 9 DNS Libraries 
The DNS user libraries (consisting of libdns, libisc, and libisccfg) are built by standard BIND builds and 
packages (Ubuntu and FreeBSD), but a new library, libirs, may be separately built (exported) to make it 
accessible to applications (see “Building BIND 9 Libraries”). The libraries provide four feature sets: 
• POSIX enhancements: DNSSEC-aware replacements are provided for the 
getaddrinfo(), getnameinfo(), gai_strerror(), and freeaddrinfo() standard C 
library calls (part of the IRS system below). Provided by libirs. 
• Information Retrieval System (IRS): Provides functions to access to the various 
configuration files (resolv.conf and dns.conf) used by the library. Provided by 
libirs. 
• DNS client: Provides basic DNS name resolution access including programmatic 
access to DDNS. Provided by libdns, libisc and libisccfg. 
• Event Framework: Not described further in this book. 
The functionality of this set of library calls is partly controlled by resolv.conf (normally 
/etc/resolv.conf) commands, whose format and use is described later in this section; some 
functionality (getaddrinfo() and getnameinfo() in libirs) is supported by a new configuration file 
called dns.conf. The dns.conf file is only applicable when the BIND 9 library is used and plays no role in 
normal BIND (named) operation.  
C# PDF insert text Library: insert text into PDF content in C#.net
C#.NET PDF SDK - Insert Text to PDF Document in C#.NET. Providing C# Demo Code for Adding and Inserting Text to PDF File Page with .NET PDF Library.
add page numbers to pdf document; add page to pdf reader
VB.NET PDF insert text library: insert text into PDF content in vb
VB.NET PDF - Insert Text to PDF Document in VB.NET. Providing Demo Code for Adding and Inserting Text to PDF File Page in VB.NET Program.
add page to pdf without acrobat; add page numbers to pdf
CHAPTER 14 ■ BIND APIS AND RESOLVER LIBRARIES 
557
Building BIND 9 Libraries 
Most standard packages, such as FreeBSD and Ubuntu server, will build and install the various libraries 
including libdns, libisc, libisccfg, libbind9, and liblwres normally in /usr/lib and with headers in 
/usr/include. These are installed as static libraries (with suffix .a, such as libdns.a) in all cases and as 
both static and dynamic (or shared) libraries (with suffix.so, such as libdns.so) when the configure 
option --with-libtool is used (Ubuntu). However, to use any of the IRS library functions, including the 
DNSSEC aware getaddrinfo() and getnameinfo() involves building bind from source (see the –“Building 
BIND from Source” section in Chapter 6) using the --enable-export, --with-export-libdir, and --
with-export-includedir configure options, which are not included in standard Ubuntu or FreeBSD 
packages This build will, by default, replace the current version of named and its associated tools. If only 
the libraries are desired, this can be done by going to the directory lib/export and issuing the make 
install from there to create a partial install.  
Caution Use of a partial library-only installation is not the official BIND policy. It is potentially dangerous; if the 
library versions being installed using this procedure are different from those currently installed for BIND, 
incompatibilities can arise. If this procedure is used, it’s recommended that non-standard directories be used for 
both libraries and header files, as shown in the configure options below.  
The following sequence shows building from a source tarball on an Ubuntu Server 10.04 system 
using its normal build configure options with the addition of those to create the export libraries in bold. 
If BIND is already installed, issuing named -V will list all the configure options used; unless there’s a good 
reason, they should replace or be added to the configure line below, especially if a full install is being 
attempted. FreeBSD users should consult the –“Building BIND from Source” section in Chapter 6 for the 
equivalent set of standard configure options, but should also note that either a full or partial install will 
require GNU make, thus the command gmake install must be used. 
# cd /bind/source/dir 
# ./configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --
--enable-
'CPPFLAGS=' 
# make install // install full named release 
#cd lib/export 
# make install // install libraries and headers only 
This code will install the libraries as /usr/lib/test/libdns.a (
and
.so), libirs.a (
and 
.so), 
libisc.a (and .so) and libisccfg.a (and .so), and the header files used when invoking the library in 
/usr/include/test with subdirectories dns, dst, irs, isc, isccfg. These are non-standard locations on 
most systems and will require -I /usr/include/test (for headers) and -L/usr/lib/test when compiling 
and linking against the library with gcc. The standard locations on most systems are /usr/lib and 
/usr/include, respectively. A number of sample files are included to illustrate the use of the various 
library calls and are worth the time investment in perusing the modest but very useful source code if the 
library functions are to be used. There are few things in life more rewarding than source code inspection 
if you are of that disposition. The samples are only compiled when make or make install is executed 
either from lib/export or from lib/export/samples (or gmake or gmake install for FreeBSD). The 
C# PDF Annotate Library: Draw, edit PDF annotation, markups in C#.
text comments on PDF page using C# demo code in Visual Stuodio .NET class. C#.NET: Add Text Box to PDF Document. Provide users with examples for adding text box
adding page numbers to a pdf document; add page number to pdf online
C# PDF Library SDK to view, edit, convert, process PDF file for C#
Capable of adding PDF file navigation features to your C# program. Perform annotation capabilities to mark, draw, and visualize objects on PDF document page.
add pages to pdf reader; add page pdf
CHAPTER 14  BIND APIS AND RESOLVER LIBRARIES 
558 
sample applications and source code are located in /bind/source/dir/lib/export/samples. The most 
useful sample applications are described in Table 14–1 
Table 14–1. BIND Library Sample Applications 
Name 
Parameters 
Notes 
sample-gai 
fqdn-name 
sample-gai www.example.com. 
Will attempt a forward map (getaddrinfo) using IPv4, 
IPv6, and Unspecified sockets followed by a socket-
>name lookup (getnameinfo) for the supplied fqdn-name. 
DNSSEC aware if dns.conf configured. 
sample-request [-t type] server hostname sample-request NS ns1.example.com example.com 
Send a request for hostname of RR type (A is default) to 
server (IPv4) and prints the response. DNSSEC aware if 
dns.conf configured. 
Additional samples include sample-update (dynamic updates using the libdns/libisc/libirs library 
functions), nsprobe (checks for RFC 4074 compliance using libdns/libisc/libirs library functions), sample 
(a simple stub-resolver using libdns/libisc/libirs library functions), each of which may be DNSSEC aware 
if dns.conf is configured. sample-async is an asynchronous stub-resolver (using libdns/libisc) that is not 
DNSSEC-aware. In all case, running the sample with the -h argument will list the available options. 
DNSSEC Aware getaddrinfo() and getnameinfo() 
The library libirs.a or libirs.so provides, in addition to other functions noted below, DNSSEC-
aware versions of the POSIX standard getaddrinfo() and getnameinfo(), freeaddrinfo() and 
gai_strerror() calls. The calling interface remains identical to that defined for the standard (more 
information may be obtained using man getaddrinfo and man getnameinfo or from RFC 3493). These 
functions will look for the file dns.conf in the location defined by --sysconfdir in the configure options 
(/etc/bind/dns.conf for Ubuntu or /etc/namedb/dns.conf for BSD). This file has a format equivalent to 
the named.conf; it currently only takes a trusted-keys clause containing an appropriate trust-anchor for 
validation (see Chapter 12 for the “trusted-keys Clause” section). If this file is present and contains a 
trusted-anchor with appropriate scope, DNSSEC validation will occur. If the DNS response validates, the 
function will return success as normal (0). If the functions fail, a text version of the error-code may be 
obtained using the function gai_strerror(error-code) as normal. Specifically, if the functions fail 
DNSSEC validation of the response (assuming the zones have been signed; see Chapter 11), the error 
code EAI_INSECUREDATA (15) (corresponding to a bogus DNSSEC state) will be returned. If the functions 
fail to find a dns.conf file or it does not contain a trusted-keys clause with the appropriate scope, the 
function will behave exactly like the POSIX standard; that is, no DNSSEC validation will take place. These 
functions could be used in, for example, building a validating stub-resolver.  
Note The enhanced functions do not provide status information on whether the zone was signed, insecure, or 
indeterminate; in essence, they provide DNSSEC validation with minimal changes to the current interface. 
CHAPTER 14 ■ BIND APIS AND RESOLVER LIBRARIES 
559
DNSSEC POSIX enhanced Calls 
The following calls are defined in the irs/netdb.h header, provided in libirs, and are unchanged from 
the POSIX standard calls. 
int  getaddrinfo(const char *hostname, const char *service, 
const struct addrinfo *hints, struct addrinfo **results) 
The example above is used to obtain forward mapping information; thus, given a hostname, it will 
return the associated address(es) in results: 
size_t hostnamelen, char *service, size_t servicelen, int flags) 
That is used to obtain reverse mapping information, thus given a socket address structure sa 
(normally an addrinfo structure obtained from getaddrinfo()), it will return a hostname of length 
hostnamelen and optionally a service name of length servicelen.   
void   freeaddrinfo(struct addrinfo *results) 
This function is used to free the dynamically allocated addrinfo structure created when using 
getaddrinfo(). 
const char *  gai_strerror(int) 
This is used to return a textual representation of any error code returned by either getaddrinfo() or 
getnameinfo(). The function provides the extended error code EAI_INSECUREDATA (see header in 
irs/netdb.h). 
The structure addrinfo, used in getaddrinfo(), has the following format: 
struct addrinfo { 
AI_NUMERICHOST */ 
int                        ai_family;             /* PF_xxx */ 
int                        ai_socktype;         /* SOCK_xxx */ 
socklen_t             ai_addrlen;           /* length of ai_addr */ 
char*                    ai_canonname;     /* canonical name for hostname */ 
struct sockaddr  *ai_addr;                /* binary address */ 
}; 
The following code snippet illustrates the use of the functions: 
/* sample use of getaddrinfo() call to obtain A/AAAA RRs 
* and either: 
* 1. prints the RR if successful 
* 2. prints an error message if not 
* Notes: 
* No hints addrinfo is used which means it will default to AF_UNSPEC  
*  (Tries to find IPv4 and IPv6 addresses) 
* function returns GOOD or BAD 
*/ 
#include <sys/types.h>  /* standard location */ 
#include <sys/socket.h> /* standard location */ 
CHAPTER 14  BIND APIS AND RESOLVER LIBRARIES 
560 
#include <irs/netdb.h>  /* if irs headers in standard location else use 
#include "irs/netdb.h" and use -I /usr/include/test  
in compile/linker if using the sample test locations*/ 
#include <netinet/in.h> /* for sockaddr_in and sockaddr_in6 */ 
#include <arpa/inet.h>  /* for inet_ntop */ 
#include <stdio.h>      /* for printf */ 
/* other includes as necessary */ 
#define GOOD 0          /* good return code */ 
#define BAD  1          /* fail return code */ 
int do_getaddrinfo(char *hostname) 
struct addrinfo *results=NULL; 
struct addrinfo *loop=NULL;      /* addrinfo structure pointers - defined in netdb.h */ 
int      code;                   /* getaddrinfo return code */ 
struct sockaddr_in  *sa4;        /* to manipulate IPv4 addresses */ 
struct sockaddr_in6 *sa6;        /* to manipulate IPv6 addresses */ 
char                 v6[42];     /* for max IPv6 address */ 
if(code != 0) 
/* failed */ 
return BAD; 
}else{ 
for (loop = results; loop != NULL; loop = loop->ai_next) 
switch(loop->ai_family) 
case AF_INET: /* IPv4 type */ 
sa4 = (struct sockaddr_in *)loop->ai_addr; /* cast to IPv4 socket type */ 
printf("IPv4 name=%s A=%s", hostname, inet_ntoa(sa4->sin_addr) ); 
break; 
case AF_INET6: /* IPv6 type*/ 
sa6 = (struct sockaddr_in6 *)loop->ai_addr; /* cast to IPv6 socket type */ 
printf("IPv4 name=%s AAAA=%s", hostname,  
inet_ntop(loop->ai_family, &sa6->sin6_addr, v6,42) ); 
break; 
default: 
printf("Unknown family %d", loop->ai_family); 
break; 
freeaddrinfo(results); 
return GOOD; 
getaddrinfo() uses the default order of searching (defined in /etc/nsswitch.conf) so local files such 
as hosts will always be searched before using DNS. 
CHAPTER 14 ■ BIND APIS AND RESOLVER LIBRARIES 
561
Configuring for DNSSEC Validation 
In order to enable the enhanced functions to validate DNSSEC responses, a file called dns.conf must be 
created in the directory defined by --sysconfdir (in the example build, this is /etc/bind). This file takes a 
standard trusted-keys
anchor used was the root key (obtained using the process defined in the “Obtaining the Root Key” 
section in Chapter 11) and thus the format of /etc/bind/dns.conf in this case was: 
trusted-keys{ 
"." 257 3 8 "AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF 
FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX 
bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD 
X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz 
W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS 
Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0="; 
}; 
Additional trust-anchors may be added as required to this trusted-keys clause. The POSIX 
functions require the use of a resolver (they are stub-resolver functions and do not provide recursive 
query support) and the host's resolv.conf file (normally /etc/resolv.conf) will be used to obtain the 
resolver address. With the dns.conf file present, the following command will provide DNSSEC validated 
results, assuming the target zone is signed: 
cd /bind/source/dir/lib/export/samples 
sample-gai www.example.com 
www.example.com (www.example.com/192.168.2.1)=www.example.com:0 
getaddrinfo failed for www.example.com, family=10:8 
www.example.com (www.example.com/192.168.2.1)=www.example.com:0 
sample-gai cycles through getaddrinfo() using a socket type of AF_INET (only IPv4), then AF_NET6 
(only IPv6), and finally AF_UNSPEC (any or both IPv4 or IPv6). In the above case, both AF_INET and 
AF_UNSPEC provided valid results. AF_NET6 failed with error code=8, EAI_NONAME, indicating that an 
IPv6 address (AAAA RR) does not exist for www.example.com in the zone file, which was correct in the test 
case shown. 
Note Finding publically available DNSSEC signed zones can be a tad difficult. A useful trick is to look at the TLD 
zones that are signed and then use www.nic.tld or www.register.tld. You can confirm that they are part of a signed 
zone with 
dig +dnssec www.nic.tld
or 
dig +dnssec www.register.tld
, in which case the RRSIG RRs will be 
supplied. What if you want to find all of the signed TLDs? Use 
dig @xfr.lax.dns.icann.org . axfr > root-
zone-file
followed by 
grep DS root-zone-file
. Every TLD name that publishes a DS RR in this file is signed. 
Including Enhanced POSIX Functions in Applications 
The enhanced POSIX functions are designed to replace the standard functions supplied in libc (C 
standard Library). This is a non-trivial process, especially when using shared libraries.  
The samples are built by the make files supplied with BIND. If --with-libtool is not used during 
configure, only a static library is produced and all required functions are included into the application 
samples. The sample applications may then be moved to any suitable directory as required. However, if 
CHAPTER 14  BIND APIS AND RESOLVER LIBRARIES 
562 
--with-libtool is used, a shared library is built and libtool provides appropriate bindings (a script 
wrapper) to ensure that the POSIX functions are picked up from the required library within the directory 
system in which BIND was built. The sample applications, in this case, can’t be moved to any other 
location. 
To compile and link an application statically (this assumes the availability of libraries and headers in 
/usr/lib/test/ and /usr/include/test), use the following commands to pick up the required libraries 
and headers: 
gcc testapp.c -c -I /usr/include/test -o testapp.o 
This only compiles the application (-c); other flags and include directories should be used as 
required. The resulting object file is testapp.o and it’s used as input to the link operation: 
gcc testapp.o /usr/lib/test/libirs.a /usr/lib/test/libdns.a /usr/lib/test/libisc.a 
/usr/lib/test/libisccfg.a 
The above command, in which the testapp.o module must come first, directly links the static 
libraries into the final executable (testapp by default) and thus ensures the required functions (the 
POSIX replacements especially) are included from the BIND libraries. Only the BIND libraries containing 
functions used by the application are required (see Table 15-1). Any functions required from other 
libraries will be statically included from standard library locations. Other linker flags should be included 
as required. Because it is statically built, the resulting application will be of significant size and will 
obviously need to be rebuilt every time a new static library is introduced. 
When using dynamic or shared (.so) libraries, the compile procedure is the same, but the link 
process is significantly different, as you can see here: 
gcc testapp.o -L/usr/lib/test --rpath -Wl,/usr/lib/test 
The resulting executable (testapp by default) should be examined using ldd /path/to/testapp 
which will display the various libraries and their paths used by the application. An example output line 
from the ldd command is shown for illustration: 
libirs.so.60 => /usr/lib/test/libirs.so.60 
In this case, this shows that libirs.so.60 (60 is just the version number associated with this library) 
is being picked up from the install location. The various functions that are unique to BIND can only, 
obviously, be obtained from the BIND libraries, so few problems should arise. However, in the case of 
getaddrinfo(), getnameinfo(), gai_strerror(), and freeaddrinfo(), these functions will be sourced as 
standard from libc if the previous procedure was not used.  It is particularly important to check that 
libirs.so is both referenced and uses the expected path since this library contains the replacement 
functions (as well as others; see Table 14–2). In the event that the above process doesn’t work, you are of 
a profoundly distrusting nature, or you want to vary the library from which the calls are sourced at run-
time, environmental variables may be set before running the application, like so: 
export LD_PRELOAD=/path/to/BIND/library/libirs.so.60 
export LD_LIBRARY_PATH=/path/to/BIND/library:$LD_LIBRARY_PATH 
sample-gai www.example.com. 
This assumes a BASH family shell; for those of a c-shell preference, use setenv instead of export. 
This has a similar effect to the linker options by forcing the run-time loader responsible for dynamically 
linking the libraries to look first in libirs.so.60 before looking at libc, effectively overriding its normal 
selection procedure. 
Documents you may be interested
Documents you may be interested