return 0;
}
+static int pakfire_key_write_to_keystore(struct pakfire_key* key) {
+ // Fetch keystore path
+ const char* keystore_path = pakfire_get_keystore_path(key->pakfire);
+ if (!keystore_path)
+ return 1;
+
+ // Fetch fingerprint
+ const char* fpr = pakfire_key_get_fingerprint(key);
+ if (!fpr)
+ return 1;
+
+ char path[PATH_MAX];
+
+ // Make path
+ int r = pakfire_string_format(path, "%s/%s.key", keystore_path, fpr);
+ if (r < 0)
+ return r;
+
+ // Create parent directory
+ r = pakfire_mkparentdir(path, 0);
+ if (r)
+ return r;
+
+ // Create file
+ FILE* f = fopen(path, "w");
+ if (!f) {
+ ERROR(key->pakfire, "Could not open %s for writing: %m\n", path);
+ return 1;
+ }
+
+ // Write key to file
+ r = pakfire_key_export(key, f, 0);
+ if (r) {
+ ERROR(key->pakfire, "Could not export key %s: %m\n", fpr);
+ unlink(path);
+ }
+
+ // Close file
+ fclose(f);
+
+ return r;
+}
+
PAKFIRE_EXPORT int pakfire_key_generate(struct pakfire_key** key, struct pakfire* pakfire,
const char* algo, const char* userid) {
// Reset key
gpgme_genkey_result_t result = gpgme_op_genkey_result(gpgctx);
// Retrieve the key by its fingerprint
- return pakfire_find_key(key, pakfire, result->fpr);
+ int r = pakfire_find_key(key, pakfire, result->fpr);
+ if (r)
+ return r;
+
+ // Store the key in the keystore
+ return pakfire_key_write_to_keystore(*key);
}
PAKFIRE_EXPORT int pakfire_key_export(struct pakfire_key* key, FILE* f,
return r;
}
-static int pakfire_key_write_to_keystore(struct pakfire_key* key) {
- // Fetch keystore path
- const char* keystore_path = pakfire_get_keystore_path(key->pakfire);
- if (!keystore_path)
- return 1;
-
- // Fetch fingerprint
- const char* fpr = pakfire_key_get_fingerprint(key);
- if (!fpr)
- return 1;
-
- char path[PATH_MAX];
-
- // Make path
- int r = pakfire_string_format(path, "%s/%s.key", keystore_path, fpr);
- if (r < 0)
- return r;
-
- // Create parent directory
- r = pakfire_mkparentdir(path, 0);
- if (r)
- return r;
-
- // Create file
- FILE* f = fopen(path, "w");
- if (!f) {
- ERROR(key->pakfire, "Could not open %s for writing: %m\n", path);
- return 1;
- }
-
- // Write key to file
- r = pakfire_key_export(key, f, 0);
- if (r) {
- ERROR(key->pakfire, "Could not export key %s: %m\n", fpr);
- unlink(path);
- }
-
- // Close file
- fclose(f);
-
- return r;
-}
-
PAKFIRE_EXPORT int pakfire_key_import(struct pakfire* pakfire, FILE* f,
struct pakfire_key*** keys) {
gpgme_data_t data;