rmtdns.c 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include "common.h"
  2. #include <ndb.h>
  3. int
  4. rmtdns(char *net, char *path)
  5. {
  6. int fd, n, nb, r;
  7. char *domain, *cp, buf[1024];
  8. if(net == 0 || path == 0)
  9. return 0;
  10. domain = strdup(path);
  11. cp = strchr(domain, '!');
  12. if(cp){
  13. *cp = 0;
  14. n = cp-domain;
  15. } else
  16. n = strlen(domain);
  17. if(*domain == '[' && domain[n-1] == ']'){ /* accept [nnn.nnn.nnn.nnn] */
  18. domain[n-1] = 0;
  19. r = strcmp(ipattr(domain+1), "ip");
  20. domain[n-1] = ']';
  21. } else
  22. r = strcmp(ipattr(domain), "ip"); /* accept nnn.nnn.nnn.nnn */
  23. if(r == 0){
  24. free(domain);
  25. return 0;
  26. }
  27. snprint(buf, sizeof buf, "%s/dns", net);
  28. fd = open(buf, ORDWR); /* look up all others */
  29. if(fd < 0){ /* dns screw up - can't check */
  30. free(domain);
  31. return 0;
  32. }
  33. n = snprint(buf, sizeof buf, "%s all", domain);
  34. free(domain);
  35. seek(fd, 0, 0);
  36. nb = write(fd, buf, n);
  37. close(fd);
  38. if(nb != n){
  39. rerrstr(buf, sizeof buf);
  40. if (strcmp(buf, "dns: name does not exist") == 0)
  41. return -1;
  42. }
  43. return 0;
  44. }
  45. /*
  46. void
  47. main(int, char *argv[])
  48. {
  49. print("return = %d\n", rmtdns("/net.alt", argv[1]));
  50. exits(0);
  51. }
  52. */