LCOV - code coverage report
Current view: top level - dirmngr - t-dns-stuff.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 28 128 21.9 %
Date: 2016-12-01 18:37:21 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /* t-dns-cert.c - Module test for dns-stuff.c
       2             :  * Copyright (C) 2011 Free Software Foundation, Inc.
       3             :  * Copyright (C) 2011, 2015 Werner Koch
       4             :  *
       5             :  * This file is part of GnuPG.
       6             :  *
       7             :  * GnuPG is free software; you can redistribute it and/or modify
       8             :  * it under the terms of the GNU General Public License as published by
       9             :  * the Free Software Foundation; either version 3 of the License, or
      10             :  * (at your option) any later version.
      11             :  *
      12             :  * GnuPG is distributed in the hope that it will be useful,
      13             :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      14             :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      15             :  * GNU General Public License for more details.
      16             :  *
      17             :  * You should have received a copy of the GNU General Public License
      18             :  * along with this program; if not, see <https://www.gnu.org/licenses/>.
      19             :  */
      20             : 
      21             : #include <config.h>
      22             : #include <stdio.h>
      23             : #include <stdlib.h>
      24             : #include <assert.h>
      25             : 
      26             : 
      27             : #include "util.h"
      28             : #include "dns-stuff.h"
      29             : 
      30             : #define PGM "t-dns-stuff"
      31             : 
      32             : static int verbose;
      33             : static int debug;
      34             : 
      35             : 
      36             : 
      37             : int
      38           1 : main (int argc, char **argv)
      39             : {
      40           1 :   int last_argc = -1;
      41             :   gpg_error_t err;
      42           1 :   int any_options = 0;
      43           1 :   int opt_tor = 0;
      44           1 :   int opt_new_circuit = 0;
      45           1 :   int opt_cert = 0;
      46           1 :   int opt_srv = 0;
      47           1 :   int opt_bracket = 0;
      48           1 :   int opt_cname = 0;
      49           1 :   char const *name = NULL;
      50             : 
      51           1 :   gpgrt_init ();
      52           1 :   log_set_prefix (PGM, GPGRT_LOG_WITH_PREFIX);
      53           1 :   if (argc)
      54           1 :     { argc--; argv++; }
      55           2 :   while (argc && last_argc != argc )
      56             :     {
      57           0 :       last_argc = argc;
      58           0 :       if (!strcmp (*argv, "--"))
      59             :         {
      60           0 :           argc--; argv++;
      61           0 :           break;
      62             :         }
      63           0 :       else if (!strcmp (*argv, "--help"))
      64             :         {
      65           0 :           fputs ("usage: " PGM " [HOST]\n"
      66             :                  "Options:\n"
      67             :                  "  --verbose           print timings etc.\n"
      68             :                  "  --debug             flyswatter\n"
      69             :                  "  --standard-resolver use the system's resolver\n"
      70             :                  "  --use-tor           use Tor\n"
      71             :                  "  --new-circuit       use a new Tor circuit\n"
      72             :                  "  --bracket           enclose v6 addresses in brackets\n"
      73             :                  "  --cert              lookup a CERT RR\n"
      74             :                  "  --srv               lookup a SRV RR\n"
      75             :                  "  --cname             lookup a CNAME RR\n"
      76             :                  , stdout);
      77           0 :           exit (0);
      78             :         }
      79           0 :       else if (!strcmp (*argv, "--verbose"))
      80             :         {
      81           0 :           verbose++;
      82           0 :           argc--; argv++;
      83             :         }
      84           0 :       else if (!strcmp (*argv, "--debug"))
      85             :         {
      86           0 :           verbose += 2;
      87           0 :           debug++;
      88           0 :           argc--; argv++;
      89             :         }
      90           0 :       else if (!strcmp (*argv, "--use-tor"))
      91             :         {
      92           0 :           opt_tor = 1;
      93           0 :           argc--; argv++;
      94             :         }
      95           0 :       else if (!strcmp (*argv, "--new-circuit"))
      96             :         {
      97           0 :           opt_new_circuit = 1;
      98           0 :           argc--; argv++;
      99             :         }
     100           0 :       else if (!strcmp (*argv, "--standard-resolver"))
     101             :         {
     102           0 :           enable_standard_resolver (1);
     103           0 :           argc--; argv++;
     104             :         }
     105           0 :       else if (!strcmp (*argv, "--bracket"))
     106             :         {
     107           0 :           opt_bracket = 1;
     108           0 :           argc--; argv++;
     109             :         }
     110           0 :       else if (!strcmp (*argv, "--cert"))
     111             :         {
     112           0 :           any_options = opt_cert = 1;
     113           0 :           argc--; argv++;
     114             :         }
     115           0 :       else if (!strcmp (*argv, "--srv"))
     116             :         {
     117           0 :           any_options = opt_srv = 1;
     118           0 :           argc--; argv++;
     119             :         }
     120           0 :       else if (!strcmp (*argv, "--cname"))
     121             :         {
     122           0 :           any_options = opt_cname = 1;
     123           0 :           argc--; argv++;
     124             :         }
     125           0 :       else if (!strncmp (*argv, "--", 2))
     126             :         {
     127           0 :           fprintf (stderr, PGM ": unknown option '%s'\n", *argv);
     128           0 :           exit (1);
     129             :         }
     130             :     }
     131             : 
     132           1 :   if (!argc && !any_options)
     133             :     {
     134           1 :       opt_cert = 1;
     135           1 :       name = "simon.josefsson.org";
     136             :     }
     137           0 :   else if (argc == 1)
     138           0 :     name = *argv;
     139             :   else
     140             :     {
     141           0 :       fprintf (stderr, PGM ": none or too many host names given\n");
     142           0 :       exit (1);
     143             :     }
     144             : 
     145           1 :   if (opt_tor)
     146             :     {
     147           0 :       err = enable_dns_tormode (opt_new_circuit);
     148           0 :       if (err)
     149             :         {
     150           0 :           fprintf (stderr, "error switching into Tor mode: %s\n",
     151             :                    gpg_strerror (err));
     152           0 :           exit (1);
     153             :         }
     154             :     }
     155             : 
     156           1 :   if (opt_cert)
     157             :     {
     158             :       unsigned char *fpr;
     159             :       size_t fpr_len;
     160             :       char *url;
     161             :       void *key;
     162             :       size_t keylen;
     163             : 
     164           1 :       if (verbose || any_options)
     165           0 :         printf ("CERT lookup on '%s'\n", name);
     166             : 
     167           1 :       err = get_dns_cert (name, DNS_CERTTYPE_ANY, &key, &keylen,
     168             :                           &fpr, &fpr_len, &url);
     169           1 :       if (err)
     170           1 :         printf ("get_dns_cert failed: %s <%s>\n",
     171             :                 gpg_strerror (err), gpg_strsource (err));
     172           0 :       else if (key)
     173             :         {
     174           0 :           if (verbose || any_options)
     175           0 :             printf ("Key found (%u bytes)\n", (unsigned int)keylen);
     176             :         }
     177             :       else
     178             :         {
     179           0 :           if (fpr)
     180             :             {
     181             :               int i;
     182             : 
     183           0 :               printf ("Fingerprint found (%d bytes): ", (int)fpr_len);
     184           0 :               for (i = 0; i < fpr_len; i++)
     185           0 :                 printf ("%02X", fpr[i]);
     186           0 :               putchar ('\n');
     187             :             }
     188             :           else
     189           0 :             printf ("No fingerprint found\n");
     190             : 
     191           0 :           if (url)
     192           0 :             printf ("URL found: %s\n", url);
     193             :           else
     194           0 :             printf ("No URL found\n");
     195             : 
     196             :         }
     197             : 
     198           1 :       xfree (key);
     199           1 :       xfree (fpr);
     200           1 :       xfree (url);
     201             :     }
     202           0 :   else if (opt_cname)
     203             :     {
     204             :       char *cname;
     205             : 
     206           0 :       printf ("CNAME lookup on '%s'\n", name);
     207           0 :       err = get_dns_cname (name, &cname);
     208           0 :       if (err)
     209           0 :         printf ("get_dns_cname failed: %s <%s>\n",
     210             :                 gpg_strerror (err), gpg_strsource (err));
     211             :       else
     212             :         {
     213           0 :           printf ("CNAME found: '%s'\n", cname);
     214             :         }
     215             : 
     216           0 :       xfree (cname);
     217             :     }
     218           0 :   else if (opt_srv)
     219             :     {
     220             :       struct srventry *srv;
     221             :       int rc,i;
     222             : 
     223           0 :       rc=getsrv (name? name : "_hkp._tcp.wwwkeys.pgp.net", &srv);
     224           0 :       printf("Count=%d\n",rc);
     225           0 :       for(i=0;i<rc;i++)
     226             :         {
     227           0 :           printf("priority=%-8hu  ",srv[i].priority);
     228           0 :           printf("weight=%-8hu  ",srv[i].weight);
     229           0 :           printf("port=%-5hu  ",srv[i].port);
     230           0 :           printf("target=%s\n",srv[i].target);
     231             :         }
     232             : 
     233           0 :       xfree(srv);
     234             :     }
     235             :   else /* Standard lookup.  */
     236             :     {
     237             :       char *cname;
     238             :       dns_addrinfo_t aibuf, ai;
     239             :       char *host;
     240             : 
     241           0 :       printf ("Lookup on '%s'\n", name);
     242             : 
     243           0 :       err = resolve_dns_name (name, 0, 0, SOCK_STREAM, &aibuf, &cname);
     244           0 :       if (err)
     245             :         {
     246           0 :           fprintf (stderr, PGM": resolving '%s' failed: %s\n",
     247             :                    name, gpg_strerror (err));
     248           0 :           exit (1);
     249             :         }
     250             : 
     251           0 :       if (cname)
     252           0 :         printf ("cname: %s\n", cname);
     253           0 :       for (ai = aibuf; ai; ai = ai->next)
     254             :         {
     255           0 :           printf ("%s %3d %3d   ",
     256           0 :                   ai->family == AF_INET6? "inet6" :
     257           0 :                   ai->family == AF_INET?  "inet4" : "?    ",
     258             :                   ai->socktype, ai->protocol);
     259             : 
     260           0 :           err = resolve_dns_addr (ai->addr, ai->addrlen,
     261             :                                   (DNS_NUMERICHOST
     262             :                                    | (opt_bracket? DNS_WITHBRACKET:0)),
     263             :                                   &host);
     264           0 :           if (err)
     265           0 :             printf ("[resolve_dns_addr failed: %s]", gpg_strerror (err));
     266             :           else
     267             :             {
     268           0 :               printf ("%s", host);
     269           0 :               xfree (host);
     270             :             }
     271             : 
     272           0 :           err = resolve_dns_addr (ai->addr, ai->addrlen,
     273             :                                   (opt_bracket? DNS_WITHBRACKET:0),
     274             :                                   &host);
     275           0 :           if (err)
     276           0 :             printf ("[resolve_dns_addr failed (2): %s]", gpg_strerror (err));
     277             :           else
     278             :             {
     279           0 :               if (!is_ip_address (host))
     280           0 :                 printf ("  (%s)", host);
     281           0 :               xfree (host);
     282             :             }
     283           0 :           putchar ('\n');
     284             :         }
     285           0 :       xfree (cname);
     286           0 :       free_dns_addrinfo (aibuf);
     287             :     }
     288             : 
     289             : 
     290           1 :   return 0;
     291             : }

Generated by: LCOV version 1.11