From 30c6b4c9a22edc76b2e8335edbdf157dd51241eb Mon Sep 17 00:00:00 2001 From: "kay.sievers@vrfy.org" Date: Sun, 6 Mar 2005 02:02:45 +0100 Subject: [PATCH] [PATCH] udev_volume_id: volume_id v38 --- extras/volume_id/volume_id/luks.c | 77 +++++++++++--------------- extras/volume_id/volume_id/util.c | 9 +++ extras/volume_id/volume_id/util.h | 1 + extras/volume_id/volume_id/volume_id.c | 3 +- extras/volume_id/volume_id/volume_id.h | 8 +-- 5 files changed, 48 insertions(+), 50 deletions(-) diff --git a/extras/volume_id/volume_id/luks.c b/extras/volume_id/volume_id/luks.c index 200169273..a00bf4041 100644 --- a/extras/volume_id/volume_id/luks.c +++ b/extras/volume_id/volume_id/luks.c @@ -26,7 +26,6 @@ # include #endif -#include #include #include #include @@ -40,58 +39,47 @@ #include "logging.h" #include "luks.h" -/* from cryptsetup-luks internal.h */ -#define SECTOR_SHIFT 9 -#define SECTOR_SIZE (1 << SECTOR_SHIFT) +#define SECTOR_SHIFT 9 +#define SECTOR_SIZE (1 << SECTOR_SHIFT) -/* from cryptsetup-luks luks.h */ -#define LUKS_CIPHERNAME_L 32 -#define LUKS_CIPHERMODE_L 32 -#define LUKS_HASHSPEC_L 32 -#define LUKS_DIGESTSIZE 20 /* since SHA1 */ -#define LUKS_SALTSIZE 32 -#define LUKS_NUMKEYS 8 +#define LUKS_CIPHERNAME_L 32 +#define LUKS_CIPHERMODE_L 32 +#define LUKS_HASHSPEC_L 32 +#define LUKS_DIGESTSIZE 20 +#define LUKS_SALTSIZE 32 +#define LUKS_NUMKEYS 8 -/* from cryptsetup-luks luks.h */ -const unsigned char LUKS_MAGIC[] = {'L','U','K','S', 0xba, 0xbe}; +const __u8 LUKS_MAGIC[] = {'L','U','K','S', 0xba, 0xbe}; #define LUKS_MAGIC_L 6 - -/* from cryptsetup-luks luks.h */ #define LUKS_PHDR_SIZE (sizeof(struct luks_phdr)/SECTOR_SIZE+1) - -/* from cryptsetup-luks luks.h */ #define UUID_STRING_L 40 +struct luks_phdr { + __u8 magic[LUKS_MAGIC_L]; + __u16 version; + __u8 cipherName[LUKS_CIPHERNAME_L]; + __u8 cipherMode[LUKS_CIPHERMODE_L]; + __u8 hashSpec[LUKS_HASHSPEC_L]; + __u32 payloadOffset; + __u32 keyBytes; + __u8 mkDigest[LUKS_DIGESTSIZE]; + __u8 mkDigestSalt[LUKS_SALTSIZE]; + __u32 mkDigestIterations; + __u8 uuid[UUID_STRING_L]; + struct { + __u32 active; + __u32 passwordIterations; + __u8 passwordSalt[LUKS_SALTSIZE]; + __u32 keyMaterialOffset; + __u32 stripes; + } keyblock[LUKS_NUMKEYS]; +}; + int volume_id_probe_luks(struct volume_id *id, __u64 off) { - /* from cryptsetup-luks luks.h */ - struct luks_phdr { - char magic[LUKS_MAGIC_L]; - uint16_t version; - char cipherName[LUKS_CIPHERNAME_L]; - char cipherMode[LUKS_CIPHERMODE_L]; - char hashSpec[LUKS_HASHSPEC_L]; - uint32_t payloadOffset; - uint32_t keyBytes; - char mkDigest[LUKS_DIGESTSIZE]; - char mkDigestSalt[LUKS_SALTSIZE]; - uint32_t mkDigestIterations; - char uuid[UUID_STRING_L]; - struct { - uint32_t active; - - /* parameters used for password processing */ - uint32_t passwordIterations; - char passwordSalt[LUKS_SALTSIZE]; - - /* parameters used for AF store/load */ - uint32_t keyMaterialOffset; - uint32_t stripes; - } keyblock[LUKS_NUMKEYS]; - } *header; + struct luks_phdr *header; header = (struct luks_phdr*) volume_id_get_buffer(id, off, LUKS_PHDR_SIZE); - if (header == NULL) return -1; @@ -99,7 +87,8 @@ int volume_id_probe_luks(struct volume_id *id, __u64 off) return -1; volume_id_set_usage(id, VOLUME_ID_CRYPTO); - volume_id_set_uuid(id, header->uuid, UUID_DCE); + volume_id_set_uuid(id, header->uuid, UUID_DCE_STRING); + id->type = "crypto_LUKS"; return 0; diff --git a/extras/volume_id/volume_id/util.c b/extras/volume_id/volume_id/util.c index 6159a5992..6ae4d0992 100644 --- a/extras/volume_id/volume_id/util.c +++ b/extras/volume_id/volume_id/util.c @@ -138,8 +138,13 @@ void volume_id_set_uuid(struct volume_id *id, const __u8 *buf, enum uuid_format break; case UUID_DCE: count = 16; + break; + case UUID_DCE_STRING: + count = 36; + break; } memcpy(id->uuid_raw, buf, count); + id->uuid_raw_len = count; /* if set, create string in the same format, the native platform uses */ for (i = 0; i < count; i++) @@ -172,6 +177,10 @@ set: buf[8], buf[9], buf[10], buf[11], buf[12], buf[13], buf[14],buf[15]); break; + case UUID_DCE_STRING: + memcpy(id->uuid, buf, count); + id->uuid[count] = '\0'; + break; } } diff --git a/extras/volume_id/volume_id/util.h b/extras/volume_id/volume_id/util.h index 22fd1b94e..0357b4206 100644 --- a/extras/volume_id/volume_id/util.h +++ b/extras/volume_id/volume_id/util.h @@ -71,6 +71,7 @@ #endif enum uuid_format { + UUID_DCE_STRING, UUID_DCE, UUID_DOS, UUID_NTFS, diff --git a/extras/volume_id/volume_id/volume_id.c b/extras/volume_id/volume_id/volume_id.c index f93cc9116..7a08be89d 100644 --- a/extras/volume_id/volume_id/volume_id.c +++ b/extras/volume_id/volume_id/volume_id.c @@ -51,8 +51,8 @@ #include "ntfs.h" #include "iso9660.h" #include "udf.h" -#include "luks.h" #include "highpoint.h" +#include "luks.h" #include "linux_swap.h" #include "linux_raid.h" #include "lvm.h" @@ -60,7 +60,6 @@ #include "hpfs.h" #include "romfs.h" #include "sysv.h" -#include "luks.h" #include "mac.h" #include "msdos.h" diff --git a/extras/volume_id/volume_id/volume_id.h b/extras/volume_id/volume_id/volume_id.h index 8fe4c3a5e..22bb3ea48 100644 --- a/extras/volume_id/volume_id/volume_id.h +++ b/extras/volume_id/volume_id/volume_id.h @@ -21,11 +21,10 @@ #ifndef _VOLUME_ID_H_ #define _VOLUME_ID_H_ -#define VOLUME_ID_VERSION 36 +#define VOLUME_ID_VERSION 38 #define VOLUME_ID_LABEL_SIZE 64 -#define VOLUME_ID_UUID_SIZE 16 -#define VOLUME_ID_UUID_STRING_SIZE 37 +#define VOLUME_ID_UUID_SIZE 36 #define VOLUME_ID_FORMAT_SIZE 32 #define VOLUME_ID_PATH_MAX 256 #define VOLUME_ID_PARTITIONS_MAX 256 @@ -55,7 +54,8 @@ struct volume_id { unsigned int label_raw_len; char label[VOLUME_ID_LABEL_SIZE+1]; unsigned char uuid_raw[VOLUME_ID_UUID_SIZE]; - char uuid[VOLUME_ID_UUID_STRING_SIZE]; + unsigned int uuid_raw_len; + char uuid[VOLUME_ID_UUID_SIZE+1]; enum volume_id_usage usage_id; char *usage; char *type; -- 2.30.2