From a41448da0032d6f8a7dc73d5e930e62d8d80e7aa Mon Sep 17 00:00:00 2001 From: Philipp Storz Date: Tue, 16 Sep 2014 10:48:05 +0200 Subject: [PATCH] Check for encryption before loading key Now we check if we need an encryption key before we try to get it. Fixes #338: bls always fails when scsicrypto-sd plugin is loaded Signed-off-by: Marco van Wieringen --- src/plugins/stored/scsicrypto-sd.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/plugins/stored/scsicrypto-sd.c b/src/plugins/stored/scsicrypto-sd.c index f7a53d3b249..9b3fbfaa3ff 100644 --- a/src/plugins/stored/scsicrypto-sd.c +++ b/src/plugins/stored/scsicrypto-sd.c @@ -317,19 +317,35 @@ static bRC do_set_scsi_encryption_key(void *value) */ dcr = (DCR *)value; if (!dcr) { + Dmsg0(dbglvl, "scsicrypto-sd: Error: dcr is not set!\n"); return bRC_Error; } dev = dcr->dev; if (!dev) { + Dmsg0(dbglvl, "scsicrypto-sd: Error: dev is not set!\n"); return bRC_Error; } device = dev->device; if (!device) { + Dmsg0(dbglvl, "scsicrypto-sd: Error: device is not set!\n"); return bRC_Error; } *StoredVolEncrKey = '\0'; if (!get_volume_encryption_key(dcr, StoredVolEncrKey)) { + Dmsg0(dbglvl, "scsicrypto-sd: Could not get_volume_encryption_key!\n"); + + /* + * Check if encryption key is needed for reading this volume. + */ + P(crypto_operation_mutex); + if (!need_scsi_crypto_key(dev->fd(), dev->dev_name, true)) { + V(crypto_operation_mutex); + Dmsg0(dbglvl, "scsicrypto-sd: No encryption key needed!\n"); + return bRC_OK; + } + V(crypto_operation_mutex); + return bRC_Error; } @@ -407,14 +423,17 @@ static bRC do_clear_scsi_encryption_key(void *value) */ dcr = (DCR *)value; if (!dcr) { + Dmsg0(dbglvl, "scsicrypto-sd: Error: dcr is not set!\n"); return bRC_Error; } dev = dcr->dev; if (!dev) { + Dmsg0(dbglvl, "scsicrypto-sd: Error: dev is not set!\n"); return bRC_Error; } device = dev->device; if (!device) { + Dmsg0(dbglvl, "scsicrypto-sd: Error: device is not set!\n"); return bRC_Error; }