chiark / gitweb /
ipv4 quadonly, make test program compile wip.getaddrinfo
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 2 Jun 2014 00:01:14 +0000 (01:01 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 2 Jun 2014 00:01:14 +0000 (01:01 +0100)
client/addrtext.c
src/addrfam.c
src/adns.h

index 136de26ddf6d23babf83daba098500e891890000..f61aa68fcd9db42e88aea15662ed7f8d2850ebd3 100644 (file)
@@ -109,7 +109,7 @@ static void dotest(const char *input) {
   memset(&ours,0,sizeof(ours));
 
   socklen= sizeof(ours);
-  int our_r= adns_text2addr(input,PORT,&ours.sa,&socklen);
+  int our_r= adns_text2addr(input,PORT,0,&ours.sa,&socklen);
 
   memset(&aip,0,sizeof(aip));
   aip.ai_flags= AI_NUMERICHOST|AI_NUMERICSERV;
@@ -160,7 +160,7 @@ static void dotest(const char *input) {
 
   int ourbuflen= sizeof(ourbuf);
   int ourport;
-  our_r= adns_addr2text(&ours.sa, ourbuf,&ourbuflen, &ourport);
+  our_r= adns_addr2text(&ours.sa,0, ourbuf,&ourbuflen, &ourport);
 
   printf(" us %s",strerror(our_r));
   if (!our_r)
index 13f2a03c8f7d81e90c829fd691e9545ff9e4faca..99e2faba82b256f2af9b3d670710ea90fa6a7017 100644 (file)
@@ -296,11 +296,14 @@ int adns_text2addr(const char *text, uint16_t port, adns_queryflags flags,
   sa->sa_family= af;
   *portp = htons(port);
 
-  int r= inet_pton(af,parse,dst);
-  if (!r) INVAL("inet_pton rejected");
-  if (r<0) {
-    af_debug("inet_pton failed on `%s'", parse);
-    return errno;
+  if (af == AF_INET && !(flags & adns_qf_addrlit_ipv4_quadonly)) {
+    /* we have to use inet_aton to deal with non-dotted-quad literals */
+    int r= inet_aton(parse,&SIN(sa)->sin_addr);
+    if (!r) INVAL("inet_aton rejected");
+  } else {
+    int r= inet_pton(af,parse,dst);
+    if (!r) INVAL("inet_pton rejected");
+    assert(r>0);
   }
 
   if (scopestr) {
index 07bc04e2d7038101da6298553d3aef3cc80125af..012df15d78138ed629c94ddb4cf93b6aed994cdf 100644 (file)
@@ -138,6 +138,7 @@ typedef enum { /* In general, or together the desired flags: */
  adns__qf_afmask=       0x00001c00,/* all the above flag bits */
  adns_qf_addrlit_scope_forbid=0x00002000,/* forbid %<scope> in IPv6 literals */
  adns_qf_addrlit_scope_numeric=0x00004000,/* %<scope> may only be numeric */
+ adns_qf_addrlit_ipv4_quadonly=0x00008000,/* reject non-dotted-quad ipv4 */
  adns__qf_internalmask=  0x0ff00000
 } adns_queryflags;