]> git.pld-linux.org Git - packages/djbdns.git/blob - djbdns-1.05-ipv6.diff
- fix weird suid permissions on dirs (why?)
[packages/djbdns.git] / djbdns-1.05-ipv6.diff
1 diff -uNr djbdns-1.05/FILES djbdns-1.05-fefe/FILES
2 --- djbdns-1.05/FILES   Sun Feb 11 22:11:45 2001
3 +++ djbdns-1.05-fefe/FILES      Tue Feb 13 15:16:12 2001
4 @@ -135,6 +135,7 @@
5  exit.h
6  fmt.h
7  fmt_ulong.c
8 +fmt_xlong.c
9  gen_alloc.h
10  gen_allocdefs.h
11  getln.c
12 @@ -151,6 +152,9 @@
13  ip4.h
14  ip4_fmt.c
15  ip4_scan.c
16 +ip6.h
17 +ip6_fmt.c
18 +ip6_scan.c
19  ndelay.h
20  ndelay_off.c
21  ndelay_on.c
22 @@ -164,6 +168,7 @@
23  readclose.c
24  readclose.h
25  scan.h
26 +scan_0x.c
27  scan_ulong.c
28  seek.h
29  seek_set.c
30 @@ -241,3 +246,4 @@
31  warn-shsgr
32  buffer_read.c
33  buffer_write.c
34 +dns_nd6.c
35 diff -uNr djbdns-1.05/Makefile djbdns-1.05-fefe/Makefile
36 --- djbdns-1.05/Makefile        Sun Feb 11 22:11:45 2001
37 +++ djbdns-1.05-fefe/Makefile   Tue Feb 13 15:16:12 2001
38 @@ -120,12 +120,13 @@
39  case_diffb.o case_diffs.o case_lowerb.o fmt_ulong.o ip4_fmt.o \
40  ip4_scan.o scan_ulong.o str_chr.o str_diff.o str_len.o str_rchr.o \
41  str_start.o uint16_pack.o uint16_unpack.o uint32_pack.o \
42 -uint32_unpack.o
43 +uint32_unpack.o ip6_fmt.o ip6_scan.o scan_0x.o fmt_xlong.o
44         ./makelib byte.a byte_chr.o byte_copy.o byte_cr.o \
45         byte_diff.o byte_zero.o case_diffb.o case_diffs.o \
46         case_lowerb.o fmt_ulong.o ip4_fmt.o ip4_scan.o scan_ulong.o \
47         str_chr.o str_diff.o str_len.o str_rchr.o str_start.o \
48 -       uint16_pack.o uint16_unpack.o uint32_pack.o uint32_unpack.o
49 +       uint16_pack.o uint16_unpack.o uint32_pack.o uint32_unpack.o \
50 +       ip6_fmt.o ip6_scan.o scan_0x.o fmt_xlong.o
51  
52  byte_chr.o: \
53  compile byte_chr.c byte.h
54 @@ -228,11 +229,13 @@
55  dns.a: \
56  makelib dns_dfd.o dns_domain.o dns_dtda.o dns_ip.o dns_ipq.o dns_mx.o \
57  dns_name.o dns_nd.o dns_packet.o dns_random.o dns_rcip.o dns_rcrw.o \
58 -dns_resolve.o dns_sortip.o dns_transmit.o dns_txt.o
59 +dns_resolve.o dns_sortip.o dns_transmit.o dns_txt.o dns_ip6.o \
60 +dns_sortip6.o dns_nd6.o
61         ./makelib dns.a dns_dfd.o dns_domain.o dns_dtda.o dns_ip.o \
62         dns_ipq.o dns_mx.o dns_name.o dns_nd.o dns_packet.o \
63         dns_random.o dns_rcip.o dns_rcrw.o dns_resolve.o \
64 -       dns_sortip.o dns_transmit.o dns_txt.o
65 +       dns_sortip.o dns_transmit.o dns_txt.o dns_ip6.o dns_sortip6.o \
66 +       dns_nd6.o
67  
68  dns_dfd.o: \
69  compile dns_dfd.c error.h alloc.h byte.h dns.h stralloc.h gen_alloc.h \
70 @@ -254,6 +257,11 @@
71  stralloc.h iopause.h taia.h tai.h uint64.h taia.h
72         ./compile dns_ip.c
73  
74 +dns_ip6.o: \
75 +compile dns_ip6.c stralloc.h gen_alloc.h uint16.h byte.h dns.h \
76 +stralloc.h iopause.h taia.h tai.h uint64.h taia.h
77 +       ./compile dns_ip6.c
78 +
79  dns_ipq.o: \
80  compile dns_ipq.c stralloc.h gen_alloc.h case.h byte.h str.h dns.h \
81  stralloc.h iopause.h taia.h tai.h uint64.h taia.h
82 @@ -274,6 +282,11 @@
83  taia.h tai.h uint64.h taia.h
84         ./compile dns_nd.c
85  
86 +dns_nd6.o: \
87 +compile dns_nd6.c byte.h fmt.h dns.h stralloc.h gen_alloc.h iopause.h \
88 +taia.h tai.h uint64.h taia.h
89 +       ./compile dns_nd6.c
90 +
91  dns_packet.o: \
92  compile dns_packet.c error.h dns.h stralloc.h gen_alloc.h iopause.h \
93  taia.h tai.h uint64.h taia.h
94 @@ -306,6 +319,11 @@
95  taia.h tai.h uint64.h taia.h
96         ./compile dns_sortip.c
97  
98 +dns_sortip6.o: \
99 +compile dns_sortip6.c byte.h dns.h stralloc.h gen_alloc.h iopause.h \
100 +taia.h tai.h uint64.h taia.h
101 +       ./compile dns_sortip6.c
102 +
103  dns_transmit.o: \
104  compile dns_transmit.c socket.h uint16.h alloc.h error.h byte.h \
105  uint16.h dns.h stralloc.h gen_alloc.h iopause.h taia.h tai.h uint64.h \
106 @@ -369,6 +387,17 @@
107  gen_alloc.h iopause.h taia.h tai.h uint64.h taia.h
108         ./compile dnsip.c
109  
110 +dnsip6: \
111 +load dnsip6.o iopause.o dns.a env.a libtai.a alloc.a buffer.a unix.a \
112 +byte.a socket.lib
113 +       ./load dnsip6 iopause.o dns.a env.a libtai.a alloc.a \
114 +       buffer.a unix.a byte.a  `cat socket.lib`
115 +
116 +dnsip6.o: \
117 +compile dnsip6.c buffer.h exit.h strerr.h ip6.h dns.h stralloc.h \
118 +gen_alloc.h iopause.h taia.h tai.h uint64.h
119 +       ./compile dnsip6.c
120 +
121  dnsipq: \
122  load dnsipq.o iopause.o dns.a env.a libtai.a alloc.a buffer.a unix.a \
123  byte.a socket.lib
124 @@ -399,7 +428,7 @@
125  
126  dnsname.o: \
127  compile dnsname.c buffer.h exit.h strerr.h ip4.h dns.h stralloc.h \
128 -gen_alloc.h iopause.h taia.h tai.h uint64.h taia.h
129 +gen_alloc.h iopause.h taia.h tai.h uint64.h taia.h ip6.h
130         ./compile dnsname.c
131  
132  dnsq: \
133 @@ -484,6 +513,10 @@
134  compile fmt_ulong.c fmt.h
135         ./compile fmt_ulong.c
136  
137 +fmt_xlong.o: \
138 +compile fmt_xlong.c scan.h
139 +       ./compile fmt_xlong.c
140 +
141  generic-conf.o: \
142  compile generic-conf.c strerr.h buffer.h open.h generic-conf.h \
143  buffer.h
144 @@ -546,10 +579,18 @@
145  compile ip4_fmt.c fmt.h ip4.h
146         ./compile ip4_fmt.c
147  
148 +ip6_fmt.o: \
149 +compile ip6_fmt.c fmt.h ip6.h
150 +       ./compile ip6_fmt.c
151 +
152  ip4_scan.o: \
153  compile ip4_scan.c scan.h ip4.h
154         ./compile ip4_scan.c
155  
156 +ip6_scan.o: \
157 +compile ip6_scan.c scan.h ip6.h
158 +       ./compile ip6_scan.c
159 +
160  it: \
161  prog install instcheck
162  
163 @@ -677,7 +718,7 @@
164  rbldns-data pickdns-conf pickdns pickdns-data tinydns-conf tinydns \
165  tinydns-data tinydns-get tinydns-edit axfr-get axfrdns-conf axfrdns \
166  dnsip dnsipq dnsname dnstxt dnsmx dnsfilter random-ip dnsqr dnsq \
167 -dnstrace dnstracesort cachetest utime rts
168 +dnstrace dnstracesort cachetest utime rts dnsip6
169  
170  prot.o: \
171  compile prot.c hasshsgr.h prot.h
172 @@ -762,6 +803,10 @@
173  compile scan_ulong.c scan.h
174         ./compile scan_ulong.c
175  
176 +scan_0x.o: \
177 +compile scan_0x.c scan.h
178 +       ./compile scan_0x.c
179 +
180  seek_set.o: \
181  compile seek_set.c seek.h
182         ./compile seek_set.c
183 @@ -1005,7 +1050,7 @@
184  compile tinydns-data.c uint16.h uint32.h str.h byte.h fmt.h ip4.h \
185  exit.h case.h scan.h buffer.h strerr.h getln.h buffer.h stralloc.h \
186  gen_alloc.h cdb_make.h buffer.h uint32.h stralloc.h open.h dns.h \
187 -stralloc.h iopause.h taia.h tai.h uint64.h taia.h
188 +stralloc.h iopause.h taia.h tai.h uint64.h taia.h ip6.h
189         ./compile tinydns-data.c
190  
191  tinydns-edit: \
192 @@ -1104,3 +1149,6 @@
193  compile walldns.c byte.h dns.h stralloc.h gen_alloc.h iopause.h \
194  taia.h tai.h uint64.h taia.h dd.h response.h uint32.h
195         ./compile walldns.c
196 +
197 +clean:
198 +       rm -f `cat TARGETS`
199 diff -uNr djbdns-1.05/TARGETS djbdns-1.05-fefe/TARGETS
200 --- djbdns-1.05/TARGETS Sun Feb 11 22:11:45 2001
201 +++ djbdns-1.05-fefe/TARGETS    Tue Feb 13 15:16:12 2001
202 @@ -214,3 +214,12 @@
203  it
204  setup
205  check
206 +scan_0x.o
207 +fmt_xlong.o
208 +ip6_scan.o
209 +ip6_fmt.o
210 +dnsip6.o
211 +dns_ip6.o
212 +dns_sortip6.o
213 +dnsip6
214 +dns_nd6.o
215 diff -uNr djbdns-1.05/axfr-get.c djbdns-1.05-fefe/axfr-get.c
216 --- djbdns-1.05/axfr-get.c      Sun Feb 11 22:11:45 2001
217 +++ djbdns-1.05-fefe/axfr-get.c Tue Feb 13 15:16:12 2001
218 @@ -13,6 +13,7 @@
219  #include "byte.h"
220  #include "str.h"
221  #include "ip4.h"
222 +#include "ip6.h"
223  #include "timeoutread.h"
224  #include "timeoutwrite.h"
225  #include "dns.h"
226 @@ -217,6 +218,14 @@
227      x_copy(buf,len,pos,data,4);
228      if (!stralloc_catb(&line,ipstr,ip4_fmt(ipstr,data))) return 0;
229    }
230 +  else if (byte_equal(data,2,DNS_T_AAAA)) {
231 +    char ipstr[IP6_FMT];
232 +    if (!stralloc_copys(&line,"6")) return 0;
233 +    if (!dns_domain_todot_cat(&line,d1)) return 0;
234 +    if (!stralloc_cats(&line,":")) return 0;
235 +    x_copy(buf,len,pos,data,16);
236 +    if (!stralloc_catb(&line,ipstr,ip6_fmt_flat(ipstr,data))) return 0;
237 +  }
238    else {
239      unsigned char ch;
240      unsigned char ch2;
241 diff -uNr djbdns-1.05/dns.h djbdns-1.05-fefe/dns.h
242 --- djbdns-1.05/dns.h   Sun Feb 11 22:11:45 2001
243 +++ djbdns-1.05-fefe/dns.h      Tue Feb 13 15:16:12 2001
244 @@ -68,6 +68,8 @@
245  
246  extern int dns_ip4_packet(stralloc *,const char *,unsigned int);
247  extern int dns_ip4(stralloc *,const stralloc *);
248 +extern int dns_ip6_packet(stralloc *,char *,unsigned int);
249 +extern int dns_ip6(stralloc *,stralloc *);
250  extern int dns_name_packet(stralloc *,const char *,unsigned int);
251  extern void dns_name4_domain(char *,const char *);
252  #define DNS_NAME4_DOMAIN 31
253 @@ -80,5 +82,10 @@
254  extern int dns_resolvconfrewrite(stralloc *);
255  extern int dns_ip4_qualify_rules(stralloc *,stralloc *,const stralloc *,const stralloc *);
256  extern int dns_ip4_qualify(stralloc *,stralloc *,const stralloc *);
257 +extern int dns_ip6_qualify_rules(stralloc *,stralloc *,stralloc *,stralloc *);
258 +extern int dns_ip6_qualify(stralloc *,stralloc *,stralloc *);
259 +
260 +extern int dns_name6_domain(char *,char *);
261 +#define DNS_NAME6_DOMAIN (4*16+15)
262  
263  #endif
264 diff -uNr djbdns-1.05/dns_ip6.c djbdns-1.05-fefe/dns_ip6.c
265 --- djbdns-1.05/dns_ip6.c       Thu Jan  1 01:00:00 1970
266 +++ djbdns-1.05-fefe/dns_ip6.c  Tue Feb 13 15:16:12 2001
267 @@ -0,0 +1,91 @@
268 +#include "stralloc.h"
269 +#include "uint16.h"
270 +#include "byte.h"
271 +#include "dns.h"
272 +#include "ip6.h"
273 +
274 +int dns_ip6_packet(stralloc *out,char *buf,unsigned int len)
275 +{
276 +  unsigned int pos;
277 +  char header[16];
278 +  uint16 numanswers;
279 +  uint16 datalen;
280 +
281 +  if (!stralloc_copys(out,"")) return -1;
282 +
283 +  pos = dns_packet_copy(buf,len,0,header,12); if (!pos) return -1;
284 +  uint16_unpack_big(header + 6,&numanswers);
285 +  pos = dns_packet_skipname(buf,len,pos); if (!pos) return -1;
286 +  pos += 4;
287 +
288 +  while (numanswers--) {
289 +    pos = dns_packet_skipname(buf,len,pos); if (!pos) return -1;
290 +    pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) return -1;
291 +    uint16_unpack_big(header + 8,&datalen);
292 +    if (byte_equal(header,2,DNS_T_AAAA))
293 +      if (byte_equal(header + 2,2,DNS_C_IN))
294 +        if (datalen == 16) {
295 +         if (!dns_packet_copy(buf,len,pos,header,16)) return -1;
296 +         if (!stralloc_catb(out,header,16)) return -1;
297 +       }
298 +    pos += datalen;
299 +  }
300 +
301 +  dns_sortip6(out->s,out->len);
302 +  return 0;
303 +}
304 +
305 +static char *q = 0;
306 +
307 +int dns_ip6(stralloc *out,stralloc *fqdn)
308 +{
309 +  unsigned int i;
310 +  char code;
311 +  char ch;
312 +  char ip[16];
313 +
314 +  if (!stralloc_copys(out,"")) return -1;
315 +  if (!stralloc_readyplus(fqdn,1)) return -1;
316 +  fqdn->s[fqdn->len]=0;
317 +  if ((i=ip6_scan(fqdn->s,ip))) {
318 +    if (fqdn->s[i]) return -1;
319 +    stralloc_copyb(out,ip,16);
320 +    return 0;
321 +  }
322 +  if ((i=ip4_scan(fqdn->s,ip+12))) {
323 +    if (fqdn->s[i]) return -1;
324 +    byte_zero(ip,10);
325 +    ip[10]=ip[11]=0xff;
326 +    stralloc_copyb(out,ip,16);
327 +    return 0;
328 +  }
329 +  code = 0;
330 +  for (i = 0;i <= fqdn->len;++i) {
331 +    if (i < fqdn->len)
332 +      ch = fqdn->s[i];
333 +    else
334 +      ch = '.';
335 +
336 +    if ((ch == '[') || (ch == ']')) continue;
337 +    if (ch == '.') {
338 +      if (!stralloc_append(out,&code)) return -1;
339 +      code = 0;
340 +      continue;
341 +    }
342 +    if ((ch >= '0') && (ch <= '9')) {
343 +      code *= 10;
344 +      code += ch - '0';
345 +      continue;
346 +    }
347 +
348 +    if (!dns_domain_fromdot(&q,fqdn->s,fqdn->len)) return -1;
349 +    if (dns_resolve(q,DNS_T_AAAA) == -1) return -1;
350 +    if (dns_ip6_packet(out,dns_resolve_tx.packet,dns_resolve_tx.packetlen) == -1) return -1;
351 +    dns_transmit_free(&dns_resolve_tx);
352 +    dns_domain_free(&q);
353 +    return 0;
354 +  }
355 +
356 +  out->len &= ~3;
357 +  return 0;
358 +}
359 diff -uNr djbdns-1.05/dns_name.c djbdns-1.05-fefe/dns_name.c
360 --- djbdns-1.05/dns_name.c      Sun Feb 11 22:11:45 2001
361 +++ djbdns-1.05-fefe/dns_name.c Tue Feb 13 15:16:12 2001
362 @@ -2,6 +2,7 @@
363  #include "uint16.h"
364  #include "byte.h"
365  #include "dns.h"
366 +#include "ip6.h"
367  
368  static char *q = 0;
369  
370 @@ -43,6 +44,20 @@
371    if (dns_resolve(name,DNS_T_PTR) == -1) return -1;
372    if (dns_name_packet(out,dns_resolve_tx.packet,dns_resolve_tx.packetlen) == -1) return -1;
373    dns_transmit_free(&dns_resolve_tx);
374 +  dns_domain_free(&q);
375 +  return 0;
376 +}
377 +
378 +int dns_name6(stralloc *out,char ip[16])
379 +{
380 +  char name[DNS_NAME6_DOMAIN];
381 +
382 +  if (ip6_isv4mapped(ip))
383 +    return dns_name4(out,ip+12);
384 +  dns_name6_domain(name,ip);
385 +  if (dns_resolve(name,DNS_T_PTR) == -1) return -1;
386 +  if (dns_name_packet(out,dns_resolve_tx.packet,dns_resolve_tx.packetlen) == -1) return -1;
387 +  dns_transmit_free(&dns_resolve_tx);
388    dns_domain_free(&q);
389    return 0;
390  }
391 diff -uNr djbdns-1.05/dns_nd6.c djbdns-1.05-fefe/dns_nd6.c
392 --- djbdns-1.05/dns_nd6.c       Thu Jan  1 01:00:00 1970
393 +++ djbdns-1.05-fefe/dns_nd6.c  Tue Feb 13 15:16:12 2001
394 @@ -0,0 +1,28 @@
395 +#include "byte.h"
396 +#include "fmt.h"
397 +#include "dns.h"
398 +
399 +/* RFC1886:
400 + *   4321:0:1:2:3:4:567:89ab
401 + * ->
402 + *   b.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.0.0.0.0.1.2.3.4.IP6.INT.
403 + */
404 +
405 +unsigned int mkint(unsigned char a,unsigned char b) {
406 +  return ((unsigned int)a << 8) + (unsigned int)b;
407 +}
408 +
409 +int dns_name6_domain(char name[DNS_NAME6_DOMAIN],char ip[16])
410 +{
411 +  unsigned int j;
412 +
413 +  for (j=0; j<16; j++) {
414 +    name[j*4]=1;
415 +    name[j*4+1]=tohex(ip[15-j] & 15);
416 +    name[j*4+2]=1;
417 +    name[j*4+3]=tohex((unsigned char)ip[15-j] >> 4);
418 +  }
419 +  byte_copy(name + 4*16,14,"\3ip6\3int\0");
420 +  return 4*16+14;
421 +}
422 +
423 diff -uNr djbdns-1.05/dns_sortip6.c djbdns-1.05-fefe/dns_sortip6.c
424 --- djbdns-1.05/dns_sortip6.c   Thu Jan  1 01:00:00 1970
425 +++ djbdns-1.05-fefe/dns_sortip6.c      Tue Feb 13 15:16:12 2001
426 @@ -0,0 +1,20 @@
427 +#include "byte.h"
428 +#include "dns.h"
429 +
430 +/* XXX: sort servers by configurable notion of closeness? */
431 +/* XXX: pay attention to competence of each server? */
432 +
433 +void dns_sortip6(char *s,unsigned int n)
434 +{
435 +  unsigned int i;
436 +  char tmp[16];
437 +
438 +  n >>= 4;
439 +  while (n > 1) {
440 +    i = dns_random(n);
441 +    --n;
442 +    byte_copy(tmp,14,s + (i << 4));
443 +    byte_copy(s + (i << 4),16,s + (n << 4));
444 +    byte_copy(s + (n << 4),16,tmp);
445 +  }
446 +}
447 diff -uNr djbdns-1.05/dnsip6.c djbdns-1.05-fefe/dnsip6.c
448 --- djbdns-1.05/dnsip6.c        Thu Jan  1 01:00:00 1970
449 +++ djbdns-1.05-fefe/dnsip6.c   Tue Feb 13 15:16:12 2001
450 @@ -0,0 +1,40 @@
451 +#include "buffer.h"
452 +#include "exit.h"
453 +#include "strerr.h"
454 +#include "ip6.h"
455 +#include "dns.h"
456 +
457 +#define FATAL "dnsip: fatal: "
458 +
459 +static char seed[128];
460 +
461 +static stralloc fqdn;
462 +static stralloc out;
463 +char str[IP6_FMT];
464 +
465 +main(int argc,char **argv)
466 +{
467 +  int i;
468 +
469 +  dns_random_init(seed);
470 +
471 +  if (*argv) ++argv;
472 +
473 +  while (*argv) {
474 +    if (!stralloc_copys(&fqdn,*argv))
475 +      strerr_die2x(111,FATAL,"out of memory");
476 +    if (dns_ip6(&out,&fqdn) == -1)
477 +      strerr_die4sys(111,FATAL,"unable to find IPv6 address for ",*argv,": ");
478 +
479 +    for (i = 0;i + 16 <= out.len;i += 16) {
480 +      buffer_put(buffer_1,str,ip6_fmt(str,out.s + i));
481 +      buffer_puts(buffer_1," ");
482 +    }
483 +    buffer_puts(buffer_1,"\n");
484 +
485 +    ++argv;
486 +  }
487 +
488 +  buffer_flush(buffer_1);
489 +  _exit(0);
490 +}
491 diff -uNr djbdns-1.05/dnsname.c djbdns-1.05-fefe/dnsname.c
492 --- djbdns-1.05/dnsname.c       Sun Feb 11 22:11:45 2001
493 +++ djbdns-1.05-fefe/dnsname.c  Tue Feb 13 15:16:12 2001
494 @@ -9,6 +9,7 @@
495  static char seed[128];
496  
497  char ip[4];
498 +char ip6[16];
499  static stralloc out;
500  
501  int main(int argc,char **argv)
502 @@ -18,10 +19,15 @@
503    if (*argv) ++argv;
504  
505    while (*argv) {
506 -    if (!ip4_scan(*argv,ip))
507 -      strerr_die3x(111,FATAL,"unable to parse IP address ",*argv);
508 -    if (dns_name4(&out,ip) == -1)
509 -      strerr_die4sys(111,FATAL,"unable to find host name for ",*argv,": ");
510 +    if (ip6_scan(*argv,ip6)) {
511 +      if (dns_name6(&out,ip6) == -1)
512 +       strerr_die4sys(111,FATAL,"unable to find host name for ",*argv,": ");
513 +    } else {
514 +      if (!ip4_scan(*argv,ip))
515 +       strerr_die3x(111,FATAL,"unable to parse IP address ",*argv);
516 +      if (dns_name4(&out,ip) == -1)
517 +       strerr_die4sys(111,FATAL,"unable to find host name for ",*argv,": ");
518 +    }
519  
520      buffer_put(buffer_1,out.s,out.len);
521      buffer_puts(buffer_1,"\n");
522 diff -uNr djbdns-1.05/fmt_xlong.c djbdns-1.05-fefe/fmt_xlong.c
523 --- djbdns-1.05/fmt_xlong.c     Thu Jan  1 01:00:00 1970
524 +++ djbdns-1.05-fefe/fmt_xlong.c        Tue Feb 13 15:16:12 2001
525 @@ -0,0 +1,22 @@
526 +#include "fmt.h"
527 +
528 +char tohex(char num) {
529 +  if (num<10)
530 +    return num+'0';
531 +  else if (num<16)
532 +    return num-10+'a';
533 +  else
534 +    return -1;
535 +}
536 +
537 +unsigned int fmt_xlong(register char *s,register unsigned long u)
538 +{
539 +  register unsigned int len; register unsigned long q;
540 +  len = 1; q = u;
541 +  while (q > 15) { ++len; q /= 16; }
542 +  if (s) {
543 +    s += len;
544 +    do { *--s = tohex(u % 16); u /= 16; } while(u); /* handles u == 0 */
545 +  }
546 +  return len;
547 +}
548 diff -uNr djbdns-1.05/hier.c djbdns-1.05-fefe/hier.c
549 --- djbdns-1.05/hier.c  Sun Feb 11 22:11:45 2001
550 +++ djbdns-1.05-fefe/hier.c     Tue Feb 13 15:16:12 2001
551 @@ -29,6 +29,7 @@
552    c(auto_home,"bin","axfr-get",-1,-1,0755);
553  
554    c(auto_home,"bin","dnsip",-1,-1,0755);
555 +  c(auto_home,"bin","dnsip6",-1,-1,0755);
556    c(auto_home,"bin","dnsipq",-1,-1,0755);
557    c(auto_home,"bin","dnsname",-1,-1,0755);
558    c(auto_home,"bin","dnstxt",-1,-1,0755);
559 diff -uNr djbdns-1.05/ip6.h djbdns-1.05-fefe/ip6.h
560 --- djbdns-1.05/ip6.h   Thu Jan  1 01:00:00 1970
561 +++ djbdns-1.05-fefe/ip6.h      Tue Feb 13 15:16:12 2001
562 @@ -0,0 +1,28 @@
563 +#ifndef IP6_H
564 +#define IP6_H
565 +
566 +extern unsigned int ip6_scan(char *,char *);
567 +extern unsigned int ip6_fmt(char *,char *);
568 +
569 +extern unsigned int ip6_scan_flat(char *,char *);
570 +extern unsigned int ip6_fmt_flat(char *,char *);
571 +
572 +/*
573 + ip6 address syntax: (h = hex digit), no leading '0' required
574 +   1. hhhh:hhhh:hhhh:hhhh:hhhh:hhhh:hhhh:hhhh
575 +   2. any number of 0000 may be abbreviated as "::", but only once
576 + flat ip6 address syntax:
577 +   hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
578 + */
579 +
580 +#define IP6_FMT 40
581 +
582 +const static unsigned char V4mappedprefix[12]={0,0,0,0,0,0,0,0,0,0,0xff,0xff};
583 +const static unsigned char V6loopback[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1};
584 +const static unsigned char V6any[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
585 +
586 +#define ip6_isv4mapped(ip) (byte_equal(ip,12,V4mappedprefix))
587 +
588 +const static char ip4loopback[4] = {127,0,0,1};
589 +
590 +#endif
591 diff -uNr djbdns-1.05/ip6_fmt.c djbdns-1.05-fefe/ip6_fmt.c
592 --- djbdns-1.05/ip6_fmt.c       Thu Jan  1 01:00:00 1970
593 +++ djbdns-1.05-fefe/ip6_fmt.c  Tue Feb 13 15:16:12 2001
594 @@ -0,0 +1,55 @@
595 +#include "fmt.h"
596 +#include "ip6.h"
597 +#include <stdio.h>
598 +
599 +unsigned int ip6_fmt(char *s,char ip[16])
600 +{
601 +  unsigned int len;
602 +  unsigned int i;
603
604 +  len = 0;
605 +  i = fmt_xlong(s,((unsigned long) (unsigned char) ip[0] << 8) +
606 +                  (unsigned long) (unsigned char) ip[1]); len += i; if (s) s += i;
607 +  if (s) *s++ = ':'; ++len;
608 +  i = fmt_xlong(s,((unsigned long) (unsigned char) ip[2] << 8) +
609 +                  (unsigned long) (unsigned char) ip[3]); len += i; if (s) s += i;
610 +  if (s) *s++ = ':'; ++len;
611 +  i = fmt_xlong(s,((unsigned long) (unsigned char) ip[4] << 8) +
612 +                  (unsigned long) (unsigned char) ip[5]); len += i; if (s) s += i;
613 +  if (s) *s++ = ':'; ++len;
614 +  i = fmt_xlong(s,((unsigned long) (unsigned char) ip[6] << 8) +
615 +                  (unsigned long) (unsigned char) ip[7]); len += i; if (s) s += i;
616 +  if (s) *s++ = ':'; ++len;
617 +  i = fmt_xlong(s,((unsigned long) (unsigned char) ip[8] << 8) +
618 +                  (unsigned long) (unsigned char) ip[9]); len += i; if (s) s += i;
619 +  if (s) *s++ = ':'; ++len;
620 +  i = fmt_xlong(s,((unsigned long) (unsigned char) ip[10] << 8) +
621 +                  (unsigned long) (unsigned char) ip[11]); len += i; if (s) s += i;
622 +  if (s) *s++ = ':'; ++len;
623 +  i = fmt_xlong(s,((unsigned long) (unsigned char) ip[12] << 8) +
624 +                  (unsigned long) (unsigned char) ip[13]); len += i; if (s) s += i;
625 +  if (s) *s++ = ':'; ++len;
626 +  i = fmt_xlong(s,((unsigned long) (unsigned char) ip[14] << 8) +
627 +                  (unsigned long) (unsigned char) ip[15]); len += i; if (s) s += i;
628 +  if (s) *s=0;
629 +  return len;
630 +}
631 +
632 +static char tohex(char num) {
633 +  if (num<10)
634 +    return num+'0';
635 +  else if (num<16)
636 +    return num-10+'a';
637 +  else
638 +    return -1;
639 +}
640 +
641 +unsigned int ip6_fmt_flat(char *s,char ip[16])
642 +{
643 +  int i;
644 +  for (i=0; i<16; i++) {
645 +    *s++=tohex((unsigned char)ip[i] >> 4);
646 +    *s++=tohex((unsigned char)ip[i] & 15);
647 +  }
648 +  return 32;
649 +}
650 diff -uNr djbdns-1.05/ip6_scan.c djbdns-1.05-fefe/ip6_scan.c
651 --- djbdns-1.05/ip6_scan.c      Thu Jan  1 01:00:00 1970
652 +++ djbdns-1.05-fefe/ip6_scan.c Tue Feb 13 15:16:12 2001
653 @@ -0,0 +1,110 @@
654 +#include "scan.h"
655 +#include "ip4.h"
656 +#include "ip6.h"
657 +
658 +/*
659 + * IPv6 addresses are really ugly to parse.
660 + * Syntax: (h = hex digit)
661 + *   1. hhhh:hhhh:hhhh:hhhh:hhhh:hhhh:hhhh:hhhh
662 + *   2. any number of 0000 may be abbreviated as "::", but only once
663 + *   3. The last two words may be written as IPv4 address
664 + */
665 +
666 +unsigned int ip6_scan(char *s,char ip[16])
667 +{
668 +  unsigned int i;
669 +  unsigned int len=0;
670 +  unsigned int u;
671 +
672 +  char suffix[16];
673 +  int prefixlen=0;
674 +  int suffixlen=0;
675 +
676 +  for (i=0; i<16; i++) ip[i]=0;
677 +
678 +  for (;;) {
679 +    if (*s == ':') {
680 +      len++;
681 +      if (s[1] == ':') {       /* Found "::", skip to part 2 */
682 +       s+=2;
683 +       len++;
684 +       break;
685 +      }
686 +      s++;
687 +    }
688 +    i = scan_0x(s,&u);
689 +    if (!i) return 0;
690 +    if (prefixlen==12 && s[i]=='.') {
691 +      /* the last 4 bytes may be written as IPv4 address */
692 +      i=ip4_scan(s,ip+12);
693 +      if (i)
694 +       return i+len;
695 +      else
696 +       return 0;
697 +    }
698 +    ip[prefixlen++] = (u >> 8);
699 +    ip[prefixlen++] = (u & 255);
700 +    s += i; len += i;
701 +    if (prefixlen==16)
702 +      return len;
703 +  }
704 +
705 +/* part 2, after "::" */
706 +  for (;;) {
707 +    if (*s == ':') {
708 +      if (suffixlen==0)
709 +       break;
710 +      s++;
711 +      len++;
712 +    } else if (suffixlen!=0)
713 +      break;
714 +    i = scan_0x(s,&u);
715 +    if (!i) {
716 +      len--;
717 +      break;
718 +    }
719 +    if (suffixlen+prefixlen<=12 && s[i]=='.') {
720 +      int j=ip4_scan(s,suffix+suffixlen);
721 +      if (j) {
722 +       suffixlen+=4;
723 +       len+=j;
724 +       break;
725 +      } else
726 +       prefixlen=12-suffixlen; /* make end-of-loop test true */
727 +    }
728 +    suffix[suffixlen++] = (u >> 8);
729 +    suffix[suffixlen++] = (u & 255);
730 +    s += i; len += i;
731 +    if (prefixlen+suffixlen==16)
732 +      break;
733 +  }
734 +  for (i=0; i<suffixlen; i++)
735 +    ip[16-suffixlen+i] = suffix[i];
736 +  return len;
737 +}
738 +
739 +static long int fromhex(unsigned char c) {
740 +  if (c>='0' && c<='9')
741 +    return c-'0';
742 +  else if (c>='A' && c<='F')
743 +    return c-'A'+10;
744 +  else if (c>='a' && c<='f')
745 +    return c-'a'+10;
746 +  return -1;
747 +}
748 +
749 +unsigned int ip6_scan_flat(char *s,char ip[16])
750 +{
751 +  int i;
752 +  char *old=s;
753 +  for (i=0; i<16; i++) {
754 +    int tmp;
755 +    tmp=fromhex(*s++);
756 +    if (tmp<0) return 0;
757 +    ip[i]=tmp << 4;
758 +    tmp=fromhex(*s++);
759 +    if (tmp<0) return 0;
760 +    ip[i]+=tmp;
761 +  }
762 +  return 32;
763 +}
764 diff -uNr djbdns-1.05/printrecord.c djbdns-1.05-fefe/printrecord.c
765 --- djbdns-1.05/printrecord.c   Sun Feb 11 22:11:45 2001
766 +++ djbdns-1.05-fefe/printrecord.c      Tue Feb 13 15:16:12 2001
767 @@ -4,6 +4,7 @@
768  #include "byte.h"
769  #include "dns.h"
770  #include "printrecord.h"
771 +#include "ip6.h"
772  
773  static char *d;
774  
775 @@ -82,6 +83,15 @@
776        if (!stralloc_catulong0(out,ch,0)) return 0;
777      }
778    }
779 +  else if (byte_equal(misc,2,DNS_T_AAAA)) {
780 +    char ip6str[IP6_FMT];
781 +    int stringlen;
782 +    if (datalen != 16) { errno = error_proto; return 0; }
783 +    if (!stralloc_cats(out," AAAA ")) return 0;
784 +    pos = dns_packet_copy(buf,len,pos,misc,16); if (!pos) return 0;
785 +    stringlen=ip6_fmt(ip6str,misc);
786 +    if (!stralloc_cats(out,ip6str)) return 0;
787 +  }
788    else {
789      if (!stralloc_cats(out," ")) return 0;
790      uint16_unpack_big(misc,&u16);
791 diff -uNr djbdns-1.05/query.c djbdns-1.05-fefe/query.c
792 --- djbdns-1.05/query.c Sun Feb 11 22:11:45 2001
793 +++ djbdns-1.05-fefe/query.c    Tue Feb 13 15:16:12 2001
794 @@ -227,6 +227,158 @@
795      return 1;
796    }
797  
798 +  if (dns_domain_equal(d,"\0011\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\003ip6\003int\0")) {
799 +    if (z->level) goto LOWERLEVEL;
800 +    if (!rqa(z)) goto DIE;
801 +    if (typematch(DNS_T_PTR,dtype)) {
802 +      if (!response_rstart(d,DNS_T_PTR,"\0\0\0\0")) goto DIE;
803 +      if (!response_addname("\016ipv6-localhost\0")) goto DIE;
804 +      if (!response_addname("\015ipv6-loopback\0")) goto DIE;
805 +      response_rfinish(RESPONSE_ANSWER);
806 +    }
807 +    cleanup(z);
808 +    return 1;
809 +  }
810 +
811 +  if (dns_domain_equal(d,"\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\001e\001f\003ip6\003int\0")) {
812 +    if (z->level) goto LOWERLEVEL;
813 +    if (!rqa(z)) goto DIE;
814 +    if (typematch(DNS_T_PTR,dtype)) {
815 +      if (!response_rstart(d,DNS_T_PTR,"\0\0\0\0")) goto DIE;
816 +      if (!response_addname("\015ipv6-localnet\0")) goto DIE;
817 +      response_rfinish(RESPONSE_ANSWER);
818 +    }
819 +    cleanup(z);
820 +    return 1;
821 +  }
822 +
823 +  if (dns_domain_equal(d,"\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\001f\001f\003ip6\003int\0")) {
824 +    if (z->level) goto LOWERLEVEL;
825 +    if (!rqa(z)) goto DIE;
826 +    if (typematch(DNS_T_PTR,dtype)) {
827 +      if (!response_rstart(d,DNS_T_PTR,"\0\0\0\0")) goto DIE;
828 +      if (!response_addname("\020ipv6-mcastprefix\0")) goto DIE;
829 +      response_rfinish(RESPONSE_ANSWER);
830 +    }
831 +    cleanup(z);
832 +    return 1;
833 +  }
834 +
835 +  if (dns_domain_equal(d,"\0011\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0012\0010\001f\001f\003ip6\003int\0")) {
836 +    if (z->level) goto LOWERLEVEL;
837 +    if (!rqa(z)) goto DIE;
838 +    if (typematch(DNS_T_PTR,dtype)) {
839 +      if (!response_rstart(d,DNS_T_PTR,"\0\0\0\0")) goto DIE;
840 +      if (!response_addname("\015ipv6-allnodes\0")) goto DIE;
841 +      response_rfinish(RESPONSE_ANSWER);
842 +    }
843 +    cleanup(z);
844 +    return 1;
845 +  }
846 +
847 +  if (dns_domain_equal(d,"\0012\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0012\0010\001f\001f\003ip6\003int\0")) {
848 +    if (z->level) goto LOWERLEVEL;
849 +    if (!rqa(z)) goto DIE;
850 +    if (typematch(DNS_T_PTR,dtype)) {
851 +      if (!response_rstart(d,DNS_T_PTR,"\0\0\0\0")) goto DIE;
852 +      if (!response_addname("\017ipv6-allrouters\0")) goto DIE;
853 +      response_rfinish(RESPONSE_ANSWER);
854 +    }
855 +    cleanup(z);
856 +    return 1;
857 +  }
858 +
859 +  if (dns_domain_equal(d,"\0011\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0012\0010\001f\001f\003ip6\003int\0")) {
860 +    if (z->level) goto LOWERLEVEL;
861 +    if (!rqa(z)) goto DIE;
862 +    if (typematch(DNS_T_PTR,dtype)) {
863 +      if (!response_rstart(d,DNS_T_PTR,"\0\0\0\0")) goto DIE;
864 +      if (!response_addname("\015ipv6-allhosts\0")) goto DIE;
865 +      response_rfinish(RESPONSE_ANSWER);
866 +    }
867 +    cleanup(z);
868 +    return 1;
869 +  }
870 +
871 +  if (dns_domain_equal(d,"\016ipv6-localhost\0") ||
872 +      dns_domain_equal(d,"\015ipv6-loopback\0"))
873 +    {
874 +      if (z->level) goto LOWERLEVEL;
875 +      if (!rqa(z)) goto DIE;
876 +      if (typematch(DNS_T_AAAA,dtype)) {
877 +       if (!response_rstart(d,DNS_T_AAAA,"\0\0\0\0")) goto DIE;
878 +       if (!response_addbytes("\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001",16)) goto DIE;
879 +       response_rfinish(RESPONSE_ANSWER);
880 +      }
881 +      cleanup(z);
882 +      return 1;
883 +    }
884 +
885 +  if (dns_domain_equal(d,"\015ipv6-localnet\0"))
886 +    {
887 +      if (z->level) goto LOWERLEVEL;
888 +      if (!rqa(z)) goto DIE;
889 +      if (typematch(DNS_T_AAAA,dtype)) {
890 +       if (!response_rstart(d,DNS_T_AAAA,"\0\0\0\0")) goto DIE;
891 +       if (!response_addbytes("\376\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000",16)) goto DIE;
892 +       response_rfinish(RESPONSE_ANSWER);
893 +      }
894 +      cleanup(z);
895 +      return 1;
896 +    }
897 +
898 +  if (dns_domain_equal(d,"\020ipv6-mcastprefix\0"))
899 +    {
900 +      if (z->level) goto LOWERLEVEL;
901 +      if (!rqa(z)) goto DIE;
902 +      if (typematch(DNS_T_AAAA,dtype)) {
903 +       if (!response_rstart(d,DNS_T_AAAA,"\0\0\0\0")) goto DIE;
904 +       if (!response_addbytes("\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000",16)) goto DIE;
905 +       response_rfinish(RESPONSE_ANSWER);
906 +      }
907 +      cleanup(z);
908 +      return 1;
909 +    }
910 +
911 +  if (dns_domain_equal(d,"\15ipv6-allnodes\0"))
912 +    {
913 +      if (z->level) goto LOWERLEVEL;
914 +      if (!rqa(z)) goto DIE;
915 +      if (typematch(DNS_T_AAAA,dtype)) {
916 +       if (!response_rstart(d,DNS_T_AAAA,"\0\0\0\0")) goto DIE;
917 +       if (!response_addbytes("\377\002\000\000\000\000\000\000\000\000\000\000\000\000\000\001",16)) goto DIE;
918 +       response_rfinish(RESPONSE_ANSWER);
919 +      }
920 +      cleanup(z);
921 +      return 1;
922 +    }
923 +
924 +  if (dns_domain_equal(d,"\17ipv6-allrouters\0"))
925 +    {
926 +      if (z->level) goto LOWERLEVEL;
927 +      if (!rqa(z)) goto DIE;
928 +      if (typematch(DNS_T_AAAA,dtype)) {
929 +       if (!response_rstart(d,DNS_T_AAAA,"\0\0\0\0")) goto DIE;
930 +       if (!response_addbytes("\377\002\000\000\000\000\000\000\000\000\000\000\000\000\000\002",16)) goto DIE;
931 +       response_rfinish(RESPONSE_ANSWER);
932 +      }
933 +      cleanup(z);
934 +      return 1;
935 +    }
936 +
937 +  if (dns_domain_equal(d,"\15ipv6-allhosts\0"))
938 +    {
939 +      if (z->level) goto LOWERLEVEL;
940 +      if (!rqa(z)) goto DIE;
941 +      if (typematch(DNS_T_AAAA,dtype)) {
942 +       if (!response_rstart(d,DNS_T_AAAA,"\0\0\0\0")) goto DIE;
943 +       if (!response_addbytes("\377\002\000\000\000\000\000\000\000\000\000\000\000\000\000\003",16)) goto DIE;
944 +       response_rfinish(RESPONSE_ANSWER);
945 +      }
946 +      cleanup(z);
947 +      return 1;
948 +    }
949 +
950    if (dns_domain_equal(d,"\0011\0010\0010\003127\7in-addr\4arpa\0")) {
951      if (z->level) goto LOWERLEVEL;
952      if (!rqa(z)) goto DIE;
953 diff -uNr djbdns-1.05/scan_0x.c djbdns-1.05-fefe/scan_0x.c
954 --- djbdns-1.05/scan_0x.c       Thu Jan  1 01:00:00 1970
955 +++ djbdns-1.05-fefe/scan_0x.c  Tue Feb 13 15:16:12 2001
956 @@ -0,0 +1,24 @@
957 +#include "scan.h"
958 +
959 +long int fromhex(unsigned char c) {
960 +  if (c>='0' && c<='9')
961 +    return c-'0';
962 +  else if (c>='A' && c<='F')
963 +    return c-'A'+10;
964 +  else if (c>='a' && c<='f')
965 +    return c-'a'+10;
966 +  return -1;
967 +}
968 +
969 +unsigned int scan_0x(register const char *s,register unsigned int *u)
970 +{
971 +  register unsigned int pos = 0;
972 +  register unsigned long result = 0;
973 +  register long int c;
974 +  while ((c = fromhex((unsigned char) (s[pos]))) >= 0) {
975 +    result = (result << 4) + c;
976 +    ++pos;
977 +  }
978 +  *u = result;
979 +  return pos;
980 +}
981 diff -uNr djbdns-1.05/socket.h djbdns-1.05-fefe/socket.h
982 --- djbdns-1.05/socket.h        Sun Feb 11 22:11:45 2001
983 +++ djbdns-1.05-fefe/socket.h   Tue Feb 13 15:16:12 2001
984 @@ -5,17 +5,27 @@
985  
986  extern int socket_tcp(void);
987  extern int socket_udp(void);
988 +extern int socket_tcp6(void);
989 +extern int socket_udp6(void);
990  
991  extern int socket_connect4(int,const char *,uint16);
992 +extern int socket_connect6(int,char *,uint16);
993  extern int socket_connected(int);
994  extern int socket_bind4(int,char *,uint16);
995  extern int socket_bind4_reuse(int,char *,uint16);
996 +extern int socket_bind6(int,char *,uint16);
997 +extern int socket_bind6_reuse(int,char *,uint16);
998  extern int socket_listen(int,int);
999  extern int socket_accept4(int,char *,uint16 *);
1000 +extern int socket_accept6(int,char *,uint16 *);
1001  extern int socket_recv4(int,char *,int,char *,uint16 *);
1002  extern int socket_send4(int,const char *,int,const char *,uint16);
1003 +extern int socket_recv6(int,char *,int,char *,uint16 *);
1004 +extern int socket_send6(int,char *,int,char *,uint16);
1005  extern int socket_local4(int,char *,uint16 *);
1006  extern int socket_remote4(int,char *,uint16 *);
1007 +extern int socket_local6(int,char *,uint16 *);
1008 +extern int socket_remote6(int,char *,uint16 *);
1009  
1010  extern void socket_tryreservein(int,int);
1011  
1012 diff -uNr djbdns-1.05/tinydns-conf.c djbdns-1.05-fefe/tinydns-conf.c
1013 --- djbdns-1.05/tinydns-conf.c  Sun Feb 11 22:11:45 2001
1014 +++ djbdns-1.05-fefe/tinydns-conf.c     Tue Feb 13 15:16:12 2001
1015 @@ -82,6 +82,18 @@
1016    finish();
1017    perm(0755);
1018  
1019 +  start("root/add-host6");
1020 +  outs("#!/bin/sh\nexec ");
1021 +  outs(auto_home); outs("/bin/tinydns-edit data data.new add host6 ${1+\"$@\"}\n");
1022 +  finish();
1023 +  perm(0755);
1024 +
1025 +  start("root/add-alias6");
1026 +  outs("#!/bin/sh\nexec ");
1027 +  outs(auto_home); outs("/bin/tinydns-edit data data.new add alias6 ${1+\"$@\"}\n");
1028 +  finish();
1029 +  perm(0755);
1030 +
1031    start("root/add-mx");
1032    outs("#!/bin/sh\nexec ");
1033    outs(auto_home); outs("/bin/tinydns-edit data data.new add mx ${1+\"$@\"}\n");
1034 diff -uNr djbdns-1.05/tinydns-data.c djbdns-1.05-fefe/tinydns-data.c
1035 --- djbdns-1.05/tinydns-data.c  Sun Feb 11 22:11:45 2001
1036 +++ djbdns-1.05-fefe/tinydns-data.c     Tue Feb 13 15:16:12 2001
1037 @@ -8,6 +8,7 @@
1038  #include "byte.h"
1039  #include "fmt.h"
1040  #include "ip4.h"
1041 +#include "ip6.h"
1042  #include "exit.h"
1043  #include "case.h"
1044  #include "scan.h"
1045 @@ -172,6 +173,7 @@
1046  static char *d1;
1047  static char *d2;
1048  char dptr[DNS_NAME4_DOMAIN];
1049 +char d6ptr[DNS_NAME6_DOMAIN];
1050  
1051  char strnum[FMT_ULONG];
1052  
1053 @@ -193,6 +195,7 @@
1054    char loc[2];
1055    unsigned long u;
1056    char ip[4];
1057 +  char ip6[16];
1058    char type[2];
1059    char soa[20];
1060    char buf[4];
1061 @@ -338,6 +341,28 @@
1062           }
1063         }
1064         break;
1065 +
1066 +      case '6': case '3':
1067 +       if (!dns_domain_fromdot(&d1,f[0].s,f[0].len)) nomem();
1068 +       if (!stralloc_0(&f[2])) nomem();
1069 +       if (!scan_ulong(f[2].s,&ttl)) ttl = TTL_POSITIVE;
1070 +       ttdparse(&f[3],ttd);
1071 +       locparse(&f[4],loc);
1072 +
1073 +       if (!stralloc_0(&f[1])) nomem();
1074 +       if (ip6_scan_flat(f[1].s,ip6)) {
1075 +         rr_start(DNS_T_AAAA,ttl,ttd,loc);
1076 +         rr_add(ip6,16);
1077 +         rr_finish(d1);
1078 +
1079 +         if (line.s[0] == '6') {
1080 +           dns_name6_domain(d6ptr,ip6);
1081 +           rr_start(DNS_T_PTR,ttl,ttd,loc);
1082 +           rr_addname(d1);
1083 +           rr_finish(d6ptr);
1084 +         }
1085 +       }
1086 +       break;
1087  
1088        case '@':
1089         if (!dns_domain_fromdot(&d1,f[0].s,f[0].len)) nomem();
1090 diff -uNr djbdns-1.05/tinydns-edit.c djbdns-1.05-fefe/tinydns-edit.c
1091 --- djbdns-1.05/tinydns-edit.c  Sun Feb 11 22:11:45 2001
1092 +++ djbdns-1.05-fefe/tinydns-edit.c     Tue Feb 13 15:16:12 2001
1093 @@ -13,6 +13,7 @@
1094  #include "str.h"
1095  #include "fmt.h"
1096  #include "ip4.h"
1097 +#include "ip6.h"
1098  #include "dns.h"
1099  
1100  #define FATAL "tinydns-edit: fatal: "
1101 @@ -25,7 +26,8 @@
1102  
1103  void die_usage()
1104  {
1105 -  strerr_die1x(100,"tinydns-edit: usage: tinydns-edit data data.new add [ns|childns|host|alias|mx] domain a.b.c.d");
1106 +  strerr_die1x(100,"tinydns-edit: usage: tinydns-edit data data.new add [ns|childns|host|alias|mx] domain a.b.c.d\n"
1107 +                   "tinydns-edit: usage: tinydns-edit data data.new add [host6|alias6] domain a:b:c:d:e:f:g:h");
1108  }
1109  void nomem()
1110  {
1111 @@ -43,6 +45,7 @@
1112  char mode;
1113  static char *target;
1114  char targetip[4];
1115 +char targetip6[16];
1116  
1117  int fd;
1118  buffer b;
1119 @@ -61,7 +64,9 @@
1120  static char *d1;
1121  static char *d2;
1122  char ip[4];
1123 +char ip6[16];
1124  char ipstr[IP4_FMT];
1125 +char ip6str[IP6_FMT];
1126  char strnum[FMT_ULONG];
1127  
1128  static char *names[26];
1129 @@ -96,7 +101,9 @@
1130    if (str_equal(*argv,"ns")) mode = '.';
1131    else if (str_equal(*argv,"childns")) mode = '&';
1132    else if (str_equal(*argv,"host")) mode = '=';
1133 +  else if (str_equal(*argv,"host6")) mode = '6';
1134    else if (str_equal(*argv,"alias")) mode = '+';
1135 +  else if (str_equal(*argv,"alias6")) mode = '3';
1136    else if (str_equal(*argv,"mx")) mode = '@';
1137    else die_usage();
1138  
1139 @@ -104,7 +111,11 @@
1140    if (!dns_domain_fromdot(&target,*argv,str_len(*argv))) nomem();
1141  
1142    if (!*++argv) die_usage();
1143 -  if (!ip4_scan(*argv,targetip)) die_usage();
1144 +  if (mode == '6' || mode == '3') {
1145 +    if (!ip6_scan(*argv,targetip6)) die_usage();
1146 +  } else {
1147 +    if (!ip4_scan(*argv,targetip)) die_usage();
1148 +  }
1149  
1150    umask(077);
1151  
1152 @@ -129,7 +140,7 @@
1153         if (!dns_domain_fromdot(&names[i],f[0].s,f[0].len)) nomem();
1154        }
1155        break;
1156 -    case '+': case '=':
1157 +    case '+': case '=': case '6': case '3':
1158        ttl = TTL_POSITIVE;
1159        break;
1160      case '@':
1161 @@ -203,6 +214,18 @@
1162         }
1163         break;
1164  
1165 +      case '6':
1166 +       if (line.s[0] == '6') {
1167 +         if (!dns_domain_fromdot(&d1,f[0].s,f[0].len)) nomem();
1168 +         if (dns_domain_equal(d1,target))
1169 +           strerr_die2x(100,FATAL,"host name already used");
1170 +         if (!stralloc_0(&f[1])) nomem();
1171 +         if (ip6_scan(f[1].s,ip6))
1172 +           if (byte_equal(ip,16,targetip6))
1173 +             strerr_die2x(100,FATAL,"IPv6 address already used");
1174 +       }
1175 +       break;
1176 +
1177        case '@':
1178         if (line.s[0] == '@') {
1179            if (!dns_domain_fromdot(&d1,f[0].s,f[0].len)) nomem();
1180 @@ -228,7 +251,11 @@
1181    if (!stralloc_copyb(&f[0],&mode,1)) nomem();
1182    if (!dns_domain_todot_cat(&f[0],target)) nomem();
1183    if (!stralloc_cats(&f[0],":")) nomem();
1184 -  if (!stralloc_catb(&f[0],ipstr,ip4_fmt(ipstr,targetip))) nomem();
1185 +  if (mode == '6' || mode == '3') {
1186 +    if (!stralloc_catb(&f[0],ip6str,ip6_fmt_flat(ip6str,targetip6))) nomem();
1187 +  } else {
1188 +    if (!stralloc_catb(&f[0],ipstr,ip4_fmt(ipstr,targetip))) nomem();
1189 +  }
1190    switch(mode) {
1191      case '.': case '&': case '@':
1192        for (i = 0;i < 26;++i)
This page took 0.244331 seconds and 3 git commands to generate.