[ldns-users] Programmatically creating a zone

W.C.A. Wijngaards wouter at NLnetLabs.nl
Mon Sep 6 14:35:12 UTC 2010


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi Ray, Bryan,

On 09/02/2010 09:43 PM, Ray Bellis wrote:
>   ldns_rr *rr;
>   ldns_rdf *origin = ldns_dname_new_frm_str(origin_str);
>   ldns_rr_new_frm_str(&rr, rr_str, ttl, origin, NULL);
> 
> (where "origin_str" is $ORIGIN and "rr_str" is the RR in the form "@ RTYPE RDATA")

Yes that is easier than the method below.

> Alternatively, it's possible (but tedious) to create it one field at a time:
> 
>   ldns_rr *rr = ldns_rr_new();
>   ldns_rdf *owner = ldns_dname_new_frm_str(owner_str);
>   ldns_rr_set_owner(rr, owner);
>   ldns_rr_set_ttl(rr, ttl);
>   ldns_rr_set_type(rr, rtype);
>   ...
> 
> [not sure how to set the RDATA yet, the _frm_str method is probably easier in many cases, but this method is probably faster if you have the RDATA already in wire format instead of ASCII].

You add the rdata one field at a time, by creating ldns_rdf's for every
RDATA field, and pushing it ldns_rr_push_rdf() onto the rdf.  To create
the rdata for an A record you would do:
ldns_str2rdf_a() or
ldns_rdf_new_frm_str(LDNS_RDF_TYPE_A, "192.0.2.1") or
ldns_rdf_new_frm_data(LDNS_RDF_TYPE_A, 4, pointer to 4-octet ipv4 in
wire format)
For other types you need the correct rdf fields, ldns_rr_descript() can
tell you what rdf fields are needed.  Anyway ldns_rr_new_frm_str handles
that for you.

Best regards,
   Wouter
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/

iEYEARECAAYFAkyE/CAACgkQkDLqNwOhpPhiQACfVuZ0LnReAzNzcNcDRFzdPxrN
FHMAn1H/lFaRAyVCzVFMVQMWZJEACy5b
=6UTF
-----END PGP SIGNATURE-----



More information about the ldns-users mailing list