])
ACX_TYPE_SOCKLEN_T
-AC_CHECK_TYPE(ssize_t, int)
+AC_TYPE_SIZE_T
+AC_TYPE_SSIZE_T
+AC_TYPE_INTPTR_T
AC_CHECK_TYPE(in_addr_t, [], [AC_DEFINE([in_addr_t], [uint32_t], [in_addr_t])], [
#if HAVE_SYS_TYPES_H
# include <sys/types.h>
that is of type NSEC, NSEC3, RRSIG or DNSKEY. DS records are still
printed.
+.TP
+\fB-S\fR \fI[+|0]number\fR
+Set serial number to the given \fInumber\fR, or when preceded by a sign,
+offset the exisiting number with it.
+
.TP
\fB-v\fR
Show the version and exit
ldns_rr *cur_rr;
ldns_rr_type cur_rr_type;
const ldns_output_format *fmt = NULL;
+ ldns_soa_serial_increment_func_t soa_serial_increment_func = NULL;
+ int soa_serial_increment_func_data;
- while ((c = getopt(argc, argv, "bcdhnsvz")) != -1) {
+ while ((c = getopt(argc, argv, "bcdhnsvzS:")) != -1) {
switch(c) {
case 'b':
fmt = ldns_output_format_bubblebabble;
printf("\t-h show this text\n");
printf("\t-n do not print the SOA record\n");
printf("\t-s strip DNSSEC data from the zone\n");
+ printf("\t-S [+|-]<number>\n"
+ "\t\tSet serial number to <number> or,"
+ " when preceded by a sign,\n"
+ "\t\toffset the exisiting number with "
+ "<number>.\n");
+
printf("\t-v shows the version and exits\n");
printf("\t-z sort the zone (implies -c).\n");
printf("\nif no file is given standard input is read\n");
canonicalize = true;
sort = true;
break;
+ case 'S':
+ strip = true;
+ if (*optarg == '+' || *optarg == '-') {
+ soa_serial_increment_func_data =
+ atoi(optarg);
+ soa_serial_increment_func =
+ ldns_soa_serial_increment_by;
+ } else if (! strtok(optarg, "0123456789")) {
+ soa_serial_increment_func_data =
+ atoi(optarg);
+ soa_serial_increment_func =
+ ldns_soa_serial_identity;
+ } else {
+ fprintf(stderr, "-S expects a number "
+ "optionally preceded by a "
+ "+ or - sign to indicate an "
+ "offset.\n");
+ exit(EXIT_FAILURE);
+ }
+ break;
}
}
}
if (print_soa && ldns_zone_soa(z)) {
+ if (soa_serial_increment_func) {
+ ldns_rr_soa_increment_func_int(
+ ldns_zone_soa(z)
+ , soa_serial_increment_func
+ , soa_serial_increment_func_data
+ );
+ }
ldns_rr_print_fmt(stdout, fmt, ldns_zone_soa(z));
}
ldns_rr_list_print_fmt(stdout, fmt, ldns_zone_rrs(z));
*/
size_t ldns_rr_dnskey_key_size(const ldns_rr *key);
+typedef uint32_t (*ldns_soa_serial_increment_func_t)(uint32_t, void*);
+
+uint32_t ldns_soa_serial_identity(uint32_t _, void *data);
+uint32_t ldns_soa_serial_increment(uint32_t s, void *_);
+uint32_t ldns_soa_serial_increment_by(uint32_t s, void *data);
+
+void ldns_rr_soa_increment(
+ ldns_rr *soa);
+
+void ldns_rr_soa_increment_func(
+ ldns_rr *soa, ldns_soa_serial_increment_func_t f);
+
+void ldns_rr_soa_increment_func_data(
+ ldns_rr *soa, ldns_soa_serial_increment_func_t f, void *data);
+
+void ldns_rr_soa_increment_func_int(
+ ldns_rr *soa, ldns_soa_serial_increment_func_t f, int data);
+
#ifdef __cplusplus
}
#endif
ldns_rr_set_rdf
ldns_rr_set_ttl
ldns_rr_set_type
+ldns_rr_soa_increment
+ldns_rr_soa_increment_func
+ldns_rr_soa_increment_func_data
+ldns_rr_soa_increment_func_int
ldns_rrsig2buffer_wire
ldns_rr_ttl
ldns_rr_type2buffer_str
ldns_sign_public_evp
ldns_sign_public_rsamd5
ldns_sign_public_rsasha1
+ldns_soa_serial_identity
+ldns_soa_serial_increment
+ldns_soa_serial_increment_by
ldns_sockaddr_storage2rdf
ldns_str2period
ldns_str2rdf_a
ldns_rdf2native_int8(ldns_rr_dnskey_algorithm(key))
);
}
+
+uint32_t ldns_soa_serial_identity(uint32_t ATTR_UNUSED(_), void *data)
+{
+ return (intptr_t)data; /* yes, data is int not pointer! */
+}
+
+uint32_t ldns_soa_serial_increment(uint32_t s, void *ATTR_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;
+}
+
+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);
+}
+