chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
d55f4f3
)
ask-password: support passwords without timeouts
author
Lennart Poettering
<lennart@poettering.net>
Wed, 13 Apr 2011 19:42:46 +0000
(21:42 +0200)
committer
Lennart Poettering
<lennart@poettering.net>
Wed, 13 Apr 2011 19:42:46 +0000
(21:42 +0200)
src/ask-password-api.c
patch
|
blob
|
history
src/ask-password.c
patch
|
blob
|
history
src/cryptsetup.c
patch
|
blob
|
history
src/gnome-ask-password-agent.vala
patch
|
blob
|
history
src/tty-ask-password-agent.c
patch
|
blob
|
history
diff --git
a/src/ask-password-api.c
b/src/ask-password-api.c
index 384cfc8f8058cdd12a0bb7bf3f6cdd123ae4a5ef..04d5623d9ee19597bf849de6a13c7c018d5b5dcf 100644
(file)
--- a/
src/ask-password-api.c
+++ b/
src/ask-password-api.c
@@
-404,13
+404,13
@@
int ask_password_agent(
t = now(CLOCK_MONOTONIC);
t = now(CLOCK_MONOTONIC);
- if (until <= t) {
+ if (until
> 0 && until
<= t) {
log_notice("Timed out");
r = -ETIME;
goto finish;
}
log_notice("Timed out");
r = -ETIME;
goto finish;
}
- if ((k = poll(pollfd, _FD_MAX,
(until-t)/USEC_PER_MSEC
)) < 0) {
+ if ((k = poll(pollfd, _FD_MAX,
until > 0 ? (int) ((until-t)/USEC_PER_MSEC) : -1
)) < 0) {
if (errno == EINTR)
continue;
if (errno == EINTR)
continue;
diff --git
a/src/ask-password.c
b/src/ask-password.c
index c77376482e4a511ed8cbb80270197118a1bc6d47..6330369b4f20e4cddaef0ce375b6a1a097fbf4de 100644
(file)
--- a/
src/ask-password.c
+++ b/
src/ask-password.c
@@
-101,7
+101,7
@@
static int parse_argv(int argc, char *argv[]) {
break;
case ARG_TIMEOUT:
break;
case ARG_TIMEOUT:
- if (parse_usec(optarg, &arg_timeout) < 0
|| arg_timeout <= 0
) {
+ if (parse_usec(optarg, &arg_timeout) < 0) {
log_error("Failed to parse --timeout parameter %s", optarg);
return -EINVAL;
}
log_error("Failed to parse --timeout parameter %s", optarg);
return -EINVAL;
}
@@
-139,6
+139,7
@@
static int parse_argv(int argc, char *argv[]) {
int main(int argc, char *argv[]) {
int r;
int main(int argc, char *argv[]) {
int r;
+ usec_t timeout;
log_parse_environment();
log_open();
log_parse_environment();
log_open();
@@
-146,10
+147,15
@@
int main(int argc, char *argv[]) {
if ((r = parse_argv(argc, argv)) <= 0)
goto finish;
if ((r = parse_argv(argc, argv)) <= 0)
goto finish;
+ if (arg_timeout > 0)
+ timeout = now(CLOCK_MONOTONIC) + arg_timeout;
+ else
+ timeout = 0;
+
if (arg_use_tty && isatty(STDIN_FILENO)) {
char *password = NULL;
if (arg_use_tty && isatty(STDIN_FILENO)) {
char *password = NULL;
- if ((r = ask_password_tty(arg_message,
now(CLOCK_MONOTONIC) + arg_
timeout, NULL, &password)) >= 0) {
+ if ((r = ask_password_tty(arg_message, timeout, NULL, &password)) >= 0) {
puts(password);
free(password);
}
puts(password);
free(password);
}
@@
-157,7
+163,7
@@
int main(int argc, char *argv[]) {
} else {
char **l;
} else {
char **l;
- if ((r = ask_password_agent(arg_message, arg_icon,
now(CLOCK_MONOTONIC) + arg_
timeout, arg_accept_cached, &l)) >= 0) {
+ if ((r = ask_password_agent(arg_message, arg_icon, timeout, arg_accept_cached, &l)) >= 0) {
char **p;
STRV_FOREACH(p, l) {
char **p;
STRV_FOREACH(p, l) {
diff --git
a/src/cryptsetup.c
b/src/cryptsetup.c
index 3aa822a1d020591f618e5f6e18b8faab467d65f4..f52a41b995dbe8ca4bbf253daa72ef589eea5b57 100644
(file)
--- a/
src/cryptsetup.c
+++ b/
src/cryptsetup.c
@@
-309,7
+309,10
@@
int main(int argc, char *argv[]) {
if (opt_readonly)
flags |= CRYPT_ACTIVATE_READONLY;
if (opt_readonly)
flags |= CRYPT_ACTIVATE_READONLY;
- until = now(CLOCK_MONOTONIC) + (opt_timeout > 0 ? opt_timeout : DEFAULT_TIMEOUT_USEC);
+ if (opt_timeout > 0)
+ until = now(CLOCK_MONOTONIC) + opt_timeout;
+ else
+ until = 0;
opt_tries = opt_tries > 0 ? opt_tries : 3;
opt_key_size = (opt_key_size > 0 ? opt_key_size : 256);
opt_tries = opt_tries > 0 ? opt_tries : 3;
opt_key_size = (opt_key_size > 0 ? opt_key_size : 256);
@@
-404,6
+407,8
@@
int main(int argc, char *argv[]) {
}
}
}
}
+ k = 0;
+
if (!opt_type || streq(opt_type, CRYPT_LUKS1))
k = crypt_load(cd, CRYPT_LUKS1, NULL);
if (!opt_type || streq(opt_type, CRYPT_LUKS1))
k = crypt_load(cd, CRYPT_LUKS1, NULL);
diff --git
a/src/gnome-ask-password-agent.vala
b/src/gnome-ask-password-agent.vala
index 2bfc6a9c83a55ea346e2e84f3bce870faa2adb5b..c31c07e3db0de0f21f4963f543698a0a0cb1f651 100644
(file)
--- a/
src/gnome-ask-password-agent.vala
+++ b/
src/gnome-ask-password-agent.vala
@@
-165,7
+165,7
@@
public class MyStatusIcon : StatusIcon {
if (not_after_as_string.scanf("%llu", out not_after) != 1)
return false;
if (not_after_as_string.scanf("%llu", out not_after) != 1)
return false;
- if (not_after < now)
+ if (not_after
> 0 && not_after
< now)
return false;
socket = key_file.get_string("Ask", "Socket");
return false;
socket = key_file.get_string("Ask", "Socket");
diff --git
a/src/tty-ask-password-agent.c
b/src/tty-ask-password-agent.c
index a414cba3748c27c16cba6ad82a5fbc2f5a4f7bbb..4a29abacbbcc65e91b7b12c8394071f4312695ac 100644
(file)
--- a/
src/tty-ask-password-agent.c
+++ b/
src/tty-ask-password-agent.c
@@
-261,7
+261,6
@@
static int parse_password(const char *filename, char **wall) {
FILE *f;
int r;
FILE *f;
int r;
- usec_t n;
assert(filename);
assert(filename);
@@
-279,16
+278,17
@@
static int parse_password(const char *filename, char **wall) {
goto finish;
}
goto finish;
}
- if (!socket_name
|| not_after <= 0
) {
+ if (!socket_name) {
log_error("Invalid password file %s", filename);
r = -EBADMSG;
goto finish;
}
log_error("Invalid password file %s", filename);
r = -EBADMSG;
goto finish;
}
- n = now(CLOCK_MONOTONIC);
- if (n > not_after) {
- r = 0;
- goto finish;
+ if (not_after > 0) {
+ if (now(CLOCK_MONOTONIC) > not_after) {
+ r = 0;
+ goto finish;
+ }
}
if (arg_action == ACTION_LIST)
}
if (arg_action == ACTION_LIST)