Add non-exclusive override via --non-exclusive.

git-svn-id: https://cryptsetup.googlecode.com/svn/trunk@25 36d66b0a-2a48-0410-832c-cd162a569da5
This commit is contained in:
Clemens Fruhwirth
2008-06-30 12:20:24 +00:00
parent f7803083d0
commit 7fbbc21a07
2 changed files with 9 additions and 4 deletions

View File

@@ -481,6 +481,7 @@ static int __crypt_luks_open(int arg, struct setup_backend *backend, struct cryp
}; };
char *dmCipherSpec; char *dmCipherSpec;
int r, tries = options->tries; int r, tries = options->tries;
int excl = (options->flags & CRYPT_FLAG_NON_EXCLUSIVE_ACCESS) ? 0 : O_EXCL ;
r = backend->status(0, &tmp, NULL); r = backend->status(0, &tmp, NULL);
if (r >= 0) { if (r >= 0) {
@@ -488,7 +489,7 @@ static int __crypt_luks_open(int arg, struct setup_backend *backend, struct cryp
return -EEXIST; return -EEXIST;
} }
if (!LUKS_device_ready(options->device, O_RDONLY | O_EXCL)) { if (!LUKS_device_ready(options->device, O_RDONLY | excl)) {
set_error("Can not access device"); set_error("Can not access device");
return -ENOTBLK; return -ENOTBLK;
} }

View File

@@ -31,6 +31,7 @@ static int opt_version_mode = 0;
static int opt_timeout = 0; static int opt_timeout = 0;
static int opt_tries = 3; static int opt_tries = 3;
static int opt_align_payload = 0; static int opt_align_payload = 0;
static int opt_non_exclusive = 0;
static const char **action_argv; static const char **action_argv;
static int action_argc; static int action_argc;
@@ -289,6 +290,8 @@ static int action_luksOpen(int arg)
options.flags = 0; options.flags = 0;
if (opt_readonly) if (opt_readonly)
options.flags |= CRYPT_FLAG_READONLY; options.flags |= CRYPT_FLAG_READONLY;
if (opt_non_exclusive)
options.flags |= CRYPT_FLAG_NON_EXCLUSIVE_ACCESS;
r = crypt_luksOpen(&options); r = crypt_luksOpen(&options);
show_status(-r); show_status(-r);
return r; return r;
@@ -458,6 +461,7 @@ int main(int argc, char **argv)
{ "timeout", 't', POPT_ARG_INT, &opt_timeout, 0, N_("Timeout for interactive passphrase prompt (in seconds)"), N_("secs") }, { "timeout", 't', POPT_ARG_INT, &opt_timeout, 0, N_("Timeout for interactive passphrase prompt (in seconds)"), N_("secs") },
{ "tries", 'T', POPT_ARG_INT, &opt_tries, 0, N_("How often the input of the passphrase can be retried"), NULL }, { "tries", 'T', POPT_ARG_INT, &opt_tries, 0, N_("How often the input of the passphrase can be retried"), NULL },
{ "align-payload", '\0', POPT_ARG_INT, &opt_align_payload, 0, N_("Align payload at <n> sector boundaries - for luksFormat"), N_("SECTORS") }, { "align-payload", '\0', POPT_ARG_INT, &opt_align_payload, 0, N_("Align payload at <n> sector boundaries - for luksFormat"), N_("SECTORS") },
{ "non-exclusive", '\0', POPT_ARG_NONE, &opt_non_exclusive, 0, N_("Allows non-exclusive access for luksOpen, WARNING see manpage."), NULL },
POPT_TABLEEND POPT_TABLEEND
}; };
poptContext popt_context; poptContext popt_context;