summaryrefslogtreecommitdiffstats
path: root/sss_client/group.c
diff options
context:
space:
mode:
authorSimo Sorce <ssorce@redhat.com>2009-03-10 01:59:13 -0400
committerSimo Sorce <ssorce@redhat.com>2009-03-10 02:08:39 -0400
commitd0e33c2a035c4c877b9f624b6999899666cb6385 (patch)
tree427598b7f636fc826b4b7d5983e1e8acc2bb28f4 /sss_client/group.c
parent16187da9bae78b6f4dd4ea21faf49fccc821f153 (diff)
downloadsssd-d0e33c2a035c4c877b9f624b6999899666cb6385.tar.gz
sssd-d0e33c2a035c4c877b9f624b6999899666cb6385.tar.xz
sssd-d0e33c2a035c4c877b9f624b6999899666cb6385.zip
Treat uids and gids as 32 bit numbers not 64
In the nss communication protocol we were treating uids and gids as 64 bit values, but uids and gids are really u32 values, change the protocol to reflect the real size.
Diffstat (limited to 'sss_client/group.c')
-rw-r--r--sss_client/group.c32
1 files changed, 16 insertions, 16 deletions
diff --git a/sss_client/group.c b/sss_client/group.c
index 66cec6236..4ba11e30a 100644
--- a/sss_client/group.c
+++ b/sss_client/group.c
@@ -51,21 +51,21 @@ static void sss_nss_getgrent_data_clean(void) {
*
* GERTGRGID Request:
*
- * 0-7: 64bit number with gid
+ * 0-7: 32bit number with gid
*
* INITGROUPS Request:
*
- * 0-7: 64bit number with gid
- * 8-11: 32bit unsigned with max num of entries
+ * 0-3: 32bit number with gid
+ * 4-7: 32bit unsigned with max num of entries
*
* Replies:
*
* 0-3: 32bit unsigned number of results
* 4-7: 32bit unsigned (reserved/padding)
* For each result (64bit padded ?):
- * 0-7: 64bit number gid
- * 8-11: 32bit unsigned number of members
- * 12-X: sequence of 0 terminated strings (name, passwd, mem..)
+ * 0-3: 32bit number gid
+ * 4-7: 32bit unsigned number of members
+ * 8-X: sequence of 0 terminated strings (name, passwd, mem..)
*/
struct sss_nss_gr_rep {
struct group *result;
@@ -82,15 +82,15 @@ static int sss_nss_getgr_readrep(struct sss_nss_gr_rep *pr,
uint32_t mem_num;
int err;
- if (*len < 15) { /* not enough space for data, bad packet */
+ if (*len < 11) { /* not enough space for data, bad packet */
return EBADMSG;
}
- pr->result->gr_gid = ((uint64_t *)buf)[0];
- mem_num = ((uint32_t *)buf)[2];
+ pr->result->gr_gid = ((uint32_t *)buf)[0];
+ mem_num = ((uint32_t *)buf)[1];
- sbuf = (char *)&buf[12];
- slen = *len - 12;
+ sbuf = (char *)&buf[8];
+ slen = *len - 8;
dlen = pr->buflen;
pr->result->gr_name = &(pr->buffer[0]);
@@ -165,7 +165,7 @@ static int sss_nss_getgr_readrep(struct sss_nss_gr_rep *pr,
* 0-3: 32bit unsigned number of results
* 4-7: 32bit unsigned (reserved/padding)
* For each result:
- * 0-7: 64bit number with gid
+ * 0-4: 32bit number with gid
*/
@@ -178,7 +178,7 @@ enum nss_status _nss_sss_initgroups_dyn(const char *user, gid_t group,
uint8_t *repbuf;
size_t replen;
enum nss_status nret;
- uint64_t *rbuf;
+ uint32_t *rbuf;
uint32_t num_ret;
long int l, max_ret;
@@ -220,7 +220,7 @@ enum nss_status _nss_sss_initgroups_dyn(const char *user, gid_t group,
*size = newsize;
}
- rbuf = &((uint64_t *)repbuf)[1];
+ rbuf = &((uint32_t *)repbuf)[2];
for (l = 0; l < max_ret; l++) {
(*groups)[*start] = rbuf[l];
*start += 1;
@@ -284,11 +284,11 @@ enum nss_status _nss_sss_getgrgid_r(gid_t gid, struct group *result,
uint8_t *repbuf;
size_t replen, len;
enum nss_status nret;
- uint64_t group_gid;
+ uint32_t group_gid;
int ret;
group_gid = gid;
- rd.len = sizeof(uint64_t);
+ rd.len = sizeof(uint32_t);
rd.data = &group_gid;
nret = sss_nss_make_request(SSS_NSS_GETGRGID, &rd,