gpg: Print a warning if no command has been given.
[gnupg.git] / g10 / keyring.c
index ca9a698..328290e 100644 (file)
@@ -15,7 +15,7 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, see <https://www.gnu.org/licenses/>.
  */
 
 #include <config.h>
@@ -23,7 +23,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
-#include <assert.h>
 #include <unistd.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -243,7 +242,7 @@ keyring_new (void *token)
   KEYRING_HANDLE hd;
   KR_RESOURCE resource = token;
 
-  assert (resource);
+  log_assert (resource);
 
   hd = xtrycalloc (1, sizeof *hd);
   if (!hd)
@@ -258,7 +257,7 @@ keyring_release (KEYRING_HANDLE hd)
 {
     if (!hd)
         return;
-    assert (active_handles > 0);
+    log_assert (active_handles > 0);
     active_handles--;
     xfree (hd->word_match.name);
     xfree (hd->word_match.pattern);
@@ -691,7 +690,7 @@ keyring_delete_keyblock (KEYRING_HANDLE hd)
 int
 keyring_search_reset (KEYRING_HANDLE hd)
 {
-    assert (hd);
+    log_assert (hd);
 
     hd->current.kr = NULL;
     iobuf_close (hd->current.iobuf);
@@ -749,10 +748,10 @@ prepare_search (KEYRING_HANDLE hd)
         if (!hd->current.kr) {
           if (DBG_LOOKUP)
             log_debug ("%s: keyring not available!\n", __func__);
-            hd->current.eof = 1;
-            return -1; /* keyring not available */
+          hd->current.eof = 1;
+          return -1; /* keyring not available */
         }
-        assert (!hd->current.iobuf);
+        log_assert (!hd->current.iobuf);
     }
     else { /* EOF */
         if (DBG_LOOKUP)
@@ -929,13 +928,27 @@ compare_name (int mode, const char *name, const char *uid, size_t uidlen)
     else if (   mode == KEYDB_SEARCH_MODE_MAIL
              || mode == KEYDB_SEARCH_MODE_MAILSUB
              || mode == KEYDB_SEARCH_MODE_MAILEND) {
+        int have_angles = 1;
        for (i=0, s= uid; i < uidlen && *s != '<'; s++, i++)
            ;
+       if (i == uidlen)
+         {
+           /* The UID is a plain addr-spec (cf. RFC2822 section 4.3).  */
+           have_angles = 0;
+           s = uid;
+           i = 0;
+         }
        if (i < uidlen)  {
-           /* skip opening delim and one char and look for the closing one*/
-           s++; i++;
-           for (se=s+1, i++; i < uidlen && *se != '>'; se++, i++)
-               ;
+           if (have_angles)
+             {
+               /* skip opening delim and one char and look for the closing one*/
+               s++; i++;
+               for (se=s+1, i++; i < uidlen && *se != '>'; se++, i++)
+                 ;
+             }
+           else
+             se = s + uidlen;
+
            if (i < uidlen) {
                i = se - s;
                if (mode == KEYDB_SEARCH_MODE_MAIL) {
@@ -1084,7 +1097,7 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc,
           if (desc[n].mode == KEYDB_SEARCH_MODE_WORDS)
             name = desc[n].u.name;
         }
-      assert (name);
+      log_assert (name);
       if ( !hd->word_match.name || strcmp (hd->word_match.name, name) )
         {
           /* name changed */
@@ -1339,6 +1352,7 @@ static int
 rename_tmp_file (const char *bakfname, const char *tmpfname, const char *fname)
 {
   int rc = 0;
+  int block = 0;
 
   /* Invalidate close caches.  */
   if (iobuf_ioctl (NULL, IOBUF_IOCTL_INVALIDATE_CACHE, 0, (char*)tmpfname ))
@@ -1350,12 +1364,18 @@ rename_tmp_file (const char *bakfname, const char *tmpfname, const char *fname)
   iobuf_ioctl (NULL, IOBUF_IOCTL_INVALIDATE_CACHE, 0, (char*)fname );
 
   /* First make a backup file. */
-  rc = keybox_file_rename (fname, bakfname);
+  block = 1;
+  rc = gnupg_rename_file (fname, bakfname, &block);
   if (rc)
     goto fail;
 
   /* then rename the file */
-  rc = keybox_file_rename (tmpfname, fname);
+  rc = gnupg_rename_file (tmpfname, fname, NULL);
+  if (block)
+    {
+      gnupg_unblock_all_signals ();
+      block = 0;
+    }
   if (rc)
     {
       register_secured_file (fname);
@@ -1380,6 +1400,8 @@ rename_tmp_file (const char *bakfname, const char *tmpfname, const char *fname)
   return 0;
 
  fail:
+  if (block)
+    gnupg_unblock_all_signals ();
   return rc;
 }
 
@@ -1456,7 +1478,7 @@ keyring_rebuild_cache (void *token,int noisy)
 
   for (;;)
     {
-      rc = keyring_search (hd, &desc, 1, NULL, 0);
+      rc = keyring_search (hd, &desc, 1, NULL, 1 /* ignore_legacy */);
       if (rc)
         break;  /* ready.  */
 
@@ -1493,9 +1515,6 @@ keyring_rebuild_cache (void *token,int noisy)
             goto leave;
         }
 
-      if (gpg_err_code (rc) == GPG_ERR_LEGACY_KEY)
-        continue;
-
       release_kbnode (keyblock);
       rc = keyring_get_keyblock (hd, &keyblock);
       if (rc)
@@ -1564,8 +1583,10 @@ keyring_rebuild_cache (void *token,int noisy)
             goto leave;
 
           if ( !(++count % 50) && noisy && !opt.quiet)
-            log_info(_("%lu keys cached so far (%lu signatures)\n"),
-                     count, sigcount );
+            log_info (ngettext("%lu keys cached so far (%lu signature)\n",
+                               "%lu keys cached so far (%lu signatures)\n",
+                               sigcount),
+                      count, sigcount);
         }
     } /* end main loop */
   if (rc == -1)
@@ -1575,8 +1596,15 @@ keyring_rebuild_cache (void *token,int noisy)
       log_error ("keyring_search failed: %s\n", gpg_strerror (rc));
       goto leave;
     }
-  if(noisy || opt.verbose)
-    log_info(_("%lu keys cached (%lu signatures)\n"), count, sigcount );
+
+  if (noisy || opt.verbose)
+    {
+      log_info (ngettext("%lu key cached",
+                         "%lu keys cached", count), count);
+      log_printf (ngettext(" (%lu signature)\n",
+                           " (%lu signatures)\n", sigcount), sigcount);
+    }
+
   if (tmpfp)
     {
       if (iobuf_close (tmpfp))
@@ -1704,7 +1732,7 @@ do_copy (int mode, const char *fname, KBNODE root,
            goto leave;
        }
        /* skip this keyblock */
-       assert( n_packets );
+       log_assert( n_packets );
        rc = skip_some_packets( fp, n_packets );
        if( rc ) {
            log_error("%s: skipping %u packets failed: %s\n",