16 char *domname = "research.att.com";
25 for(p = x; c = *p; p++)
31 printArecord(int fd, X *p)
43 for(nt=p->t; nt; nt = nt->entry) {
44 /* we are only going to handle things in the specified domain */
45 c = strchr(nt->val, '.');
46 if (c==0 || strcmp(++c, domname)!=0)
49 if(strcmp(nt->attr, "dom") == 0) {
54 fprint(fd, "%-.*s%.*s IN A %s\n", i, nt->val, 15-i, " ", p->it->val);
56 fprint(fd, "%-.*s%.*s IN CNAME %s.\n", i, nt->val, 15-i, " ", dom);
57 } else if(strcmp(nt->attr, "mx") == 0) {
59 fprint(fd, "%-.*s%.*s MX %d %s.\n", cdlen, curdom, 15-cdlen, " ", mxweight++, nt->val);
65 printentry(int fd, X *p)
71 fprint(fd, "%s ", p->it->val);
72 for(nt = p->t; nt; nt = nt->entry)
73 if(strcmp(nt->attr, "dom") == 0)
74 fprint(fd, " %s", nt->val);
75 for(nt = p->t; nt; nt = nt->entry)
76 if(strcmp(nt->attr, "sys") == 0)
77 fprint(fd, " %s", nt->val);
82 printsys(int fd, X *p)
86 for(nt = p->t; nt; nt = nt->entry)
87 if(strcmp(nt->attr, "dom") == 0)
88 fprint(fd, "%s\n", nt->val);
92 printtxt(int fd, X *p)
99 i = strlen(p->it->val);
100 if(strcmp(p->it->val+i-2, ".0") == 0)
105 fprint(fd, "\nNET : %s : %s\n", p->it->val, upper(p->nt->val));
108 fprint(fd, "HOST : %s :", p->it->val);
110 for(nt = p->t; nt; nt = nt->entry)
111 if(strcmp(nt->attr, "dom") == 0){
113 fprint(fd, " %s", upper(nt->val));
115 fprint(fd, ", %s", upper(nt->val));
125 Ndbtuple *t, *nt, *tt, *ipnett;
130 exits("no database");
131 while(t = ndbparse(db)){
132 for(nt = t; nt; nt = nt->entry){
133 if(strcmp(nt->attr, "ip") == 0)
135 if(strcmp(nt->attr, "flavor") == 0
136 && strcmp(nt->val, "console") == 0)
144 /* dump anything not on our nets */
146 for(tt = t; tt; tt = tt->entry){
147 if(strcmp(tt->attr, "ipnet") == 0){
151 if(strcmp(tt->attr, "dom") == 0){
153 p = tt->val+i-domnamlen;
154 if(p >= tt->val && strcmp(p, domname) == 0)
163 for(; nt; nt = nt->entry){
164 if(strcmp(nt->attr, "ip") != 0)
174 main(int argc, char *argv[])
181 domnamlen = strlen(domname);
183 for(i = 2; i < argc; i++)
186 parse(unsharp("#9/ndb/local"));
187 parse(unsharp("#9/ndb/friends"));
190 /* sprint(fn, "/lib/ndb/hosts.%-.21s", domname); */
191 /* fd = create(fn, OWRITE, 0664); */
193 /* fprint(2, "can't create %s: %r\n", fn); */
196 /* for(i = 0; i < nx; i++) */
197 /* printentry(fd, &x[i]); */
201 sprint(fn, "/lib/ndb/db.%-.24s", domname);
202 fd = create(fn, OWRITE, 0664);
204 fprint(2, "can't create %s: %r\n", fn);
207 fprint(fd, "; This file is generated automatically, do not edit!\n");
208 for(i = 0; i < nx; i++)
209 printArecord(fd, &x[i]);
212 sprint(fn, "/lib/ndb/equiv.%-.21s", domname);
213 fd = create(fn, OWRITE, 0664);
215 fprint(2, "can't create %s: %r\n", fn);
218 for(i = 0; i < nx; i++)
222 sprint(fn, "/lib/ndb/txt.%-.23s", domname);
223 fd = create(fn, OWRITE, 0664);
225 fprint(2, "can't create %s: %r\n", fn);
228 for(i = 0; i < nx; i++)