gpg: Allow updating the expiration time of multiple subkeys at once.
[gnupg.git] / g10 / tdbio.c
index 4d65e61..63ccfae 100644 (file)
@@ -87,7 +87,7 @@ static int cache_entries;
 static int cache_is_dirty;
 
 
-/* An object to pass infomation to cmp_krec_fpr. */
+/* An object to pass information to cmp_krec_fpr. */
 struct cmp_krec_fpr_struct
 {
   int pubkey_algo;
@@ -95,7 +95,7 @@ struct cmp_krec_fpr_struct
   int fprlen;
 };
 
-/* An object used to pass infomation to cmp_[s]dir. */
+/* An object used to pass information to cmp_[s]dir. */
 struct cmp_xdir_struct
 {
   int pubkey_algo;
@@ -225,7 +225,7 @@ write_cache_item (CACHE_CTRL r)
  *
  * Returns: 0 on success or an error code.
  */
-int
+static int
 put_record_into_cache (ulong recno, const char *data)
 {
   CACHE_CTRL r, unused;
@@ -446,7 +446,7 @@ tdbio_sync()
 /*
  * Simple transactions system:
  * Everything between begin_transaction and end/cancel_transaction
- * is not immediatly written but at the time of end_transaction.
+ * is not immediately written but at the time of end_transaction.
  *
  * NOTE: The transaction code is disabled in the 1.2 branch, as it is
  * not yet used.
@@ -1132,7 +1132,8 @@ upd_hashtable (ulong table, byte *key, int keylen, ulong newrecnum)
         {
           log_error ("hashtbl %lu: %lu/%d points to an invalid record %lu\n",
                      table, hashrec, (msb % ITEMS_PER_HTBL_RECORD), item);
-          list_trustdb (NULL);  /*FIXME: Bad - prints to stdout!!! */
+          if (opt.verbose > 1)
+            list_trustdb (es_stderr, NULL);
           return GPG_ERR_TRUSTDB;
        }
     }
@@ -1244,10 +1245,9 @@ drop_from_hashtable (ulong table, byte *key, int keylen, ulong recnum)
  * the result in REC.  The return value of CMP() should be True if the
  * record is the desired one.
  *
- * Return: -1 if not found, 0 if found or another error code.
- * FIXME: Use GPG_ERR_NOT_FOUND instead of -1.
+ * Return: 0 if found, GPG_ERR_NOT_FOUND, or another error code.
  */
-static int
+static gpg_error_t
 lookup_hashtable (ulong table, const byte *key, size_t keylen,
                  int (*cmpfnc)(const void*, const TRUSTREC *),
                   const void *cmpdata, TRUSTREC *rec )
@@ -1270,7 +1270,7 @@ lookup_hashtable (ulong table, const byte *key, size_t keylen,
 
   item = rec->r.htbl.item[msb % ITEMS_PER_HTBL_RECORD];
   if (!item)
-    return -1; /* Not found. */
+    return gpg_error (GPG_ERR_NOT_FOUND);
 
   rc = tdbio_read_record (item, rec, 0);
   if (rc)
@@ -1326,14 +1326,14 @@ lookup_hashtable (ulong table, const byte *key, size_t keylen,
                }
            }
           else
-            return -1; /* not found */
+            return gpg_error (GPG_ERR_NOT_FOUND);
        }
     }
 
   if ((*cmpfnc)(cmpdata, rec))
     return 0; /* really found */
 
-  return -1; /* no: not found */
+  return gpg_error (GPG_ERR_NOT_FOUND); /* no: not found */
 }
 
 
@@ -1486,34 +1486,36 @@ tdbio_read_record (ulong recnum, TRUSTREC *rec, int expected)
         {
           log_error (_("%s: not a trustdb file\n"), db_name );
           err = gpg_error (GPG_ERR_TRUSTDB);
-          /* FIXME ^ */
         }
-      p += 2; /* skip "gpg" */
-      rec->r.ver.version  = *p++;
-      rec->r.ver.marginals = *p++;
-      rec->r.ver.completes = *p++;
-      rec->r.ver.cert_depth = *p++;
-      rec->r.ver.trust_model = *p++;
-      rec->r.ver.min_cert_level = *p++;
-      p += 2;
-      rec->r.ver.created  = buf32_to_ulong(p); p += 4;
-      rec->r.ver.nextcheck = buf32_to_ulong(p); p += 4;
-      p += 4;
-      p += 4;
-      rec->r.ver.firstfree =buf32_to_ulong(p); p += 4;
-      p += 4;
-      rec->r.ver.trusthashtbl =buf32_to_ulong(p); p += 4;
-      if (recnum)
-        {
-          log_error( _("%s: version record with recnum %lu\n"), db_name,
-                     (ulong)recnum );
-          err = gpg_error (GPG_ERR_TRUSTDB);
-       }
-      else if (rec->r.ver.version != 3)
+      else
         {
-          log_error( _("%s: invalid file version %d\n"), db_name,
-                     rec->r.ver.version );
-          err = gpg_error (GPG_ERR_TRUSTDB);
+          p += 2; /* skip "gpg" */
+          rec->r.ver.version  = *p++;
+          rec->r.ver.marginals = *p++;
+          rec->r.ver.completes = *p++;
+          rec->r.ver.cert_depth = *p++;
+          rec->r.ver.trust_model = *p++;
+          rec->r.ver.min_cert_level = *p++;
+          p += 2;
+          rec->r.ver.created  = buf32_to_ulong(p); p += 4;
+          rec->r.ver.nextcheck = buf32_to_ulong(p); p += 4;
+          p += 4;
+          p += 4;
+          rec->r.ver.firstfree =buf32_to_ulong(p); p += 4;
+          p += 4;
+          rec->r.ver.trusthashtbl =buf32_to_ulong(p); p += 4;
+          if (recnum)
+            {
+              log_error( _("%s: version record with recnum %lu\n"), db_name,
+                         (ulong)recnum );
+              err = gpg_error (GPG_ERR_TRUSTDB);
+            }
+          else if (rec->r.ver.version != 3)
+            {
+              log_error( _("%s: invalid file version %d\n"), db_name,
+                         rec->r.ver.version );
+              err = gpg_error (GPG_ERR_TRUSTDB);
+            }
         }
       break;
 
@@ -1802,10 +1804,9 @@ cmp_trec_fpr ( const void *fpr, const TRUSTREC *rec )
  * Given a 20 byte FINGERPRINT search its trust record and return
  * that at REC.
  *
- * Return: -1 if not found, 0 if found or another error code.
- * FIXME: Use GPG_ERR_NOT_FOUND instead of -1.
+ * Return: 0 if found, GPG_ERR_NOT_FOUND, or another error code.
  */
-int
+gpg_error_t
 tdbio_search_trust_byfpr (const byte *fingerprint, TRUSTREC *rec)
 {
   int rc;
@@ -1821,10 +1822,9 @@ tdbio_search_trust_byfpr (const byte *fingerprint, TRUSTREC *rec)
  * Given a primary public key object PK search its trust record and
  * return that at REC.
  *
- * Return: -1 if not found, 0 if found or another error code.
- * FIXME: Use GPG_ERR_NOT_FOUND instead of -1.
+ * Return: 0 if found, GPG_ERR_NOT_FOUND, or another error code.
  */
-int
+gpg_error_t
 tdbio_search_trust_bypk (PKT_public_key *pk, TRUSTREC *rec)
 {
   byte fingerprint[MAX_FINGERPRINT_LEN];