summaryrefslogtreecommitdiff
path: root/trust/extract-openssl.c
diff options
context:
space:
mode:
authorStef Walter <stef@thewalter.net>2013-07-03 10:45:50 +0200
committerStef Walter <stef@thewalter.net>2013-07-03 12:13:02 +0200
commite355c6724c6fb8cd604763ad2518751056512b2b (patch)
tree893832ff6aa0c7e5f85f3e5589c9d073986757b8 /trust/extract-openssl.c
parent81431ffd8cbf55175b1b9a9ed130fc67d0d4000b (diff)
downloadp11-kit-e355c6724c6fb8cd604763ad2518751056512b2b.tar.gz
trust: Add support for saving files with unique file names
Diffstat (limited to 'trust/extract-openssl.c')
-rw-r--r--trust/extract-openssl.c52
1 files changed, 32 insertions, 20 deletions
diff --git a/trust/extract-openssl.c b/trust/extract-openssl.c
index 91a9965..312a779 100644
--- a/trust/extract-openssl.c
+++ b/trust/extract-openssl.c
@@ -44,6 +44,7 @@
#include "hash.h"
#include "message.h"
#include "oid.h"
+#include "path.h"
#include "pem.h"
#include "pkcs11.h"
#include "pkcs11x.h"
@@ -320,7 +321,7 @@ p11_extract_openssl_bundle (P11KitIter *iter,
bool first;
CK_RV rv;
- file = p11_save_open_file (ex->destination, ex->flags);
+ file = p11_save_open_file (ex->destination, NULL, ex->flags);
if (!file)
return false;
@@ -362,7 +363,8 @@ p11_extract_openssl_bundle (P11KitIter *iter,
* certificates were found.
*/
- p11_save_finish_file (file, ret);
+ if (!p11_save_finish_file (file, NULL, ret))
+ ret = false;
return ret;
}
@@ -584,12 +586,13 @@ bool
p11_extract_openssl_directory (P11KitIter *iter,
p11_extract_info *ex)
{
- const char *filename;
+ char *filename;
p11_save_file *file;
p11_save_dir *dir;
p11_buffer output;
p11_buffer buf;
bool ret = true;
+ char *path;
char *name;
CK_RV rv;
@@ -617,7 +620,18 @@ p11_extract_openssl_directory (P11KitIter *iter,
name = p11_extract_info_filename (ex);
return_val_if_fail (name != NULL, false);
- file = p11_save_open_file_in (dir, name, ".pem", &filename);
+ filename = NULL;
+ path = NULL;
+ ret = false;
+
+ file = p11_save_open_file_in (dir, name, ".pem");
+ if (file != NULL) {
+ ret = p11_save_write (file, output.data, output.len);
+ if (!p11_save_finish_file (file, &path, ret))
+ ret = false;
+ if (ret)
+ filename = p11_path_base (path);
+ }
/*
* The OpenSSL style c_rehash stuff
@@ -633,28 +647,26 @@ p11_extract_openssl_directory (P11KitIter *iter,
* On Windows no symlinks.
*/
- ret = true;
-
#ifdef OS_UNIX
- linkname = symlink_for_subject_hash (ex);
- if (file && linkname) {
- ret = p11_save_symlink_in (dir, linkname, ".0", filename);
- free (linkname);
+ if (ret) {
+ linkname = symlink_for_subject_hash (ex);
+ if (linkname) {
+ ret = p11_save_symlink_in (dir, linkname, ".0", filename);
+ free (linkname);
+ }
}
- linkname = symlink_for_subject_old_hash (ex);
- if (ret && file && linkname) {
- ret = p11_save_symlink_in (dir, linkname, ".0", filename);
- free (linkname);
+ if (ret) {
+ linkname = symlink_for_subject_old_hash (ex);
+ if (linkname) {
+ ret = p11_save_symlink_in (dir, linkname, ".0", filename);
+ free (linkname);
+ }
}
#endif /* OS_UNIX */
- if (ret)
- ret = p11_save_write_and_finish (file, output.data, output.len);
- else
- p11_save_finish_file (file, false);
-
- free (name);
+ free (filename);
+ free (path);
}
if (!ret)