1 5cdb1798 2005-10-29 devnull #include "common.h"
2 5cdb1798 2005-10-29 devnull #include <ndb.h>
5 5cdb1798 2005-10-29 devnull rmtdns(char *net, char *path)
8 5cdb1798 2005-10-29 devnull int fd, n, r;
9 5cdb1798 2005-10-29 devnull char *domain, *cp, buf[1024];
11 5cdb1798 2005-10-29 devnull if(net == 0 || path == 0)
12 5cdb1798 2005-10-29 devnull return 0;
14 5cdb1798 2005-10-29 devnull domain = strdup(path);
15 5cdb1798 2005-10-29 devnull cp = strchr(domain, '!');
18 5cdb1798 2005-10-29 devnull n = cp-domain;
20 5cdb1798 2005-10-29 devnull n = strlen(domain);
22 5cdb1798 2005-10-29 devnull if(*domain == '[' && domain[n-1] == ']'){ /* accept [nnn.nnn.nnn.nnn] */
23 5cdb1798 2005-10-29 devnull domain[n-1] = 0;
24 5cdb1798 2005-10-29 devnull r = strcmp(ipattr(domain+1), "ip");
25 5cdb1798 2005-10-29 devnull domain[n-1] = ']';
27 5cdb1798 2005-10-29 devnull r = strcmp(ipattr(domain), "ip"); /* accept nnn.nnn.nnn.nnn */
29 5cdb1798 2005-10-29 devnull if(r == 0){
30 5cdb1798 2005-10-29 devnull free(domain);
31 5cdb1798 2005-10-29 devnull return 0;
34 5cdb1798 2005-10-29 devnull snprint(buf, sizeof(buf), "%s/dns", net);
36 5cdb1798 2005-10-29 devnull fd = open(buf, ORDWR); /* look up all others */
37 5cdb1798 2005-10-29 devnull if(fd < 0){ /* dns screw up - can't check */
38 5cdb1798 2005-10-29 devnull free(domain);
39 5cdb1798 2005-10-29 devnull return 0;
42 5cdb1798 2005-10-29 devnull n = snprint(buf, sizeof(buf), "%s all", domain);
43 5cdb1798 2005-10-29 devnull free(domain);
44 5cdb1798 2005-10-29 devnull seek(fd, 0, 0);
45 5cdb1798 2005-10-29 devnull n = write(fd, buf, n);
46 5cdb1798 2005-10-29 devnull close(fd);
47 5cdb1798 2005-10-29 devnull if(n < 0){
48 5cdb1798 2005-10-29 devnull rerrstr(buf, sizeof(buf));
49 5cdb1798 2005-10-29 devnull if (strcmp(buf, "dns: name does not exist") == 0)
50 5cdb1798 2005-10-29 devnull return -1;
52 5cdb1798 2005-10-29 devnull return 0;
56 5cdb1798 2005-10-29 devnull void main(int, char *argv[]){ print("return = %d\n", rmtdns("/net.alt/tcp/109", argv[1]));}