home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / pcnfsd2.zip / passwd.c < prev    next >
C/C++ Source or Header  |  1994-03-16  |  1KB  |  74 lines

  1. /* passwd.c
  2.  *
  3.  * Author:  Kai Uwe Rommel <rommel@jonas>
  4.  * Created: Wed Mar 16 1994
  5.  */
  6.  
  7. #include <stdio.h>
  8. #include <pwd.h>
  9.  
  10. #define SALT "pc"
  11.  
  12. extern char *getpass(char *);
  13. extern char *crypt(char *, char*);
  14.  
  15. int main(int argc, char **argv)
  16. {
  17.   struct passwd *pw;
  18.   char user[64], password[64], crypted[64];
  19.   char *cp;
  20.  
  21.   if (argc != 2)
  22.   {
  23.     printf("Usage: passwd <user>\n");
  24.     return 1;
  25.   }
  26.  
  27.   strcpy(user, argv[1]);
  28.   
  29.   if ((pw = getpwnam(user)) == NULL)
  30.   {
  31.     printf("No such user.\n");
  32.     return 1;
  33.   }
  34.  
  35.   if (strcmp(pw->pw_passwd, "*"))
  36.   {
  37.     strcpy(password, getpass("Old password:"));
  38.     if (strcmp(pw->pw_passwd, crypt(password, pw->pw_passwd)))
  39.     {
  40.       printf("Incorrect password.\n");
  41.       return 1;
  42.     }
  43.   }
  44.   
  45.   strcpy(password, getpass("New password:"));
  46.   strcpy(crypted, getpass("Re-type new password:"));
  47.  
  48.   if (strcmp(password, crypted))
  49.   {
  50.     printf("New passwords don't match.\n");
  51.     return 1;
  52.   }
  53.   
  54.   strcpy(crypted, crypt(password, SALT));
  55.  
  56.   if (strcmp(pw->pw_passwd, crypted) == 0)
  57.   {
  58.     printf("Password unchanged.\n");
  59.     return 1;
  60.   }
  61.   
  62.   if (setpwnam(user, crypted))
  63.   {
  64.     printf("Update of passwd file failed.\n");
  65.     return 1;
  66.   }
  67.  
  68.   printf("Password changed.\n");
  69.  
  70.   return 0;
  71. }
  72.  
  73. /* end of passwd.c */
  74.