Migrated more stuff to doc/
[gnupg.git] / g10 / keyring.c
index 0d33b59..bd577a6 100644 (file)
@@ -15,7 +15,8 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ * USA.
  */
 
 #include <config.h>
@@ -28,6 +29,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 
+#include "gpg.h"
 #include "util.h"
 #include "keyring.h"
 #include "packet.h"
@@ -101,7 +103,7 @@ new_offset_item (void)
 {
   struct off_item *k;
   
-  k = m_alloc_clear (sizeof *k);
+  k = xmalloc_clear (sizeof *k);
   return k;
 }
 
@@ -114,7 +116,7 @@ release_offset_items (struct off_item *k)
   for (; k; k = k2)
     {
       k2 = k->next;
-      m_free (k);
+      xfree (k);
     }
 }
 #endif
@@ -124,7 +126,7 @@ new_offset_hash_table (void)
 {
   struct off_item **tbl;
 
-  tbl = m_alloc_clear (2048 * sizeof *tbl);
+  tbl = xmalloc_clear (2048 * sizeof *tbl);
   return tbl;
 }
 
@@ -138,7 +140,7 @@ release_offset_hash_table (OffsetHashTable tbl)
     return;
   for (i=0; i < 2048; i++)
     release_offset_items (tbl[i]);
-  m_free (tbl);
+  xfree (tbl);
 }
 #endif
 
@@ -216,7 +218,7 @@ keyring_register_filename (const char *fname, int secret, void **ptr)
     if (secret)
       register_secured_file (fname);
 
-    kr = m_alloc (sizeof *kr + strlen (fname));
+    kr = xmalloc (sizeof *kr + strlen (fname));
     strcpy (kr->fname, fname);
     kr->secret = !!secret;
     kr->lockhd = NULL;
@@ -257,7 +259,7 @@ keyring_new (void *token, int secret)
 
   assert (resource && !resource->secret == !secret);
   
-  hd = m_alloc_clear (sizeof *hd);
+  hd = xmalloc_clear (sizeof *hd);
   hd->resource = resource;
   hd->secret = !!secret;
   active_handles++;
@@ -271,10 +273,10 @@ keyring_release (KEYRING_HANDLE hd)
         return;
     assert (active_handles > 0);
     active_handles--;
-    m_free (hd->word_match.name);
-    m_free (hd->word_match.pattern);
+    xfree (hd->word_match.name);
+    xfree (hd->word_match.pattern);
     iobuf_close (hd->current.iobuf);
-    m_free (hd);
+    xfree (hd);
 }
 
 
@@ -371,10 +373,11 @@ keyring_get_keyblock (KEYRING_HANDLE hd, KBNODE *ret_kb)
         return -1; /* no successful search */
 
     a = iobuf_open (hd->found.kr->fname);
-    if (!a) {
-       log_error ("can't open `%s'\n", hd->found.kr->fname);
+    if (!a)
+      {
+       log_error(_("can't open `%s'\n"), hd->found.kr->fname);
        return G10ERR_KEYRING_OPEN;
-    }
+      }
 
     if (iobuf_seek (a, hd->found.offset) ) {
         log_error ("can't seek `%s'\n", hd->found.kr->fname);
@@ -382,7 +385,7 @@ keyring_get_keyblock (KEYRING_HANDLE hd, KBNODE *ret_kb)
        return G10ERR_KEYRING_OPEN;
     }
 
-    pkt = m_alloc (sizeof *pkt);
+    pkt = xmalloc (sizeof *pkt);
     init_packet (pkt);
     hd->found.n_packets = 0;;
     lastnode = NULL;
@@ -451,7 +454,7 @@ keyring_get_keyblock (KEYRING_HANDLE hd, KBNODE *ret_kb)
             }
         }
 
-        pkt = m_alloc (sizeof *pkt);
+        pkt = xmalloc (sizeof *pkt);
         init_packet(pkt);
     }
     set_packet_list_mode(save_mode);
@@ -474,7 +477,7 @@ keyring_get_keyblock (KEYRING_HANDLE hd, KBNODE *ret_kb)
        *ret_kb = keyblock;
     }
     free_packet (pkt);
-    m_free (pkt);
+    xfree (pkt);
     iobuf_close(a);
 
     /* Make sure that future search operations fail immediately when
@@ -656,10 +659,12 @@ prepare_search (KEYRING_HANDLE hd)
 
     hd->current.eof = 0;
     hd->current.iobuf = iobuf_open (hd->current.kr->fname);
-    if (!hd->current.iobuf) {
-        log_error ("can't open `%s'\n", hd->current.kr->fname );
-        return (hd->current.error = G10ERR_OPEN_FILE);
-    }
+    if (!hd->current.iobuf)
+      {
+        hd->current.error = gpg_error_from_errno (errno);
+        log_error(_("can't open `%s'\n"), hd->current.kr->fname );
+        return hd->current.error;
+      }
 
     return 0;
 }
@@ -777,7 +782,7 @@ prepare_word_match (const byte *name)
     int c;
 
     /* the original length is always enough for the pattern */
-    p = pattern = m_alloc(strlen(name)+1);
+    p = pattern = xmalloc(strlen(name)+1);
     do {
        /* skip leading delimiters */
        while( *name && !word_match_chars[*name] )
@@ -954,9 +959,9 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc,
       if ( !hd->word_match.name || strcmp (hd->word_match.name, name) ) 
         {
           /* name changed */
-          m_free (hd->word_match.name);
-          m_free (hd->word_match.pattern);
-          hd->word_match.name = m_strdup (name);
+          xfree (hd->word_match.name);
+          xfree (hd->word_match.pattern);
+          hd->word_match.name = xstrdup (name);
           hd->word_match.pattern = prepare_word_match (name);
         }
       name = hd->word_match.pattern;
@@ -1159,27 +1164,27 @@ create_tmp_file (const char *template,
   if (strlen (template) > 4
       && !strcmp (template+strlen(template)-4, EXTSEP_S "gpg") )
     {
-      bakfname = m_alloc (strlen (template) + 1);
+      bakfname = xmalloc (strlen (template) + 1);
       strcpy (bakfname, template);
       strcpy (bakfname+strlen(template)-4, EXTSEP_S "bak");
 
-      tmpfname = m_alloc (strlen( template ) + 1 );
+      tmpfname = xmalloc (strlen( template ) + 1 );
       strcpy (tmpfname,template);
       strcpy (tmpfname+strlen(template)-4, EXTSEP_S "tmp");
     }
     else 
       { /* file does not end with gpg; hmmm */
-       bakfname = m_alloc (strlen( template ) + 5);
+       bakfname = xmalloc (strlen( template ) + 5);
        strcpy (stpcpy(bakfname, template), EXTSEP_S "bak");
 
-       tmpfname = m_alloc (strlen( template ) + 5);
+       tmpfname = xmalloc (strlen( template ) + 5);
        strcpy (stpcpy(tmpfname, template), EXTSEP_S "tmp");
     }
 # else /* Posix file names */
-    bakfname = m_alloc (strlen( template ) + 2);
+    bakfname = xmalloc (strlen( template ) + 2);
     strcpy (stpcpy (bakfname,template),"~");
 
-    tmpfname = m_alloc (strlen( template ) + 5);
+    tmpfname = xmalloc (strlen( template ) + 5);
     strcpy (stpcpy(tmpfname,template), EXTSEP_S "tmp");
 # endif /* Posix filename */
 
@@ -1193,12 +1198,14 @@ create_tmp_file (const char *template,
     else
       *r_fp = iobuf_create (tmpfname);
     umask(oldmask);
-    if (!*r_fp) {
-       log_error ("can't create `%s': %s\n", tmpfname, strerror(errno) );
-        m_free (tmpfname);
-        m_free (bakfname);
-       return G10ERR_OPEN_FILE;
-    }
+    if (!*r_fp)
+      {
+        int rc = gpg_error_from_errno (errno);
+       log_error(_("can't create `%s': %s\n"), tmpfname, strerror(errno) );
+        xfree (tmpfname);
+        xfree (bakfname);
+       return rc;
+      }
     
     *r_bakfname = bakfname;
     *r_tmpfname = tmpfname;
@@ -1225,9 +1232,10 @@ rename_tmp_file (const char *bakfname, const char *tmpfname,
 #endif
       if (rename (fname, bakfname) )
         {
+          rc = gpg_error_from_errno (errno);
           log_error ("renaming `%s' to `%s' failed: %s\n",
                      fname, bakfname, strerror(errno) );
-          return G10ERR_RENAME_FILE;
+          return rc;
        }
     }
   
@@ -1239,10 +1247,10 @@ rename_tmp_file (const char *bakfname, const char *tmpfname,
     unregister_secured_file (fname);
   if (rename (tmpfname, fname) )
     {
+      rc = gpg_error_from_errno (errno);
       log_error (_("renaming `%s' to `%s' failed: %s\n"),
                  tmpfname, fname, strerror(errno) );
       register_secured_file (fname);
-      rc = G10ERR_RENAME_FILE;
       if (secret)
         {
           log_info(_("WARNING: 2 files with confidential"
@@ -1307,10 +1315,12 @@ write_keyblock (IOBUF fp, KBNODE keyblock)
           iobuf_put (fp, 0xb0); /* old style packet 12, 1 byte len*/
           iobuf_put (fp, 2);    /* 2 bytes */
           iobuf_put (fp, 0);    /* unused */
-          if (iobuf_put (fp, cacheval)) {
-            log_error ("writing sigcache packet failed\n");
-            return G10ERR_WRITE_FILE;
-          }
+          if (iobuf_put (fp, cacheval)) 
+            {
+              rc = gpg_error_from_errno (errno);
+              log_error ("writing sigcache packet failed\n");
+              return rc;
+            }
         }
     }
   return 0;
@@ -1352,9 +1362,9 @@ keyring_rebuild_cache (void *token,int noisy)
             {
               if (iobuf_close (tmpfp))
                 {
+                  rc = gpg_error_from_errno (errno);
                   log_error ("error closing `%s': %s\n",
                              tmpfilename, strerror (errno));
-                  rc = G10ERR_CLOSE_FILE;
                   goto leave;
                 }
               /* because we have switched resources, we can be sure that
@@ -1363,8 +1373,8 @@ keyring_rebuild_cache (void *token,int noisy)
             }
           rc = lastresname? rename_tmp_file (bakfilename, tmpfilename, 
                                              lastresname, 0) : 0;
-          m_free (tmpfilename);  tmpfilename = NULL;
-          m_free (bakfilename);  bakfilename = NULL;
+          xfree (tmpfilename);  tmpfilename = NULL;
+          xfree (bakfilename);  bakfilename = NULL;
           if (rc)
             goto leave;
           lastresname = resname;
@@ -1399,8 +1409,8 @@ keyring_rebuild_cache (void *token,int noisy)
              PKT_signature *sig=node->pkt->pkt.signature;
 
              if(!opt.no_sig_cache && sig->flags.checked && sig->flags.valid
-                && (check_digest_algo(sig->digest_algo)
-                    || check_pubkey_algo(sig->pubkey_algo)))
+                && (openpgp_md_test_algo(sig->digest_algo)
+                    || openpgp_pk_test_algo(sig->pubkey_algo)))
                sig->flags.checked=sig->flags.valid=0;
              else
                check_key_signature (keyblock, node, NULL);
@@ -1432,9 +1442,9 @@ keyring_rebuild_cache (void *token,int noisy)
     {
       if (iobuf_close (tmpfp))
         {
+          rc = gpg_error_from_errno (errno);
           log_error ("error closing `%s': %s\n",
                      tmpfilename, strerror (errno));
-          rc = G10ERR_CLOSE_FILE;
           goto leave;
         }
       /* because we have switched resources, we can be sure that
@@ -1443,14 +1453,14 @@ keyring_rebuild_cache (void *token,int noisy)
     }
   rc = lastresname? rename_tmp_file (bakfilename, tmpfilename,
                                      lastresname, 0) : 0;
-  m_free (tmpfilename);  tmpfilename = NULL;
-  m_free (bakfilename);  bakfilename = NULL;
+  xfree (tmpfilename);  tmpfilename = NULL;
+  xfree (bakfilename);  bakfilename = NULL;
 
  leave:
   if (tmpfp)
     iobuf_cancel (tmpfp);
-  m_free (tmpfilename);  
-  m_free (bakfilename);  
+  xfree (tmpfilename);  
+  xfree (bakfilename);  
   release_kbnode (keyblock);
   keyring_lock (hd, 0);
   keyring_release (hd);
@@ -1476,7 +1486,7 @@ do_copy (int mode, const char *fname, KBNODE root, int secret,
     /* Open the source file. Because we do a rename, we have to check the 
        permissions of the file */
     if (access (fname, W_OK))
-      return G10ERR_WRITE_FILE;
+      return gpg_error_from_errno (errno);
 
     fp = iobuf_open (fname);
     if (mode == 1 && !fp && errno == ENOENT) { 
@@ -1492,11 +1502,12 @@ do_copy (int mode, const char *fname, KBNODE root, int secret,
         else
             newfp = iobuf_create (fname);
        umask(oldmask);
-       if( !newfp ) {
-           log_error (_("can't create `%s': %s\n"),
-                       fname, strerror(errno));
-           return G10ERR_OPEN_FILE;
-       }
+       if( !newfp )
+         {
+            rc = gpg_error_from_errno (errno);
+           log_error (_("can't create `%s': %s\n"), fname, strerror(errno));
+           return rc;
+         }
        if( !opt.quiet )
            log_info(_("%s: keyring created\n"), fname );
 
@@ -1506,21 +1517,23 @@ do_copy (int mode, const char *fname, KBNODE root, int secret,
                log_error("build_packet(%d) failed: %s\n",
                            node->pkt->pkttype, g10_errstr(rc) );
                iobuf_cancel(newfp);
-               return G10ERR_WRITE_FILE;
+               return rc;
            }
        }
        if( iobuf_close(newfp) ) {
+            rc = gpg_error_from_errno (errno);
            log_error ("%s: close failed: %s\n", fname, strerror(errno));
-           return G10ERR_CLOSE_FILE;
+           return rc;
        }
        return 0; /* ready */
     }
 
-    if( !fp ) {
-       log_error ("can't open `%s': %s\n", fname, strerror(errno) );
-       rc = G10ERR_OPEN_FILE;
+    if( !fp )
+      {
+        rc = gpg_error_from_errno (errno);
+       log_error(_("can't open `%s': %s\n"), fname, strerror(errno) );
        goto leave;
-    }
+      }
 
     /* Create the new file.  */
     rc = create_tmp_file (fname, &bakfname, &tmpfname, &newfp);
@@ -1600,20 +1613,20 @@ do_copy (int mode, const char *fname, KBNODE root, int secret,
 
     /* close both files */
     if( iobuf_close(fp) ) {
+        rc = gpg_error_from_errno (errno);
        log_error("%s: close failed: %s\n", fname, strerror(errno) );
-       rc = G10ERR_CLOSE_FILE;
        goto leave;
     }
     if( iobuf_close(newfp) ) {
+        rc = gpg_error_from_errno (errno);
        log_error("%s: close failed: %s\n", tmpfname, strerror(errno) );
-       rc = G10ERR_CLOSE_FILE;
        goto leave;
     }
 
     rc = rename_tmp_file (bakfname, tmpfname, fname, secret);
 
   leave:
-    m_free(bakfname);
-    m_free(tmpfname);
+    xfree(bakfname);
+    xfree(tmpfname);
     return rc;
 }