summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--g10/keydb.c2
-rw-r--r--kbx/keybox-file.c18
-rw-r--r--kbx/keybox-update.c4
-rw-r--r--kbx/keybox.h3
-rw-r--r--sm/keydb.c2
5 files changed, 19 insertions, 10 deletions
diff --git a/g10/keydb.c b/g10/keydb.c
index a7691bbe2..d3a2709bc 100644
--- a/g10/keydb.c
+++ b/g10/keydb.c
@@ -448,7 +448,7 @@ maybe_create_keyring_or_box (char *filename, int is_box, int force_create)
rc = gpg_error_from_syserror ();
else
{
- rc = _keybox_write_header_blob (fp, 1);
+ rc = _keybox_write_header_blob (fp, NULL, 1);
fclose (fp);
}
if (rc)
diff --git a/kbx/keybox-file.c b/kbx/keybox-file.c
index 046e32123..7a1b43aa7 100644
--- a/kbx/keybox-file.c
+++ b/kbx/keybox-file.c
@@ -146,9 +146,9 @@ _keybox_write_blob (KEYBOXBLOB blob, FILE *fp)
}
-/* Write a fresh header type blob. */
-int
-_keybox_write_header_blob (FILE *fp, int for_openpgp)
+/* Write a fresh header type blob. Either FP or STREAM must be used. */
+gpg_error_t
+_keybox_write_header_blob (FILE *fp, estream_t stream, int for_openpgp)
{
unsigned char image[32];
u32 val;
@@ -174,7 +174,15 @@ _keybox_write_header_blob (FILE *fp, int for_openpgp)
image[20+2] = (val >> 8);
image[20+3] = (val );
- if (fwrite (image, 32, 1, fp) != 1)
- return gpg_error_from_syserror ();
+ if (fp)
+ {
+ if (fwrite (image, 32, 1, fp) != 1)
+ return gpg_error_from_syserror ();
+ }
+ else
+ {
+ if (es_fwrite (image, 32, 1, stream) != 1)
+ return gpg_error_from_syserror ();
+ }
return 0;
}
diff --git a/kbx/keybox-update.c b/kbx/keybox-update.c
index e09fefc41..d22da1bf8 100644
--- a/kbx/keybox-update.c
+++ b/kbx/keybox-update.c
@@ -182,7 +182,7 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
if (!newfp )
return gpg_error_from_syserror ();
- rc = _keybox_write_header_blob (newfp, for_openpgp);
+ rc = _keybox_write_header_blob (newfp, NULL, for_openpgp);
if (rc)
{
fclose (newfp);
@@ -730,7 +730,7 @@ keybox_compress (KEYBOX_HANDLE hd)
}
/* The header blob is missing. Insert it. */
- rc = _keybox_write_header_blob (newfp, hd->for_openpgp);
+ rc = _keybox_write_header_blob (newfp, NULL, hd->for_openpgp);
if (rc)
break;
any_changes = 1;
diff --git a/kbx/keybox.h b/kbx/keybox.h
index 4d941571e..d614c32d1 100644
--- a/kbx/keybox.h
+++ b/kbx/keybox.h
@@ -81,7 +81,8 @@ gpg_error_t keybox_lock (KEYBOX_HANDLE hd, int yes, long timeout);
/*-- keybox-file.c --*/
/* Fixme: This function does not belong here: Provide a better
interface to create a new keybox file. */
-int _keybox_write_header_blob (FILE *fp, int openpgp_flag);
+gpg_error_t _keybox_write_header_blob (FILE *fp, estream_t stream,
+ int openpgp_flag);
/*-- keybox-search.c --*/
gpg_error_t keybox_get_keyblock (KEYBOX_HANDLE hd, iobuf_t *r_iobuf,
diff --git a/sm/keydb.c b/sm/keydb.c
index 53e3cf887..cf643abcd 100644
--- a/sm/keydb.c
+++ b/sm/keydb.c
@@ -224,7 +224,7 @@ maybe_create_keybox (char *filename, int force, int *r_created)
/* Make sure that at least one record is in a new keybox file, so
that the detection magic for OpenPGP keyboxes works the next time
it is used. */
- rc = _keybox_write_header_blob (fp, 0);
+ rc = _keybox_write_header_blob (fp, NULL, 0);
if (rc)
{
fclose (fp);