diff --git a/sys/include/ndb.h b/sys/include/ndb.h index a76b14561..b44da0539 100644 --- a/sys/include/ndb.h +++ b/sys/include/ndb.h @@ -128,6 +128,7 @@ char* csgetvalue(char*, char*, char*, char*, Ndbtuple**); Ndbtuple* csipinfo(char*, char*, char*, char**, int); Ndbtuple* dnsquery(char*, char*, char*); char* ipattr(char*); +void mkptrname(char *ip, char *rip, int rlen); Ndb* ndbcat(Ndb*, Ndb*); int ndbchanged(Ndb*); void ndbclose(Ndb*); diff --git a/sys/man/2/ndb b/sys/man/2/ndb index ac805bbe8..4df54857d 100644 --- a/sys/man/2/ndb +++ b/sys/man/2/ndb @@ -1,6 +1,6 @@ .TH NDB 2 .SH NAME -ndbopen, ndbcat, ndbchanged, ndbclose, ndbreopen, ndbsearch, ndbsnext, ndbgetvalue, ndbfree, ipattr, ndbgetipaddr, ndbipinfo, csipinfo, ndbhash, ndbparse, csgetvalue, ndbfindattr, dnsquery, ndbdiscard, ndbconcatenate, ndbreorder, ndbsubstitute, ndbdedup \- network database +ndbopen, ndbcat, ndbchanged, ndbclose, ndbreopen, ndbsearch, ndbsnext, ndbgetvalue, ndbfree, ipattr, mkptrname, ndbgetipaddr, ndbipinfo, csipinfo, ndbhash, ndbparse, csgetvalue, ndbfindattr, dnsquery, ndbdiscard, ndbconcatenate, ndbreorder, ndbsubstitute, ndbdedup \- network database .SH SYNOPSIS .B #include .br @@ -47,6 +47,9 @@ char* csgetvalue(char *netroot, char *attr, char *val, char* ipattr(char *name) .PP .B +void mkptrname(char *ip, char *rip, int rlen); +.PP +.B Ndbtuple* ndbgetipaddr(Ndb *db, char *sys); .PP .B @@ -236,6 +239,26 @@ Internet number system name .RE .PP +.I Mkptrname +converts the address string +.I ip +to a reverse lookup domain-name, returned in +.IR rip . +The +.I rlen +argument gives the maximum size of the +.I rip +buffer including the NUL-terminator. +If +.I ip +already is a reverse lookup domain-name +or has invalid ip address syntax, +then +.I ip +is copied into +.I rip +verbatim. +.PP .I Ndbgetipaddr looks in .I db diff --git a/sys/src/cmd/ndb/dnsdebug.c b/sys/src/cmd/ndb/dnsdebug.c index 61bc5c5ee..cd79e17cc 100644 --- a/sys/src/cmd/ndb/dnsdebug.c +++ b/sys/src/cmd/ndb/dnsdebug.c @@ -129,32 +129,6 @@ longtime(long t) return x; } -/* - * convert address into a reverse lookup address - */ -static void -mkptrname(char *ip, char *rip, int rlen) -{ - uchar a[IPaddrlen]; - char *p, *e; - int i; - - if(cistrstr(ip, "in-addr.arpa") || cistrstr(ip, "ip6.arpa") || parseip(a, ip) == -1) - snprint(rip, rlen, "%s", ip); - else if(isv4(a)) - snprint(rip, rlen, "%ud.%ud.%ud.%ud.in-addr.arpa", - a[15], a[14], a[13], a[12]); - else{ - p = rip; - e = rip + rlen; - for(i = 15; i >= 0; i--){ - p = seprint(p, e, "%ux.", a[i]&0xf); - p = seprint(p, e, "%ux.", a[i]>>4); - } - seprint(p, e, "ip6.arpa"); - } -} - int prettyrrfmt(Fmt *f) { diff --git a/sys/src/cmd/ndb/dnsquery.c b/sys/src/cmd/ndb/dnsquery.c index 6f01878f8..0f005c7db 100644 --- a/sys/src/cmd/ndb/dnsquery.c +++ b/sys/src/cmd/ndb/dnsquery.c @@ -4,7 +4,6 @@ #include #include #include "dns.h" -#include "ip.h" static void querydns(int fd, char *line, int n) @@ -23,32 +22,6 @@ querydns(int fd, char *line, int n) } } -/* - * convert address into a reverse lookup address - */ -static void -mkptrname(char *ip, char *rip, int rlen) -{ - uchar a[IPaddrlen]; - char *p, *e; - int i; - - if(cistrstr(ip, "in-addr.arpa") || cistrstr(ip, "ip6.arpa") || parseip(a, ip) == -1) - snprint(rip, rlen, "%s", ip); - else if(isv4(a)) - snprint(rip, rlen, "%ud.%ud.%ud.%ud.in-addr.arpa", - a[15], a[14], a[13], a[12]); - else{ - p = rip; - e = rip + rlen; - for(i = 15; i >= 0; i--){ - p = seprint(p, e, "%ux.", a[i]&0xf); - p = seprint(p, e, "%ux.", a[i]>>4); - } - seprint(p, e, "ip6.arpa"); - } -} - static void query(int fd) { diff --git a/sys/src/libndb/dnsquery.c b/sys/src/libndb/dnsquery.c index da2312e4d..d74e2a208 100644 --- a/sys/src/libndb/dnsquery.c +++ b/sys/src/libndb/dnsquery.c @@ -5,7 +5,6 @@ #include #include -static void mkptrname(char*, char*, int); static Ndbtuple *doquery(int, char *dn, char *type); /* @@ -51,32 +50,6 @@ dnsquery(char *net, char *val, char *type) return t; } -/* - * convert address into a reverse lookup address - */ -static void -mkptrname(char *ip, char *rip, int rlen) -{ - uchar a[IPaddrlen]; - char *p, *e; - int i; - - if(cistrstr(ip, "in-addr.arpa") || cistrstr(ip, "ip6.arpa") || parseip(a, ip) == -1) - snprint(rip, rlen, "%s", ip); - else if(isv4(a)) - snprint(rip, rlen, "%ud.%ud.%ud.%ud.in-addr.arpa", - a[15], a[14], a[13], a[12]); - else{ - p = rip; - e = rip + rlen; - for(i = 15; i >= 0; i--){ - p = seprint(p, e, "%ux.", a[i]&0xf); - p = seprint(p, e, "%ux.", a[i]>>4); - } - seprint(p, e, "ip6.arpa"); - } -} - static Ndbtuple* doquery(int fd, char *dn, char *type) { diff --git a/sys/src/libndb/mkfile b/sys/src/libndb/mkfile index 19be22bb4..390864841 100644 --- a/sys/src/libndb/mkfile +++ b/sys/src/libndb/mkfile @@ -6,6 +6,7 @@ OFILES=\ csipinfo.$O\ dnsquery.$O\ ipattr.$O\ + mkptrname.$O\ ndbaux.$O\ ndbcache.$O\ ndbcat.$O\ diff --git a/sys/src/libndb/mkptrname.c b/sys/src/libndb/mkptrname.c new file mode 100644 index 000000000..759aad5bd --- /dev/null +++ b/sys/src/libndb/mkptrname.c @@ -0,0 +1,29 @@ +#include +#include +#include + +/* + * convert address into a reverse lookup address + */ +void +mkptrname(char *ip, char *rip, int rlen) +{ + uchar a[IPaddrlen]; + char *p, *e; + int i; + + if(cistrstr(ip, "in-addr.arpa") || cistrstr(ip, "ip6.arpa") || parseip(a, ip) == -1) + snprint(rip, rlen, "%s", ip); + else if(isv4(a)) + snprint(rip, rlen, "%ud.%ud.%ud.%ud.in-addr.arpa", + a[15], a[14], a[13], a[12]); + else{ + p = rip; + e = rip + rlen; + for(i = 15; i >= 0; i--){ + p = seprint(p, e, "%ux.", a[i]&0xf); + p = seprint(p, e, "%ux.", a[i]>>4); + } + seprint(p, e, "ip6.arpa"); + } +}