=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/passwd/Attic/yp_passwd.c,v retrieving revision 1.14 retrieving revision 1.15 diff -c -r1.14 -r1.15 *** src/usr.bin/passwd/Attic/yp_passwd.c 2000/08/01 22:27:51 1.14 --- src/usr.bin/passwd/Attic/yp_passwd.c 2000/12/12 02:19:59 1.15 *************** *** 1,4 **** ! /* $OpenBSD: yp_passwd.c,v 1.14 2000/08/01 22:27:51 provos Exp $ */ /* * Copyright (c) 1988 The Regents of the University of California. --- 1,4 ---- ! /* $OpenBSD: yp_passwd.c,v 1.15 2000/12/12 02:19:59 millert Exp $ */ /* * Copyright (c) 1988 The Regents of the University of California. *************** *** 34,40 **** */ #ifndef lint /*static char sccsid[] = "from: @(#)yp_passwd.c 1.0 2/2/93";*/ ! static char rcsid[] = "$OpenBSD: yp_passwd.c,v 1.14 2000/08/01 22:27:51 provos Exp $"; #endif /* not lint */ #ifdef YP --- 34,40 ---- */ #ifndef lint /*static char sccsid[] = "from: @(#)yp_passwd.c 1.0 2/2/93";*/ ! static char rcsid[] = "$OpenBSD: yp_passwd.c,v 1.15 2000/12/12 02:19:59 millert Exp $"; #endif /* not lint */ #ifdef YP *************** *** 64,73 **** extern int pwd_check __P((struct passwd *, char *)); extern int pwd_gettries __P((struct passwd *)); ! static char *getnewpasswd(); ! static struct passwd *ypgetpwnam(); - static uid_t uid; char *domain; static int --- 64,72 ---- extern int pwd_check __P((struct passwd *, char *)); extern int pwd_gettries __P((struct passwd *)); ! char *ypgetnewpasswd __P((struct passwd *, char **)); ! struct passwd *ypgetpwnam __P((char *)); char *domain; static int *************** *** 75,81 **** char *name; int err, eval; { ! if(err) warn("%s", name); warnx("YP passwd database unchanged."); --- 74,80 ---- char *name; int err, eval; { ! if (err) warn("%s", name); warnx("YP passwd database unchanged."); *************** *** 88,106 **** { char *master; int r, rpcport, status; struct yppasswd yppasswd; struct passwd *pw; struct timeval tv; CLIENT *client; - - uid = getuid(); /* * Get local domain */ if ((r = yp_get_default_domain(&domain)) != 0) { warnx("can't get local YP domain. Reason: %s", yperr_string(r)); ! exit(1); } /* --- 87,104 ---- { char *master; int r, rpcport, status; + uid_t uid; struct yppasswd yppasswd; struct passwd *pw; struct timeval tv; CLIENT *client; /* * Get local domain */ if ((r = yp_get_default_domain(&domain)) != 0) { warnx("can't get local YP domain. Reason: %s", yperr_string(r)); ! return(1); } /* *************** *** 110,116 **** if ((r = yp_master(domain, "passwd.byname", &master)) != 0) { warnx("can't find the master YP server. Reason: %s", yperr_string(r)); ! exit(1); } /* --- 108,114 ---- if ((r = yp_master(domain, "passwd.byname", &master)) != 0) { warnx("can't find the master YP server. Reason: %s", yperr_string(r)); ! return(1); } /* *************** *** 120,126 **** YPPASSWDPROC_UPDATE, IPPROTO_UDP)) == 0) { warnx("master YP server not running yppasswd daemon."); warnx("Can't change password."); ! exit(1); } /* --- 118,124 ---- YPPASSWDPROC_UPDATE, IPPROTO_UDP)) == 0) { warnx("master YP server not running yppasswd daemon."); warnx("Can't change password."); ! return(1); } /* *************** *** 128,149 **** */ if (rpcport >= IPPORT_RESERVED) { warnx("yppasswd daemon is on an invalid port."); ! exit(1); } /* Get user's login identity */ if (!(pw = ypgetpwnam(username))) { warnx("unknown user %s.", username); ! exit(1); } if (uid && uid != pw->pw_uid) { warnx("you may only change your own password: %s", strerror(EACCES)); ! exit(1); } /* prompt for new password */ ! yppasswd.newpw.pw_passwd = getnewpasswd(pw, &yppasswd.oldpass); /* tell rpc.yppasswdd */ yppasswd.newpw.pw_name = pw->pw_name; --- 126,148 ---- */ if (rpcport >= IPPORT_RESERVED) { warnx("yppasswd daemon is on an invalid port."); ! return(1); } /* Get user's login identity */ if (!(pw = ypgetpwnam(username))) { warnx("unknown user %s.", username); ! return(1); } + uid = getuid(); if (uid && uid != pw->pw_uid) { warnx("you may only change your own password: %s", strerror(EACCES)); ! return(1); } /* prompt for new password */ ! yppasswd.newpw.pw_passwd = ypgetnewpasswd(pw, &yppasswd.oldpass); /* tell rpc.yppasswdd */ yppasswd.newpw.pw_name = pw->pw_name; *************** *** 170,195 **** else if (status) { printf("Couldn't change YP password.\n"); free(yppasswd.newpw.pw_passwd); ! exit(1); } printf("The YP password has been changed on %s, the master YP passwd server.\n", master); free(yppasswd.newpw.pw_passwd); ! exit(0); } ! static char * ! getnewpasswd(pw, old_pass) ! register struct passwd *pw; char **old_pass; { static char buf[_PASSWORD_LEN+1]; ! register char *p, *t; int tries, pwd_tries; ! char salt[_PASSWORD_LEN], *crypt(), *getpass(); printf("Changing YP password for %s.\n", pw->pw_name); - if (old_pass) { *old_pass = NULL; --- 169,193 ---- else if (status) { printf("Couldn't change YP password.\n"); free(yppasswd.newpw.pw_passwd); ! return(1); } printf("The YP password has been changed on %s, the master YP passwd server.\n", master); free(yppasswd.newpw.pw_passwd); ! return(0); } ! char * ! ypgetnewpasswd(pw, old_pass) ! struct passwd *pw; char **old_pass; { static char buf[_PASSWORD_LEN+1]; ! char *p; int tries, pwd_tries; ! char salt[_PASSWORD_LEN]; printf("Changing YP password for %s.\n", pw->pw_name); if (old_pass) { *old_pass = NULL; *************** *** 233,239 **** } static char * ! pwskip(register char *p) { while (*p && *p != ':' && *p != '\n') ++p; --- 231,237 ---- } static char * ! pwskip(char *p) { while (*p && *p != ':' && *p != '\n') ++p; *************** *** 245,251 **** struct passwd * interpret(struct passwd *pwent, char *line) { ! register char *p = line; pwent->pw_passwd = "*"; pwent->pw_uid = 0; --- 243,249 ---- struct passwd * interpret(struct passwd *pwent, char *line) { ! char *p = line; pwent->pw_passwd = "*"; pwent->pw_uid = 0; *************** *** 282,288 **** static char *__yplin; ! static struct passwd * ypgetpwnam(nam) char *nam; { --- 280,286 ---- static char *__yplin; ! struct passwd * ypgetpwnam(nam) char *nam; {