version 1.24, 2003/06/03 02:56:14 |
version 1.25, 2004/02/20 21:24:57 |
|
|
extern void kbintr(int); |
extern void kbintr(int); |
|
|
char *ypgetnewpasswd(struct passwd *, login_cap_t *, char **); |
char *ypgetnewpasswd(struct passwd *, login_cap_t *, char **); |
struct passwd *ypgetpwnam(char *); |
struct passwd *ypgetpwnam(char *, int); |
|
|
char *domain; |
char *domain; |
|
|
|
|
yp_passwd(char *username) |
yp_passwd(char *username) |
{ |
{ |
struct yppasswd yppasswd; |
struct yppasswd yppasswd; |
int r, rpcport, status; |
int r, rpcport, status, secure=0; |
struct passwd *pw; |
struct passwd *pw; |
struct timeval tv; |
struct timeval tv; |
login_cap_t *lc; |
login_cap_t *lc; |
|
|
* Find the host for the passwd map; it should be running |
* Find the host for the passwd map; it should be running |
* the daemon. |
* the daemon. |
*/ |
*/ |
if ((r = yp_master(domain, "passwd.byname", &master)) != 0) { |
if ((r = yp_master(domain, "master.passwd.byname", &master)) == 0) { |
|
secure=1; |
|
} else if ((r = yp_master(domain, "passwd.byname", &master)) != 0) { |
warnx("can't find the master YP server. Reason: %s", |
warnx("can't find the master YP server. Reason: %s", |
yperr_string(r)); |
yperr_string(r)); |
return (1); |
return (1); |
|
|
} |
} |
|
|
/* Get user's login identity */ |
/* Get user's login identity */ |
if (!(pw = ypgetpwnam(username))) { |
if (!(pw = ypgetpwnam(username, secure))) { |
warnx("unknown user %s.", username); |
warnx("unknown user %s.", username); |
return (1); |
return (1); |
} |
} |
|
|
} |
} |
|
|
struct passwd * |
struct passwd * |
interpret(struct passwd *pwent, char *line) |
interpret(struct passwd *pwent, char *line, int secure) |
{ |
{ |
char *p = line; |
char *p = line; |
|
|
|
|
p = pwskip(p); |
p = pwskip(p); |
pwent->pw_gid = (gid_t)strtoul(p, NULL, 10); |
pwent->pw_gid = (gid_t)strtoul(p, NULL, 10); |
p = pwskip(p); |
p = pwskip(p); |
|
if ( secure == 1 ) { |
|
pwent->pw_class = p; |
|
p = pwskip(p); |
|
pwent->pw_change = (time_t)strtoul(p, NULL, 10); |
|
p = pwskip(p); |
|
pwent->pw_expire = (time_t)strtoul(p, NULL, 10); |
|
p = pwskip(p); |
|
} |
pwent->pw_gecos = p; |
pwent->pw_gecos = p; |
p = pwskip(p); |
p = pwskip(p); |
pwent->pw_dir = p; |
pwent->pw_dir = p; |
|
|
static char *__yplin; |
static char *__yplin; |
|
|
struct passwd * |
struct passwd * |
ypgetpwnam(char *nam) |
ypgetpwnam(char *nam, int secure) |
{ |
{ |
static struct passwd pwent; |
static struct passwd pwent; |
int reason, vallen; |
int reason, vallen; |
char *val; |
char *val; |
|
|
reason = yp_match(domain, "passwd.byname", nam, strlen(nam), |
reason = yp_match(domain, |
&val, &vallen); |
secure ? "master.passwd.byname" : "passwd.byname", |
|
nam, strlen(nam), &val, &vallen); |
switch (reason) { |
switch (reason) { |
case 0: |
case 0: |
break; |
break; |
|
|
strlcpy(__yplin, val, vallen + 1); |
strlcpy(__yplin, val, vallen + 1); |
free(val); |
free(val); |
|
|
return (interpret(&pwent, __yplin)); |
return (interpret(&pwent, __yplin, secure)); |
} |
} |
|
|
#endif /* YP */ |
#endif /* YP */ |