1 /* usmb - mount SMB shares via FUSE and Samba
2 * Copyright (C) 2006-2009 Geoff Johnstone
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 3 as
6 * published by the Free Software Foundation.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
29 bool password_read (char **out
)
31 struct termios attr
, new;
36 if (0 != tcgetattr (STDIN_FILENO
, &attr
))
39 fputs ("Cannot configure terminal to read password securely.\n", stderr
);
46 if (0 != tcsetattr (STDIN_FILENO
, TCSAFLUSH
, &new))
49 fputs ("Cannot configure terminal to read password securely.\n", stderr
);
55 fputs ("\nPassword: ", stdout
);
57 const bool ok
= (buff
== fgets (buff
, sizeof (buff
), stdin
));
60 if (0 != tcsetattr (STDIN_FILENO
, TCSAFLUSH
, &attr
))
63 fputs ("Failed to reset terminal.\n", stderr
);
71 // strip a trailing '\n'.
73 size_t len
= strlen (buff
);
75 if ((0 < len
) && ('\n' == buff
[len
- 1]))
79 *out
= xstrdup (buff
);
80 memset (buff
, 0, sizeof (buff
));
82 DEBUG (fprintf (stderr
, "Password: %s\n", *out
));
84 return (NULL
!= *out
);