/* passwd.c * * Author: Kai Uwe Rommel * Created: Wed Mar 16 1994 */ #include #include #define SALT "pc" extern char *getpass(char *); extern char *crypt(char *, char*); int main(int argc, char **argv) { struct passwd *pw; char user[64], password[64], crypted[64]; char *cp; if (argc != 2) { printf("Usage: passwd \n"); return 1; } strcpy(user, argv[1]); if ((pw = getpwnam(user)) == NULL) { printf("No such user.\n"); return 1; } if (strcmp(pw->pw_passwd, "*")) { strcpy(password, getpass("Old password:")); if (strcmp(pw->pw_passwd, crypt(password, pw->pw_passwd))) { printf("Incorrect password.\n"); return 1; } } strcpy(password, getpass("New password:")); strcpy(crypted, getpass("Re-type new password:")); if (strcmp(password, crypted)) { printf("New passwords don't match.\n"); return 1; } strcpy(crypted, crypt(password, SALT)); if (strcmp(pw->pw_passwd, crypted) == 0) { printf("Password unchanged.\n"); return 1; } if (setpwnam(user, crypted)) { printf("Update of passwd file failed.\n"); return 1; } printf("Password changed.\n"); return 0; } /* end of passwd.c */