svn commit: r194336 - stable/7/usr.sbin/rpc.yppasswdd
Dag-Erling Smorgrav
des at FreeBSD.org
Wed Jun 17 07:05:38 UTC 2009
Author: des
Date: Wed Jun 17 07:05:36 2009
New Revision: 194336
URL: http://svn.freebsd.org/changeset/base/194336
Log:
merge r188766: fix a type-punning bug.
Modified:
stable/7/usr.sbin/rpc.yppasswdd/ (props changed)
stable/7/usr.sbin/rpc.yppasswdd/yppasswdd_server.c
Modified: stable/7/usr.sbin/rpc.yppasswdd/yppasswdd_server.c
==============================================================================
--- stable/7/usr.sbin/rpc.yppasswdd/yppasswdd_server.c Wed Jun 17 07:03:03 2009 (r194335)
+++ stable/7/usr.sbin/rpc.yppasswdd/yppasswdd_server.c Wed Jun 17 07:05:36 2009 (r194336)
@@ -70,6 +70,22 @@ struct dom_binding;
static struct passwd yp_password;
static void
+xlate_passwd(struct x_master_passwd *xpwd, struct passwd *pwd)
+{
+ pwd->pw_name = xpwd->pw_name;
+ pwd->pw_passwd = xpwd->pw_passwd;
+ pwd->pw_uid = xpwd->pw_uid;
+ pwd->pw_gid = xpwd->pw_gid;
+ pwd->pw_change = xpwd->pw_change;
+ pwd->pw_class = xpwd->pw_class;
+ pwd->pw_gecos = xpwd->pw_gecos;
+ pwd->pw_dir = xpwd->pw_dir;
+ pwd->pw_shell = xpwd->pw_shell;
+ pwd->pw_expire = xpwd->pw_expire;
+ pwd->pw_fields = xpwd->pw_fields;
+}
+
+static void
copy_yp_pass(char *p, int x, int m)
{
char *t, *s = p;
@@ -709,6 +725,7 @@ yppasswdproc_update_master_1_svc(master_
char passfile_hold_buf[MAXPATHLEN + 2];
struct sockaddr_in *rqhost;
SVCXPRT *transp;
+ struct passwd newpasswd;
result = 1;
transp = rqstp->rq_xprt;
@@ -820,7 +837,8 @@ allow additions to be made to the passwo
yp_error("pw_tmp() failed");
return &result;
}
- if (pw_copy(pfd, tfd, (struct passwd *)&argp->newpw, NULL) == -1) {
+ xlate_passwd(&argp->newpw, &newpasswd);
+ if (pw_copy(pfd, tfd, &newpasswd, NULL) == -1) {
pw_fini();
yp_error("pw_copy() failed");
return &result;
@@ -858,8 +876,8 @@ allow additions to be made to the passwo
pw_fini();
if (inplace) {
- if ((rval = update_inplace((struct passwd *)&argp->newpw,
- argp->domain))) {
+ xlate_passwd(&argp->newpw, &newpasswd);
+ if ((rval = update_inplace(&newpasswd, argp->domain))) {
yp_error("inplace update failed -- rebuilding maps");
}
}
More information about the svn-src-all
mailing list