plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

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 */