diff options
author | Michal Zidek <mzidek@redhat.com> | 2013-08-21 17:17:06 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2013-12-03 14:41:15 +0100 |
commit | a171d77f40aa92e240e91aa4bafe5a392a98b5a2 (patch) | |
tree | 67af7f48c89fbc1e7daa56c1d0c423cc0e19af74 /src/sss_client/nss_passwd.c | |
parent | cebdc563a094d305b91da5b5af4d95d8e3a1bf27 (diff) | |
download | sssd-a171d77f40aa92e240e91aa4bafe5a392a98b5a2.tar.gz sssd-a171d77f40aa92e240e91aa4bafe5a392a98b5a2.tar.xz sssd-a171d77f40aa92e240e91aa4bafe5a392a98b5a2.zip |
sss_client: Use SAFEALIGN_COPY_<type> macros where appropriate.
resolves:
https://fedorahosted.org/sssd/ticket/1359
Diffstat (limited to 'src/sss_client/nss_passwd.c')
-rw-r--r-- | src/sss_client/nss_passwd.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/sss_client/nss_passwd.c b/src/sss_client/nss_passwd.c index 2b349c9e8..290aed80e 100644 --- a/src/sss_client/nss_passwd.c +++ b/src/sss_client/nss_passwd.c @@ -139,6 +139,7 @@ enum nss_status _nss_sss_getpwnam_r(const char *name, struct passwd *result, struct sss_nss_pw_rep pwrep; uint8_t *repbuf; size_t replen, len, name_len; + uint32_t num_results; enum nss_status nret; int ret; @@ -187,15 +188,18 @@ enum nss_status _nss_sss_getpwnam_r(const char *name, struct passwd *result, pwrep.buffer = buffer; pwrep.buflen = buflen; + /* Get number of results from repbuf. */ + SAFEALIGN_COPY_UINT32(&num_results, repbuf, NULL); + /* no results if not found */ - if (((uint32_t *)repbuf)[0] == 0) { + if (num_results == 0) { free(repbuf); nret = NSS_STATUS_NOTFOUND; goto out; } /* only 1 result is accepted for this function */ - if (((uint32_t *)repbuf)[0] != 1) { + if (num_results != 1) { *errnop = EBADMSG; free(repbuf); nret = NSS_STATUS_TRYAGAIN; @@ -225,6 +229,7 @@ enum nss_status _nss_sss_getpwuid_r(uid_t uid, struct passwd *result, struct sss_nss_pw_rep pwrep; uint8_t *repbuf; size_t replen, len; + uint32_t num_results; enum nss_status nret; uint32_t user_uid; int ret; @@ -266,15 +271,18 @@ enum nss_status _nss_sss_getpwuid_r(uid_t uid, struct passwd *result, pwrep.buffer = buffer; pwrep.buflen = buflen; + /* Get number of results from repbuf. */ + SAFEALIGN_COPY_UINT32(&num_results, repbuf, NULL); + /* no results if not found */ - if (((uint32_t *)repbuf)[0] == 0) { + if (num_results == 0) { free(repbuf); nret = NSS_STATUS_NOTFOUND; goto out; } /* only 1 result is accepted for this function */ - if (((uint32_t *)repbuf)[0] != 1) { + if (num_results != 1) { *errnop = EBADMSG; free(repbuf); nret = NSS_STATUS_TRYAGAIN; @@ -325,6 +333,7 @@ static enum nss_status internal_getpwent_r(struct passwd *result, struct sss_nss_pw_rep pwrep; uint8_t *repbuf; size_t replen; + uint32_t num_results; enum nss_status nret; uint32_t num_entries; int ret; @@ -369,8 +378,11 @@ static enum nss_status internal_getpwent_r(struct passwd *result, return nret; } + /* Get number of results from repbuf. */ + SAFEALIGN_COPY_UINT32(&num_results, repbuf, NULL); + /* no results if not found */ - if ((((uint32_t *)repbuf)[0] == 0) || (replen - 8 == 0)) { + if ((num_results == 0) || (replen - 8 == 0)) { free(repbuf); return NSS_STATUS_NOTFOUND; } |