home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 98 / Skunkware 98.iso / src / net / bind-contrib.tar.gz / bind-contrib.tar / contrib / hostmaint / txt2named.awk < prev    next >
Encoding:
AWK Script  |  1996-10-25  |  3.1 KB  |  120 lines

  1. BEGIN { FS = ":";
  2.   errfile = "txt2named.err";
  3.   if (origin == "") { origin = "msu.edu"}
  4. }
  5. /^MX/ {
  6.   split($0,f," *: *")
  7.   host = f[2]
  8.   pref = f[3]
  9.   mailx = f[4]
  10.   if (length(host) > length(origin) && substr(host,length(host)-length(origin),length(origin)+1) == ("." origin)) {
  11.     host = substr(host,1,length(host)-length(origin)-1);
  12.   } else if (host == origin) {
  13.     host = "@";
  14.   } else {
  15.     host = host ".";
  16.   }
  17.   printf "%s\tIN MX\t%s %s\n", host, pref, mailx "."
  18. }
  19. /^HOST/ {
  20.   nf = split($0,f,FS)
  21.   for (i=2; i<= 6; i++) {
  22.     sub("^  *","",f[i])
  23.     sub("  *$","",f[i])
  24.   }
  25.   ip = f[2]
  26.   names = f[3]
  27.   cpu = f[4]
  28.   opsys = f[5]
  29.   proto = f[6]
  30.   opts = f[7]
  31.   for (i=8; i <= nf; i++)  opts = opts FS f[i]
  32.   global = 0
  33.   comment = ""
  34.   shuffle = 0
  35.   dupok = 0
  36.   nocname1 = 0
  37.   noptr = 0
  38.   for (;;) {
  39.     sub("^  *","",opts)
  40.     if (substr(opts,1,8) == "comment=") {
  41.       comment = substr(opts,9,length(opts));
  42.       break
  43.     }
  44.     c = index(opts,",")
  45.     if (c) opt = substr(opts,1,c-1)
  46.     else opt = opts
  47.     sub("  *$","",opt)
  48.     if (opt == "global") global = 1
  49.     if (opt == "shuffle") shuffle = 1
  50.     if (opt == "dupok") dupok = 1
  51.     if (opt == "nocname1") nocname1 = 1
  52.     if (opt == "nonamed") next
  53.     if (opt == "noptr") noptr = 1
  54.     if (c) opts = substr(opts,c+1,length(opts))
  55.     else break
  56.   }
  57.   aflag = ""
  58.   if (shuffle) dupok = 1
  59.   if (dupok) aflag = aflag " DUPOK"
  60.   if (noptr) aflag = aflag " NOPTR"
  61.   if (aflag != "") aflag = "    ;" aflag
  62.   ns = split(proto,plist," *, *")
  63.   tcp = "";
  64.   udp = "";
  65.   for (i=1; i <= ns; i++) {
  66.     prot = plist[i];
  67.     if (substr(prot,1,4) == "tcp/") tcp = tcp " " substr(prot,5,length(prot));
  68.     if (substr(prot,1,4) == "udp/") udp = udp " " substr(prot,5,length(prot));
  69.   }
  70.   nn = split(names,nlist," *, *")
  71.   for (n=1; n <= nn; n++) {
  72.     name = nlist[n];
  73.     np = split(name,part,".")
  74.     sname = part[1];
  75.     if (n == 1) {
  76.       fullname = name ".";
  77.       if (np > 1 && part[np-1] "." part[np] == origin) {
  78.     if (np == 2) sname = "@";
  79.     dept = "";
  80.     if (np == 4) dept = "." part[2];
  81.     if (shuffle) printf "%s%s\t60\tIN SA\t%s%s\n", sname, dept, ip, aflag
  82.     else printf "%s%s\tIN A\t%s%s\n", sname, dept, ip, aflag
  83.     if (cpu != "" || opsys != "") {
  84.       if (cpu == "") cpu = "-";
  85.       if (opsys == "") opsys = "-";
  86.       printf "%s%s\tIN HINFO\t\"%s\" \"%s\"\n", sname, dept, cpu, opsys;
  87.     }
  88.     if (tcp != "") {
  89.       printf "%s%s\tIN WKS\t%s\tTCP %s\n", sname, dept, ip, tcp;
  90.     }
  91.     if (udp != "") {
  92.       printf "%s%s\tIN WKS\t%s\tUDP %s\n", sname, dept, ip, udp;
  93.     }
  94.     if (np > 3 && global) {
  95.       if (nocname1) printf "%s\tIN A\t%s%s\n", sname, ip, aflag
  96.       else printf "%s\tIN CNAME\t%s%s\n", sname, fullname, aflag
  97.     }
  98.     if (comment != "") printf "%s%s\tIN TXT\t\"%s\"\n", sname, dept, comment
  99.       } else {
  100.     next;
  101.       }
  102.     } else {
  103.       if (np == 1) {
  104.     printf "%s%s\tIN CNAME\t%s%s\n", sname, dept, fullname, aflag
  105.       } else if (np > 1 && part[np-1] "." part[np] == origin) {
  106.     if (np == 2) sname = "@";
  107.     dept = "";
  108.     if (np == 4) dept = "." part[2];
  109.     printf "%s%s\tIN CNAME\t%s%s\n", sname, dept, fullname, aflag
  110.     if (np > 3 && global) printf "%s\tIN CNAME\t%s%s\n", sname, fullname, aflag
  111.       } else {
  112.     next;
  113.       }
  114.     }
  115.   }
  116.   next;
  117. }
  118. /^;/ { print $0 }
  119. { next }
  120.