diff options
| author | Hajimu UMEMOTO <ume@FreeBSD.org> | 2006-05-02 23:02:32 +0000 |
|---|---|---|
| committer | Hajimu UMEMOTO <ume@FreeBSD.org> | 2006-05-02 23:02:32 +0000 |
| commit | b947683ce1832f8c00952e397ff8b011645b9165 (patch) | |
| tree | 2c4bb202d6091fb9c485296fba8a6f8203fae90e | |
| parent | 193599122fb33bf0275d2b1096195b41c1727605 (diff) | |
Notes
| -rw-r--r-- | lib/libc/net/nscachedcli.c | 8 | ||||
| -rw-r--r-- | usr.sbin/cached/query.c | 14 | ||||
| -rw-r--r-- | usr.sbin/nscd/query.c | 14 |
3 files changed, 20 insertions, 16 deletions
diff --git a/lib/libc/net/nscachedcli.c b/lib/libc/net/nscachedcli.c index 374f37031157c..d95a0e8bc9cc4 100644 --- a/lib/libc/net/nscachedcli.c +++ b/lib/libc/net/nscachedcli.c @@ -151,19 +151,19 @@ send_credentials(struct cached_connection_ *connection, int type) struct { struct cmsghdr hdr; - struct cmsgcred creds; + char cred[CMSG_SPACE(sizeof(struct cmsgcred))]; } cmsg; memset(&cmsg, 0, sizeof(cmsg)); - cmsg.hdr.cmsg_len = sizeof(cmsg); + cmsg.hdr.cmsg_len = CMSG_LEN(sizeof(struct cmsgcred)); cmsg.hdr.cmsg_level = SOL_SOCKET; cmsg.hdr.cmsg_type = SCM_CREDS; memset(&cred_hdr, 0, sizeof(struct msghdr)); cred_hdr.msg_iov = &iov; cred_hdr.msg_iovlen = 1; - cred_hdr.msg_control = &cmsg; - cred_hdr.msg_controllen = sizeof(cmsg); + cred_hdr.msg_control = (caddr_t)&cmsg; + cred_hdr.msg_controllen = CMSG_SPACE(sizeof(struct cmsgcred)); iov.iov_base = &type; iov.iov_len = sizeof(int); diff --git a/usr.sbin/cached/query.c b/usr.sbin/cached/query.c index 28882c3d01df4..947e93f905c8f 100644 --- a/usr.sbin/cached/query.c +++ b/usr.sbin/cached/query.c @@ -154,11 +154,12 @@ on_query_startup(struct query_state *qstate) { struct msghdr cred_hdr; struct iovec iov; + struct cmsgcred *cred; int elem_type; struct { struct cmsghdr hdr; - struct cmsgcred creds; + char cred[CMSG_SPACE(sizeof(struct cmsgcred))]; } cmsg; TRACE_IN(on_query_startup); @@ -167,8 +168,8 @@ on_query_startup(struct query_state *qstate) memset(&cred_hdr, 0, sizeof(struct msghdr)); cred_hdr.msg_iov = &iov; cred_hdr.msg_iovlen = 1; - cred_hdr.msg_control = &cmsg; - cred_hdr.msg_controllen = sizeof(cmsg); + cred_hdr.msg_control = (caddr_t)&cmsg; + cred_hdr.msg_controllen = CMSG_LEN(sizeof(struct cmsgcred)); memset(&iov, 0, sizeof(struct iovec)); iov.iov_base = &elem_type; @@ -179,15 +180,16 @@ on_query_startup(struct query_state *qstate) return (-1); } - if (cmsg.hdr.cmsg_len != sizeof cmsg + if (cmsg.hdr.cmsg_len < CMSG_LEN(sizeof(struct cmsgcred)) || cmsg.hdr.cmsg_level != SOL_SOCKET || cmsg.hdr.cmsg_type != SCM_CREDS) { TRACE_OUT(on_query_startup); return (-1); } - qstate->uid = cmsg.creds.cmcred_uid; - qstate->gid = cmsg.creds.cmcred_gid; + cred = (struct cmsgcred *)CMSG_DATA(&cmsg); + qstate->uid = cred->cmcred_uid; + qstate->gid = cred->cmcred_gid; #if defined(NS_CACHED_EID_CHECKING) || defined(NS_STRICT_CACHED_EID_CHECKING) /* diff --git a/usr.sbin/nscd/query.c b/usr.sbin/nscd/query.c index 28882c3d01df4..947e93f905c8f 100644 --- a/usr.sbin/nscd/query.c +++ b/usr.sbin/nscd/query.c @@ -154,11 +154,12 @@ on_query_startup(struct query_state *qstate) { struct msghdr cred_hdr; struct iovec iov; + struct cmsgcred *cred; int elem_type; struct { struct cmsghdr hdr; - struct cmsgcred creds; + char cred[CMSG_SPACE(sizeof(struct cmsgcred))]; } cmsg; TRACE_IN(on_query_startup); @@ -167,8 +168,8 @@ on_query_startup(struct query_state *qstate) memset(&cred_hdr, 0, sizeof(struct msghdr)); cred_hdr.msg_iov = &iov; cred_hdr.msg_iovlen = 1; - cred_hdr.msg_control = &cmsg; - cred_hdr.msg_controllen = sizeof(cmsg); + cred_hdr.msg_control = (caddr_t)&cmsg; + cred_hdr.msg_controllen = CMSG_LEN(sizeof(struct cmsgcred)); memset(&iov, 0, sizeof(struct iovec)); iov.iov_base = &elem_type; @@ -179,15 +180,16 @@ on_query_startup(struct query_state *qstate) return (-1); } - if (cmsg.hdr.cmsg_len != sizeof cmsg + if (cmsg.hdr.cmsg_len < CMSG_LEN(sizeof(struct cmsgcred)) || cmsg.hdr.cmsg_level != SOL_SOCKET || cmsg.hdr.cmsg_type != SCM_CREDS) { TRACE_OUT(on_query_startup); return (-1); } - qstate->uid = cmsg.creds.cmcred_uid; - qstate->gid = cmsg.creds.cmcred_gid; + cred = (struct cmsgcred *)CMSG_DATA(&cmsg); + qstate->uid = cred->cmcred_uid; + qstate->gid = cred->cmcred_gid; #if defined(NS_CACHED_EID_CHECKING) || defined(NS_STRICT_CACHED_EID_CHECKING) /* |
