Device mapper device should use UUID string if possible.
UDEV can then easily distinguish the device type etc.
cryptsetup now uses CRYPT prefix for uuid.
git-svn-id: https://cryptsetup.googlecode.com/svn/trunk@55
36d66b0a-2a48-0410-832c-
cd162a569da5
int (*init)(void);
void (*exit)(void);
int (*create)(int reload, struct crypt_options *options,
- const char *key);
+ const char *key, const char *uuid);
int (*status)(int details, struct crypt_options *options,
char **key);
int (*remove)(int force, struct crypt_options *options);
#include "internal.h"
#define DEVICE_DIR "/dev"
-
+#define UUID_PREFIX "CRYPT-"
#define CRYPT_TARGET "crypt"
#define RETRY_COUNT 5
}
static int dm_create_device(int reload, struct crypt_options *options,
- const char *key)
+ const char *key, const char *uuid)
{
struct dm_task *dmt = NULL;
struct dm_task *dmt_query = NULL;
struct dm_info dmi;
char *params = NULL;
char *error = NULL;
+ char dev_uuid[64];
int r = -EINVAL;
uint32_t read_ahead = 0;
params = get_params(options, key);
if (!params)
goto out_no_removal;
+
+ if (uuid) {
+ strcpy(dev_uuid, UUID_PREFIX);
+ strcat(dev_uuid, uuid);
+ }
+
if (!(dmt = dm_task_create(reload ? DM_DEVICE_RELOAD
: DM_DEVICE_CREATE)))
goto out;
!dm_task_set_read_ahead(dmt, read_ahead, DM_READ_AHEAD_MINIMUM_FLAG))
goto out;
#endif
+
+ if (uuid && !dm_task_set_uuid(dmt, dev_uuid))
+ goto out;
+
if (!dm_task_run(dmt))
goto out;
goto out;
if (!dm_task_set_name(dmt, options->name))
goto out;
+ if (uuid && !dm_task_set_uuid(dmt, dev_uuid))
+ goto out;
if (!dm_task_run(dmt))
goto out;
}
set_error("Key processing error");
return -ENOENT;
}
-
- r = backend->create(reload, options, processed_key);
-
+
+ r = backend->create(reload, options, processed_key, NULL);
+
safe_free(processed_key);
return r;
if (infos.readonly)
options->flags |= CRYPT_FLAG_READONLY;
- r = backend->create(1, &tmp, key);
+ r = backend->create(1, &tmp, key, NULL);
safe_free(key);
r = -EINVAL; goto out2;
}
options->size -= options->offset;
- r = backend->create(0, options, mk->key);
+ /* FIXME: code allows multiple crypt mapping, cannot use uuid then.
+ * anyway, it is dangerous and can corrupt data. Remove it in next version! */
+ r = backend->create(0, options, mk->key, excl ? hdr.uuid : NULL);
out2:
free(dmCipherSpec);
set_error(NULL);
- r = backend->create(0, options, key);
+ r = backend->create(0, options, key, NULL);
return r;
}