* It now works with md5, sha1, etc passwords. */
#include <stdio.h>
+#include <stdlib.h>
#include <sys/vt.h>
#include <signal.h>
#include <string.h>
static struct spwd *spw;
/* getspuid - get a shadow entry by uid */
-struct spwd *getspuid(uid_t uid)
+static struct spwd *getspuid(uid_t uid)
{
struct spwd *sp;
struct passwd *mypw;
struct termios term;
if (argc > 2) {
- show_usage();
+ bb_show_usage();
}
if (argc == 2) {
if (strncmp(argv[1], "-a", 2)) {
- show_usage();
+ bb_show_usage();
} else {
o_lock_all = 1;
}
}
if ((pw = getpwuid(getuid())) == NULL) {
- error_msg_and_die("no password for uid %d\n", getuid());
+ bb_error_msg_and_die("no password for uid %d\n", getuid());
}
#ifdef CONFIG_FEATURE_SHADOWPASSWDS
if ((strcmp(pw->pw_passwd, "x") == 0)
|| (strcmp(pw->pw_passwd, "*") == 0)) {
if ((spw = getspuid(getuid())) == NULL) {
- error_msg_and_die("could not read shadow password for uid %d: %s\n",
+ bb_error_msg_and_die("could not read shadow password for uid %d: %s\n",
getuid(), strerror(errno));
}
if (spw->sp_pwdp) {
}
#endif /* CONFIG_FEATURE_SHADOWPASSWDS */
if (pw->pw_passwd[0] == '!' || pw->pw_passwd[0] == '*') {
- error_msg_and_die("Account disabled for uid %d\n", getuid());
+ bb_error_msg_and_die("Account disabled for uid %d\n", getuid());
}
/* we no longer need root privs */
setgid(getgid());
if ((vfd = open("/dev/tty", O_RDWR)) < 0) {
- error_msg_and_die("/dev/tty");
+ bb_error_msg_and_die("/dev/tty");
};
if (ioctl(vfd, VT_GETMODE, &vtm) < 0) {
- error_msg_and_die("/dev/tty");
+ bb_error_msg_and_die("/dev/tty");
};
/* mask a bunch of signals */
snprintf(prompt, 100, "%s's password: ", pw->pw_name);
- if ((pass = getpass(prompt)) == NULL) {
- perror("getpass");
+ if ((pass = bb_askpass(0, prompt)) == NULL) {
restore_terminal();
- exit(1);
+ bb_perror_msg_and_die("password");
}
crypt_pass = pw_encrypt(pass, pw->pw_passwd);
memset(crypt_pass, 0, strlen(crypt_pass));
if (isatty(STDIN_FILENO) == 0) {
- perror("isatty");
restore_terminal();
- exit(1);
+ bb_perror_msg_and_die("isatty");
}
sleep(++times);