diff options
author | ume <ume@FreeBSD.org> | 2006-03-30 20:15:53 +0000 |
---|---|---|
committer | ume <ume@FreeBSD.org> | 2006-03-30 20:15:53 +0000 |
commit | 3a893e11a7a11a71f7c387d15943b98cb1d40797 (patch) | |
tree | 301a2d20516db1ef585fb63207881444f480edae /lib/libc/net/res_update.c | |
parent | 19c7a1894198c99124d609f45f5c4fb3e5262143 (diff) | |
download | FreeBSD-src-3a893e11a7a11a71f7c387d15943b98cb1d40797.zip FreeBSD-src-3a893e11a7a11a71f7c387d15943b98cb1d40797.tar.gz |
Expose res_update and friends again. At least, ports/mail/spamilter
uses them.
Now, we have res_nupdate and res_nmkupdate as well, but they are
still based on our old resolver for binary backward compatibility.
So, they don't provide new features such as TSIG support.
Reported by: pointyhat via kris
Diffstat (limited to 'lib/libc/net/res_update.c')
-rw-r--r-- | lib/libc/net/res_update.c | 44 |
1 files changed, 22 insertions, 22 deletions
diff --git a/lib/libc/net/res_update.c b/lib/libc/net/res_update.c index d78ca70..46f1efa 100644 --- a/lib/libc/net/res_update.c +++ b/lib/libc/net/res_update.c @@ -32,12 +32,11 @@ __FBSDID("$FreeBSD$"); #include <limits.h> #include <netdb.h> #include <resolv.h> +#include <res_update.h> #include <stdio.h> #include <stdlib.h> #include <string.h> -#include "res_update.h" - /* * Separate a linked list of records into groups so that all records * in a group will belong to a single zone on the nameserver. @@ -71,7 +70,7 @@ struct zonegrp { int -res_update(ns_updrec *rrecp_in) { +res_nupdate(res_state statp, ns_updrec *rrecp_in, ns_tsig_key *key) { ns_updrec *rrecp, *tmprrecp; u_char buf[PACKETSZ], answer[PACKETSZ], packet[2*PACKETSZ]; char name[MAXDNAME], zname[MAXDNAME], primary[MAXDNAME], @@ -86,8 +85,9 @@ res_update(ns_updrec *rrecp_in) { u_int16_t dlen, class, qclass, type, qtype; u_int32_t ttl; - if ((_res.options & RES_INIT) == 0 && res_init() == -1) { - RES_SET_H_ERRNO(&_res, NETDB_INTERNAL); + if (key != NULL) { + /* TSIG is not supported. */ + RES_SET_H_ERRNO(statp, NO_RECOVERY); return (-1); } @@ -150,19 +150,19 @@ res_update(ns_updrec *rrecp_in) { } if (done) break; - n = res_mkquery(QUERY, dname, qclass, qtype, NULL, + n = res_nmkquery(statp, QUERY, dname, qclass, qtype, NULL, 0, NULL, buf, sizeof buf); if (n <= 0) { - fprintf(stderr, "res_update: mkquery failed\n"); + fprintf(stderr, "res_nupdate: mkquery failed\n"); return (n); } - n = res_send(buf, n, answer, sizeof answer); + n = res_nsend(statp, buf, n, answer, sizeof answer); if (n < 0) { - fprintf(stderr, "res_update: send error for %s\n", + fprintf(stderr, "res_nupdate: send error for %s\n", rrecp->r_dname); return (n); } else if (n > sizeof(answer)) { - fprintf(stderr, "res_update: buffer too small\n"); + fprintf(stderr, "res_nupdate: buffer too small\n"); return (-1); } if (n < HFIXEDSZ) @@ -447,7 +447,7 @@ ans=%d, auth=%d, add=%d, rcode=%d\n", } /* while */ } - _res.options |= RES_DEBUG; + statp->options |= RES_DEBUG; for (zptr = zgrp_start; zptr; zptr = zptr->z_next) { /* append zone section */ @@ -461,16 +461,16 @@ ans=%d, auth=%d, add=%d, rcode=%d\n", rrecp->r_grpnext = zptr->z_rr; zptr->z_rr = rrecp; - n = res_mkupdate(zptr->z_rr, packet, sizeof packet); + n = res_nmkupdate(statp, zptr->z_rr, packet, sizeof packet); if (n < 0) { - fprintf(stderr, "res_mkupdate error\n"); + fprintf(stderr, "res_nmkupdate error\n"); fflush(stderr); return (-1); } else - fprintf(stdout, "res_mkupdate: packet size = %d\n", n); + fprintf(stdout, "res_nmkupdate: packet size = %d\n", n); /* - * Override the list of NS records from res_init() with + * Override the list of NS records from res_ninit() with * the authoritative nameservers for the zone being updated. * Sort primary to be the first in the list of nameservers. */ @@ -493,18 +493,18 @@ ans=%d, auth=%d, add=%d, rcode=%d\n", } } for (i = 0; i < MAXNS; i++) { - _res.nsaddr_list[i].sin_addr = zptr->z_ns[i].nsaddr1; - _res.nsaddr_list[i].sin_family = AF_INET; - _res.nsaddr_list[i].sin_port = htons(NAMESERVER_PORT); + statp->nsaddr_list[i].sin_addr = zptr->z_ns[i].nsaddr1; + statp->nsaddr_list[i].sin_family = AF_INET; + statp->nsaddr_list[i].sin_port = htons(NAMESERVER_PORT); } - _res.nscount = (zptr->z_nscount < MAXNS) ? + statp->nscount = (zptr->z_nscount < MAXNS) ? zptr->z_nscount : MAXNS; - n = res_send(packet, n, answer, sizeof(answer)); + n = res_nsend(statp, packet, n, answer, sizeof(answer)); if (n < 0) { - fprintf(stderr, "res_send: send error, n=%d\n", n); + fprintf(stderr, "res_nsend: send error, n=%d\n", n); break; } else if (n > sizeof(answer)) { - fprintf(stderr, "res_send: buffer too small\n"); + fprintf(stderr, "res_nsend: buffer too small\n"); break; } numzones++; |