chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
crypto: to show stars or not to show them
[elogind.git]
/
src
/
ask-password-api.c
diff --git
a/src/ask-password-api.c
b/src/ask-password-api.c
index 5d17d4cd52578d542bf1cacecbc17ae3ae8eb753..022f1cae8caddff65f28a8fbecff8fc1a19449e6 100644
(file)
--- a/
src/ask-password-api.c
+++ b/
src/ask-password-api.c
@@
-18,7
+18,7
@@
You should have received a copy of the GNU General Public License
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
You should have received a copy of the GNU General Public License
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
-
+#include <stdbool.h>
#include <termios.h>
#include <unistd.h>
#include <sys/poll.h>
#include <termios.h>
#include <unistd.h>
#include <sys/poll.h>
@@
-48,6
+48,7
@@
int ask_password_tty(
int r, ttyfd = -1, notify = -1;
struct pollfd pollfd[2];
bool reset_tty = false;
int r, ttyfd = -1, notify = -1;
struct pollfd pollfd[2];
bool reset_tty = false;
+ bool silent_mode = false;
enum {
POLL_TTY,
POLL_INOTIFY
enum {
POLL_TTY,
POLL_INOTIFY
@@
-156,7
+157,6
@@
int ask_password_tty(
if (c == '\n')
break;
else if (c == 21) {
if (c == '\n')
break;
else if (c == 21) {
-
while (p > 0) {
p--;
while (p > 0) {
p--;
@@
-165,7
+165,10
@@
int ask_password_tty(
}
} else if (c == '\b' || c == 127) {
}
} else if (c == '\b' || c == 127) {
- if (p > 0) {
+ if (p == 0 && !silent_mode) {
+ silent_mode = true;
+ loop_write(ttyfd, "(no echo) ", 10, false);
+ } else if (p > 0) {
p--;
if (ttyfd >= 0)
p--;
if (ttyfd >= 0)
@@
-174,7
+177,7
@@
int ask_password_tty(
} else {
passphrase[p++] = c;
} else {
passphrase[p++] = c;
- if (ttyfd >= 0)
+ if (
!silent_mode &&
ttyfd >= 0)
loop_write(ttyfd, "*", 1, false);
}
}
loop_write(ttyfd, "*", 1, false);
}
}