1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- #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);
- }
- */
|