Diff for /libaitsess/src/sess.c between versions 1.1 and 1.2

version 1.1, 2008/08/28 13:18:30 version 1.2, 2011/04/30 21:35:21
Line 1 Line 1
   /*************************************************************************
   * (C) 2008 AITNET ltd - Sofia/Bulgaria - <misho@aitbg.com>
   *  by Michael Pounov <misho@openbsd-bg.org>
   *
   * $Author$
   * $Id$
   *
   *************************************************************************/
 #include "global.h"  #include "global.h"
 #include "aitsess.h"  #include "aitsess.h"
   
   
 /*  /*
    * sess_FreeValues() Free all values from value array allocated from sess_GetValues()
    * @ppsVals = Array strings
    * return: none
   */
   inline void sess_FreeValues(char *** __restrict ppsVals)
   {
           char **ptr;
   
           for (ptr = *ppsVals; *ptr; ptr++)
                   free(*ptr);
           free(*ppsVals);
           *ppsVals = NULL;
   }
   
   /*
    * sess_GetValues() Get all values from session shared memory
    * @s = Session item
    * @ppsVals = Return array strings
    * return: -1 error: in parameter, !=-1 count of returned strings in ppsVals (must be free after use!)
   */
   int sess_GetValues(tagSess * __restrict s, char ***ppsVals)
   {
           register int i;
           char **valz, *Shared = NULL;
           char *peer, *p_brk;
   
           if (!s || !ppsVals)
                   return -1;
           valz = malloc(sizeof(caddr_t));
           if (!valz) {
                   LOGERR;
                   return -1;
           } else
                   *valz = NULL;
   
           // allocated memory & mirrored shared memory into this
           Shared = malloc(s->eom);
           if (!Shared) {
                   LOGERR;
                   free(valz);
                   return -1;
           } else
                   memcpy(Shared, s->addr, s->eom);
   
           for (i = 0, peer = strtok_r(Shared, MEM_DELIM"\r\n", &p_brk); peer; 
                           peer = strtok_r(NULL, MEM_DELIM"\r\n", &p_brk)) {
                   if (!strchr(peer, '='))
                           continue;
                   else
                           i++;
   
                   valz = realloc(valz, (i + 1) * sizeof(caddr_t));
                   if (!valz) {
                           LOGERR;
                           free(Shared);
                           return -1;
                   } else
                           valz[i] = NULL;
   
                   valz[i - 1] = strdup(peer);
           }
   
           free(Shared);
           *ppsVals = valz;
           return i;
   }
   
   /*
  * sess_GetValue() Get value from session shared memory from attribute   * sess_GetValue() Get value from session shared memory from attribute
  * @s = Session item   * @s = Session item
  * @csAttr = Attribute for search   * @csAttr = Attribute for search
Line 35  int sess_GetValue(tagSess * __restrict s, const char * Line 111  int sess_GetValue(tagSess * __restrict s, const char *
         } else          } else
                 memcpy(Shared, s->addr, s->eom);                  memcpy(Shared, s->addr, s->eom);
   
        for (i = 1, peer = strtok_r(Shared, ":\r\n", &p_brk); peer;         for (i = 1, peer = strtok_r(Shared, MEM_DELIM"\r\n", &p_brk); peer; 
                        i++, peer = strtok_r(NULL, ":\r\n", &p_brk)) {                        i++, peer = strtok_r(NULL, MEM_DELIM"\r\n", &p_brk)) {
                 attr = strtok_r(peer, "=\r\n", &a_brk);                  attr = strtok_r(peer, "=\r\n", &a_brk);
                 if (attr && !strncmp(attr, csAttr, MAX_ATTRIBUTE)) {                  if (attr && !strncmp(attr, csAttr, MAX_ATTRIBUTE)) {
                         val = strtok_r(NULL, "=\r\n", &a_brk);                          val = strtok_r(NULL, "=\r\n", &a_brk);
                         if (val && strlen(val)) {                          if (val && strlen(val)) {
                                 if (psVal)                                  if (psVal)
                                        strncpy(psVal, val, *pnLen);                                        strlcpy(psVal, val, *pnLen);
                                 if (pnLen)                                  if (pnLen)
                                         *pnLen = strlen(val);                                          *pnLen = strlen(val);
                         } else                          } else
Line 95  int sess_DelValue(tagSess * __restrict s, const char * Line 171  int sess_DelValue(tagSess * __restrict s, const char *
                 memcpy(Shared, s->addr, s->eom);                  memcpy(Shared, s->addr, s->eom);
         }          }
   
        for (i = 1, peer = strtok_r(Shared, ":\r\n", &p_brk); peer;         for (i = 1, peer = strtok_r(Shared, MEM_DELIM"\r\n", &p_brk); peer; 
                        i++, peer = strtok_r(NULL, ":\r\n", &p_brk)) {                        i++, peer = strtok_r(NULL, MEM_DELIM"\r\n", &p_brk)) {
                 if (!strncmp(peer, csAttr, attrlen))                  if (!strncmp(peer, csAttr, attrlen))
                        if (peer[attrlen] == '=' || peer[attrlen] == ':' || !peer[attrlen] ||                        if (peer[attrlen] == '=' || peer[attrlen] == *MEM_DELIM || !peer[attrlen] ||
                                         peer[attrlen] == '\r' || peer[attrlen] == '\n')                                          peer[attrlen] == '\r' || peer[attrlen] == '\n')
                                 continue;                                  continue;
   
                 strcat(Buffer, peer);                  strcat(Buffer, peer);
                strcat(Buffer, "\n");                strcat(Buffer, MEM_DELIM);
         }          }
   
         memset(s->addr, 0, s->eom);          memset(s->addr, 0, s->eom);
Line 157  int sess_SetValue(tagSess * __restrict s, const char * Line 233  int sess_SetValue(tagSess * __restrict s, const char *
                 memcpy(Shared, s->addr, s->eom);                  memcpy(Shared, s->addr, s->eom);
         }          }
   
        for (i = 1, upd = 0, peer = strtok_r(Shared, ":\r\n", &p_brk); peer;         for (i = 1, upd = 0, peer = strtok_r(Shared, MEM_DELIM"\r\n", &p_brk); peer; 
                        i++, peer = strtok_r(NULL, ":\r\n", &p_brk)) {                        i++, peer = strtok_r(NULL, MEM_DELIM"\r\n", &p_brk)) {
                 if (!strncmp(peer, szAttr, strlen(szAttr))) {                  if (!strncmp(peer, szAttr, strlen(szAttr))) {
                         upd++;                          upd++;
                         if (psVal) {                          if (psVal) {
                                 strcat(Buffer, szAttr);                                  strcat(Buffer, szAttr);
                                 strcat(Buffer, psVal);                                  strcat(Buffer, psVal);
                                strcat(Buffer, "\n");                                strcat(Buffer, MEM_DELIM);
                         } else {                          } else {
                                 strcat(Buffer, csAttr);                                  strcat(Buffer, csAttr);
                                strcat(Buffer, "\n");                                strcat(Buffer, MEM_DELIM);
                                 def = IS_DEF;                                  def = IS_DEF;
                         }                          }
                         continue;                          continue;
                 }                  }
   
                 strcat(Buffer, peer);                  strcat(Buffer, peer);
                strcat(Buffer, "\n");                strcat(Buffer, MEM_DELIM);
         }          }
   
         if (!upd) {          if (!upd) {
                 if (psVal) {                  if (psVal) {
                         strcat(Buffer, szAttr);                          strcat(Buffer, szAttr);
                         strcat(Buffer, psVal);                          strcat(Buffer, psVal);
                        strcat(Buffer, "\n");                        strcat(Buffer, MEM_DELIM);
                 } else {                  } else {
                         strcat(Buffer, csAttr);                          strcat(Buffer, csAttr);
                        strcat(Buffer, "\n");                        strcat(Buffer, MEM_DELIM);
                         def = IS_DEF;                          def = IS_DEF;
                 }                  }
                 def |= IS_ADD;                  def |= IS_ADD;

Removed from v.1.1  
changed lines
  Added in v.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>