summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/util/getpass.c52
1 files changed, 29 insertions, 23 deletions
diff --git a/lib/util/getpass.c b/lib/util/getpass.c
index 480bd56898..0cbc7dd253 100644
--- a/lib/util/getpass.c
+++ b/lib/util/getpass.c
@@ -170,31 +170,34 @@ int samba_getpass(const char *prompt,
return -1;
}
- ZERO_STRUCT(attr);
- ZERO_STRUCT(old_attr);
+ if (isatty (STDIN_FILENO)) {
- /* get local terminal attributes */
- if (tcgetattr(STDIN_FILENO, &attr) < 0) {
- perror("tcgetattr");
- return -1;
- }
+ ZERO_STRUCT(attr);
+ ZERO_STRUCT(old_attr);
- /* save terminal attributes */
- memcpy(&old_attr, &attr, sizeof(attr));
- if((fd = fcntl(0, F_GETFL, 0)) < 0) {
- perror("fcntl");
- return -1;
- }
+ /* get local terminal attributes */
+ if (tcgetattr(STDIN_FILENO, &attr) < 0) {
+ perror("tcgetattr");
+ return -1;
+ }
- /* disable echo */
- if (!echo) {
- attr.c_lflag &= ~(ECHO);
- }
+ /* save terminal attributes */
+ memcpy(&old_attr, &attr, sizeof(attr));
+ if((fd = fcntl(0, F_GETFL, 0)) < 0) {
+ perror("fcntl");
+ return -1;
+ }
- /* write attributes to terminal */
- if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &attr) < 0) {
- perror("tcsetattr");
- return -1;
+ /* disable echo */
+ if (!echo) {
+ attr.c_lflag &= ~(ECHO);
+ }
+
+ /* write attributes to terminal */
+ if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &attr) < 0) {
+ perror("tcsetattr");
+ return -1;
+ }
}
/* disable nonblocking I/O */
@@ -204,8 +207,11 @@ int samba_getpass(const char *prompt,
ok = samba_gets(prompt, buf, len, verify);
- /* reset terminal */
- tcsetattr(STDIN_FILENO, TCSANOW, &old_attr);
+ if (isatty (STDIN_FILENO)) {
+
+ /* reset terminal */
+ tcsetattr(STDIN_FILENO, TCSANOW, &old_attr);
+ }
/* close fd */
if (fd & O_NDELAY) {