xref: /plan9-contrib/sys/src/cmd/upas/smtp/rmtdns.c (revision ab6a5be186deff04fbbe60c477b11550cd87977e)
17dd7cddfSDavid du Colombier #include	"common.h"
2*ab6a5be1SDavid du Colombier #include	"smtp.h"
37dd7cddfSDavid du Colombier #include	<ndb.h>
47dd7cddfSDavid du Colombier 
57dd7cddfSDavid du Colombier int
rmtdns(char * net,char * path)680ee5cbfSDavid du Colombier rmtdns(char *net, char *path)
77dd7cddfSDavid du Colombier {
8617c0e1eSDavid du Colombier 	int fd, n, nb, r;
9*ab6a5be1SDavid du Colombier 	char *domain, *cp, buf[Maxdomain + 5];
107dd7cddfSDavid du Colombier 
1180ee5cbfSDavid du Colombier 	if(net == 0 || path == 0)
127dd7cddfSDavid du Colombier 		return 0;
137dd7cddfSDavid du Colombier 
147dd7cddfSDavid du Colombier 	domain = strdup(path);
157dd7cddfSDavid du Colombier 	cp = strchr(domain, '!');
167dd7cddfSDavid du Colombier 	if(cp){
177dd7cddfSDavid du Colombier 		*cp = 0;
187dd7cddfSDavid du Colombier 		n = cp-domain;
197dd7cddfSDavid du Colombier 	} else
207dd7cddfSDavid du Colombier 		n = strlen(domain);
217dd7cddfSDavid du Colombier 
227dd7cddfSDavid du Colombier 	if(*domain == '[' && domain[n-1] == ']'){ /* accept [nnn.nnn.nnn.nnn] */
237dd7cddfSDavid du Colombier 		domain[n-1] = 0;
247dd7cddfSDavid du Colombier 		r = strcmp(ipattr(domain+1), "ip");
257dd7cddfSDavid du Colombier 		domain[n-1] = ']';
267dd7cddfSDavid du Colombier 	} else
277dd7cddfSDavid du Colombier 		r = strcmp(ipattr(domain), "ip"); /* accept nnn.nnn.nnn.nnn */
287dd7cddfSDavid du Colombier 	if(r == 0){
297dd7cddfSDavid du Colombier 		free(domain);
307dd7cddfSDavid du Colombier 		return 0;
317dd7cddfSDavid du Colombier 	}
327dd7cddfSDavid du Colombier 
33617c0e1eSDavid du Colombier 	snprint(buf, sizeof buf, "%s/dns", net);
3480ee5cbfSDavid du Colombier 	fd = open(buf, ORDWR);			/* look up all others */
3580ee5cbfSDavid du Colombier 	if(fd < 0){				/* dns screw up - can't check */
3680ee5cbfSDavid du Colombier 		free(domain);
3780ee5cbfSDavid du Colombier 		return 0;
3880ee5cbfSDavid du Colombier 	}
3980ee5cbfSDavid du Colombier 
40617c0e1eSDavid du Colombier 	n = snprint(buf, sizeof buf, "%s all", domain);
417dd7cddfSDavid du Colombier 	free(domain);
427dd7cddfSDavid du Colombier 	seek(fd, 0, 0);
43617c0e1eSDavid du Colombier 	nb = write(fd, buf, n);
447dd7cddfSDavid du Colombier 	close(fd);
45617c0e1eSDavid du Colombier 	if(nb != n){
46617c0e1eSDavid du Colombier 		rerrstr(buf, sizeof buf);
477dd7cddfSDavid du Colombier 		if (strcmp(buf, "dns: name does not exist") == 0)
487dd7cddfSDavid du Colombier 			return -1;
497dd7cddfSDavid du Colombier 	}
507dd7cddfSDavid du Colombier 	return 0;
517dd7cddfSDavid du Colombier }
527dd7cddfSDavid du Colombier 
5380ee5cbfSDavid du Colombier /*
54617c0e1eSDavid du Colombier void
55617c0e1eSDavid du Colombier main(int, char *argv[])
56617c0e1eSDavid du Colombier {
57617c0e1eSDavid du Colombier 	print("return = %d\n", rmtdns("/net.alt", argv[1]));
58617c0e1eSDavid du Colombier 	exits(0);
59617c0e1eSDavid du Colombier }
6080ee5cbfSDavid du Colombier */
61