--- libaitsess/src/sess.c 2011/09/07 15:52:35 1.3.2.1 +++ libaitsess/src/sess.c 2011/09/07 16:08:41 1.3.2.2 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: sess.c,v 1.3.2.1 2011/09/07 15:52:35 misho Exp $ +* $Id: sess.c,v 1.3.2.2 2011/09/07 16:08:41 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -158,7 +158,7 @@ sess_GetValue(tagSess * __restrict s, const char *csAt for (i = 1, peer = strtok_r(Shared, MEM_DELIM"\r\n", &p_brk); peer; i++, peer = strtok_r(NULL, MEM_DELIM"\r\n", &p_brk)) { attr = strtok_r(peer, "=\r\n", &a_brk); - if (attr && !strncmp(attr, csAttr, MAX_ATTRIBUTE)) { + if (attr && !strncmp(attr, csAttr, MAX_ATTRIBUTE - 1)) { val = strtok_r(NULL, "=\r\n", &a_brk); if (val && strlen(val)) { if (psVal) @@ -188,7 +188,7 @@ sess_DelValue(tagSess * __restrict s, const char *csAt { register int i; int ret, attrlen; - char *Buffer, *Shared, szAttr[MAX_ATTRIBUTE + 1]; + char *Buffer, *Shared, szAttr[MAX_ATTRIBUTE]; char *peer, *p_brk; if (!s || !csAttr || !*csAttr) @@ -196,9 +196,8 @@ sess_DelValue(tagSess * __restrict s, const char *csAt else attrlen = strlen(csAttr); Buffer = Shared = NULL; - memset(szAttr, 0, MAX_ATTRIBUTE + 1); - strncpy(szAttr, csAttr, MAX_ATTRIBUTE - 1); - strcat(szAttr, "="); + strlcpy(szAttr, csAttr, sizeof szAttr); + strlcat(szAttr, "=", sizeof szAttr); Buffer = malloc(s->eom); if (!Buffer) { @@ -223,11 +222,10 @@ sess_DelValue(tagSess * __restrict s, const char *csAt peer[attrlen] == '\r' || peer[attrlen] == '\n') continue; - strcat(Buffer, peer); - strcat(Buffer, MEM_DELIM); + strlcat(Buffer, peer, s->eom); + strlcat(Buffer, MEM_DELIM, s->eom); } - memset(s->addr, 0, s->eom); memcpy(s->addr, Buffer, s->eom); if (s->type == SHARED_MAP) @@ -252,16 +250,15 @@ sess_SetValue(tagSess * __restrict s, const char *csAt { register int i; int upd, ret, def = IS_VAL; - char *Buffer, *Shared, szAttr[MAX_ATTRIBUTE + 1]; + char *Buffer, *Shared, szAttr[MAX_ATTRIBUTE]; char *peer, *p_brk; if (!s || !csAttr || !*csAttr) return -1; else Buffer = Shared = NULL; - memset(szAttr, 0, MAX_ATTRIBUTE + 1); - strncpy(szAttr, csAttr, MAX_ATTRIBUTE - 1); - strcat(szAttr, "="); + strlcpy(szAttr, csAttr, sizeof szAttr); + strlcat(szAttr, "=", sizeof szAttr); Buffer = malloc(s->eom); if (!Buffer) { @@ -284,35 +281,34 @@ sess_SetValue(tagSess * __restrict s, const char *csAt if (!strncmp(peer, szAttr, strlen(szAttr))) { upd++; if (psVal) { - strcat(Buffer, szAttr); - strcat(Buffer, psVal); - strcat(Buffer, MEM_DELIM); + strlcat(Buffer, szAttr, s->eom); + strlcat(Buffer, psVal, s->eom); + strlcat(Buffer, MEM_DELIM, s->eom); } else { - strcat(Buffer, csAttr); - strcat(Buffer, MEM_DELIM); + strlcat(Buffer, csAttr, s->eom); + strlcat(Buffer, MEM_DELIM, s->eom); def = IS_DEF; } continue; } - strcat(Buffer, peer); - strcat(Buffer, MEM_DELIM); + strlcat(Buffer, peer, s->eom); + strlcat(Buffer, MEM_DELIM, s->eom); } if (!upd) { if (psVal) { - strcat(Buffer, szAttr); - strcat(Buffer, psVal); - strcat(Buffer, MEM_DELIM); + strlcat(Buffer, szAttr, s->eom); + strlcat(Buffer, psVal, s->eom); + strlcat(Buffer, MEM_DELIM, s->eom); } else { - strcat(Buffer, csAttr); - strcat(Buffer, MEM_DELIM); + strlcat(Buffer, csAttr, s->eom); + strlcat(Buffer, MEM_DELIM, s->eom); def = IS_DEF; } def |= IS_ADD; } - memset(s->addr, 0, s->eom); memcpy(s->addr, Buffer, s->eom); if (s->type == SHARED_MAP)