Blame


1 5cdb1798 2005-10-29 devnull #include "common.h"
2 5cdb1798 2005-10-29 devnull #include <ndb.h>
3 5cdb1798 2005-10-29 devnull
4 5cdb1798 2005-10-29 devnull int
5 5cdb1798 2005-10-29 devnull rmtdns(char *net, char *path)
6 5cdb1798 2005-10-29 devnull {
7 5cdb1798 2005-10-29 devnull
8 5cdb1798 2005-10-29 devnull int fd, n, r;
9 5cdb1798 2005-10-29 devnull char *domain, *cp, buf[1024];
10 5cdb1798 2005-10-29 devnull
11 5cdb1798 2005-10-29 devnull if(net == 0 || path == 0)
12 5cdb1798 2005-10-29 devnull return 0;
13 5cdb1798 2005-10-29 devnull
14 5cdb1798 2005-10-29 devnull domain = strdup(path);
15 5cdb1798 2005-10-29 devnull cp = strchr(domain, '!');
16 5cdb1798 2005-10-29 devnull if(cp){
17 5cdb1798 2005-10-29 devnull *cp = 0;
18 5cdb1798 2005-10-29 devnull n = cp-domain;
19 5cdb1798 2005-10-29 devnull } else
20 5cdb1798 2005-10-29 devnull n = strlen(domain);
21 5cdb1798 2005-10-29 devnull
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] = ']';
26 5cdb1798 2005-10-29 devnull } else
27 5cdb1798 2005-10-29 devnull r = strcmp(ipattr(domain), "ip"); /* accept nnn.nnn.nnn.nnn */
28 5cdb1798 2005-10-29 devnull
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;
32 5cdb1798 2005-10-29 devnull }
33 5cdb1798 2005-10-29 devnull
34 5cdb1798 2005-10-29 devnull snprint(buf, sizeof(buf), "%s/dns", net);
35 5cdb1798 2005-10-29 devnull
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;
40 5cdb1798 2005-10-29 devnull }
41 5cdb1798 2005-10-29 devnull
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;
51 5cdb1798 2005-10-29 devnull }
52 5cdb1798 2005-10-29 devnull return 0;
53 5cdb1798 2005-10-29 devnull }
54 5cdb1798 2005-10-29 devnull
55 5cdb1798 2005-10-29 devnull /*
56 5cdb1798 2005-10-29 devnull void main(int, char *argv[]){ print("return = %d\n", rmtdns("/net.alt/tcp/109", argv[1]));}
57 5cdb1798 2005-10-29 devnull
58 5cdb1798 2005-10-29 devnull */