Blob


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