Changeset 34 for trunk/src/sh_forward.c


Ignore:
Timestamp:
May 19, 2006, 8:09:51 PM (18 years ago)
Author:
rainer
Message:

Code cleanup and minor fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/sh_forward.c

    r27 r34  
    139139#include "rijndael-api-fst.h"
    140140char * sh_tools_makePack (unsigned char * header,
    141                           char * payload, int payload_size,
     141                          char * payload, unsigned long payload_size,
    142142                          keyInstance * keyInstE);
    143143char * sh_tools_revertPack (unsigned char * header, char * message,
     
    305305    }
    306306
    307   len = sl_strlen(salt) + sl_strlen(skey->vernam) + 1;
    308   if (nounce != NULL)
     307  len = sl_strlen(salt) + 1;
     308  if (sl_ok_adds(len, sl_strlen(skey->vernam)))
     309    len += sl_strlen(skey->vernam);
     310  if (nounce != NULL && sl_ok_adds(len, sl_strlen(nounce)))
    309311    len += sl_strlen(nounce);
    310312 
     
    394396    {
    395397      put_header (head, (int)protocol, &length, micro);
    396       msg2buf  = sh_tools_makePack (head, msgbuf, (int) length,
     398      msg2buf  = sh_tools_makePack (head, msgbuf, length,
    397399                                    &(skey->keyInstE));
    398400      /*@-usedef@*/
     
    406408      blkfac  = length/B_SIZ;
    407409      rem     = (int) (length - (B_SIZ * blkfac));
    408       length2 = (B_SIZ * blkfac) + ((rem == 0) ? 0 : B_SIZ);
     410      length2 = (B_SIZ * blkfac);
     411      if ((rem > 0) && (length2+B_SIZ) > length2)
     412        length2 += B_SIZ;
     413      else
     414        rem = 0;
    409415
    410416      msg2buf = SH_ALLOC((size_t)length2);
     
    549555  SL_ENTER(_("sh_forward_receive_intern"));
    550556
     557#ifdef SH_ENCRYPT
     558  /* make sure length is not multiple of B_SIZ, see below
     559   */
     560  ASSERT_RET((length % B_SIZ != 0), _("length % 16 != 0"), flag_err);
     561#endif
     562
    551563  if (micro != NULL)
    552564    micro[4]     = '\0';
     
    608620      head_length = (unsigned long) (256 * (unsigned int)head[1] +
    609621                                     (unsigned int)head[2]);
    610       head_length = (head_length > length ? length : head_length);
    611       length      = head_length;
     622
     623      /*
     624       * revertPack returns header with length <= (original_length-16), so
     625       * the following msgbuf[length] = '\0' is always safe.
     626       * Nevertheless, check for proper length.
     627       */
     628      if (head_length <= (length-1))
     629        length      = head_length;
     630      else
     631        --length;
    612632
    613633      memcpy(msgbuf, tmp, (size_t)length);
     
    627647       */
    628648      blkfac  = countbytes/B_SIZ;
    629       /* length2 = (B_SIZ * blkfac); */
     649
    630650      p       = msgbuf;
    631651      q       = msgbuf;
     
    638658                        _("sh_forward_receive_intern: cipherInit"));
    639659
     660      /* here we want to have (length % B_SIZ != 0), such that the
     661       * terminating '\0' cannot be overwritten
     662       */
    640663      for (j = 0; j < blkfac; ++j)
    641664        {
     
    648671                            _("sh_forward_receive_intern: blockDecrypt"));
    649672          memcpy(q, outBlock, B_SIZ);
    650           p += 16;
    651           q += 16;
     673          p += B_SIZ;
     674          q += B_SIZ;
    652675        }
    653676    }
     
    10471070          timeout_val *= 2;
    10481071          sh_error_handle((-1), FIL__, __LINE__, 0, MSG_TCP_NOAUTH);
    1049           memset(answer, 0, sizeof(answer));
     1072          memset(answer, 0, 512);
    10501073          MUNLOCK(answer, 512);
    10511074          SH_FREE(answer);
     
    12381261          timeout_val *= 2;
    12391262          sh_error_handle((-1), FIL__, __LINE__, 0, MSG_TCP_NOAUTH);
    1240           memset(answer, '\0', sizeof(answer));
     1263          memset(answer, '\0', 512);
    12411264          MUNLOCK(answer, 512);
    12421265          SH_FREE(answer);
     
    12571280    {
    12581281      timeout_val = 1;
    1259       memset(answer, 0, sizeof(answer));
     1282      memset(answer, 0, 512);
    12601283      MUNLOCK(answer, 512);
    12611284      SH_FREE(answer);
     
    16261649                                            head_u,
    16271650                                            answer,
    1628                                             TRANS_BYTES + 256);
     1651                                            TRANS_BYTES + 255);
    16291652
    16301653                TPT(( 0, FIL__, __LINE__,
     
    20042027    }
    20052028 
    2006   if (sepnum == 2 && sep[0] > 0)
     2029  if ((sepnum == 2) && (sep[0] > 0) && (sep[1] > sep[0]))
    20072030    {
    20082031      newclt = SH_ALLOC (sizeof(client_t));
     
    22222245                               int docrypt)
    22232246{
    2224   register unsigned long i;
     2247  /* register unsigned long i; */
    22252248  unsigned long           length2;
    22262249
     
    22512274      blkfac  = length/B_SIZ;
    22522275      rem     = length - (B_SIZ * blkfac);
    2253       length2 = (B_SIZ * blkfac) + ((rem == 0) ? 0 : B_SIZ);
     2276      length2 = (B_SIZ * blkfac);
     2277      if (rem > 0 && (length2 + B_SIZ) > length2)
     2278        length2 += B_SIZ;
     2279      else
     2280        rem = 0;
    22542281    }
    22552282  else
     
    22892316                                     &(conn->client_entry->keyInstE));
    22902317    }
    2291   else if ((S_TRUE == docrypt) && ((protocol & SH_PROTO_ENC) != 0))
     2318  else if ((S_TRUE == docrypt) && ((protocol & SH_PROTO_ENC) != 0) &&
     2319           ((length2 + 1) > length2))
    22922320    {
    22932321      conn->buf       = SH_ALLOC(length2 + 1);
     
    23372365  else
    23382366    {
     2367      if ((length2 + 1) < length2) --length2;
    23392368      conn->buf       = SH_ALLOC(length2 + 1);
    23402369
     2370      memcpy(conn->buf, msg, length2);
     2371      /*
    23412372      for (i = 0; i < length2; ++i)
    23422373        conn->buf[i] = msg[i];
     2374      */
    23432375      conn->buf[length2] = '\0';
    23442376      TPT((0, FIL__, __LINE__, _("msg=<no encryption done>\n") ));
    23452377    }
    23462378#else
     2379  if ((length2 + 1) < length2) --length2;
    23472380  conn->buf       = SH_ALLOC(length2 + 1);
    23482381
     2382  memcpy(conn->buf, msg, length2);
     2383  /*
    23492384  for (i = 0; i < length; ++i)
    23502385    conn->buf[i] = msg[i];
     2386  */
    23512387  conn->buf[length2] = '\0';
    23522388  TPT((0, FIL__, __LINE__, _("msg=<no encryption done>\n") ));
     
    28562892                  conn->K = NULL;
    28572893                }
    2858               len = sl_strlen(&(conn->buf[KEY_LEN])) + KEY_LEN + 1;
    2859               conn->K = SH_ALLOC(len);
     2894
     2895              /* FIXME
     2896              len = sl_strlen(&(conn->buf[KEY_LEN])) + 1;
     2897              if (sl_ok_adds(len, KEY_LEN))
     2898                len += KEY_LEN;
     2899              len = (len < (KEY_LEN+1)) ? (KEY_LEN+1) : len;
     2900              */
     2901              conn->K = SH_ALLOC(KEY_LEN+1);
    28602902
    28612903              sl_strlcpy (conn->K,
     
    33163358                  conn->K = NULL;
    33173359                }
    3318               len = sl_strlen(&(conn->buf[KEY_LEN])) + KEY_LEN + 1;
    3319               conn->K = SH_ALLOC(len);
     3360              /* FIXME len = sl_strlen(&(conn->buf[KEY_LEN])) + KEY_LEN + 1; */
     3361              conn->K = SH_ALLOC(KEY_LEN + 1);
    33203362
    33213363              sl_strlcpy (conn->K,
     
    43274369          if (conn->buf != NULL)
    43284370            SH_FREE (conn->buf);
    4329           conn->buf       = SH_ALLOC (conn->bytes_to_get + 1);
     4371          conn->buf = SH_ALLOC(conn->bytes_to_get + 1); /* <= TRANS_BYTES+1 */
    43304372          conn->bytecount = 0;
    43314373        }
     
    48634905  maxconn = (((int)FD_SETSIZE) < maxconn) ? FD_SETSIZE : maxconn;
    48644906
     4907  if (maxconn < 0 || !sl_ok_muls(maxconn, sizeof(sh_conn_t)))
     4908    {
     4909      sh_error_handle((-1), FIL__, __LINE__, 0, MSG_START_SRV,
     4910                      0, sock);
     4911      aud_exit (FIL__, __LINE__, EXIT_FAILURE);
     4912    }
    48654913  conns   = SH_ALLOC (sizeof(sh_conn_t) * maxconn);
    48664914
Note: See TracChangeset for help on using the changeset viewer.