summaryrefslogtreecommitdiffstats
path: root/kbx/keybox-update.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--kbx/keybox-update.c129
1 files changed, 64 insertions, 65 deletions
diff --git a/kbx/keybox-update.c b/kbx/keybox-update.c
index 6e45f3d..15b5dbf 100644
--- a/kbx/keybox-update.c
+++ b/kbx/keybox-update.c
@@ -78,10 +78,9 @@ create_tmp_file (const char *template,
err = keybox_tmp_names (template, 0, r_bakfname, r_tmpfname);
if (!err)
{
- *r_fp = es_fopen (*r_tmpfname, "wb");
- if (!*r_fp)
+ err = _keybox_ll_open (r_fp, *r_tmpfname, KEYBOX_LL_OPEN_CREATE);
+ if (err)
{
- err = gpg_error_from_syserror ();
xfree (*r_tmpfname);
*r_tmpfname = NULL;
xfree (*r_bakfname);
@@ -174,31 +173,32 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
if ((ec = gnupg_access (fname, W_OK)))
return gpg_error (ec);
- fp = es_fopen (fname, "rb");
- if (mode == FILECOPY_INSERT && !fp && errno == ENOENT)
+ rc = _keybox_ll_open (&fp, fname, 0);
+ if (mode == FILECOPY_INSERT && gpg_err_code (rc) == GPG_ERR_ENOENT)
{
/* Insert mode but file does not exist:
- Create a new keybox file. */
- newfp = es_fopen (fname, "wb");
- if (!newfp )
- return gpg_error_from_syserror ();
+ * Create a new keybox file. */
+ rc = _keybox_ll_open (&newfp, fname, KEYBOX_LL_OPEN_CREATE);
+ if (rc)
+ return rc;
rc = _keybox_write_header_blob (newfp, for_openpgp);
if (rc)
{
- es_fclose (newfp);
+ _keybox_ll_close (newfp);
return rc;
}
rc = _keybox_write_blob (blob, newfp, NULL);
if (rc)
{
- es_fclose (newfp);
+ _keybox_ll_close (newfp);
return rc;
}
- if ( es_fclose (newfp) )
- return gpg_error_from_syserror ();
+ rc = _keybox_ll_close (newfp);
+ if (rc)
+ return rc;
/* if (chmod( fname, S_IRUSR | S_IWUSR )) */
/* { */
@@ -218,7 +218,7 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
rc = create_tmp_file (fname, &bakfname, &tmpfname, &newfp);
if (rc)
{
- es_fclose (fp);
+ _keybox_ll_close (fp);
goto leave;
}
@@ -242,16 +242,16 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
if (es_fwrite (buffer, nread, 1, newfp) != 1)
{
rc = gpg_error_from_syserror ();
- es_fclose (fp);
- es_fclose (newfp);
+ _keybox_ll_close (fp);
+ _keybox_ll_close (newfp);
goto leave;
}
}
if (es_ferror (fp))
{
rc = gpg_error_from_syserror ();
- es_fclose (fp);
- es_fclose (newfp);
+ _keybox_ll_close (fp);
+ _keybox_ll_close (newfp);
goto leave;
}
}
@@ -275,16 +275,16 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
if (es_fwrite (buffer, nread, 1, newfp) != 1)
{
rc = gpg_error_from_syserror ();
- es_fclose (fp);
- es_fclose (newfp);
+ _keybox_ll_close (fp);
+ _keybox_ll_close (newfp);
goto leave;
}
}
if (es_ferror (fp))
{
rc = gpg_error_from_syserror ();
- es_fclose (fp);
- es_fclose (newfp);
+ _keybox_ll_close (fp);
+ _keybox_ll_close (newfp);
goto leave;
}
@@ -292,9 +292,9 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
rc = _keybox_read_blob (NULL, fp, NULL);
if (rc)
{
- es_fclose (fp);
- es_fclose (newfp);
- return rc;
+ _keybox_ll_close (fp);
+ _keybox_ll_close (newfp);
+ goto leave;
}
}
@@ -304,9 +304,9 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
rc = _keybox_write_blob (blob, newfp, NULL);
if (rc)
{
- es_fclose (fp);
- es_fclose (newfp);
- return rc;
+ _keybox_ll_close (fp);
+ _keybox_ll_close (newfp);
+ goto leave;
}
}
@@ -318,32 +318,30 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
if (es_fwrite (buffer, nread, 1, newfp) != 1)
{
rc = gpg_error_from_syserror ();
- es_fclose (fp);
- es_fclose (newfp);
+ _keybox_ll_close (fp);
+ _keybox_ll_close (newfp);
goto leave;
}
}
if (es_ferror (fp))
{
rc = gpg_error_from_syserror ();
- es_fclose (fp);
- es_fclose (newfp);
+ _keybox_ll_close (fp);
+ _keybox_ll_close (newfp);
goto leave;
}
}
/* Close both files. */
- if (es_fclose(fp))
- {
- rc = gpg_error_from_syserror ();
- es_fclose (newfp);
- goto leave;
- }
- if (es_fclose(newfp))
+ rc = _keybox_ll_close (fp);
+ if (rc)
{
- rc = gpg_error_from_syserror ();
+ _keybox_ll_close (newfp);
goto leave;
}
+ rc = _keybox_ll_close (newfp);
+ if (rc)
+ goto leave;
rc = rename_tmp_file (bakfname, tmpfname, fname, secret);
@@ -491,6 +489,7 @@ keybox_insert_cert (KEYBOX_HANDLE hd, ksba_cert_t cert,
int
keybox_set_flags (KEYBOX_HANDLE hd, int what, int idx, unsigned int value)
{
+ gpg_error_t err;
off_t off;
const char *fname;
estream_t fp;
@@ -525,9 +524,10 @@ keybox_set_flags (KEYBOX_HANDLE hd, int what, int idx, unsigned int value)
off += flag_pos;
_keybox_close_file (hd);
- fp = es_fopen (hd->kb->fname, "r+b");
- if (!fp)
- return gpg_error_from_syserror ();
+
+ err = _keybox_ll_open (&fp, fname, KEYBOX_LL_OPEN_UPDATE);
+ if (err)
+ return err;
ec = 0;
if (es_fseeko (fp, off, SEEK_SET))
@@ -555,10 +555,11 @@ keybox_set_flags (KEYBOX_HANDLE hd, int what, int idx, unsigned int value)
}
}
- if (es_fclose (fp))
+ err = _keybox_ll_close (fp);
+ if (err)
{
if (!ec)
- ec = gpg_err_code_from_syserror ();
+ ec = gpg_err_code (err);
}
return gpg_error (ec);
@@ -572,7 +573,7 @@ keybox_delete (KEYBOX_HANDLE hd)
off_t off;
const char *fname;
estream_t fp;
- int rc;
+ int rc, rc2;
if (!hd)
return gpg_error (GPG_ERR_INV_VALUE);
@@ -590,9 +591,9 @@ keybox_delete (KEYBOX_HANDLE hd)
off += 4;
_keybox_close_file (hd);
- fp = es_fopen (hd->kb->fname, "r+b");
- if (!fp)
- return gpg_error_from_syserror ();
+ rc = _keybox_ll_open (&fp, hd->kb->fname, KEYBOX_LL_OPEN_UPDATE);
+ if (rc)
+ return rc;
if (es_fseeko (fp, off, SEEK_SET))
rc = gpg_error_from_syserror ();
@@ -601,10 +602,11 @@ keybox_delete (KEYBOX_HANDLE hd)
else
rc = 0;
- if (es_fclose (fp))
+ rc2 = _keybox_ll_close (fp);
+ if (rc2)
{
if (!rc)
- rc = gpg_error_from_syserror ();
+ rc = rc2;
}
return rc;
@@ -617,7 +619,7 @@ int
keybox_compress (KEYBOX_HANDLE hd)
{
gpg_err_code_t ec;
- int read_rc, rc;
+ int read_rc, rc, rc2;
const char *fname;
estream_t fp, newfp;
char *bakfname = NULL;
@@ -645,14 +647,11 @@ keybox_compress (KEYBOX_HANDLE hd)
if ((ec = gnupg_access (fname, W_OK)))
return gpg_error (ec);
- fp = es_fopen (fname, "rb");
- if (!fp && errno == ENOENT)
+ rc = _keybox_ll_open (&fp, fname, 0);
+ if (gpg_err_code (rc) == GPG_ERR_ENOENT)
return 0; /* Ready. File has been deleted right after the access above. */
- if (!fp)
- {
- rc = gpg_error_from_syserror ();
- return rc;
- }
+ if (rc)
+ return rc;
/* A quick test to see if we need to compress the file at all. We
schedule a compress run after 3 hours. */
@@ -668,7 +667,7 @@ keybox_compress (KEYBOX_HANDLE hd)
if ( (last_maint + 3*3600) > make_timestamp () )
{
- es_fclose (fp);
+ _keybox_ll_close (fp);
_keybox_release_blob (blob);
return 0; /* Compress run not yet needed. */
}
@@ -682,7 +681,7 @@ keybox_compress (KEYBOX_HANDLE hd)
rc = create_tmp_file (fname, &bakfname, &tmpfname, &newfp);
if (rc)
{
- es_fclose (fp);
+ _keybox_ll_close (fp);
return rc;;
}
@@ -771,10 +770,10 @@ keybox_compress (KEYBOX_HANDLE hd)
rc = read_rc;
/* Close both files. */
- if (es_fclose(fp) && !rc)
- rc = gpg_error_from_syserror ();
- if (es_fclose(newfp) && !rc)
- rc = gpg_error_from_syserror ();
+ if ((rc2 = _keybox_ll_close (fp)) && !rc)
+ rc = rc2;
+ if ((rc2 = _keybox_ll_close (newfp)) && !rc)
+ rc = rc2;
/* Rename or remove the temporary file. */
if (rc || !any_changes)