summaryrefslogtreecommitdiffstats
path: root/src/sss_client/nss_passwd.c
diff options
context:
space:
mode:
authorMichal Zidek <mzidek@redhat.com>2013-08-21 17:17:06 +0200
committerJakub Hrozek <jhrozek@redhat.com>2013-12-03 14:41:15 +0100
commita171d77f40aa92e240e91aa4bafe5a392a98b5a2 (patch)
tree67af7f48c89fbc1e7daa56c1d0c423cc0e19af74 /src/sss_client/nss_passwd.c
parentcebdc563a094d305b91da5b5af4d95d8e3a1bf27 (diff)
downloadsssd-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.c22
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;
}