shithub: riscv

ref: 688c1f15cdaa5fcad19d9fddb30e1c555bfc59e0
dir: /sys/src/cmd/upas/smtp/rmtdns.c/

View raw version
#include	"common.h"
#include	<ndb.h>

int
rmtdns(char *net, char *path)
{
	int fd, n, nb, r;
	char *domain, *cp, buf[1024];

	if(net == 0 || path == 0)
		return 0;

	domain = strdup(path);
	cp = strchr(domain, '!');
	if(cp){
		*cp = 0;
		n = cp-domain;
	} else
		n = strlen(domain);

	if(*domain == '[' && domain[n-1] == ']'){ /* accept [nnn.nnn.nnn.nnn] */
		domain[n-1] = 0;
		r = strcmp(ipattr(domain+1), "ip");
		domain[n-1] = ']';
	} else
		r = strcmp(ipattr(domain), "ip"); /* accept nnn.nnn.nnn.nnn */
	if(r == 0){
		free(domain);
		return 0;
	}

	snprint(buf, sizeof buf, "%s/dns", net);
	fd = open(buf, ORDWR);			/* look up all others */
	if(fd < 0){				/* dns screw up - can't check */
		free(domain);
		return 0;
	}

	n = snprint(buf, sizeof buf, "%s all", domain);
	free(domain);
	seek(fd, 0, 0);
	nb = write(fd, buf, n);
	close(fd);
	if(nb != n){
		rerrstr(buf, sizeof buf);
		if (strcmp(buf, "dns: name does not exist") == 0)
			return -1;
	}
	return 0;
}

/*
void
main(int, char *argv[])
{
	print("return = %d\n", rmtdns("/net.alt", argv[1]));
	exits(0);
}
*/