commit 76e1a5ddc9ef9730205b2da2ed6b654d8fbaef40 Author: Christos Zoulas Date: Sat Jan 17 12:27:56 2015 -0500 uid_t might be a different size than unsigned int, so XXX: truncate. diff --git a/hlfsd/stubs.c b/hlfsd/stubs.c index b26e5f4..70876b7 100644 --- a/hlfsd/stubs.c +++ b/hlfsd/stubs.c @@ -60,6 +60,21 @@ static int started; static am_nfs_fh slink; static am_nfs_fh un_fhandle; +static void +xgetuid(uid_t *uid, const void *p) +{ + u_int xuid; + (void)memcpy(&xuid, p, sizeof(xuid)); + *uid = xuid; +} + +static void +xputuid(void *p, uid_t uid) +{ + u_int xuid = uid; + (void)memcpy(p, &xuid, sizeof(xuid)); +} + /* * GLOBALS: */ @@ -160,7 +175,7 @@ nfsproc_getattr_2_svc(am_nfs_fh *argp, struct svc_req *rqstp) if (gid != hlfs_gid) { res.ns_status = NFSERR_STALE; } else { - (void)memcpy(&uid, argp->fh_data, sizeof(uid)); + xgetuid(&uid, argp->fh_data); if (plt_search(uid) != (uid2home_t *) NULL) { res.ns_status = NFS_OK; un_fattr.na_fileid = uid; @@ -278,7 +293,7 @@ nfsproc_lookup_2_svc(nfsdiropargs *argp, struct svc_req *rqstp) un_fattr.na_fileid = untab[idx].uid; res.dr_u.dr_drok_u.drok_attributes = un_fattr; memset(&un_fhandle, 0, sizeof(un_fhandle)); - memcpy(un_fhandle.fh_data, &untab[idx].uid, sizeof(untab[idx].uid)); + xputuid(un_fhandle.fh_data, untab[idx].uid); xstrlcpy((char *) &un_fhandle.fh_data[sizeof(int)], untab[idx].username, sizeof(am_nfs_fh) - sizeof(int)); @@ -333,7 +348,7 @@ nfsproc_readlink_2_svc(am_nfs_fh *argp, struct svc_req *rqstp) } if (groupid == hlfs_gid) { - memcpy(&userid, argp->fh_data, sizeof(userid)); + xgetuid(&userid, argp->fh_data); username = (char *) &argp->fh_data[sizeof(int)]; if (!(res.rlr_u.rlr_data_u = mailbox(userid, username))) return (nfsreadlinkres *) NULL;