@@ -217,7 +217,14 @@ struct dnsentry {
217
217
218
218
static const char * type2name (int dnstype )
219
219
{
220
- return (dnstype == 1 )?"A" :"AAAA" ;
220
+ switch (dnstype ) {
221
+ case DNS_TYPE_A : return "A" ;
222
+ case DNS_TYPE_NS : return "NS" ;
223
+ case DNS_TYPE_CNAME : return "CNAME" ;
224
+ case DNS_TYPE_TXT : return "TXT" ;
225
+ case DNS_TYPE_AAAA : return "AAAA" ;
226
+ }
227
+ return "Unknown" ;
221
228
}
222
229
223
230
static size_t
@@ -371,6 +378,7 @@ static DOHcode cnameappend(struct cnamestore *c,
371
378
ptr = realloc (c -> alloc , c -> allocsize );
372
379
if (!ptr ) {
373
380
free (c -> alloc );
381
+ c -> alloc = NULL ;
374
382
return DOH_OUT_OF_MEM ;
375
383
}
376
384
c -> alloc = ptr ;
@@ -755,7 +763,7 @@ static void help(const char *msg)
755
763
fprintf (stderr , "Usage: doh [options] <host> [URL]\n"
756
764
" -h this help\n"
757
765
" -k insecure mode - don't validate TLS certificate\n"
758
- " -tTYPE (e.g., TXT, A, AAAA)\n"
766
+ " -tTYPE (e.g., TXT, CNAME, A, AAAA)\n"
759
767
" (to specify record type)\n"
760
768
" -T test mode\n"
761
769
" -v verbose mode\n"
@@ -867,43 +875,39 @@ int main(int argc, char **argv)
867
875
doh_init (& d );
868
876
869
877
for (i = 0 ; i < n_urls ; i ++ ) {
870
- if ((transport == v4 || transport == v46 ) &&
871
- (query_type == 0 || query_type == DNS_TYPE_A )) {
878
+ if (query_type == 0 || query_type == DNS_TYPE_A ) {
872
879
rc = initprobe (DNS_TYPE_A , host , urls [i ], multi ,
873
880
trace_enabled , headers , insecure_mode ,
874
881
transport , resolve );
875
882
if (rc != 0 ) {
876
- fprintf (stderr , "initprobe() failed (v4 )\n" );
883
+ fprintf (stderr , "initprobe() failed (DNS_TYPE_A )\n" );
877
884
exit (1 );
878
885
}
879
886
}
880
- if ((transport == v6 || transport == v46 ) &&
881
- (query_type == 0 || query_type == DNS_TYPE_AAAA )) {
887
+ if (query_type == 0 || query_type == DNS_TYPE_AAAA ) {
882
888
rc = initprobe (DNS_TYPE_AAAA , host , urls [i ], multi ,
883
889
trace_enabled , headers , insecure_mode ,
884
890
transport , resolve );
885
891
if (rc != 0 ) {
886
- fprintf (stderr , "initprobe() failed (v6 )\n" );
892
+ fprintf (stderr , "initprobe() failed (DNS_TYPE_AAAA )\n" );
887
893
exit (1 );
888
894
}
889
895
}
890
-
891
896
if (query_type == DNS_TYPE_TXT ) {
892
897
rc = initprobe (DNS_TYPE_TXT , host , urls [i ], multi ,
893
898
trace_enabled , headers , insecure_mode ,
894
899
transport , resolve );
895
900
if (rc != 0 ) {
896
- fprintf (stderr , "initprobe() failed (v6 )\n" );
901
+ fprintf (stderr , "initprobe() failed (DNS_TYPE_TXT )\n" );
897
902
exit (1 );
898
903
}
899
904
}
900
-
901
905
if (query_type == DNS_TYPE_CNAME ) {
902
906
rc = initprobe (DNS_TYPE_CNAME , host , urls [i ], multi ,
903
907
trace_enabled , headers , insecure_mode ,
904
908
transport , resolve );
905
909
if (rc != 0 ) {
906
- fprintf (stderr , "initprobe() failed (v6 )\n" );
910
+ fprintf (stderr , "initprobe() failed (DNS_TYPE_CNAME )\n" );
907
911
exit (1 );
908
912
}
909
913
}
@@ -992,27 +996,34 @@ int main(int argc, char **argv)
992
996
int i ;
993
997
printf ("[%s]\n" , host );
994
998
printf ("TTL: %u seconds\n" , d .ttl );
995
- for (i = 0 ; i < d .numv4 ; i ++ ) {
996
- printf ("A: %d.%d.%d.%d\n" ,
997
- d .v4addr [i ]>>24 ,
998
- (d .v4addr [i ]>>16 ) & 0xff ,
999
- (d .v4addr [i ]>>8 ) & 0xff ,
1000
- d .v4addr [i ] & 0xff );
999
+ if (query_type == 0 || query_type == DNS_TYPE_A ) {
1000
+ for (i = 0 ; i < d .numv4 ; i ++ ) {
1001
+ printf ("A: %d.%d.%d.%d\n" ,
1002
+ d .v4addr [i ]>>24 ,
1003
+ (d .v4addr [i ]>>16 ) & 0xff ,
1004
+ (d .v4addr [i ]>>8 ) & 0xff ,
1005
+ d .v4addr [i ] & 0xff );
1006
+ }
1001
1007
}
1002
- for (i = 0 ; i < d .numv6 ; i ++ ) {
1003
- int j ;
1004
- printf ("AAAA: " );
1005
- for (j = 0 ; j < 16 ; j += 2 ) {
1006
- printf ("%s%02x%02x" , j ? ":" : "" , d .v6addr [i ].byte [j ],
1007
- d .v6addr [i ].byte [j + 1 ]);
1008
+ if (query_type == 0 || query_type == DNS_TYPE_AAAA ) {
1009
+ for (i = 0 ; i < d .numv6 ; i ++ ) {
1010
+ int j ;
1011
+ printf ("AAAA: " );
1012
+ for (j = 0 ; j < 16 ; j += 2 ) {
1013
+ printf ("%s%02x%02x" , j ? ":" : "" , d .v6addr [i ].byte [j ],
1014
+ d .v6addr [i ].byte [j + 1 ]);
1015
+ }
1016
+ printf ("\n" );
1008
1017
}
1009
- printf ("\n" );
1010
1018
}
1011
- if (query_type == 0 || query_type == DNS_TYPE_CNAME )
1019
+ if (query_type == 0 || query_type == DNS_TYPE_CNAME ) {
1012
1020
for (i = 0 ; i < d .numcname ; i ++ )
1013
1021
printf ("CNAME: %s\n" , d .cname [i ].alloc );
1014
- for (i = 0 ; i < d .numtxt ; i ++ )
1015
- printf ("TXT: %s\n" , d .txt [i ].txt );
1022
+ }
1023
+ if (query_type == 0 || query_type == DNS_TYPE_TXT ) {
1024
+ for (i = 0 ; i < d .numtxt ; i ++ )
1025
+ printf ("TXT: %s\n" , d .txt [i ].txt );
1026
+ }
1016
1027
}
1017
1028
1018
1029
doh_cleanup (& d );
0 commit comments