summaryrefslogtreecommitdiff
path: root/dev-libs/volume_key
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2018-07-14 21:03:06 +0100
committerV3n3RiX <venerix@redcorelinux.org>2018-07-14 21:03:06 +0100
commit8376ef56580626e9c0f796d5b85b53a0a1c7d5f5 (patch)
tree7681bbd4e8b05407772df40a4bf04cbbc8afc3fa /dev-libs/volume_key
parent30a9caf154332f12ca60756e1b75d2f0e3e1822d (diff)
gentoo resync : 14.07.2018
Diffstat (limited to 'dev-libs/volume_key')
-rw-r--r--dev-libs/volume_key/Manifest9
-rw-r--r--dev-libs/volume_key/files/volume_key-0.3.10-find_python.patch55
-rw-r--r--dev-libs/volume_key/files/volume_key-0.3.9-config.h.diff27
-rw-r--r--dev-libs/volume_key/files/volume_key-0.3.9-cryptsetup2.patch331
-rw-r--r--dev-libs/volume_key/files/volume_key-0.3.9-find_python.patch56
-rw-r--r--dev-libs/volume_key/metadata.xml8
-rw-r--r--dev-libs/volume_key/volume_key-0.3.10.ebuild48
-rw-r--r--dev-libs/volume_key/volume_key-0.3.9.ebuild52
8 files changed, 586 insertions, 0 deletions
diff --git a/dev-libs/volume_key/Manifest b/dev-libs/volume_key/Manifest
new file mode 100644
index 000000000000..963ca7589a0d
--- /dev/null
+++ b/dev-libs/volume_key/Manifest
@@ -0,0 +1,9 @@
+AUX volume_key-0.3.10-find_python.patch 1879 BLAKE2B 378cd77c94abaac606f22f6569843f01cf30f8f59cf1e25e224c67e0709fa13101ff7636598e833367fd15e17aaadc3271afb7cb3ffd077a0bbd9dcba02c99c2 SHA512 3b3ce019f9c3ff04f3193c07fbcf8881296e2f3717f405f9a0db57aec8903e34c763f6a2c177aec816a88922db64f3041033f9d4315b3b805a283bcd1baa8401
+AUX volume_key-0.3.9-config.h.diff 819 BLAKE2B ad442b6cff8468e49172d4216125b59b957a565bf05a136e1cd2f652f70c93f8eb8a2770d83da536faee4bf0d6200b8fcc19102e5fae9cf60961c9e0313bd4c4 SHA512 ce8fd4fd60baacda3bfd88de86f5251bd9394f4b13dbb0ece494a07c3510429c458cef051cf56d9ef04b97e7120898ab62585fd1966a93724ea0476a9d465c04
+AUX volume_key-0.3.9-cryptsetup2.patch 11118 BLAKE2B a271091011046c5765f1202a655a591a9dde6732997a39760a792c12caba5eff31c130247a33866d8d7cb47ef91c515d28375729d06f321bd0502063d7793e8a SHA512 154e8c2860ffb07f367696ed23309910162c23a445e7c46411f63f6a46e65aaf5285559a51320edf3a424d98300058356ef058689c06719e00616f211ac4164a
+AUX volume_key-0.3.9-find_python.patch 1845 BLAKE2B 0924bdd416f4eab70648964a1ad76263db76a3c7c62819146d200c6a88ef65ed24aa90c3dcd426e5cd137e07ddf04ddfd95474f6204f4e76b0c2a3b746e16dfb SHA512 5b2de4c5c18bb17fbf2a7e5de8adc36d919c5e98aafc33bbd3464ab60ce520ee0b4da0447f7e55ae262c9f6243936badd20f8ce5f9f3367188d80ba28932d0d7
+DIST volume_key-0.3.10.tar.xz 474720 BLAKE2B 726252263976b63c3e73dc42bd0166aa1c05df7a61715ca19921e9cd92abf1f8c84347127c94f724e385e0a36411ffae92341d91d06d679c052c83edb5ab6c49 SHA512 b050d333e021bc3721f5e72c1d2498adea3265afe7f702e1b1e859546755745ac70dcffc194739a4833d4b0b77168506f7fe90fde382d8aab4df2af7b635932b
+DIST volume_key-0.3.9.tar.xz 445092 BLAKE2B b9cec52ca02e331501d378482484535413f3ef7675b6592b9f26f272d36448a2ffee1a0ca1c7a552764324ab20cd6dac98447914faafbea96e4c526796bec587 SHA512 bc0e690997b9fa1c9fff361d04e7eddcac4cac09779d7a1f9e161be117f5c589a7e444ac16dab25fb3e3ce201591f7dc937595ddf2745d7daa625d4ab0a255e0
+EBUILD volume_key-0.3.10.ebuild 892 BLAKE2B f1698f22f16aa35276bc2b2eb4aee7a5fa3916b45c9bef3eaf2743d1c51dd6ddc8af059d47acdd64aec74f8304f50011a577b53ac112a2929d13f641a3f287f6 SHA512 76e10dd531efbf4f685fc0f5ae13c7548b20be8d80f232d128d07ac3aab57662bb90d10112b79b8ec417386f98b32ff342f5f7614ef9d053c28424ae53dd8a1d
+EBUILD volume_key-0.3.9.ebuild 1030 BLAKE2B 4eb58cce79277f652acda134685f10db2c61093d8418cd7d5c550b0aa3f4acd5739a17bf45bbc2b9b707954ffa8179119ab9c41c3e752d5e958fe2ffdb76d33e SHA512 421e9f70ecc487ca8e8db52ff20deb6503d8106443e14f3781a5c4bc338b722ff2c453a0311a8b46f346986b31c4709f0d1b30e2df70f7fa6d7e166474dad455
+MISC metadata.xml 257 BLAKE2B 35c1b06807230338ceb9de70f79760d55e93dcdba508da3c663e785ab3966781edc2098abd8df084b2ecabbf40ff8e8e4a0d0a6e131daf648ff58e101cf27587 SHA512 ff078cacb115b8f3624b45d883d8ed72701e3d2fccae06c04c633eb60821b23681cc151e00689d1b6035c94570535e7ac0de51a55dae99f606886164883185ea
diff --git a/dev-libs/volume_key/files/volume_key-0.3.10-find_python.patch b/dev-libs/volume_key/files/volume_key-0.3.10-find_python.patch
new file mode 100644
index 000000000000..2e76c1d937d6
--- /dev/null
+++ b/dev-libs/volume_key/files/volume_key-0.3.10-find_python.patch
@@ -0,0 +1,55 @@
+From ab21d82bc0186627451d16be45568fcf2b590817 Mon Sep 17 00:00:00 2001
+From: Lars Wendler <polynomial-c@gentoo.org>
+Date: Tue, 22 May 2018 15:08:44 +0200
+Subject: [PATCH] Use pkgconfig to find python
+
+otherwise linkage and include of python fails if python is not in
+default (python$(PYTHON_VERSION)) location.
+---
+ Makefile.am | 4 ++--
+ configure.ac | 7 +++++--
+ 2 files changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 68560b1..0bc1a5b 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -20,7 +20,7 @@ ACLOCAL_AMFLAGS = -I m4
+ AM_CPPFLAGS = $(blkid_CFLAGS) $(glib_CFLAGS) $(GPGME_CFLAGS) \
+ $(libcryptsetup_CFLAGS) $(nss_CFLAGS)
+ LOCALEDIR_CPPFLAGS = -DLOCALEDIR='"$(localedir)"'
+-PYTHON_CPPFLAGS = -I/usr/include/python$(PYTHON_VERSION)
++PYTHON_CPPFLAGS = $(PYTHON_CFLAGS)
+
+ ## Targets
+ SUBDIRS = po
+@@ -65,7 +65,7 @@ lib_libvolume_key_la_LIBADD = $(blkid_LIBS) $(glib_LIBS) $(GPGME_LIBS) \
+ python__volume_key_la_SOURCES = python/volume_key_wrap.c
+ python__volume_key_la_CPPFLAGS = $(AM_CPPFLAGS) $(PYTHON_CPPFLAGS)
+ python__volume_key_la_LDFLAGS = -module -avoid-version $(glib_LIBS)
+-python__volume_key_la_LIBADD = lib/libvolume_key.la -lpython$(PYTHON_VERSION) \
++python__volume_key_la_LIBADD = lib/libvolume_key.la $(PYTHON_LIBS) \
+ $(glib_LIBS) $(nss_LIBS)
+
+ src_volume_key_SOURCES = src/volume_key.c
+diff --git a/configure.ac b/configure.ac
+index 40c3906..c9680e4 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -28,8 +28,11 @@ AC_PROG_CC
+ AM_PROG_CC_C_O
+ AM_PROG_AR
+ LT_INIT([disable-static])
+-AC_PATH_PROGS(PYTHON, python2.7 python2.6 python2 python, [Python is required])
+-AM_PATH_PYTHON([2.6], [], AC_MSG_ERROR([Python 2.6 or 2.7 is required]))
++PKG_PROG_PKG_CONFIG
++PKG_CHECK_MODULES(PYTHON, [python], [
++ AM_PATH_PYTHON
++ ], AC_MSG_ERROR([Python is required])
++)
+
+ AC_PATH_PROG([GPG], [gpg2])
+ AC_ARG_VAR([GPG])
+--
+2.17.0
+
diff --git a/dev-libs/volume_key/files/volume_key-0.3.9-config.h.diff b/dev-libs/volume_key/files/volume_key-0.3.9-config.h.diff
new file mode 100644
index 000000000000..138e92ee8f62
--- /dev/null
+++ b/dev-libs/volume_key/files/volume_key-0.3.9-config.h.diff
@@ -0,0 +1,27 @@
+From 8f8698aba19b501f01285e9eec5c18231fc6bcea Mon Sep 17 00:00:00 2001
+From: Vratislav Podzimek <vpodzime@redhat.com>
+Date: Tue, 6 Jan 2015 13:06:52 +0100
+Subject: Do not include config.h in libvolume_key.h
+
+The library's header file distributed in the devel package cannot include
+the config.h file that is only available during build otherwise it's not
+possible to use the library outside of the volume_key build process.
+
+Signed-off-by: Vratislav Podzimek <vpodzime@redhat.com>
+
+diff --git a/lib/libvolume_key.h b/lib/libvolume_key.h
+index 657b626..513f923 100644
+--- a/lib/libvolume_key.h
++++ b/lib/libvolume_key.h
+@@ -18,8 +18,6 @@ Author: Miloslav Trmač <mitr@redhat.com> */
+ #ifndef LIBVOLUME_KEY_H__
+ #define LIBVOLUME_KEY_H__
+
+-#include <config.h>
+-
+ #include <cert.h>
+ #include <glib.h>
+
+--
+cgit v0.10.2
+
diff --git a/dev-libs/volume_key/files/volume_key-0.3.9-cryptsetup2.patch b/dev-libs/volume_key/files/volume_key-0.3.9-cryptsetup2.patch
new file mode 100644
index 000000000000..2798e882345b
--- /dev/null
+++ b/dev-libs/volume_key/files/volume_key-0.3.9-cryptsetup2.patch
@@ -0,0 +1,331 @@
+From ecef526a51c5a276681472fd6df239570c9ce518 Mon Sep 17 00:00:00 2001
+From: Miloslav Trmač <mitr@redhat.com>
+Date: Nov 07 2017 15:55:55 +0000
+Subject: Stop using crypt_get_error
+
+
+Instead of crypt_get_error, which has been removed in cryptsetup 2.0,
+set up a log callback, which is available in both older and newer
+versions.
+
+Fixes #13.
+
+---
+
+diff --git a/lib/volume_luks.c b/lib/volume_luks.c
+index 14794d7..f4bf2c8 100644
+--- a/lib/volume_luks.c
++++ b/lib/volume_luks.c
+@@ -61,17 +61,13 @@ my_strerror (int err_no)
+ }
+
+ /* Set ERROR based on libcryptsetup error state after returning RES.
+- Use CODE. */
++ Use CODE and LAST_LOG_ENTRY. */
+ static void
+-error_from_cryptsetup (GError **error, LIBVKError code, int res)
++error_from_cryptsetup (GError **error, LIBVKError code, int res,
++ char *last_log_entry)
+ {
+- /* It's not possible to get the error message length from libcryptsetup, just
+- guess. */
+- char crypt_msg[4096];
+-
+- crypt_get_error (crypt_msg, sizeof (crypt_msg));
+- if (crypt_msg[0] != '\0')
+- g_set_error (error, LIBVK_ERROR, code, "%s", crypt_msg);
++ if (last_log_entry != NULL && last_log_entry[0] != '\0')
++ g_set_error (error, LIBVK_ERROR, code, "%s", last_log_entry);
+ else
+ {
+ char *s;
+@@ -82,17 +78,33 @@ error_from_cryptsetup (GError **error, LIBVKError code, int res)
+ }
+ }
+
++static void
++record_cryptsetup_log_entry (int level, const char *msg, void *usrptr)
++{
++ char **last_log_entry = usrptr;
++
++ if (level == CRYPT_LOG_ERROR)
++ {
++ g_free (*last_log_entry);
++ *last_log_entry = g_strdup (msg);
++ }
++}
++
+ /* Open volume PATH and load its header.
++ Set up *LAST_LOG_ENTRY to be updated to the last logged message for the
++ device. The caller must g_free(*LAST_LOG_ENTRY) after closing the device.
+ Return the volume, or NULL on error. */
+ static struct crypt_device *
+-open_crypt_device (const char *path, GError **error)
++open_crypt_device (const char *path, char **last_log_entry, GError **error)
+ {
+ struct crypt_device *cd;
+ int r;
+
++ *last_log_entry = NULL;
+ r = crypt_init (&cd, path);
+ if (r < 0)
+ goto err;
++ crypt_set_log_callback(cd, record_cryptsetup_log_entry, last_log_entry);
+ r = crypt_load (cd, CRYPT_LUKS1, NULL);
+ if (r < 0)
+ goto err_cd;
+@@ -101,9 +113,12 @@ open_crypt_device (const char *path, GError **error)
+ err_cd:
+ crypt_free (cd);
+ err:
+- error_from_cryptsetup (error, LIBVK_ERROR_VOLUME_UNKNOWN_FORMAT, r);
++ error_from_cryptsetup (error, LIBVK_ERROR_VOLUME_UNKNOWN_FORMAT, r,
++ *last_log_entry);
+ g_prefix_error (error, _("Error getting information about volume `%s': "),
+ path);
++ g_free (*last_log_entry);
++ *last_log_entry = NULL;
+ return NULL;
+ }
+
+@@ -173,10 +188,11 @@ luks_volume_open (struct libvk_volume *vol, const char *path, GError **error)
+ {
+ struct luks_volume *luks;
+ struct crypt_device *cd;
++ char *last_log_entry;
+ const char *uuid;
+
+ (void)vol;
+- cd = open_crypt_device (path, error);
++ cd = open_crypt_device (path, &last_log_entry, error);
+ if (cd == NULL)
+ return NULL;
+ /* A bit of paranoia */
+@@ -187,6 +203,7 @@ luks_volume_open (struct libvk_volume *vol, const char *path, GError **error)
+ _("UUID mismatch between libblkid and libcryptsetup: `%s' "
+ "vs. `%s'"), vol->uuid, uuid);
+ crypt_free (cd);
++ g_free (last_log_entry);
+ return NULL;
+ }
+
+@@ -195,6 +212,7 @@ luks_volume_open (struct libvk_volume *vol, const char *path, GError **error)
+ luks->cipher_mode = g_strdup (crypt_get_cipher_mode (cd));
+ luks->key_bytes = crypt_get_volume_key_size (cd);
+ crypt_free (cd);
++ g_free (last_log_entry);
+
+ luks->key = NULL;
+ luks->passphrase = NULL;
+@@ -256,7 +274,7 @@ luks_get_secret (struct libvk_volume *vol, enum libvk_secret secret_type,
+ const struct libvk_ui *ui, GError **error)
+ {
+ struct crypt_device *cd;
+- char *passphrase;
++ char *last_log_entry, *passphrase;
+ void *key;
+ size_t key_length;
+ int slot;
+@@ -276,7 +294,7 @@ luks_get_secret (struct libvk_volume *vol, enum libvk_secret secret_type,
+ _("Encryption information type unsupported in LUKS"));
+ goto err;
+ }
+- cd = open_crypt_device (vol->path, error);
++ cd = open_crypt_device (vol->path, &last_log_entry, error);
+ if (cd == NULL)
+ goto err;
+ key_length = crypt_get_volume_key_size (cd);
+@@ -303,7 +321,7 @@ luks_get_secret (struct libvk_volume *vol, enum libvk_secret secret_type,
+ g_free_passphrase (passphrase);
+ if (r != -EPERM)
+ {
+- error_from_cryptsetup (error, LIBVK_ERROR_FAILED, r);
++ error_from_cryptsetup (error, LIBVK_ERROR_FAILED, r, last_log_entry);
+ g_prefix_error (error, _("Error getting LUKS data encryption key: "));
+ goto err_prompt;
+ }
+@@ -322,12 +340,14 @@ luks_get_secret (struct libvk_volume *vol, enum libvk_secret secret_type,
+ vol->v.luks->passphrase_slot = slot;
+ g_free (prompt);
+ crypt_free (cd);
++ g_free (last_log_entry);
+ return 0;
+
+ err_prompt:
+ g_free (prompt);
+ g_free_key (key, key_length);
+ crypt_free (cd);
++ g_free (last_log_entry);
+ err:
+ return -1;
+ }
+@@ -383,11 +403,12 @@ luks_load_packet (struct libvk_volume *vol, const struct libvk_volume *packet,
+ if (packet->v.luks->key != NULL)
+ {
+ struct crypt_device *cd;
++ char *last_log_entry;
+ int r;
+
+ g_return_val_if_fail (vol->v.luks->key_bytes == packet->v.luks->key_bytes,
+ -1);
+- cd = open_crypt_device (vol->path, error);
++ cd = open_crypt_device (vol->path, &last_log_entry, error);
+ if (cd == NULL)
+ return -1;
+ r = crypt_volume_key_verify (cd, packet->v.luks->key,
+@@ -395,21 +416,25 @@ luks_load_packet (struct libvk_volume *vol, const struct libvk_volume *packet,
+ crypt_free (cd);
+ if (r < 0)
+ {
+- error_from_cryptsetup (error, LIBVK_ERROR_PACKET_VOLUME_MISMATCH, r);
++ error_from_cryptsetup (error, LIBVK_ERROR_PACKET_VOLUME_MISMATCH, r,
++ last_log_entry);
+ g_prefix_error (error, _("LUKS data encryption key in packet is "
+ "invalid: "));
++ g_free (last_log_entry);
+ return -1;
+ }
++ g_free (last_log_entry);
+ luks_replace_key (vol, packet->v.luks->key);
+ }
+ if (packet->v.luks->passphrase != NULL)
+ {
+ struct crypt_device *cd;
++ char *last_log_entry;
+ void *key;
+ size_t key_size;
+ int r;
+
+- cd = open_crypt_device (vol->path, error);
++ cd = open_crypt_device (vol->path, &last_log_entry, error);
+ if (cd == NULL)
+ return -1;
+ key_size = crypt_get_volume_key_size (cd);
+@@ -420,10 +445,13 @@ luks_load_packet (struct libvk_volume *vol, const struct libvk_volume *packet,
+ crypt_free (cd);
+ if (r < 0)
+ {
+- error_from_cryptsetup (error, LIBVK_ERROR_PACKET_VOLUME_MISMATCH, r);
++ error_from_cryptsetup (error, LIBVK_ERROR_PACKET_VOLUME_MISMATCH, r,
++ last_log_entry);
+ g_prefix_error (error, _("LUKS passphrase in packet is invalid: "));
++ g_free (last_log_entry);
+ return -1;
+ }
++ g_free (last_log_entry);
+ luks_replace_passphrase (vol, packet->v.luks->passphrase);
+ vol->v.luks->passphrase_slot = r;
+ if (packet->v.luks->key == NULL)
+@@ -446,7 +474,7 @@ luks_apply_secret (struct libvk_volume *vol, const struct libvk_volume *packet,
+ GError **error)
+ {
+ struct crypt_device *cd;
+- char *prompt, *prompt2, *error_prompt, *passphrase;
++ char *last_log_entry, *prompt, *prompt2, *error_prompt, *passphrase;
+ unsigned failed;
+ int res;
+
+@@ -498,7 +526,7 @@ luks_apply_secret (struct libvk_volume *vol, const struct libvk_volume *packet,
+ goto err_prompts;
+
+ got_passphrase:
+- cd = open_crypt_device (vol->path, error);
++ cd = open_crypt_device (vol->path, &last_log_entry, error);
+ if (cd == NULL)
+ goto err_passphrase;
+ res = crypt_keyslot_add_by_volume_key (cd, CRYPT_ANY_SLOT,
+@@ -508,10 +536,12 @@ luks_apply_secret (struct libvk_volume *vol, const struct libvk_volume *packet,
+ crypt_free (cd);
+ if (res < 0)
+ {
+- error_from_cryptsetup (error, LIBVK_ERROR_FAILED, res);
++ error_from_cryptsetup (error, LIBVK_ERROR_FAILED, res, last_log_entry);
+ g_prefix_error (error, _("Error adding a LUKS passphrase"));
++ g_free (last_log_entry);
+ goto err_passphrase;
+ }
++ g_free (last_log_entry);
+
+ g_return_val_if_fail (vol->v.luks->key_bytes == packet->v.luks->key_bytes,
+ -1);
+@@ -542,6 +572,7 @@ luks_add_secret (struct libvk_volume *vol, enum libvk_secret secret_type,
+ const void *secret, size_t size, GError **error)
+ {
+ struct crypt_device *cd;
++ char *last_log_entry;
+ int res;
+
+ if (secret_type != LIBVK_SECRET_PASSPHRASE)
+@@ -562,7 +593,7 @@ luks_add_secret (struct libvk_volume *vol, enum libvk_secret secret_type,
+ _("The passphrase must be a string"));
+ return -1;
+ }
+- cd = open_crypt_device (vol->path, error);
++ cd = open_crypt_device (vol->path, &last_log_entry, error);
+ if (cd == NULL)
+ return -1;
+ res = crypt_keyslot_add_by_volume_key (cd, CRYPT_ANY_SLOT, vol->v.luks->key,
+@@ -570,10 +601,12 @@ luks_add_secret (struct libvk_volume *vol, enum libvk_secret secret_type,
+ crypt_free (cd);
+ if (res < 0)
+ {
+- error_from_cryptsetup (error, LIBVK_ERROR_FAILED, res);
++ error_from_cryptsetup (error, LIBVK_ERROR_FAILED, res, last_log_entry);
+ g_prefix_error (error, _("Error adding a LUKS passphrase"));
++ g_free (last_log_entry);
+ return -1;
+ }
++ g_free (last_log_entry);
+
+ luks_replace_passphrase (vol, secret);
+ vol->v.luks->passphrase_slot = res;
+@@ -823,12 +856,13 @@ luks_open_with_packet (struct libvk_volume *vol,
+ GError **error)
+ {
+ struct crypt_device *cd;
++ char *last_log_entry;
+ void *to_free;
+ const void *key;
+ int r;
+ size_t key_size;
+
+- cd = open_crypt_device (vol->path, error);
++ cd = open_crypt_device (vol->path, &last_log_entry, error);
+ if (cd == NULL)
+ goto err;
+ if (packet->v.luks->key != NULL)
+@@ -846,7 +880,7 @@ luks_open_with_packet (struct libvk_volume *vol,
+ strlen (packet->v.luks->passphrase));
+ if (r < 0)
+ {
+- error_from_cryptsetup (error, LIBVK_ERROR_FAILED, r);
++ error_from_cryptsetup (error, LIBVK_ERROR_FAILED, r, last_log_entry);
+ g_prefix_error (error, _("Error getting LUKS data encryption key: "));
+ goto err_to_free;
+ }
+@@ -862,7 +896,7 @@ luks_open_with_packet (struct libvk_volume *vol,
+ r = crypt_activate_by_volume_key (cd, name, key, key_size, 0);
+ if (r < 0)
+ {
+- error_from_cryptsetup (error, LIBVK_ERROR_FAILED, r);
++ error_from_cryptsetup (error, LIBVK_ERROR_FAILED, r, last_log_entry);
+ g_prefix_error (error, _("Error opening LUKS volume: "));
+ goto err_to_free;
+ }
+@@ -870,6 +904,7 @@ luks_open_with_packet (struct libvk_volume *vol,
+ if (to_free != NULL)
+ g_free_key (to_free, key_size);
+ crypt_free (cd);
++ g_free (last_log_entry);
+ return 0;
+
+ err_to_free:
+@@ -877,6 +912,7 @@ luks_open_with_packet (struct libvk_volume *vol,
+ g_free_key (to_free, key_size);
+ err_cd:
+ crypt_free (cd);
++ g_free (last_log_entry);
+ err:
+ return -1;
+ }
+
diff --git a/dev-libs/volume_key/files/volume_key-0.3.9-find_python.patch b/dev-libs/volume_key/files/volume_key-0.3.9-find_python.patch
new file mode 100644
index 000000000000..00ca74fdc785
--- /dev/null
+++ b/dev-libs/volume_key/files/volume_key-0.3.9-find_python.patch
@@ -0,0 +1,56 @@
+From 67fbdb6133b6d37548250514eeaf8a4e239e4768 Mon Sep 17 00:00:00 2001
+From: Lars Wendler <polynomial-c@gentoo.org>
+Date: Mon, 22 May 2017 14:29:44 +0200
+Subject: [PATCH] Use pkgconfig to find python
+
+otherwise linkage and include of python fails if python is not in
+default (python$(PYTHON_VERSION)) location.
+---
+ Makefile.am | 4 ++--
+ configure.ac | 8 +++++++-
+ 2 files changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 4569bbf..445a64c 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -20,7 +20,7 @@ ACLOCAL_AMFLAGS = -I m4
+ AM_CPPFLAGS = $(blkid_CFLAGS) $(glib_CFLAGS) $(GPGME_CFLAGS) \
+ $(libcryptsetup_CFLAGS) $(nss_CFLAGS)
+ LOCALEDIR_CPPFLAGS = -DLOCALEDIR='"$(localedir)"'
+-PYTHON_CPPFLAGS = -I/usr/include/python$(PYTHON_VERSION)
++PYTHON_CPPFLAGS = $(PYTHON_CFLAGS)
+
+ ## Targets
+ SUBDIRS = po
+@@ -65,7 +65,7 @@ lib_libvolume_key_la_LIBADD = $(blkid_LIBS) $(glib_LIBS) $(GPGME_LIBS) \
+ python__volume_key_la_SOURCES = python/volume_key_wrap.c
+ python__volume_key_la_CPPFLAGS = $(AM_CPPFLAGS) $(PYTHON_CPPFLAGS)
+ python__volume_key_la_LDFLAGS = -module -avoid-version $(glib_LIBS)
+-python__volume_key_la_LIBADD = lib/libvolume_key.la -lpython$(PYTHON_VERSION) \
++python__volume_key_la_LIBADD = lib/libvolume_key.la $(PYTHON_LIBS) \
+ $(glib_LIBS) $(nss_LIBS)
+
+ src_volume_key_SOURCES = src/volume_key.c
+diff --git a/configure.ac b/configure.ac
+index 5dbb326..71e407e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -28,7 +28,13 @@ AC_PROG_CC
+ AM_PROG_CC_C_O
+ AM_PROG_AR
+ LT_INIT([disable-static])
+-AM_PATH_PYTHON
++
++PKG_CHECK_MODULES([PYTHON], [python], [has_python=yes], [])
++AS_IF([test "x$has_python" = "xyes"], [
++ AM_PATH_PYTHON
++ AC_SUBST([PYTHON_CFLAGS])
++ AC_SUBST([PYTHON_LIBS])
++])
+
+ dnl Not gpg2, it cannot receive passphrases from gpgme
+ AC_PATH_PROG([GPG], [gpg])
+--
+2.13.0
+
diff --git a/dev-libs/volume_key/metadata.xml b/dev-libs/volume_key/metadata.xml
new file mode 100644
index 000000000000..c7be278b6458
--- /dev/null
+++ b/dev-libs/volume_key/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>polynomial-c@gentoo.org</email>
+ <name>Lars Wendler</name>
+ </maintainer>
+</pkgmetadata>
diff --git a/dev-libs/volume_key/volume_key-0.3.10.ebuild b/dev-libs/volume_key/volume_key-0.3.10.ebuild
new file mode 100644
index 000000000000..6b38bad452ec
--- /dev/null
+++ b/dev-libs/volume_key/volume_key-0.3.10.ebuild
@@ -0,0 +1,48 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+PYTHON_COMPAT=( python3_{4,5,6} )
+
+inherit autotools python-single-r1
+
+DESCRIPTION="Library for manipulating and storing storage volume encryption keys"
+HOMEPAGE="https://pagure.io/volume_key"
+SRC_URI="http://releases.pagure.org/${PN}/${P}.tar.xz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86"
+IUSE="test"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+RDEPEND="
+ app-crypt/gpgme
+ dev-libs/glib:2
+ dev-libs/nspr
+ dev-libs/nss
+ sys-apps/util-linux
+ sys-fs/cryptsetup:=
+"
+DEPEND="
+ ${RDEPEND}
+ sys-devel/gettext
+ test? ( dev-libs/nss[utils] )
+ "
+
+RESTRICT="test" # possible gpgme issue
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-0.3.10-find_python.patch
+)
+
+pkg_setup() {
+ python-single-r1_pkg_setup
+}
+
+src_prepare() {
+ default
+ eautoreconf
+}
diff --git a/dev-libs/volume_key/volume_key-0.3.9.ebuild b/dev-libs/volume_key/volume_key-0.3.9.ebuild
new file mode 100644
index 000000000000..85b9d8321622
--- /dev/null
+++ b/dev-libs/volume_key/volume_key-0.3.9.ebuild
@@ -0,0 +1,52 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+PYTHON_COMPAT=( python3_{4,5,6} )
+
+inherit autotools python-single-r1
+
+DESCRIPTION="Library for manipulating and storing storage volume encryption keys"
+HOMEPAGE="https://pagure.io/volume_key"
+SRC_URI="http://releases.pagure.org/${PN}/${P}.tar.xz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="alpha amd64 arm ~arm64 ia64 ~mips ppc ppc64 ~sparc x86"
+IUSE="test"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+RDEPEND="
+ app-crypt/gpgme
+ dev-libs/glib:2
+ dev-libs/nspr
+ dev-libs/nss
+ sys-apps/util-linux
+ sys-fs/cryptsetup:=
+"
+DEPEND="
+ ${RDEPEND}
+ sys-devel/gettext
+ test? ( dev-libs/nss[utils] )
+ "
+
+RESTRICT="test" # possible gpgme issue
+
+PATCHES=(
+ "${FILESDIR}"/${P}-config.h.diff
+ "${FILESDIR}"/${PN}-0.3.9-find_python.patch
+
+ # Patches from upstream (can usually be removed with next version bump)
+ "${FILESDIR}/${P}-cryptsetup2.patch"
+)
+
+pkg_setup() {
+ python-single-r1_pkg_setup
+}
+
+src_prepare() {
+ default
+ eautoreconf
+}