version 1.30, 2007/08/14 13:30:45 |
version 1.31, 2008/11/06 05:35:56 |
|
|
extern int pwd_check(login_cap_t *, char *); |
extern int pwd_check(login_cap_t *, char *); |
extern int pwd_gettries(login_cap_t *); |
extern int pwd_gettries(login_cap_t *); |
extern void kbintr(int); |
extern void kbintr(int); |
|
int yp_passwd(char *); |
|
|
char *ypgetnewpasswd(struct passwd *, login_cap_t *, char **); |
char *ypgetnewpasswd(struct passwd *, login_cap_t *, char **); |
struct passwd *ypgetpwnam(char *, int); |
struct passwd *ypgetpwnam(char *, int); |
|
struct passwd *interpret(struct passwd *, char *, int); |
|
|
char *domain; |
char *domain; |
|
|
static int |
static int |
pw_error(char *name, int err, int eval) |
pw_error(char *name, int error, int eval) |
{ |
{ |
if (err) { |
if (error) { |
if (name) |
if (name) |
warn("%s", name); |
warn("%s", name); |
else |
else |
|
|
int |
int |
yp_passwd(char *username) |
yp_passwd(char *username) |
{ |
{ |
struct yppasswd yppasswd; |
struct yppasswd yppwd; |
int r, rpcport, status, secure=0; |
int r, rpcport, status, secure=0; |
struct passwd *pw; |
struct passwd *pw; |
struct timeval tv; |
struct timeval tv; |
|
|
} |
} |
|
|
/* prompt for new password */ |
/* prompt for new password */ |
yppasswd.newpw.pw_passwd = ypgetnewpasswd(pw, lc, &yppasswd.oldpass); |
yppwd.newpw.pw_passwd = ypgetnewpasswd(pw, lc, &yppwd.oldpass); |
|
|
/* tell rpc.yppasswdd */ |
/* tell rpc.yppasswdd */ |
yppasswd.newpw.pw_name = pw->pw_name; |
yppwd.newpw.pw_name = pw->pw_name; |
yppasswd.newpw.pw_uid = pw->pw_uid; |
yppwd.newpw.pw_uid = pw->pw_uid; |
yppasswd.newpw.pw_gid = pw->pw_gid; |
yppwd.newpw.pw_gid = pw->pw_gid; |
yppasswd.newpw.pw_gecos = pw->pw_gecos; |
yppwd.newpw.pw_gecos = pw->pw_gecos; |
yppasswd.newpw.pw_dir = pw->pw_dir; |
yppwd.newpw.pw_dir = pw->pw_dir; |
yppasswd.newpw.pw_shell = pw->pw_shell; |
yppwd.newpw.pw_shell = pw->pw_shell; |
|
|
client = clnt_create(master, YPPASSWDPROG, YPPASSWDVERS, "udp"); |
client = clnt_create(master, YPPASSWDPROG, YPPASSWDVERS, "udp"); |
if (client==NULL) { |
if (client==NULL) { |
warnx("cannot contact yppasswdd on %s: Reason: %s", |
warnx("cannot contact yppasswdd on %s: Reason: %s", |
master, yperr_string(YPERR_YPBIND)); |
master, yperr_string(YPERR_YPBIND)); |
free(yppasswd.newpw.pw_passwd); |
free(yppwd.newpw.pw_passwd); |
return (YPERR_YPBIND); |
return (YPERR_YPBIND); |
} |
} |
client->cl_auth = authunix_create_default(); |
client->cl_auth = authunix_create_default(); |
tv.tv_sec = 2; |
tv.tv_sec = 2; |
tv.tv_usec = 0; |
tv.tv_usec = 0; |
r = clnt_call(client, YPPASSWDPROC_UPDATE, |
r = clnt_call(client, YPPASSWDPROC_UPDATE, |
xdr_yppasswd, &yppasswd, xdr_int, &status, tv); |
xdr_yppasswd, &yppwd, xdr_int, &status, tv); |
if (r) { |
if (r) { |
printf("rpc to yppasswdd failed.\n"); |
printf("rpc to yppasswdd failed.\n"); |
free(yppasswd.newpw.pw_passwd); |
free(yppwd.newpw.pw_passwd); |
return (1); |
return (1); |
} else if (status) { |
} else if (status) { |
printf("Couldn't change YP password.\n"); |
printf("Couldn't change YP password.\n"); |
free(yppasswd.newpw.pw_passwd); |
free(yppwd.newpw.pw_passwd); |
return (1); |
return (1); |
} else { |
} else { |
printf("The YP password has been changed on %s, " |
printf("The YP password has been changed on %s, " |
"the master YP passwd server.\n", master); |
"the master YP passwd server.\n", master); |
free(yppasswd.newpw.pw_passwd); |
free(yppwd.newpw.pw_passwd); |
return (0); |
return (0); |
} |
} |
} |
} |