static unsigned opt_keyfile_size = 0;
static unsigned opt_keyfile_offset = 0;
static char *opt_hash = NULL;
-static unsigned opt_tries = 0;
+static unsigned opt_tries = 3;
static bool opt_readonly = false;
static bool opt_verify = false;
static bool opt_discards = false;
t = strdup(option+7);
if (!t)
- return -ENOMEM;
+ return log_oom();
free(opt_cipher);
opt_cipher = t;
} else if (startswith(option, "tcrypt-keyfile=")) {
opt_type = CRYPT_TCRYPT;
- if (path_is_absolute(option+15))
- opt_tcrypt_keyfiles = strv_append(opt_tcrypt_keyfiles, strdup(option+15));
- else
+ if (path_is_absolute(option+15)) {
+ if (strv_extend(&opt_tcrypt_keyfiles, option + 15) < 0)
+ return log_oom();
+ } else
log_error("Key file path '%s' is not absolute. Ignoring.", option+15);
} else if (startswith(option, "keyfile-size=")) {
t = strdup(option+5);
if (!t)
- return -ENOMEM;
+ return log_oom();
free(opt_hash);
opt_hash = t;
}
static char *disk_mount_point(const char *label) {
- char *mp = NULL;
_cleanup_free_ char *device = NULL;
- FILE *f = NULL;
+ _cleanup_endmntent_ FILE *f = NULL;
struct mntent *m;
/* Yeah, we don't support native systemd unit files here for now */
if (asprintf(&device, "/dev/mapper/%s", label) < 0)
- goto finish;
+ return NULL;
f = setmntent("/etc/fstab", "r");
if (!f)
- goto finish;
+ return NULL;
while ((m = getmntent(f)))
- if (path_equal(m->mnt_fsname, device)) {
- mp = strdup(m->mnt_dir);
- break;
- }
-
-finish:
- if (f)
- endmntent(f);
+ if (path_equal(m->mnt_fsname, device))
+ return strdup(m->mnt_dir);
- return mp;
+ return NULL;
}
static int get_password(const char *name, usec_t until, bool accept_cached, char ***passwords) {
else
until = 0;
- opt_tries = opt_tries > 0 ? opt_tries : 3;
opt_key_size = (opt_key_size > 0 ? opt_key_size : 256);
if (key_file) {
log_warning("Key file %s is world-readable. This is not a good idea!", key_file);
}
- for (tries = 0; tries < opt_tries; tries++) {
+ for (tries = 0; opt_tries == 0 || tries < opt_tries; tries++) {
_cleanup_strv_free_ char **passwords = NULL;
if (!key_file) {
log_warning("Invalid passphrase.");
}
- if (tries >= opt_tries) {
+ if (opt_tries != 0 && tries >= opt_tries) {
log_error("Too many attempts; giving up.");
r = EXIT_FAILURE;
goto finish;