[systemd-commits] 2 commits - man/systemd.special.xml src/cryptsetup
Lennart Poettering
lennart at kemper.freedesktop.org
Tue Mar 26 08:01:17 PDT 2013
man/systemd.special.xml | 8 +++++
src/cryptsetup/cryptsetup.c | 69 ++++++++++++++++++++++++++++----------------
2 files changed, 52 insertions(+), 25 deletions(-)
New commits:
commit 74b1c371744d6948094476a4c135afa54b21414b
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Mar 26 15:23:54 2013 +0100
cryptsetup: when prompting for password use GPT partition label
If there's a GPT partition label set for a LUKS partition, then it's
nicer to show that than the model number, when asking for a passphrase.
diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c
index a8cdf10..d5dc233 100644
--- a/src/cryptsetup/cryptsetup.c
+++ b/src/cryptsetup/cryptsetup.c
@@ -68,7 +68,8 @@ static int parse_one_option(const char *option) {
if (startswith(option, "cipher=")) {
char *t;
- if (!(t = strdup(option+7)))
+ t = strdup(option+7);
+ if (!t)
return -ENOMEM;
free(opt_cipher);
@@ -98,7 +99,8 @@ static int parse_one_option(const char *option) {
} else if (startswith(option, "hash=")) {
char *t;
- if (!(t = strdup(option+5)))
+ t = strdup(option+5);
+ if (!t)
return -ENOMEM;
free(opt_hash);
@@ -137,22 +139,19 @@ static int parse_one_option(const char *option) {
}
static int parse_options(const char *options) {
- char *state;
- char *w;
+ char *state, *w;
size_t l;
+ int r;
assert(options);
FOREACH_WORD_SEPARATOR(w, l, options, ",", state) {
- char *o;
- int r;
+ _cleanup_free_ char *o;
- if (!(o = strndup(w, l)))
+ o = strndup(w, l);
+ if (!o)
return -ENOMEM;
-
r = parse_one_option(o);
- free(o);
-
if (r < 0)
return r;
}
@@ -165,11 +164,19 @@ static void log_glue(int level, const char *msg, void *usrptr) {
}
static char *disk_description(const char *path) {
+
+ static const char name_fields[] = {
+ "ID_PART_ENTRY_NAME\0"
+ "DM_NAME\0"
+ "ID_MODEL_FROM_DATABASE\0"
+ "ID_MODEL\0"
+ };
+
struct udev *udev = NULL;
struct udev_device *device = NULL;
struct stat st;
char *description = NULL;
- const char *model;
+ const char *i;
assert(path);
@@ -179,16 +186,23 @@ static char *disk_description(const char *path) {
if (!S_ISBLK(st.st_mode))
return NULL;
- if (!(udev = udev_new()))
+ udev = udev_new();
+ if (!udev)
return NULL;
- if (!(device = udev_device_new_from_devnum(udev, 'b', st.st_rdev)))
+ device = udev_device_new_from_devnum(udev, 'b', st.st_rdev);
+ if (!device)
goto finish;
- if ((model = udev_device_get_property_value(device, "ID_MODEL_FROM_DATABASE")) ||
- (model = udev_device_get_property_value(device, "ID_MODEL")) ||
- (model = udev_device_get_property_value(device, "DM_NAME")))
- description = strdup(model);
+ NULSTR_FOREACH(i, name_fields) {
+ const char *name;
+
+ name = udev_device_get_property_value(device, i);
+ if (!isempty(name)) {
+ description = strdup(name);
+ break;
+ }
+ }
finish:
if (device)
@@ -289,8 +303,10 @@ int main(int argc, char *argv[]) {
key_file = argv[4];
}
- if (argc >= 6 && argv[5][0] && !streq(argv[5], "-"))
- parse_options(argv[5]);
+ if (argc >= 6 && argv[5][0] && !streq(argv[5], "-")) {
+ if (parse_options(argv[5]) < 0)
+ goto finish;
+ }
/* A delicious drop of snake oil */
mlockall(MCL_FUTURE);
@@ -315,7 +331,8 @@ int main(int argc, char *argv[]) {
name = name_buffer ? name_buffer : argv[2];
- if ((k = crypt_init(&cd, argv[3]))) {
+ k = crypt_init(&cd, argv[3]);
+ if (k) {
log_error("crypt_init() failed: %s", strerror(-k));
goto finish;
}
@@ -353,8 +370,9 @@ int main(int argc, char *argv[]) {
size_t l;
l = strcspn(opt_cipher, "-");
+ truncated_cipher = strndup(opt_cipher, l);
- if (!(truncated_cipher = strndup(opt_cipher, l))) {
+ if (!truncated_cipher) {
log_oom();
goto finish;
}
@@ -373,8 +391,7 @@ int main(int argc, char *argv[]) {
passwords = NULL;
if (!key_file) {
- char *text;
- char **p;
+ char *text, **p;
if (asprintf(&text, "Please enter passphrase for disk %s!", name) < 0) {
log_oom();
@@ -521,14 +538,16 @@ int main(int argc, char *argv[]) {
} else if (streq(argv[1], "detach")) {
int k;
- if ((k = crypt_init_by_name(&cd, argv[2]))) {
+ k = crypt_init_by_name(&cd, argv[2]);
+ if (k) {
log_error("crypt_init() failed: %s", strerror(-k));
goto finish;
}
crypt_set_log_callback(cd, log_glue, NULL);
- if ((k = crypt_deactivate(cd, argv[2])) < 0) {
+ k = crypt_deactivate(cd, argv[2]);
+ if (k < 0) {
log_error("Failed to deactivate: %s", strerror(-k));
goto finish;
}
commit dfebfe67dd66e909ec2f982177faa8d4f70acb88
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Mar 26 15:16:50 2013 +0100
man: document that the passive units cannot be pulled in mnaully
diff --git a/man/systemd.special.xml b/man/systemd.special.xml
index b77b60d..b7340ed 100644
--- a/man/systemd.special.xml
+++ b/man/systemd.special.xml
@@ -811,6 +811,14 @@
(via a <varname>Wants=</varname> type
dependency).</para>
+ <para>Note that these passive units cannot be started
+ manually, i.e. <literal>systemctl start
+ time-sync.target</literal> will fail with an
+ error. They can only be pulled in by dependency. This
+ is enforced since they exist for ordering purposes
+ only and thus are not useful as only unit within a
+ transaction.</para>
+
<variablelist>
<varlistentry>
<term><filename>local-fs-pre.target</filename></term>
More information about the systemd-commits
mailing list