Package: gnupg
Version: 1.4.1-1.1
Followup-For: Bug #38857

tags 38857 + patch
thanks

Hi,

I wrote a patch for gnupg to handle readonly keyrings correctly.
What it does now, is that when you try to modify a key in a keyring 
that is not writable it makes a copy of that keyring to a writable one
and modifies it.

Patch attached.

-- 
Toni Timonen "toni dot timonen at iki dot fi"
NP Solutions Ltd
Helsinki University of Technology
Department of Engineering Physics and Mathematics
diff -Nrub orig/gnupg-1.4.1/debian/patches/00list 
new/gnupg-1.4.1/debian/patches/00list
--- orig/gnupg-1.4.1/debian/patches/00list      2005-07-18 19:17:32.000000000 
+0300
+++ new/gnupg-1.4.1/debian/patches/00list       2005-07-18 19:53:17.000000000 
+0300
@@ -1,2 +1,3 @@
 15_free_caps
 16_min_privileges
+20_readonly_keyrings
diff -Nrub orig/gnupg-1.4.1/debian/patches/20_readonly_keyrings.dpatch 
new/gnupg-1.4.1/debian/patches/20_readonly_keyrings.dpatch
--- orig/gnupg-1.4.1/debian/patches/20_readonly_keyrings.dpatch 1970-01-01 
02:00:00.000000000 +0200
+++ new/gnupg-1.4.1/debian/patches/20_readonly_keyrings.dpatch  2005-07-18 
19:53:13.000000000 +0300
@@ -0,0 +1,38 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 20_readonly_keyrings.dpatch by  <[EMAIL PROTECTED]>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Patch to handle readonly keyrings (see #38857).
+
[EMAIL PROTECTED]@
+
+diff -rub orig/gnupg-1.4.1/g10/keydb.c gnupg-1.4.1/g10/keydb.c
+--- orig/gnupg-1.4.1/g10/keydb.c       2004-10-14 10:11:56.000000000 +0300
++++ gnupg-1.4.1/g10/keydb.c    2005-07-18 19:34:53.000000000 +0300
+@@ -526,7 +526,17 @@
+         rc = G10ERR_GENERAL; /* oops */
+         break;
+       case KEYDB_RESOURCE_TYPE_KEYRING:
++      if(keyring_is_writable (hd->active[hd->found].token)) {
+         rc = keyring_update_keyblock (hd->active[hd->found].u.kr, kb);
++      } else {
++        rc = keydb_locate_writable(hd,NULL);
++        if (rc) {
++          log_error (_("no writable keyring found: %s\n"), g10_errstr (rc));
++          break;
++        }
++        rc = keyring_insert_keyblock (hd->active[hd->current].u.kr, kb);
++        
++      }
+         break;
+     }
+ 
+@@ -680,6 +690,8 @@
+         case KEYDB_RESOURCE_TYPE_NONE: /* ignore */
+           break;
+         case KEYDB_RESOURCE_TYPE_KEYRING:
++        if(!keyring_is_writable(all_resources[i].token)) 
++          break; 
+           rc = keyring_rebuild_cache (all_resources[i].token,noisy);
+           if (rc)
+             log_error (_("failed to rebuild keyring cache: %s\n"),

Attachment: signature.asc
Description: Digital signature

Reply via email to