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