X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcryptsetup%2Fcryptsetup.c;h=f570724b9d8c0105d26c12715e0a3521c42b55b4;hb=57fb9fb56db0584581ce33ee842dcbf5f1136856;hp=6d4e965fe11be56eface30edb832816962058e69;hpb=9eb977db5b89b44f254ab40c1876a76b7d7ea2d0;p=elogind.git diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c index 6d4e965fe..f570724b9 100644 --- a/src/cryptsetup/cryptsetup.c +++ b/src/cryptsetup/cryptsetup.c @@ -37,10 +37,12 @@ static const char *opt_type = NULL; /* LUKS1 or PLAIN */ static char *opt_cipher = NULL; static unsigned opt_key_size = 0; +static unsigned opt_keyfile_offset = 0; static char *opt_hash = NULL; static unsigned opt_tries = 0; static bool opt_readonly = false; static bool opt_verify = false; +static bool opt_discards = false; static usec_t opt_timeout = DEFAULT_TIMEOUT_USEC; /* Options Debian's crypttab knows we don't: @@ -78,6 +80,13 @@ static int parse_one_option(const char *option) { return 0; } + } else if (startswith(option, "keyfile-offset=")) { + + if (safe_atou(option+15, &opt_keyfile_offset) < 0) { + log_error("keyfile-offset= parse failure, ignoring."); + return 0; + } + } else if (startswith(option, "hash=")) { char *t; @@ -98,6 +107,8 @@ static int parse_one_option(const char *option) { opt_readonly = true; else if (streq(option, "verify")) opt_verify = true; + else if (streq(option, "allow-discards")) + opt_discards = true; else if (streq(option, "luks")) opt_type = CRYPT_LUKS1; else if (streq(option, "plain") || @@ -314,6 +325,9 @@ int main(int argc, char *argv[]) { if (opt_readonly) flags |= CRYPT_ACTIVATE_READONLY; + if (opt_discards) + flags |= CRYPT_ACTIVATE_ALLOW_DISCARDS; + if (opt_timeout > 0) until = now(CLOCK_MONOTONIC) + opt_timeout; else @@ -456,7 +470,8 @@ int main(int argc, char *argv[]) { argv[3]); if (key_file) - k = crypt_activate_by_keyfile(cd, argv[2], CRYPT_ANY_SLOT, key_file, keyfile_size, flags); + k = crypt_activate_by_keyfile_offset(cd, argv[2], CRYPT_ANY_SLOT, key_file, keyfile_size, + opt_keyfile_offset, flags); else { char **p;