2006-05-19 Marcus Brinkmann <marcus@g10code.de>
authorMarcus Brinkmann <mb@g10code.com>
Mon, 22 May 2006 14:35:04 +0000 (14:35 +0000)
committerMarcus Brinkmann <mb@g10code.com>
Mon, 22 May 2006 14:35:04 +0000 (14:35 +0000)
* keydb.c (keydb_insert_cert): Do not lock here, but only check if
it is locked.
(keydb_store_cert): Lock here.

* keydb.h (keydb_delete): Accept new argument UNLOCK.
* keydb.c (keydb_delete): Likewise.  Only unlock if this is set.
* delete.c (delete_one): Add new argument to invocation of
keydb_delete.

sm/ChangeLog
sm/delete.c
sm/keydb.c
sm/keydb.h

index 0250596..f161d44 100644 (file)
@@ -1,3 +1,14 @@
+2006-05-19  Marcus Brinkmann  <marcus@g10code.de>
+
+       * keydb.c (keydb_insert_cert): Do not lock here, but only check if
+       it is locked.
+       (keydb_store_cert): Lock here.
+
+       * keydb.h (keydb_delete): Accept new argument UNLOCK.
+       * keydb.c (keydb_delete): Likewise.  Only unlock if this is set.
+       * delete.c (delete_one): Add new argument to invocation of
+       keydb_delete.
+       
 2006-03-21  Werner Koch  <wk@g10code.com>
 
        * certchain.c (get_regtp_ca_info): New.
index 8e06b94..7533f72 100644 (file)
@@ -124,7 +124,7 @@ delete_one (CTRL ctrl, const char *username)
           goto leave;
         }
       
-      rc = keydb_delete (kh);
+      rc = keydb_delete (kh, duplicates ? 0 : 1);
       if (rc) 
         goto leave;
       if (opt.verbose)
index 17f04fe..15f5dbd 100644 (file)
@@ -696,9 +696,8 @@ keydb_insert_cert (KEYDB_HANDLE hd, ksba_cert_t cert)
   else
     return gpg_error (GPG_ERR_GENERAL);
 
-  rc = lock_all (hd);
-  if (rc)
-    return rc;
+  if (!hd->locked)
+    return gpg_error (GPG_ERR_NOT_LOCKED);
 
   gpgsm_get_fingerprint (cert, GCRY_MD_SHA1, digest, NULL); /* kludge*/
 
@@ -759,7 +758,7 @@ keydb_update_cert (KEYDB_HANDLE hd, ksba_cert_t cert)
  * The current keyblock or cert will be deleted.
  */
 int
-keydb_delete (KEYDB_HANDLE hd)
+keydb_delete (KEYDB_HANDLE hd, int unlock)
 {
   int rc = -1;
   
@@ -785,7 +784,8 @@ keydb_delete (KEYDB_HANDLE hd)
       break;
     }
 
-  unlock_all (hd);
+  if (unlock)
+    unlock_all (hd);
   return rc;
 }
 
@@ -1337,6 +1337,10 @@ keydb_store_cert (ksba_cert_t cert, int ephemeral, int *existed)
   if (ephemeral)
     keydb_set_ephemeral (kh, 1);
   
+  rc = lock_all (kh);
+  if (rc)
+    return rc;
+
   rc = keydb_search_fpr (kh, fpr);
   if (rc != -1)
     {
index 924ad77..fb4001b 100644 (file)
@@ -53,7 +53,7 @@ int keydb_get_cert (KEYDB_HANDLE hd, ksba_cert_t *r_cert);
 int keydb_insert_cert (KEYDB_HANDLE hd, ksba_cert_t cert);
 int keydb_update_cert (KEYDB_HANDLE hd, ksba_cert_t cert);
 
-int keydb_delete (KEYDB_HANDLE hd);
+int keydb_delete (KEYDB_HANDLE hd, int unlock);
 
 int keydb_locate_writable (KEYDB_HANDLE hd, const char *reserved);
 void keydb_rebuild_caches (void);