mirror of
https://gitlab.com/cryptsetup/cryptsetup.git
synced 2025-12-13 11:50:10 +01:00
Simplify global error call.
git-svn-id: https://cryptsetup.googlecode.com/svn/trunk@622 36d66b0a-2a48-0410-832c-cd162a569da5
This commit is contained in:
@@ -23,13 +23,6 @@
|
|||||||
#define DEFAULT_DISK_ALIGNMENT 1048576 /* 1MiB */
|
#define DEFAULT_DISK_ALIGNMENT 1048576 /* 1MiB */
|
||||||
#define DEFAULT_MEM_ALIGNMENT 4096
|
#define DEFAULT_MEM_ALIGNMENT 4096
|
||||||
|
|
||||||
/* private struct crypt_options flags */
|
|
||||||
|
|
||||||
#define CRYPT_FLAG_FREE_DEVICE (1 << 24)
|
|
||||||
#define CRYPT_FLAG_FREE_CIPHER (1 << 25)
|
|
||||||
|
|
||||||
#define CRYPT_FLAG_PRIVATE_MASK ((unsigned int)-1 << 24)
|
|
||||||
|
|
||||||
#define at_least(a, b) ({ __typeof__(a) __at_least = (a); (__at_least >= (b))?__at_least:(b); })
|
#define at_least(a, b) ({ __typeof__(a) __at_least = (a); (__at_least >= (b))?__at_least:(b); })
|
||||||
|
|
||||||
struct crypt_device;
|
struct crypt_device;
|
||||||
@@ -45,10 +38,6 @@ void crypt_free_volume_key(struct volume_key *vk);
|
|||||||
|
|
||||||
int crypt_confirm(struct crypt_device *cd, const char *msg);
|
int crypt_confirm(struct crypt_device *cd, const char *msg);
|
||||||
|
|
||||||
void set_error_va(const char *fmt, va_list va);
|
|
||||||
void set_error(const char *fmt, ...);
|
|
||||||
const char *get_error(void);
|
|
||||||
|
|
||||||
char *crypt_lookup_dev(const char *dev_id);
|
char *crypt_lookup_dev(const char *dev_id);
|
||||||
int crypt_sysfs_check_crypt_segment(const char *device, uint64_t offset, uint64_t size);
|
int crypt_sysfs_check_crypt_segment(const char *device, uint64_t offset, uint64_t size);
|
||||||
int crypt_sysfs_get_rotational(int major, int minor, int *rotational);
|
int crypt_sysfs_get_rotational(int major, int minor, int *rotational);
|
||||||
@@ -73,9 +62,7 @@ void logger(struct crypt_device *cd, int class, const char *file, int line, cons
|
|||||||
#define log_dbg(x...) logger(NULL, CRYPT_LOG_DEBUG, __FILE__, __LINE__, x)
|
#define log_dbg(x...) logger(NULL, CRYPT_LOG_DEBUG, __FILE__, __LINE__, x)
|
||||||
#define log_std(c, x...) logger(c, CRYPT_LOG_NORMAL, __FILE__, __LINE__, x)
|
#define log_std(c, x...) logger(c, CRYPT_LOG_NORMAL, __FILE__, __LINE__, x)
|
||||||
#define log_verbose(c, x...) logger(c, CRYPT_LOG_VERBOSE, __FILE__, __LINE__, x)
|
#define log_verbose(c, x...) logger(c, CRYPT_LOG_VERBOSE, __FILE__, __LINE__, x)
|
||||||
#define log_err(c, x...) do { \
|
#define log_err(c, x...) logger(c, CRYPT_LOG_ERROR, __FILE__, __LINE__, x)
|
||||||
logger(c, CRYPT_LOG_ERROR, __FILE__, __LINE__, x); \
|
|
||||||
set_error(x); } while(0)
|
|
||||||
|
|
||||||
int crypt_get_debug_level(void);
|
int crypt_get_debug_level(void);
|
||||||
void debug_processes_using_device(const char *name);
|
void debug_processes_using_device(const char *name);
|
||||||
|
|||||||
@@ -420,7 +420,6 @@ int dm_create_device(const char *name,
|
|||||||
struct dm_task *dmt = NULL;
|
struct dm_task *dmt = NULL;
|
||||||
struct dm_info dmi;
|
struct dm_info dmi;
|
||||||
char *params = NULL;
|
char *params = NULL;
|
||||||
char *error = NULL;
|
|
||||||
char dev_uuid[DM_UUID_LEN] = {0};
|
char dev_uuid[DM_UUID_LEN] = {0};
|
||||||
int r = -EINVAL;
|
int r = -EINVAL;
|
||||||
uint32_t read_ahead = 0;
|
uint32_t read_ahead = 0;
|
||||||
@@ -497,18 +496,9 @@ out:
|
|||||||
cookie = 0;
|
cookie = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r < 0 && !reload) {
|
if (r < 0 && !reload)
|
||||||
if (get_error())
|
|
||||||
error = strdup(get_error());
|
|
||||||
|
|
||||||
dm_remove_device(name, 0, 0);
|
dm_remove_device(name, 0, 0);
|
||||||
|
|
||||||
if (error) {
|
|
||||||
set_error(error);
|
|
||||||
free(error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
out_no_removal:
|
out_no_removal:
|
||||||
if (cookie && _dm_use_udev())
|
if (cookie && _dm_use_udev())
|
||||||
(void)_dm_udev_wait(cookie);
|
(void)_dm_udev_wait(cookie);
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ int LUKS_hdr_restore(
|
|||||||
buffer_size = hdr_file.payloadOffset << SECTOR_SHIFT;
|
buffer_size = hdr_file.payloadOffset << SECTOR_SHIFT;
|
||||||
|
|
||||||
if (r || buffer_size < LUKS_ALIGN_KEYSLOTS) {
|
if (r || buffer_size < LUKS_ALIGN_KEYSLOTS) {
|
||||||
log_err(ctx, _("Backup file do not contain valid LUKS header.\n"));
|
log_err(ctx, _("Backup file doesn't contain valid LUKS header.\n"));
|
||||||
r = -EINVAL;
|
r = -EINVAL;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
@@ -288,7 +288,7 @@ int LUKS_hdr_restore(
|
|||||||
close(devfd);
|
close(devfd);
|
||||||
|
|
||||||
/* Be sure to reload new data */
|
/* Be sure to reload new data */
|
||||||
r = LUKS_read_phdr(device, hdr, 0, ctx);
|
r = LUKS_read_phdr(device, hdr, 1, ctx);
|
||||||
out:
|
out:
|
||||||
if (devfd != -1)
|
if (devfd != -1)
|
||||||
close(devfd);
|
close(devfd);
|
||||||
@@ -309,8 +309,6 @@ static int _check_and_convert_hdr(const char *device,
|
|||||||
log_dbg("LUKS header not detected.");
|
log_dbg("LUKS header not detected.");
|
||||||
if (require_luks_device)
|
if (require_luks_device)
|
||||||
log_err(ctx, _("Device %s is not a valid LUKS device.\n"), device);
|
log_err(ctx, _("Device %s is not a valid LUKS device.\n"), device);
|
||||||
else
|
|
||||||
set_error(_("Device %s is not a valid LUKS device."), device);
|
|
||||||
r = -EINVAL;
|
r = -EINVAL;
|
||||||
} else if((hdr->version = ntohs(hdr->version)) != 1) { /* Convert every uint16/32_t item from network byte order */
|
} else if((hdr->version = ntohs(hdr->version)) != 1) { /* Convert every uint16/32_t item from network byte order */
|
||||||
log_err(ctx, _("Unsupported LUKS version %d.\n"), hdr->version);
|
log_err(ctx, _("Unsupported LUKS version %d.\n"), hdr->version);
|
||||||
@@ -689,8 +687,7 @@ int LUKS_set_key(const char *device, unsigned int keyIndex,
|
|||||||
hdr->keyblock[keyIndex].keyMaterialOffset,
|
hdr->keyblock[keyIndex].keyMaterialOffset,
|
||||||
ctx);
|
ctx);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
if(!get_error())
|
log_err(ctx, _("Failed to write to key storage.\n"));
|
||||||
log_err(ctx, _("Failed to write to key storage.\n"));
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
31
lib/setup.c
31
lib/setup.c
@@ -73,6 +73,10 @@ struct crypt_device {
|
|||||||
void *password_usrptr;
|
void *password_usrptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Global error */
|
||||||
|
/* FIXME: not thread safe, remove this later */
|
||||||
|
static char global_error[512] = {0};
|
||||||
|
|
||||||
/* Log helper */
|
/* Log helper */
|
||||||
static void (*_default_log)(int level, const char *msg, void *usrptr) = NULL;
|
static void (*_default_log)(int level, const char *msg, void *usrptr) = NULL;
|
||||||
static int _debug_level = 0;
|
static int _debug_level = 0;
|
||||||
@@ -87,6 +91,7 @@ int crypt_get_debug_level(void)
|
|||||||
return _debug_level;
|
return _debug_level;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void crypt_log(struct crypt_device *cd, int level, const char *msg)
|
void crypt_log(struct crypt_device *cd, int level, const char *msg)
|
||||||
{
|
{
|
||||||
if (cd && cd->log)
|
if (cd && cd->log)
|
||||||
@@ -95,6 +100,16 @@ void crypt_log(struct crypt_device *cd, int level, const char *msg)
|
|||||||
_default_log(level, msg, NULL);
|
_default_log(level, msg, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set global error, ugly hack... */
|
||||||
|
void set_global_error(const char *error)
|
||||||
|
{
|
||||||
|
size_t size = strlen(error);
|
||||||
|
|
||||||
|
strncpy(global_error, error, sizeof(global_error) - 2);
|
||||||
|
if (size < sizeof(global_error) && global_error[size - 1] == '\n')
|
||||||
|
global_error[size - 1] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
__attribute__((format(printf, 5, 6)))
|
__attribute__((format(printf, 5, 6)))
|
||||||
void logger(struct crypt_device *cd, int level, const char *file,
|
void logger(struct crypt_device *cd, int level, const char *file,
|
||||||
int line, const char *format, ...)
|
int line, const char *format, ...)
|
||||||
@@ -104,7 +119,7 @@ void logger(struct crypt_device *cd, int level, const char *file,
|
|||||||
|
|
||||||
va_start(argp, format);
|
va_start(argp, format);
|
||||||
|
|
||||||
if (vasprintf(&target, format, argp) > 0) {
|
if (vasprintf(&target, format, argp) > 0 ) {
|
||||||
if (level >= 0) {
|
if (level >= 0) {
|
||||||
crypt_log(cd, level, target);
|
crypt_log(cd, level, target);
|
||||||
#ifdef CRYPT_DEBUG
|
#ifdef CRYPT_DEBUG
|
||||||
@@ -114,6 +129,9 @@ void logger(struct crypt_device *cd, int level, const char *file,
|
|||||||
} else if (_debug_level)
|
} else if (_debug_level)
|
||||||
printf("# %s\n", target);
|
printf("# %s\n", target);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (level == CRYPT_LOG_ERROR)
|
||||||
|
set_global_error(target);
|
||||||
}
|
}
|
||||||
|
|
||||||
va_end(argp);
|
va_end(argp);
|
||||||
@@ -411,16 +429,15 @@ void crypt_set_password_callback(struct crypt_device *cd,
|
|||||||
cd->password_usrptr = usrptr;
|
cd->password_usrptr = usrptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Deprecated global error interface */
|
||||||
void crypt_get_error(char *buf, size_t size)
|
void crypt_get_error(char *buf, size_t size)
|
||||||
{
|
{
|
||||||
const char *error = get_error();
|
|
||||||
|
|
||||||
if (!buf || size < 1)
|
if (!buf || size < 1)
|
||||||
set_error(NULL);
|
global_error[0] = '\0';
|
||||||
else if (error) {
|
else if (*global_error) {
|
||||||
strncpy(buf, error, size - 1);
|
strncpy(buf, global_error, size - 1);
|
||||||
buf[size - 1] = '\0';
|
buf[size - 1] = '\0';
|
||||||
set_error(NULL);
|
global_error[0] = '\0';
|
||||||
} else
|
} else
|
||||||
buf[0] = '\0';
|
buf[0] = '\0';
|
||||||
}
|
}
|
||||||
|
|||||||
40
lib/utils.c
40
lib/utils.c
@@ -38,46 +38,6 @@
|
|||||||
#include "libcryptsetup.h"
|
#include "libcryptsetup.h"
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
static char *error=NULL;
|
|
||||||
|
|
||||||
__attribute__((format(printf, 1, 0)))
|
|
||||||
void set_error_va(const char *fmt, va_list va)
|
|
||||||
{
|
|
||||||
int r;
|
|
||||||
|
|
||||||
if(error) {
|
|
||||||
free(error);
|
|
||||||
error = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!fmt) return;
|
|
||||||
|
|
||||||
r = vasprintf(&error, fmt, va);
|
|
||||||
if (r < 0) {
|
|
||||||
free(error);
|
|
||||||
error = NULL;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (r && error[r - 1] == '\n')
|
|
||||||
error[r - 1] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__((format(printf, 1, 2)))
|
|
||||||
void set_error(const char *fmt, ...)
|
|
||||||
{
|
|
||||||
va_list va;
|
|
||||||
|
|
||||||
va_start(va, fmt);
|
|
||||||
set_error_va(fmt, va);
|
|
||||||
va_end(va);
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *get_error(void)
|
|
||||||
{
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int get_alignment(int fd)
|
static int get_alignment(int fd)
|
||||||
{
|
{
|
||||||
int alignment = DEFAULT_MEM_ALIGNMENT;
|
int alignment = DEFAULT_MEM_ALIGNMENT;
|
||||||
|
|||||||
Reference in New Issue
Block a user