Changeset 34


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

Code cleanup and minor fixes

Location:
trunk
Files:
36 edited

Legend:

Unmodified
Added
Removed
  • trunk/Makefile.in

    r28 r34  
    10941094                $(srcsrc)/cutest_slib.c \
    10951095                $(srcsrc)/cutest_zAVLTree.c \
     1096                $(srcsrc)/cutest_sh_hash.c \
    10961097                $(srcsrc)/cutest_sh_tiger0.c
    10971098
     
    11011102        cutest_slib.o \
    11021103        cutest_zAVLTree.o \
     1104        cutest_sh_hash.o \
    11031105        cutest_sh_tiger0.o
    11041106
  • trunk/docs/Changelog

    r30 r34  
     1        * Code cleanup
     2        * fix manual version in spec file, noticed by Imre Gergely
     3       
    142.2.0:
    25        * patch by Jim Simmons for samhainadmin.pl.in
  • trunk/include/samhain.h

    r30 r34  
    302302 */
    303303int  safe_logger (int signal, int method, char * details);
    304 void safe_fatal  (int signal, int method, char * details, char *f, int l);
     304void safe_fatal  (char * details, char *f, int l);
    305305
    306306#define SH_VALIDATE_EQ(a,b) \
    307307     do { \
    308          if ((a) != (b)) safe_fatal(0, 0, #a " != " #b, FIL__, __LINE__);\
     308         if ((a) != (b)) safe_fatal(#a " != " #b, FIL__, __LINE__);\
    309309     } while (0)
    310310
    311311#define SH_VALIDATE_NE(a,b) \
    312312     do { \
    313          if ((a) == (b)) safe_fatal(0, 0, #a " == " #b, FIL__, __LINE__);\
     313         if ((a) == (b)) safe_fatal(#a " == " #b, FIL__, __LINE__);\
    314314     } while (0)
    315315
  • trunk/include/sh_utils.h

    r22 r34  
    144144/* returns freshly allocated memory, return value should be free'd
    145145 */
    146 char * sh_util_filename(char * fullpath);
     146char * sh_util_dirname(const char * fullpath);
    147147
    148148/* returns freshly allocated memory, return value should be free'd
     
    160160/* returns freshly allocated memory, return value should be free'd
    161161 */
    162 char * sh_util_basename(char * fullpath);
     162char * sh_util_basename(const char * fullpath);
    163163
    164164#endif
  • trunk/include/slib.h

    r20 r34  
    401401  int sl_ok_subi (int a, int b);
    402402
     403  int sl_ok_muls (size_t a, size_t b);
     404  int sl_ok_adds (size_t a, size_t b);
     405
     406
    403407#ifdef  __cplusplus
    404408}
  • trunk/samhain.spec.in

    r1 r34  
    179179%dir @mylogdir@
    180180%doc docs/BUGS COPYING docs/Changelog docs/TODO
    181 %doc LICENSE docs/FAQ.html docs/HOWTO* docs/MANUAL-2_0.* docs/README*
     181%doc LICENSE docs/FAQ.html docs/HOWTO* docs/MANUAL-2_2.* docs/README*
    182182@mydataroot@
    183183%if "%{withstg_prg}" == "xsamhain_stealth"
     
    196196
    197197%changelog
     198* Tue May 16 2006 Rainer Wichmann
     199- fix manual version, noticed by Imre Gergely
     200
    198201* Tue Apr 05 2005 Rainer Wichmann
    199202- disable automatic stripping, use sstrip
  • trunk/scripts/redhat_i386.client.spec.in

    r1 r34  
    136136%dir /var/log
    137137#%doc docs/BUGS COPYING docs/Changelog docs/TODO
    138 #%doc LICENSE docs/HOWTO* docs/MANUAL-2_0.* docs/README*
     138#%doc LICENSE docs/HOWTO* docs/MANUAL-2_2.* docs/README*
    139139/etc
    140140/usr/local/sbin/samhain
  • trunk/scripts/samhain.spec.in

    r1 r34  
    122122%dir %{_localstatedir}/log
    123123%doc docs/BUGS COPYING docs/Changelog docs/TODO
    124 %doc LICENSE docs/HOWTO* docs/MANUAL-2_0.* docs/README*
     124%doc LICENSE docs/HOWTO* docs/MANUAL-2_2.* docs/README*
    125125%{_localstatedir}/lib/%{name}
    126126%{_sbindir}/%{name}
  • trunk/src/cutest_sh_utils.c

    r22 r34  
    66#include "samhain.h"
    77#include "sh_utils.h"
     8
     9void Test_sh_util_strdup_ok (CuTest *tc) {
     10  char * ret = 0;
     11  char   inp[] = "foobar";
     12
     13  ret = sh_util_strdup(inp);
     14  CuAssertPtrNotNull(tc, ret);
     15  CuAssert(tc, "expected inp != ret, but inp == ret", (inp != ret));
     16  CuAssertStrEquals(tc, "foobar", ret);
     17  return;
     18}
     19
     20void Test_sh_util_strconcat_ok (CuTest *tc) {
     21  char * ret = 0;
     22
     23  ret = sh_util_strconcat("foo", NULL);
     24  CuAssertPtrNotNull(tc, ret);
     25  CuAssertStrEquals(tc, "foo", ret);
     26
     27  ret = sh_util_strconcat("foo", "bar", NULL);
     28  CuAssertPtrNotNull(tc, ret);
     29  CuAssertStrEquals(tc, "foobar", ret);
     30
     31  ret = sh_util_strconcat("/", "foo", "/", "bar", NULL);
     32  CuAssertPtrNotNull(tc, ret);
     33  CuAssertStrEquals(tc, "/foo/bar", ret);
     34
     35  return;
     36}
     37
     38void Test_sh_util_dirname_ok (CuTest *tc) {
     39  char * ret = 0;
     40
     41  char input0[] = "/foo/bar";
     42  char res0[] = "/foo";
     43
     44  char input1[] = "/foo/bar/";
     45  char res1[] = "/foo";
     46
     47  char input2[] = "/foo";
     48  char res2[] = "/";
     49
     50  char input3[] = "/";
     51  char res3[] = "/";
     52
     53  ret = sh_util_dirname(input0);
     54  CuAssertPtrNotNull(tc, ret);
     55  CuAssertStrEquals(tc, res0, ret);
     56
     57  ret = sh_util_dirname(input1);
     58  CuAssertPtrNotNull(tc, ret);
     59  CuAssertStrEquals(tc, res1, ret);
     60
     61  ret = sh_util_dirname(input2);
     62  CuAssertPtrNotNull(tc, ret);
     63  CuAssertStrEquals(tc, res2, ret);
     64
     65  ret = sh_util_dirname(input3);
     66  CuAssertPtrNotNull(tc, ret);
     67  CuAssertStrEquals(tc, res3, ret);
     68  return;
     69}
     70
     71void Test_sh_util_basename_ok (CuTest *tc) {
     72  char * ret = 0;
     73
     74  char input0[] = "/foo/bar";
     75  char res0[] = "bar";
     76
     77  char input1[] = "/foo/";
     78  char res1[] = "foo";
     79
     80  char input2[] = "/foo";
     81  char res2[] = "foo";
     82
     83  char input3[] = "/";
     84  char res3[] = "/";
     85
     86  char input4[] = "/foo/bar/";
     87  char res4[] = "bar";
     88
     89  ret = sh_util_basename(input0);
     90  CuAssertPtrNotNull(tc, ret);
     91  CuAssertStrEquals(tc, res0, ret);
     92
     93  ret = sh_util_basename(input1);
     94  CuAssertPtrNotNull(tc, ret);
     95  CuAssertStrEquals(tc, res1, ret);
     96
     97  ret = sh_util_basename(input2);
     98  CuAssertPtrNotNull(tc, ret);
     99  CuAssertStrEquals(tc, res2, ret);
     100
     101  ret = sh_util_basename(input3);
     102  CuAssertPtrNotNull(tc, ret);
     103  CuAssertStrEquals(tc, res3, ret);
     104
     105  ret = sh_util_basename(input4);
     106  CuAssertPtrNotNull(tc, ret);
     107  CuAssertStrEquals(tc, res4, ret);
     108
     109  return;
     110}
    8111
    9112void Test_sh_util_obscure_ok (CuTest *tc) {
  • trunk/src/samhain.c

    r25 r34  
    817817  if (!fp)
    818818    { if (errno != ENOENT) perror(_("fopen")); return 0; }
    819   if (NULL == fgets(line, 255, fp))
     819  if (NULL == fgets(line, sizeof(line), fp))
    820820    { perror(_("fgets")); (void) fclose(fp); return 0; }
    821821  (void) fclose(fp);
     
    11141114
    11151115#if defined (SH_STEALTH_NOCL)
    1116   char  * command_line;
     1116  char    command_line[256];
    11171117  int     my_argc = 0;
    11181118  char  * my_argv[32];
     
    12801280      strlen(argv[1]) > 0 && strlen(NOCL_CODE) > 0)
    12811281    {
    1282       if ( 0 == strcmp(argv[1], NOCL_CODE) &&
    1283            NULL != (command_line = (char *) SH_ALLOC(256 * sizeof(char))))
     1282      if ( 0 == strcmp(argv[1], NOCL_CODE) )
    12841283        {
    12851284          my_argv[0] = argv[0]; ++my_argc; 
    12861285          command_line[0] = '\0';
    1287           (void*) fgets (command_line, 255, stdin);
    1288           command_line[255] = '\0';
     1286          (void*) fgets (command_line, sizeof(command_line), stdin);
     1287          command_line[sizeof(command_line)-1] = '\0';
    12891288          do {
    12901289            my_argv[my_argc] =
     
    13011300
    13021301          (void) sh_getopt_get (my_argc, my_argv);
    1303           SH_FREE (command_line);
    13041302        }
    13051303      else
  • trunk/src/samhain_stealth.c

    r1 r34  
    390390
    391391      fprintf(stdout, _(" .. hide %s in %s .. \n"), argv[3], argv[2]);
    392       while (fgets(buf, 1023, infil))
     392      while (fgets(buf, sizeof(buf), infil))
    393393        {
    394394          lseek(fd, off_data, SEEK_SET);
  • trunk/src/sh_err_log.c

    r22 r34  
    390390                  (void) fflush(stdout);
    391391                  key[0] = '\0';
    392                   (void) fgets(key, KEY_LEN+2, stdin);
     392                  (void) fgets(key, sizeof(key), stdin);
    393393                  if (key[0] != '\n')
    394394                    {
     
    553553        {
    554554          tmp  = sh_util_safe_name (logfile);
    555           len      = 6 + sl_strlen(tmp);
     555          len      = sl_strlen(tmp);
     556          if (sl_ok_adds (6, len))
     557            len += 6;
    556558          lockfile = SH_ALLOC(len);
    557559          (void) sl_strlcpy(lockfile,        tmp, len);
     
    634636
    635637  SL_TICKET            fd = -1;
    636   long int             status;
     638  size_t               status;
    637639  struct _sh_log_buf   log_msg;
    638640
     
    749751   */
    750752
    751   status      = (long) sl_strlen (errmsg);
     753  status      =  sl_strlen (errmsg);
     754  if (!sl_ok_adds(status, (2*KEY_LEN)) || !sl_ok_adds((2*KEY_LEN + status),32))
     755    {
     756      SL_RETURN ((-1), _("sh_log_file"));
     757    }
     758     
    752759  log_msg.msg = (char *) SH_ALLOC ((size_t) (2*KEY_LEN + status + 32));
    753760
  • trunk/src/sh_error.c

    r27 r34  
    11441144               */
    11451145              export_block = 1;
    1146               ex_len = 64 + sl_strlen(lmsg->msg) + 1;
     1146              /* ex_len = 64 + sl_strlen(lmsg->msg) + 1; */
     1147              ex_len = sl_strlen(lmsg->msg);
     1148              if (sl_ok_adds(ex_len, 65))
     1149                ex_len = 64 + ex_len + 1;
    11471150              ex_msg = SH_ALLOC (ex_len);
    11481151
     
    14971500      /*@i@*/required = sl_vsnprintf(&(lmsg->msg[len]),
    14981501                                     (lmsg->msg_len - len), lmsg->format, vl);
    1499       if ( (required + len) > (lmsg->msg_len - 4) )
     1502      if ((required >= 0) &&
     1503          sl_ok_adds(required, len) &&
     1504          sl_ok_adds((required+len), 4) &&
     1505          ((required + len) > (lmsg->msg_len - 4)) )
    15001506        {
    15011507          /*@i@*/p = SH_ALLOC(required + len + 4);
  • trunk/src/sh_extern.c

    r29 r34  
    664664    sv = strlen(val) + 1;
    665665
     666  if (!sl_ok_adds(sk, sv))
     667    {
     668      SL_RETURN (-1, _("sh_ext_tas_add_envv"));
     669    }
    666670  si = tas->envc;
    667671  tas->envv[si] = SH_ALLOC(sk + sv);
     
    845849int sh_ext_add_envv(const char * key, const char * val)
    846850{
     851  int retval;
     852
    847853  SL_ENTER(_("sh_ext_add_envv"));
    848854
     
    854860    }
    855861
    856   (void) sh_ext_tas_add_envv(&(ext_coms->tas), key, val);
    857 
    858   SL_RETURN (0, _("sh_ext_add_envv"));
     862  retval = sh_ext_tas_add_envv(&(ext_coms->tas), key, val);
     863
     864  if (retval >= 0)
     865    retval = 0;
     866
     867  SL_RETURN (retval, _("sh_ext_add_envv"));
    859868}
    860869
  • trunk/src/sh_files.c

    r27 r34  
    200200
    201201  dirstack_t * ptr;
    202   char       * base;
     202  char       * dir;
    203203  char       * file;
    204204 
     
    215215      if (ptr->checked == S_FALSE)
    216216        {
    217           base = sh_util_basename (ptr->name);
    218           file = sh_util_filename (ptr->name);
     217          dir  = sh_util_dirname (ptr->name);
     218          file = sh_util_basename (ptr->name);
    219219#if defined(WITH_TPT)
    220220          tmp = sh_util_safe_name (ptr->name);
     
    231231
    232232          BREAKEXIT(sh_files_filecheck);
    233           status = sh_files_filecheck (ptr->class, base, file,
     233          status = sh_files_filecheck (ptr->class, dir, file,
    234234                                       (int *) &(ptr->reported), 0);
    235235         
     
    348348            }
    349349          SH_FREE(file);
    350           SH_FREE(base);
     350          SH_FREE(dir);
    351351
    352352          ptr->checked = S_TRUE;
     
    729729#endif
    730730
    731 int sh_files_push_file_int (int class, const char * str_s, int len)
     731int sh_files_push_file_int (int class, const char * str_s, size_t len)
    732732{
    733733  dirstack_t * new_item_ptr;
     
    777777static int sh_files_pushfile (int class, const char * str_s)
    778778{
    779   int     len;
     779  size_t  len;
    780780  char  * tmp;
    781781  char  * p;
     
    11321132}
    11331133
    1134 int sh_files_push_dir_int (int class, char * tail, int len, int rdepth)
     1134int sh_files_push_dir_int (int class, char * tail, size_t len, int rdepth)
    11351135{
    11361136  zAVLTree   * tree;
     
    11941194{
    11951195  char  * tmp;
    1196   int     len;
     1196  size_t  len;
    11971197  int     rdepth = 0;
    11981198  char  * tail = NULL;
     
    13261326  SH_FREE(p);
    13271327  SL_RETURN((0), _("sh_files_pushdir"));
    1328 } 
     1328}
    13291329
    13301330struct sh_dirent {
     
    13541354{
    13551355  struct sh_dirent * this;
    1356   int i;
     1356  size_t len;
    13571357
    13581358  if (thisEntry == NULL)
    13591359    return dirlist;
    13601360 
    1361   i = sl_strlen(thisEntry->d_name);
    1362   if (i == 0)
     1361  len = sl_strlen(thisEntry->d_name);
     1362  if (len == 0)
    13631363    return dirlist;
    1364   ++i;
     1364  ++len;
    13651365 
    13661366  this = SH_ALLOC(sizeof(struct sh_dirent));
     
    13681368    return dirlist;
    13691369
    1370   this->sh_d_name = SH_ALLOC(i);
    1371   sl_strlcpy(this->sh_d_name, thisEntry->d_name, i);
     1370  this->sh_d_name = SH_ALLOC(len);
     1371  sl_strlcpy(this->sh_d_name, thisEntry->d_name, len);
    13721372
    13731373  this->next = dirlist;
     
    14921492
    14931493  int             hardlink_num = 0;
    1494 
     1494#if !defined(HOST_IS_DARWIN)
     1495  size_t          len;
     1496#endif
    14951497
    14961498  SL_ENTER(_("sh_files_checkdir"));
     
    18661868      if (0 != sh_files_hle_test(hardlink_num-theDir.NumDirs, iname))
    18671869        {
    1868           tmpcat = SH_ALLOC(strlen(tmpname) + 256);
    1869           sl_snprintf(tmpcat, strlen(tmpname) + 256,
     1870          len = strlen(tmpname);
     1871          if (sl_ok_adds(len, 256))
     1872            len += 256;
     1873          tmpcat = SH_ALLOC(len);
     1874          sl_snprintf(tmpcat, len,
    18701875                      _("%s: subdirectory count (%d) != hardlinks (%d)"),
    18711876                      tmpname, theDir.NumDirs, hardlink_num);
     
    18861891
    18871892static ShFileType sh_files_filecheck (int class, char * dirName,
    1888                                       char * fileName,
     1893                                      char * infileName,
    18891894                                      int * reported,
    18901895                                      int rsrcflag)
     
    18981903  char          * tmpdir;
    18991904  char          * tmpname;
     1905  char          * fileName;
    19001906  struct utimbuf  utime_buf;
    19011907
     
    19051911  if (0 == (rand() % 2))
    19061912    (void) sh_derr();
     1913
     1914  if (dirName && infileName && (dirName[0] == '/') && (dirName[1] == '\0')
     1915      && (infileName[0] == '/') && (infileName[1] == '\0'))
     1916    {
     1917      fileName = NULL;
     1918    }
     1919  else
     1920    {
     1921      fileName = infileName;
     1922    }
    19071923
    19081924  /* fileName may be NULL if this is a directory
  • 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
  • trunk/src/sh_gpg.c

    r22 r34  
    690690  errno = 0;
    691691
    692   while (NULL != fgets(line, 255, source.pipe))
     692  while (NULL != fgets(line, sizeof(line), source.pipe))
    693693    {
    694694
     
    805805  errno = 0;
    806806
    807   while (NULL != fgets(line, 255, source.pipe))
     807  while (NULL != fgets(line, sizeof(line), source.pipe))
    808808    {
    809809      if (line[strlen(line)-1] == '\n')
  • trunk/src/sh_hash.c

    r27 r34  
    6969#define QUOTE_CHAR '='
    7070
    71 static char * unquote_string (char * str)
    72 {
    73   int    i = 0, j, k = 0, len, t1, t2, l2;
     71char * unquote_string (const char * str)
     72{
     73  int    i = 0, t1, t2;
    7474  char * tmp = NULL;
     75  size_t len, l2, j, k = 0;
    7576
    7677  SL_ENTER(_("unquote_string"));
     
    115116char * int2hex (unsigned char i)
    116117{
    117   int j, k;
    118 
    119   j = i / 16;
    120   k = i - (j*16);
    121   if (j < 10)
    122     i2h[0] = '0'+j;
    123   else
    124     i2h[0] = 'A'+(j-10);
    125  
    126   if (k < 10)
    127     i2h[1] = '0'+k;
    128   else
    129     i2h[1] = 'A'+(k-10);
     118  static char hexchars[] = "0123456789ABCDEF";
     119
     120  i2h[0] = hexchars[(((i) & 0xF0) >> 4)]; /* high */
     121  i2h[1] = hexchars[((i) & 0x0F)];        /* low  */
    130122
    131123  return i2h;
    132124}
    133125
    134 static char * quote_string (char * str)
    135 {
    136   int    i = 0, j, k = 0, len;
     126
     127char * quote_string (const char * str)
     128{
    137129  char * tmp;
    138130  char * tmp2;
     131  size_t len, l2, j, i = 0, k = 0;
    139132
    140133  SL_ENTER(_("quote_string"));
     
    150143    if (str[j] == '\n' || str[j] == QUOTE_CHAR) ++i;
    151144
    152   tmp = SH_ALLOC(len + 1 + 3*i);
     145  l2 = len + 1;
     146  if (sl_ok_muls(3, i) && sl_ok_adds(l2, (3*i)))
     147    {
     148      tmp = SH_ALLOC(len + 1 + 3*i);
     149    }
     150  else
     151    {
     152      sh_error_handle((-1), FIL__, __LINE__, -1, MSG_E_SUBGEN,
     153                      _("integer overflow"),
     154                      _("quote_string"));
     155      SL_RETURN(NULL, _("quote_string"));
     156    }
     157
    153158  for (j = 0; j <= len; ++j)
    154159    {
     
    492497      if (0 != i)
    493498        {
    494           ptr = sh_util_basename (p->fullpath);
     499          ptr = sh_util_dirname (p->fullpath);
    495500          if (ptr)
    496501            {
     
    724729
    725730  if (sizeofline < 2) {
    726     line[0] = '\0';
     731    if (sizeofline > 0) line[0] = '\0';
    727732    return 0;
    728733  }
     
    736741  if (n > 1) {
    737742    --n;
    738     line[n] = '\0';
     743    line[n] = '\0'; /* remove terminating '\n' */
    739744  }
    740745  return n;
     
    791796  while (1)
    792797    {
    793       i =  sh_hash_getline (sh_fin_fd, line, size-1);
     798      i =  sh_hash_getline (sh_fin_fd, line, size);
    794799      if (i < 0 )
    795800        {
     
    860865  sh_filestore_t ft;
    861866  long i;
     867  size_t len;
    862868  char * fullpath;
    863869  char * linkpath;
     
    910916  /* Read next record -- Part Two -- Fullpath
    911917   */
    912   i =  sh_hash_getline (sh_fin_fd, line, size-1);
     918  i =  sh_hash_getline (sh_fin_fd, line, size);
    913919  if (i < 0 )
    914920    {
     
    926932
    927933  tmp = unquote_string (line);
    928   i = sl_strlen(tmp)+1;
    929   fullpath = SH_ALLOC(i);
    930   sl_strlcpy (fullpath, tmp, i);
     934  len = sl_strlen(tmp)+1;
     935  fullpath = SH_ALLOC(len);
     936  (void) sl_strlcpy (fullpath, tmp, len);
    931937  if (tmp)
    932938    SH_FREE(tmp);
    933   if (fullpath[i-2] == '\n')
    934     fullpath[i-2] = '\0';
     939  if (fullpath[len-2] == '\n')
     940    fullpath[len-2] = '\0';
    935941
    936942  /* Read next record -- Part Three -- Linkpath
    937943   */
    938   i =  sh_hash_getline (sh_fin_fd, line, size-1);
     944  i =  sh_hash_getline (sh_fin_fd, line, size);
    939945  if (i < 0 )
    940946    {
     
    953959
    954960  tmp = unquote_string (line);
    955   i = sl_strlen(tmp)+1;
    956   linkpath = SH_ALLOC(i);
    957   sl_strlcpy (linkpath, tmp, i);
     961  len = sl_strlen(tmp)+1;
     962  linkpath = SH_ALLOC(len);
     963  (void) sl_strlcpy (linkpath, tmp, len);
    958964  if (tmp)
    959965    SH_FREE(tmp);
    960   if (linkpath[i-2] == '\n')
    961     linkpath[i-2] = '\0';
     966  if (linkpath[len-2] == '\n')
     967    linkpath[len-2] = '\0';
    962968
    963969  /* Read next record -- Part Four -- Decode
     
    10041010void sh_hash_init ()
    10051011{
     1012
     1013#define FGETS_BUF 16384
     1014
    10061015  sh_file_t * p;
    10071016  SL_TICKET fd    = (-1);
     
    11111120
    11121121  fin_cp = fdopen(get_the_fd(fd), "rb");
    1113   buf = (char *) SH_ALLOC(8192);
    1114 
    1115 
    1116   /* while ( (bufc = sh_unix_getline (fd, buf, 8191)) > 0) */
    1117   while (NULL != fgets(buf, 8192, fin_cp))
     1122  buf = SH_ALLOC(FGETS_BUF);
     1123
     1124  while (NULL != fgets(buf, FGETS_BUF, fin_cp))
    11181125    {
    11191126      bufc = 0;
    1120       while (bufc < 8192) {
     1127      while (bufc < FGETS_BUF) {
    11211128        if (buf[bufc] == '\n') { ++bufc; break; }
    11221129        ++bufc;
     
    12731280int sh_hash_version_string(const char * str)
    12741281{
    1275   int i;
    12761282  if (str)
    12771283    {
    1278       i = sl_strlen(str);
    12791284      if (sh_db_version_string != NULL) {
    12801285        SH_FREE(sh_db_version_string);
     
    12851290          return 0;
    12861291        }
    1287       sh_db_version_string = SH_ALLOC(i+1);
    1288       sl_strlcpy(sh_db_version_string, str, i+1);
     1292      sh_db_version_string = sh_util_strdup(str);
    12891293      return 0;
    12901294    }
     
    12921296}
    12931297
    1294 #if 0
    1295 void sh_hash_pushdata_reset ()
    1296 {
    1297   if (!SL_ISERROR(pushdata_fd))
    1298     {
    1299       sl_close(pushdata_fd);
    1300       pushdata_fd = -1;
    1301     }
    1302   pushdata_isfirst =  1;
    1303 }
    1304 #endif
    13051298
    13061299void sh_hash_pushdata (file_type * buf, char * fileHash)
     
    14571450#endif
    14581451
    1459     if (tmp_len <= MAX_PATH_STORE)
     1452    if (tmp && tmp_len <= MAX_PATH_STORE)
    14601453      {
    14611454        sl_strlcpy(fullpath, buf->fullpath, MAX_PATH_STORE+1);
     
    14751468                   KEY_LEN+1);
    14761469      }
     1470    if (tmp) SH_FREE(tmp);
     1471  }
     1472
     1473#if defined(SH_STEALTH)
     1474  sh_do_encode(fullpath, sl_strlen(fullpath));
     1475#endif
     1476
     1477  tmp = quote_string(fullpath);
     1478  if (tmp) {
     1479    sl_strlcpy(fullpath, tmp, MAX_PATH_STORE+1);
    14771480    SH_FREE(tmp);
    14781481  }
    1479 
    1480 #if defined(SH_STEALTH)
    1481   sh_do_encode(fullpath, sl_strlen(fullpath));
    1482 #endif
    1483 
    1484   tmp = quote_string(fullpath);
    1485   sl_strlcpy(fullpath, tmp, MAX_PATH_STORE+1);
    1486   SH_FREE(tmp);
    14871482
    14881483  if (buf != NULL && buf->c_mode[0] == 'l' && buf->linkpath != NULL)
     
    14991494#endif
    15001495
    1501       if (tmp_len <= MAX_PATH_STORE)
     1496      if (tmp && tmp_len <= MAX_PATH_STORE)
    15021497        {
    15031498          sl_strlcpy(linkpath, buf->linkpath, MAX_PATH_STORE+1); 
     
    15101505                     KEY_LEN+1);
    15111506        }
    1512       SH_FREE(tmp);
     1507      if (tmp) SH_FREE(tmp);
    15131508
    15141509#if defined(SH_STEALTH)
     
    15161511#endif
    15171512      tmp = quote_string(linkpath);
    1518       sl_strlcpy(linkpath, tmp, MAX_PATH_STORE+1);
    1519       SH_FREE(tmp);
     1513      if (tmp)
     1514        {
     1515          sl_strlcpy(linkpath, tmp, MAX_PATH_STORE+1);
     1516          SH_FREE(tmp);
     1517        }
    15201518    }
    15211519
     
    19771975  sh_file_t    * fp;
    19781976  sh_filestore_t p;
    1979   long i;
     1977
     1978  size_t len;
    19801979  char * fullpath;
    19811980  char * linkpath;
     
    20142013  fp->modi_mask = 0L;
    20152014
    2016   i = sl_strlen(buf->fullpath);
    2017   if (i <= MAX_PATH_STORE)
    2018     {
    2019       fullpath = SH_ALLOC(i+ 1);
    2020       sl_strlcpy(fullpath, buf->fullpath, i+1);
     2015  len = sl_strlen(buf->fullpath);
     2016  if (len <= MAX_PATH_STORE)
     2017    {
     2018      fullpath = SH_ALLOC(len+1);
     2019      sl_strlcpy(fullpath, buf->fullpath, len+1);
    20212020    }
    20222021  else
     
    20242023      fullpath = SH_ALLOC(KEY_LEN + 1);
    20252024      sl_strlcpy(fullpath,
    2026                  sh_tiger_hash (buf->fullpath, TIGER_DATA, i),
     2025                 sh_tiger_hash (buf->fullpath, TIGER_DATA, len),
    20272026                 KEY_LEN+1);
    20282027    }
     
    20312030  if (buf->c_mode[0] == 'l')
    20322031    { 
    2033       i = sl_strlen(buf->linkpath);
    2034       if (i <= MAX_PATH_STORE)
    2035         {
    2036           linkpath = SH_ALLOC(i+ 1);
    2037           sl_strlcpy(linkpath, buf->linkpath, i+1);
     2032      len = sl_strlen(buf->linkpath);
     2033      if (len <= MAX_PATH_STORE)
     2034        {
     2035          linkpath = SH_ALLOC(len+1);
     2036          sl_strlcpy(linkpath, buf->linkpath, len+1);
    20382037        }
    20392038      else
     
    20412040          linkpath = SH_ALLOC(KEY_LEN + 1);
    20422041          sl_strlcpy(linkpath,
    2043                      sh_tiger_hash (buf->linkpath, TIGER_DATA, i),
     2042                     sh_tiger_hash (buf->linkpath, TIGER_DATA, len),
    20442043                     KEY_LEN+1);
    20452044        }
     
    29422941              if (p->linkpath != NULL)
    29432942                SH_FREE(p->linkpath);
    2944               p->linkpath = (char*)SH_ALLOC (sl_strlen(theFile->linkpath) + 1);
    2945               sl_strlcpy(p->linkpath, theFile->linkpath,
    2946                          sl_strlen(theFile->linkpath) + 1);
     2943              p->linkpath = sh_util_strdup(theFile->linkpath);
    29472944            }
    29482945#endif
     
    30263023                  if (p->linkpath != NULL)
    30273024                    SH_FREE(p->linkpath);
    3028                   p->linkpath = SH_ALLOC(1 + strlen(theFile->linkpath));
    3029                   sl_strlcpy(p->linkpath, theFile->linkpath,
    3030                              1 + strlen(theFile->linkpath));
     3025                  p->linkpath = sh_util_strdup(theFile->linkpath);
    30313026                }
    30323027              else
  • trunk/src/sh_html.c

    r25 r34  
    108108  if (!SL_ISERROR(fd))
    109109    {
    110       while (!SL_ISERROR(status) && sh_unix_getline (fd, line, 511) > 0)
     110      while (!SL_ISERROR(status) && sh_unix_getline (fd, line, sizeof(line)) > 0)
    111111        {
    112112          formatted = replace_stat (line);
     
    121121  else
    122122    {
    123       qstr = sh_util_filename(DEFAULT_HTML_FILE);
     123      qstr = sh_util_basename(DEFAULT_HTML_FILE);
    124124      if (qstr != NULL)
    125125        {
     
    217217  if (!SL_ISERROR(fd))
    218218    {
    219       while (!SL_ISERROR(status) && sh_unix_getline (fd, line, 511) > 0)
     219      while (!SL_ISERROR(status) && sh_unix_getline (fd, line, sizeof(line)) > 0)
    220220        {
    221221          status = sl_write_line (ticket, line, sl_strlen(line));
     
    289289  if (!SL_ISERROR(fd))
    290290    {
    291       while (!SL_ISERROR(retval) && sh_unix_getline (fd, line, 511) > 0)
     291      while (!SL_ISERROR(retval) && sh_unix_getline (fd, line, sizeof(line)) > 0)
    292292        {
    293293          line_size = sl_strlen(line);
  • trunk/src/sh_kern.c

    r22 r34  
    257257}
    258258
    259 extern int sh_util_hextobinary (char * binary, char * hex, int bytes);
     259extern int sh_util_hextobinary (char * binary, const char * hex, int bytes);
    260260
    261261static char * sh_kern_db2pop (char * name, unsigned long * addr,
  • trunk/src/sh_mail.c

    r22 r34  
    173173      /* get signature and number
    174174       */
    175       (void) sh_unix_getline (fd, key, (int)(  sizeof(key)-1));
     175      (void) sh_unix_getline (fd, key, (int)sizeof(key));
    176176      key[KEY_LEN] = '\0';
    177177
    178       (void) sh_unix_getline (fd, number, (int)(sizeof(number)-1));
     178      (void) sh_unix_getline (fd, number, (int)sizeof(number));
    179179      number[(2*SH_MINIBUF) - 2]   = '\0';
    180180      numsig = atol (number);
     
    742742static char * sh_mail_realloc (char * inbuf, size_t * insize, size_t increase)
    743743{
    744   size_t newsize = (*insize) + increase + 1;
    745   char * outbuf;
     744  size_t newsize;
     745  char * outbuf = inbuf;
    746746
    747747  SL_ENTER(_("sh_mail_realloc"));
    748748
    749   outbuf = SH_ALLOC(newsize);
    750   MLOCK(outbuf, newsize);
    751   (void) sl_strlcpy(outbuf, inbuf, newsize);
    752 
    753   memset (inbuf, 0, (*insize));
    754   MUNLOCK(inbuf, (*insize));
    755   SH_FREE(inbuf);
    756 
    757   *insize = newsize;
     749  if (sl_ok_adds((*insize), 1))
     750    {
     751      newsize = (*insize) + 1;
     752
     753      if (sl_ok_adds(newsize, increase))
     754        {
     755          newsize += increase;
     756
     757          outbuf = SH_ALLOC(newsize);
     758          MLOCK(outbuf, newsize);
     759          (void) sl_strlcpy(outbuf, inbuf, newsize);
     760
     761          memset (inbuf, 0, (*insize));
     762          MUNLOCK(inbuf, (*insize));
     763          SH_FREE(inbuf);
     764
     765          *insize = newsize;
     766        }
     767    }
    758768
    759769  SL_RETURN( (outbuf), _("sh_mail_realloc"));
     
    12271237int sh_mail_set_relay (const char * str_s)
    12281238{
    1229   size_t i = 0;
    1230 
    12311239  SL_ENTER(_("sh_mail_set_relay"));
    12321240
     
    12351243
    12361244  if (relay_host != NULL)
    1237     SH_FREE (relay_host);
     1245    {
     1246      SH_FREE (relay_host);
     1247      relay_host = NULL;
     1248    }
    12381249
    12391250  if (0 == sl_strncmp(str_s, _("NULL"), 4))
    12401251    {
    1241       relay_host = NULL;
    12421252      SL_RETURN( 0, _("sh_mail_set_relay"));
    12431253    }
    12441254
    1245   i = sl_strlen(str_s) + 1;
    1246   relay_host = SH_ALLOC (i);
    1247   if (relay_host != NULL)
    1248     (void) sl_strlcpy(relay_host, str_s, i);
    1249   else
    1250     fprintf(stderr, _("ERROR:  sh_mail_set_relay: Out of memory"));
     1255  relay_host = sh_util_strdup(str_s);
     1256
    12511257  SL_RETURN( 0, _("sh_mail_set_relay"));
    12521258}
     
    18021808    return NULL;
    18031809
    1804   size   = strlen(str);
    1805   /* fprintf(stderr, "orig = %d\n", size); */
     1810  size   = strlen(str) + 1;
    18061811  blocks = 1 + (size / SPLIT_AT);
    18071812 
    1808   size   = size + (2*blocks) + 1;
     1813  if (sl_ok_muls(2, blocks) && sl_ok_adds(size, (2*blocks)))
     1814    {
     1815      size   = size + (2*blocks);
     1816    }
     1817  else
     1818    {
     1819      /* integer overflow, do not split */
     1820      p = sh_util_strdup(str);
     1821      return p;
     1822    }
     1823
    18091824  p = SH_ALLOC(size);
    18101825  memset(p, 0, size);
    1811   /* fprintf(stderr, "alloc = %d\n", size); */
     1826
    18121827  p0 = p;
    18131828
     
    18971912  unsigned char * comp_dn, * eom;
    18981913  HEADER * header;
    1899   int      count, index, type, rdlength, pref;
     1914  int      type, rdlength, pref;
     1915  unsigned int count, index;
    19001916  dnsrep * retval;
    19011917
     
    19781994  /* allocate space for the results */
    19791995
     1996  if (!sl_ok_muls(count, sizeof (mx)))
     1997    {
     1998      SH_FREE   (retval);
     1999      SL_RETURN (NULL, _("get_mx"));
     2000    }
     2001
    19802002  result        = SH_ALLOC (count * sizeof (mx));
     2003 
    19812004  if (!result)
    19822005    {
  • trunk/src/sh_mounts.c

    r1 r34  
    450450 
    451451  while ((c = getc (fd)) == '*') {
    452     while (((c = getc (fd)) != '\n') && (c != EOF)) {
    453     }
     452    while (((c = getc (fd)) != '\n') && (c != EOF)) {} /* do nothing */
    454453  }
    455454}
  • trunk/src/sh_prelink.c

    r22 r34  
    4040int sh_prelink_set_path (const char * str)
    4141{
    42   size_t len;
    4342  SL_ENTER(_("sh_prelink_set_path"));
    4443  if (prelink_path != NULL)
     
    4948      SL_RETURN((-1), _("sh_prelink_set_path"));
    5049    }
    51   len = sl_strlen (str);
    52   prelink_path = SH_ALLOC(len+1);
    53   (void) sl_strlcpy(prelink_path, str, len+1);
     50
     51  prelink_path = sh_util_strdup(str);
     52
    5453  SL_RETURN(0, _("sh_prelink_set_path"));
    5554}
  • trunk/src/sh_schedule.c

    r22 r34  
    347347    }
    348348
    349   /*
    350   for (i = 0; i < 5; ++i)
    351     printf("%2d MIN  %3d  MAX  %3d  STEP  %3d\n",
    352            i, isched->min[i], isched->max[i], isched->step[i]);
    353   */
    354 
    355349  isched->last_exec = (time_t)-1;
    356350  isched->first     = 0;
  • trunk/src/sh_socket.c

    r22 r34  
    352352    {
    353353      size = sl_strlen(DEFAULT_PIDDIR) + 1 + sl_strlen(SH_INSTALL_NAME) + 6;
    354       sh_sockname = SH_ALLOC(size);
     354      sh_sockname = SH_ALLOC(size); /* compile-time constant */
    355355      sl_strlcpy(sh_sockname, DEFAULT_PIDDIR, size);
    356356      sl_strlcat(sh_sockname, "/", size);
  • trunk/src/sh_srp.c

    r27 r34  
    197197
    198198  char           *combi;
    199   size_t          len;
     199  size_t          len, l2;
    200200  register int i;
    201201  unsigned char * dez = NULL;
     
    221221  skey->vernam[KEY_LEN] = '\0';
    222222
    223   len = sl_strlen(salt) + sl_strlen(skey->vernam) + 1;
     223  len = sl_strlen(salt) + 1;
     224  l2  = sl_strlen(skey->vernam);
     225  if (sl_ok_adds(len, l2))
     226    len += l2;
    224227
    225228  /* H(s,P)
     
    240243{
    241244  char           *combi;
    242   size_t          len;
     245  size_t          len, l2, l3;
    243246  static char     hash[KEY_LEN+1];
    244247 
     
    248251             _("x1 != NULL && x2 != NULL && x3 !=NULL"), NULL);
    249252
    250   len = sl_strlen(x1) + sl_strlen(x2) + sl_strlen(x3) + 1;
     253  len = sl_strlen(x1) + 1;
     254  l2  = sl_strlen(x2);
     255  l3  = sl_strlen(x3);
     256
     257  if (sl_ok_adds(len, l2))
     258    len += l2;
     259  if (sl_ok_adds(len, l3))
     260    len += l3;
    251261 
    252262  /* H(x1,x2,x3)
     
    392402  char    *str;
    393403  char    *combi;
    394   size_t   len;
    395404  bigerr_t res;
    396405
     
    408417 
    409418  if (str != NULL)
    410     {
    411       len = sl_strlen(str) + 1;
    412       combi = SH_ALLOC(len);
    413       (void) sl_strlcpy (combi, str, len);
    414     }
     419    combi = sh_util_strdup(str);
    415420  else
    416421    combi = NULL;
     
    430435  char    *str;
    431436  char    *combi;
    432   long     len;
    433437  bigerr_t res;
    434438
     
    469473 
    470474  if (str != NULL)
    471     {
    472       len = sl_strlen(str) + 1;
    473       combi = SH_ALLOC(len);
    474       sl_strlcpy (combi, str, len);
    475       /* fprintf(stderr, "OK2a %ld %s\n", len, combi); */
    476     }
     475    combi = sh_util_strdup(str);
    477476  else
    478477    combi = NULL;
     
    496495  char    *str;
    497496  char    *combi;
    498   size_t   len;
    499497  bigerr_t res;
    500498
     
    571569
    572570  if (str != NULL)
    573     {
    574       len = sl_strlen(str) + 1;
    575       combi = SH_ALLOC(len);
    576       (void) sl_strlcpy (combi, str, len);
    577     }
     571    combi = sh_util_strdup(str);
    578572  else
    579573    combi = NULL;
     
    601595  char    *str;
    602596  char    *combi;
    603   size_t   len;
    604597  bigerr_t res;
    605598
     
    651644 
    652645  if (str != NULL)
    653     {
    654       len = sl_strlen(str) + 1;
    655       combi = SH_ALLOC(len);
    656       (void) sl_strlcpy (combi, str, len);
    657     }
     646    combi = sh_util_strdup(str);
    658647  else
    659648    combi = NULL;
     
    679668  char    *combi;
    680669  char    *str;
    681   size_t   len;
    682670  bigerr_t res;
    683671 
     
    700688 
    701689  if (str != NULL)
    702     {
    703       len = sl_strlen(str) + 1;
    704       combi = SH_ALLOC(len);
    705       (void) sl_strlcpy (combi, str, len);
    706     }
     690    combi = sh_util_strdup(str);
    707691  else
    708692    combi = NULL;
  • trunk/src/sh_suidchk.c

    r30 r34  
    854854                                        else
    855855                                          {
    856                                             basetmp = SH_ALLOC(1 + sl_strlen(theFile.fullpath));
    857                                             (void) sl_strlcpy(basetmp, theFile.fullpath,
    858                                                        1 + sl_strlen(theFile.fullpath));
     856                                            basetmp = sh_util_strdup(theFile.fullpath);
    859857                                            filetmp = SH_ALLOC(PATH_MAX+1);
    860858                                            (void) sl_snprintf(filetmp, PATH_MAX+1, "%s/%s",
  • trunk/src/sh_tiger0.c

    r30 r34  
    16651665    }
    16661666
    1667   if (what == TIGER_FILE)
     1667  if (what == TIGER_FILE && sl_ok_adds(sl_strlen (filename), (2 + 48 + 6)))
    16681668    len = sl_strlen (filename) + 2 + 48 + 6;
    16691669  else
  • trunk/src/sh_tools.c

    r30 r34  
    129129  char   tmp[4];
    130130  char * outstr;
    131   int    len = 1;
     131  size_t len = 1;
    132132  int    i = 0;
    133133  unsigned char   val_octal = '\0';
     
    138138
    139139  if (instr)
    140     len = (3 * strlen(instr)) + 4;
     140    {
     141      len = strlen(instr);
     142      if (sl_ok_muls (3, len) && sl_ok_adds ((3*len), 4))
     143        {
     144          len = (3 * len) + 4;
     145          p = instr;
     146        }
     147      else
     148        {
     149          len = 1;
     150          p   = NULL;
     151        }
     152    }
     153  else
     154    {
     155      p = NULL;
     156    }
    141157
    142158  outstr = SH_ALLOC(len);
     
    144160  outstr[0] = '\0';
    145161  tmp[3]    = '\0';
    146 
    147   p = instr;
    148162
    149163#if !defined(SH_USE_XML)
     
    460474
    461475  int    retval;
    462   size_t len;
    463476
    464477  sin_cache * check_cache = conn_cache;
     
    534547                  else
    535548                    {
    536                       len = sl_strlen(host_entry->h_name) + 1;
    537                       host_name = SH_ALLOC(len);
    538                       if (len > 1)
    539                         sl_strlcpy(host_name, host_entry->h_name, len);
    540                       else
    541                         host_name[0] = '\0';
     549                      host_name = sh_util_strdup(host_entry->h_name);
    542550                    }
    543551
     
    10961104 */
    10971105char * sh_tools_makePack (unsigned char * header,
    1098                           char * payload, int payload_size,
     1106                          char * payload, unsigned long payload_size,
    10991107                          keyInstance * keyInstE)
    11001108{
     
    11021110  unsigned char   head[16];
    11031111  double epad;
    1104   int    i_epad = 0;
    1105   int    i_blk = payload_size / 16;
    1106   int    i_blkmax = SH_V2_FULLSIZE / 16;
    1107   int    pads = 0;
    1108   int    full_size;
     1112  unsigned long    i_epad = 0;
     1113  unsigned long    i_blk = payload_size / 16;
     1114  unsigned long    i_blkmax = SH_V2_FULLSIZE / 16;
     1115  unsigned long    pads = 0;
     1116  size_t full_size;
    11091117  char * full_ret;
    11101118
     
    11161124  int                     err_num;
    11171125  int                     blkfac;
     1126  int                     oflow = 0;
    11181127
    11191128  /*
     
    11521161    fprintf(stderr, "PAD1 <%d> <%f>\n", pads, epad);
    11531162#endif
    1154     i_epad = (int) (pads * epad);
     1163    i_epad = (unsigned long) (pads * epad);
    11551164#ifdef DEBUG_EN2
    11561165    fprintf(stderr, "PAD2 <%d> <%d>\n", i_epad, (i_epad*16));
     
    11581167  }
    11591168
    1160   full_size =
    1161   /* head     */ 16 +
    1162   /* payload  */ (i_blk*16) + /* payload_size + */
    1163   /* pad      */ (i_epad * 16);
     1169  full_size =  16;                        /* head     */
     1170  if (sl_ok_muls(i_blk, 16) && sl_ok_adds(full_size, (i_blk*16)))
     1171    full_size =  full_size + (i_blk*16);  /* payload  */
     1172  else
     1173    oflow = 1;
     1174  if (sl_ok_adds(full_size, (i_epad*16)))
     1175    full_size =  full_size + (i_epad*16); /* pad      */
     1176  else
     1177    i_epad = 0;
     1178
     1179  if (oflow)
     1180    {
     1181      sh_error_handle((-1), FIL__, __LINE__, -1, MSG_E_SUBGEN,
     1182                      _("integer overflow"),
     1183                      _("sh_tools_makePack"));
     1184    }
    11641185
    11651186  full_ret = SH_ALLOC(full_size);
    11661187  memcpy(full_ret,                   head,    16);
    1167   if (payload != NULL)
     1188  if (payload != NULL && !oflow)
    11681189    {
    11691190      memcpy(&full_ret[16],              payload, payload_size);
    11701191    }
    1171   if ((i_blk*16) > payload_size)
     1192  if ((i_blk*16) > payload_size && !oflow)
    11721193    {
    11731194#ifdef DEBUG_EN2
     
    13541375{
    13551376  char           hash[KEY_LEN+1];
    1356   char         * temp;
     1377  char         * temp = NULL;
    13571378  register int   i;
    13581379  int            total = 0;
     
    13741395  sl_strlcpy(hash, theSig, KEY_LEN+1);
    13751396
    1376 
    1377   total = KEY_LEN + buflen;
    1378   temp  = SH_ALLOC (total);
    1379 
    1380   for (i = 0; i < KEY_LEN; ++i)
    1381     temp[i] = hash[i];
    1382 
    1383   for (i = 0; i < buflen; ++i)
    1384     temp[i+KEY_LEN] = buf[i];
    1385 
     1397  if (sl_ok_adds(buflen, KEY_LEN))
     1398    {
     1399      total = KEY_LEN + buflen;
     1400      temp  = SH_ALLOC (total);
     1401
     1402      for (i = 0; i < KEY_LEN; ++i)
     1403        temp[i] = hash[i];
     1404
     1405      for (i = 0; i < buflen; ++i)
     1406        temp[i+KEY_LEN] = buf[i];
     1407    }
     1408  else
     1409    {
     1410      sh_error_handle((-1), FIL__, __LINE__, -1, MSG_E_SUBGEN,
     1411                      _("integer overflow"),
     1412                      _("hash_me"));
     1413      temp = sh_util_strdup(buf);
     1414    }
    13861415  SL_RETURN(temp, _("hash_me"));
    13871416}
     
    14231452{
    14241453  char * ret;
    1425   int    size, status;
     1454  int    status;
    14261455  struct stat buf;
    14271456  char * base;
     1457  size_t size;
    14281458
    14291459  SL_ENTER(_("get_client_conf_file"));
    14301460
    1431   size = sl_strlen(DEFAULT_DATAROOT);
    1432   base = SH_ALLOC(size + 1);
    1433   sl_strlcpy(base, DEFAULT_DATAROOT, size + 1);
    1434 
    1435   size = sl_strlen(base) + sl_strlen(peer) + 5;
    1436   ++size;
     1461  base = sh_util_strdup(DEFAULT_DATAROOT);
     1462
     1463  size = sl_strlen(base);
     1464  if (sl_ok_adds(size, sl_strlen(peer)))
     1465      size += sl_strlen(peer);
     1466  if (sl_ok_adds(size, 6))
     1467    size += 6;
    14371468
    14381469  ret = SH_ALLOC(size);
     
    14611492
    14621493  SH_FREE(base);
     1494  SH_FREE(ret);
    14631495  *length=0;
    14641496  SL_RETURN(NULL, _("get_client_conf_file"));
     
    14801512{
    14811513  char * ret;
    1482   int    size, status;
     1514  int    status;
    14831515  struct stat buf;
    14841516
    14851517  char * base;
     1518  size_t size;
    14861519
    14871520  SL_ENTER(_("get_client_data_file"));
    14881521
    1489   size = sl_strlen(DEFAULT_DATAROOT);
    1490   base = SH_ALLOC(size + 1);
    1491   sl_strlcpy(base, DEFAULT_DATAROOT, size + 1);
    1492 
    1493   size = sl_strlen(base) + sl_strlen(peer) + 7;
    1494 
    1495   ++size;
     1522  base = sh_util_strdup(DEFAULT_DATAROOT);
     1523
     1524  size = sl_strlen(base);
     1525  if (sl_ok_adds(size, sl_strlen(peer)))
     1526      size += sl_strlen(peer);
     1527  if (sl_ok_adds(size, 8))
     1528    size += 8;
    14961529
    14971530  ret = SH_ALLOC(size);
     
    15231556  *length = 0;
    15241557  SH_FREE(base);
     1558  SH_FREE(ret);
    15251559  SL_RETURN(NULL, _("get_client_data_file"));
    15261560
     
    15531587  int           status = BAD;
    15541588  char        * my_tmp_dir;
    1555   int           len;
    15561589
    15571590  SL_ENTER(_("open_tmp"));
    15581591
    15591592#if defined(SH_TMPDIR)
    1560   len        = sl_strlen(SH_TMPDIR) + 1;
    1561   my_tmp_dir = SH_ALLOC(len);
    1562   sl_strlcpy(my_tmp_dir, SH_TMPDIR, len);
     1593  my_tmp_dir = sh_util_strdup(SH_TMPDIR);
    15631594#else
    15641595#if defined(SH_WITH_SERVER)
    1565   len        = sl_strlen(DEFAULT_LOGDIR) + 1;
    1566   my_tmp_dir = SH_ALLOC(len);
    1567   sl_strlcpy(my_tmp_dir, DEFAULT_LOGDIR, len);
     1596  my_tmp_dir = sh_util_strdup(DEFAULT_LOGDIR);
    15681597#else
    1569   len        = sl_strlen(sh.effective.home) + 1;
    1570   my_tmp_dir = SH_ALLOC(len);
    1571   sl_strlcpy(my_tmp_dir, sh.effective.home, len);
     1598  my_tmp_dir = sh_util_strdup(sh.effective.home);
    15721599#endif
    15731600#endif
  • trunk/src/sh_unix.c

    r30 r34  
    331331int safe_logger (int signal, int method, char * details)
    332332{
    333   int i = 0;
     333  unsigned int i = 0;
    334334  int status = -1;
    335335  struct stat buf;
     
    429429}
    430430
    431 void safe_fatal (int signal, int method, char * details,
    432                 char * file, int line)
     431void safe_fatal (char * details,
     432                 char * file, int line)
    433433{
    434434  char msg[128];
    435435  char str[128];
    436436  char * p;
     437  int  signal = 0;
     438  int  method = 0;
     439
    437440  p = safe_itoa((int) line, str, 128);
    438441  sl_strlcpy(msg, _("FATAL: "), 128);
     
    23742377
    23752378  if (sizeofline < 2) {
    2376     line[n] = '\0';
     2379    line[0] = '\0';
    23772380    SL_RETURN((0), _("sh_unix_getline"));
    23782381  }
     2382
     2383  --sizeofline;
    23792384
    23802385  while (n < sizeofline) {
     
    28722877
    28732878  path = theFile->fullpath;
    2874 
    2875 #if 0
    2876   {
    2877     char pwd[256];
    2878     printf("%d %s %s %s (%s)\n", flagrel, theFile->fullpath, filename, path,
    2879            getcwd (pwd, 256));
    2880   }
    2881 #endif
    28822879
    28832880  SL_ENTER(_("sh_unix_getinfo"));
     
    32313228    else
    32323229      {
    3233         tmp = sh_util_basename(theFile->fullpath);
     3230        tmp = sh_util_dirname(theFile->fullpath);
    32343231        sl_strlcpy (theFile->linkpath,
    32353232                    tmp,
     
    33923389      /* read the PID in the lock file
    33933390       */
    3394       status = sh_unix_getline (fd, line_in, sizeof(line_in)-1);
     3391      status = sh_unix_getline (fd, line_in, sizeof(line_in));
    33953392
    33963393      /* convert to numeric
     
    34873484int sh_unix_write_lock_file(char * filename)
    34883485{
    3489   int i;
     3486  size_t len;
     3487  int    res;
    34903488  char * lockfile;
    34913489
     
    34933491    return (-1);
    34943492
    3495   i        = 6 + sl_strlen(filename);
    3496   lockfile = SH_ALLOC(i);
    3497   sl_strlcpy(lockfile, filename,   i);
    3498   sl_strlcat(lockfile, _(".lock"), i);
    3499   i = sh_unix_test_and_lock(filename, lockfile);
     3493  len = sl_strlen(filename);
     3494  if (sl_ok_adds(len, 6))
     3495    len += 6;
     3496  lockfile = SH_ALLOC(len);
     3497  sl_strlcpy(lockfile, filename,   len);
     3498  sl_strlcat(lockfile, _(".lock"), len);
     3499  res = sh_unix_test_and_lock(filename, lockfile);
    35003500  SH_FREE(lockfile);
    3501   return i;
     3501  return res;
    35023502}
    35033503
     
    35413541int sh_unix_rm_lock_file(char * filename)
    35423542{
    3543   int i;
     3543  size_t len;
     3544  int res;
    35443545  char * lockfile;
    35453546
     
    35473548    return (-1);
    35483549
    3549   i        = 6 + sl_strlen(filename);
    3550   lockfile = SH_ALLOC(i);
    3551   sl_strlcpy(lockfile, filename,   i);
    3552   sl_strlcat(lockfile, _(".lock"), i);
    3553   i = sh_unix_unlock(lockfile, filename);
     3550  len = sl_strlen(filename);
     3551  if (sl_ok_adds(len, 6))
     3552    len += 6;
     3553  lockfile = SH_ALLOC(len);
     3554  sl_strlcpy(lockfile, filename,   len);
     3555  sl_strlcat(lockfile, _(".lock"), len);
     3556
     3557  res = sh_unix_unlock(lockfile, filename);
    35543558  SH_FREE(lockfile);
    3555   return i;
     3559  return res;
    35563560}
    35573561
     
    40754079#if  !defined(SH_STEALTH_MICRO)
    40764080
    4077 static unsigned long off_data = 0;
    4078 static unsigned long max_data = 0;
    4079 static int           stealth_init = BAD;
    40804081
    40814082int hideout_hex_block(SL_TICKET fd, unsigned char * str, int len);
     
    40874088int sh_unix_getline_stealth (SL_TICKET fd, char * str, int len)
    40884089{
    4089   int add_off, llen;
     4090  int           add_off, llen;
     4091  unsigned long off_data = 0;
     4092  unsigned long max_data = 0;
     4093  static int    stealth_init = BAD;
    40904094
    40914095  SL_ENTER(_("sh_unix_getline_stealth"));
     4096
    40924097
    40934098  /* --- Initialize. ---
     
    41324137
    41334138  SL_ENTER(_("hideout_hex_block"));
     4139
     4140  ASSERT_RET((len > 1), _("len > 1"), (0));
     4141
     4142  --len;
    41344143
    41354144  i = 0;
     
    41514160                } while (num == 0 && errno == EINTR);
    41524161                if (num == 0)
    4153                   SL_RETURN((-1), _("hideout_hex_block"));
     4162                  SL_RETURN((0), _("hideout_hex_block"));
    41544163                ++here;
    41554164              } while (c == '\n' || c == '\t' || c == '\r' ||
     
    41744183    str[i] = '\0';
    41754184  else
    4176     str[i+1] = '\0';
     4185    str[i+1] = '\0'; /* keep newline and terminate */
    41774186  retval += here;
    41784187
     
    41844193unsigned long first_hex_block(SL_TICKET fd, unsigned long * max)
    41854194{
    4186   int           i;
    4187   register int  num = 1;
     4195  unsigned int  i;
     4196  long          num = 1;
     4197  unsigned long lnum;
    41884198  char          c;
    41894199  int           nothex = 0;
    41904200  unsigned long retval = 0;
    4191   int           this_line = 0;
     4201  unsigned int  this_line = 0;
    41924202  char          theline[SH_BUFSIZE];
    41934203
     
    42014211      this_line  = 0;
    42024212      c          = '\0';
    4203       while (c != '\n' && num > 0)
     4213      while (c != '\n' && num > 0 && this_line < (sizeof(theline)-1))
    42044214        {
    42054215          do {
     
    42104220          else           
    42114221            SL_RETURN((0), _("first_hex_block"));
    4212           this_line += num;
     4222          ++this_line;
    42134223        }
    42144224      theline[this_line] = '\0';
     
    42394249              num = sl_read (fd, theline, SH_BUFSIZE);
    42404250            } while (num == 0 && errno == EINTR);
    4241             for (i = 0; i < num; ++i)
    4242               {
    4243                 c = theline[i];
    4244                 if (c == '\n' || c == '\t' || c == '\r' || c == ' ')
    4245                   ;
    4246                 else if (!isxdigit((int)c))
    4247                   break;
    4248                 else
    4249                   *max += 1;
     4251            if (num > 0)
     4252              {
     4253                lnum = (unsigned long) num;
     4254                for (i = 0; i < lnum; ++i)
     4255                  {
     4256                    c = theline[i];
     4257                    if (c == '\n' || c == '\t' || c == '\r' || c == ' ')
     4258                      ;
     4259                    else if (!isxdigit((int)c))
     4260                      break;
     4261                    else
     4262                      *max += 1;
     4263                  }
    42504264              }
    42514265          } while (num > 0);
  • trunk/src/sh_utils.c

    r29 r34  
    270270  size = sl_strlen(formatt);
    271271
    272   fmt = (char *) SH_ALLOC(size + 1);
    273   (void) sl_strlcpy(fmt, formatt, size + 1);
     272  if (!sl_ok_adds(size, 1))
     273    SL_RETURN(NULL, _("sh_util_formatted"));
     274
     275  ++size;
     276  fmt = SH_ALLOC(size);
     277  (void) sl_strlcpy(fmt, formatt, size);
    274278
    275279  p = fmt;
     
    319323                {
    320324                  isiz = sl_strlen(ftab[j].data_str);
    321                   if (isiz > 0)
     325                  if (isiz > 0 && sl_ok_adds(size, isiz))
    322326                    {
    323327                      size += isiz;
     
    339343                  /*@+bufferoverflowhigh@*/
    340344                  isiz = sl_strlen(ftab[j].data_str);
    341                   if (isiz > 0)
     345                  if (isiz > 0 && sl_ok_adds(size, isiz))
    342346                    {
    343347                      size += isiz;
     
    359363                  /*@+bufferoverflowhigh@*/
    360364                  isiz = sl_strlen(ftab[j].data_str);
    361                   if (isiz > 0)
     365                  if (isiz > 0 && sl_ok_adds(size, isiz))
    362366                    {
    363367                      size += isiz;
     
    391395                    }
    392396                  isiz = sl_strlen(ftab[j].data_str);
    393                   if (isiz > 0)
     397                  if (isiz > 0 && sl_ok_adds(size, isiz))
    394398                    {
    395399                      size += isiz;
     
    431435  /* -- closing '\0' --
    432436   */
    433   size++;
     437  if (sl_ok_adds(size, 1))
     438    size++;
    434439  outstr = (char *) SH_ALLOC(size);
    435440
     
    441446                      clist[8],  clist[9], clist[10], clist[11],
    442447                      clist[12], clist[13], clist[14], clist[15]);
    443  
     448  outstr[size-1] = '\0';
     449
    444450  /* -- cleanup --
    445451   */
     
    491497  SL_ENTER(_("sh_util_hextobinary"));
    492498
    493   while (i < bytes)
     499  if (bytes < 2)
     500    SL_RETURN((-1), _("sh_util_hextobinary"));
     501
     502  while (i < (bytes-1))
    494503    {
    495504      SH_HEXCHAR(hex[i],   k);
     
    498507      binary[l] = (char)(k * 16 + j);
    499508      ++l; i+= 2;
    500 
    501       /* k = sh_util_hexchar(hex[i]); j = sh_util_hexchar(hex[i+1]);
    502       if (k != -1 && j != -1)
    503         {
    504           binary[l] = (char)(k * 16 + j);
    505           ++l; i+= 2;
    506         }
    507       else
    508         {
    509           SL_RETURN((-1), _("sh_util_hextobinary"));
    510         }
    511       */
    512509    }
    513510 
     
    581578    }
    582579
    583   inner = (char *) SH_ALLOC (textlen + KEY_BLOCK);
    584 
    585   for (i = 0; i < KEY_BLOCK; ++i)
    586     {
    587       outer[i]  = K[i] ^ opad[i];
    588       inner[i]  = K[i] ^ ipad[i];
    589     }
    590   for (i = KEY_BLOCK; i < (KEY_BLOCK+textlen); ++i)
    591     {
    592       inner[i] = text[i - KEY_BLOCK];
     580  if (sl_ok_adds(textlen, KEY_BLOCK))
     581    {
     582      inner = (char *) SH_ALLOC (textlen + KEY_BLOCK);
     583
     584      for (i = 0; i < KEY_BLOCK; ++i)
     585        {
     586          outer[i]  = K[i] ^ opad[i];
     587          inner[i]  = K[i] ^ ipad[i];
     588        }
     589      for (i = KEY_BLOCK; i < (KEY_BLOCK+textlen); ++i)
     590        {
     591          inner[i] = text[i - KEY_BLOCK];
     592        }
     593    }
     594  else
     595    {
     596      sh_error_handle((-1), FIL__, __LINE__, -1, MSG_E_SUBGEN,
     597                      _("integer overflow"),
     598                      _("sh_util_hmac_tiger"));
     599      res = sh_tiger_hash (NULL, TIGER_DATA, 0);
     600      SL_RETURN(res, _("sh_util_hmac_tiger"));
    593601    }
    594602
     
    14211429/* returns freshly allocated memory, return value should be free'd
    14221430 */
    1423 char * sh_util_basename(char * fullpath)
     1431char * sh_util_dirname(const char * fullpath)
    14241432{
    14251433  char * retval;
    1426   size_t i;
     1434  size_t len;
     1435
     1436  SL_ENTER(_("sh_util_dirname"));
     1437
     1438  ASSERT_RET ((fullpath != NULL), _("fullpath != NULL"), (NULL))
     1439
     1440  len = sl_strlen (fullpath);  /* fullpath[i] is terminating '\0' */
     1441
     1442  if (len > 1 && fullpath[len-1] == '/') /* skip trailing '/' */
     1443    --len;
     1444
     1445  while (len > 0) {
     1446    --len;
     1447    if (fullpath[len] == '/')
     1448      {
     1449        if (len == 0) ++len; /* copy the '/' to output */
     1450        break;
     1451      }
     1452  }
     1453
     1454  /* -- Not an absolute path. --
     1455   */
     1456  if ((len == 0) && (fullpath[len] != '/'))
     1457    {
     1458      SL_RETURN(NULL, _("sh_util_dirname"));
     1459    }
     1460
     1461  retval = SH_ALLOC(len + 1);
     1462  (void) sl_strlcpy (retval, fullpath, len+1);
     1463
     1464  SL_RETURN(retval, _("sh_util_dirname"));
     1465}
     1466
     1467/* returns freshly allocated memory, return value should be free'd
     1468 */
     1469char * sh_util_basename(const char * fullpath)
     1470{
     1471  char * retval = NULL;
     1472  char * tmp;
     1473  char * c;
     1474  size_t len;
    14271475
    14281476  SL_ENTER(_("sh_util_basename"));
     
    14301478  ASSERT_RET ((fullpath != NULL), _("fullpath != NULL"), (NULL))
    14311479
    1432   i = sl_strlen (fullpath);  /* fullpath[i] is terminating '\0' */
    1433 
    1434   while (i > 0) {
    1435     --i;
    1436     if (fullpath[i] == '/') break;
    1437   }
    1438 
    1439   /* -- Not a valid path. --
    1440    */
    1441   if ((fullpath[i] != '/') && (i == 0) )
    1442     SL_RETURN(NULL, _("sh_util_basename"));
    1443 
    1444   retval = SH_ALLOC(i + 1);
    1445 
    1446   (void) sl_strlcpy (retval, fullpath, i+1);
     1480  c = strrchr(fullpath, '/');
     1481  len = sl_strlen (c);
     1482
     1483  if (c == fullpath)
     1484    {
     1485      if (len <= 1)
     1486        retval = sh_util_strdup(c);
     1487      else
     1488        retval = sh_util_strdup(++c);
     1489    }
     1490  else
     1491    {
     1492      if (len > 1)
     1493        {
     1494          retval = sh_util_strdup(++c);
     1495        }
     1496      else
     1497        {
     1498          /* input ends in '/' */
     1499          tmp = sh_util_strdup(fullpath);
     1500          tmp[strlen(tmp)-1] = '\0';
     1501          retval = sh_util_basename(tmp);
     1502          SH_FREE(tmp);
     1503        }
     1504    }
    14471505
    14481506  SL_RETURN(retval, _("sh_util_basename"));
    1449 }
    1450 
    1451 /* returns freshly allocated memory, return value should be free'd
    1452  */
    1453 char * sh_util_filename(char * fullpath)
    1454 {
    1455   char * retval;
    1456   char * c;
    1457   size_t i;
    1458 
    1459   SL_ENTER(_("sh_util_filename"));
    1460 
    1461   ASSERT_RET ((fullpath != NULL), _("fullpath != NULL"), (NULL))
    1462 
    1463   c = strrchr(fullpath, '/');
    1464   i = sl_strlen (c);
    1465   if (i <= 1) SL_RETURN(NULL, _("sh_util_filename")); /* ends in '/' */
    1466   ++c;
    1467   --i;
    1468 
    1469   retval = SH_ALLOC(i + 1);
    1470 
    1471   (void) sl_strlcpy (retval, c, i+1);
    1472 
    1473   SL_RETURN(retval, _("sh_util_filename"));
    14741507}
    14751508
     
    14841517  char          oct[32];
    14851518  char          format[16];
     1519  size_t        len;
    14861520
    14871521  SL_ENTER(_("sh_util_safe_name"));
     
    15001534  */
    15011535
     1536  len = sl_strlen(name);
     1537  p   = name;
     1538
    15021539#ifdef SH_USE_XML
    1503   retval = SH_ALLOC(6 * sl_strlen(name) + 2);
     1540  if (sl_ok_muls (6, len) && sl_ok_adds ((6*len), 2))
     1541    { retval = SH_ALLOC(6 * len + 2); }
     1542  else
     1543    {
     1544      /* return an allocated array
     1545       */
     1546      retval = SH_ALLOC(11);
     1547      (void) sl_strlcpy(retval, _("(overflow)"), 11);
     1548      SL_RETURN(retval, _("sh_util_safe_name"));
     1549    }
    15041550#else
    1505   retval = SH_ALLOC(4 * sl_strlen(name) + 2);
     1551  if (sl_ok_muls (4, len) && sl_ok_adds ((4*len), 2))
     1552    { retval = SH_ALLOC(4 * len + 2); }
     1553  else
     1554    {
     1555      /* return an allocated array
     1556       */
     1557      retval = SH_ALLOC(11);
     1558      (void) sl_strlcpy(retval, _("(overflow)"), 11);
     1559      SL_RETURN(retval, _("sh_util_safe_name"));
     1560    }
    15061561#endif
    15071562
    15081563  (void) sl_strncpy(format, _("%c%03o"), 16);
    1509 
    1510   p = name;
    15111564
    15121565  while (*p != '\0') {
     
    16131666char * sh_util_strconcat (const char * arg1, ...)
    16141667{
    1615   size_t    length;
     1668  size_t    length, l2;
    16161669  char    * s;
    16171670  char    * strnew;
     
    16281681  while (s != NULL)
    16291682    {
    1630       length = length + sl_strlen (s);
     1683      l2 = sl_strlen (s);
     1684      if (sl_ok_adds(length, l2))
     1685        length += l2;
     1686      else
     1687        SL_RETURN(NULL, _("sh_util_strconcat"));
    16311688      s = va_arg (vl, char * );
    16321689    }
    16331690  va_end (vl);
    16341691
    1635   strnew = SH_ALLOC( length + 2 );
     1692  if (sl_ok_adds(length, 2))
     1693    strnew = SH_ALLOC( length + 2 );
     1694  else
     1695    SL_RETURN(NULL, _("sh_util_strconcat"));
     1696
    16361697  strnew[0] = '\0';
    16371698
     
    16801741  if (status != 0 && status != REG_NOMATCH)
    16811742    {
    1682       errbuf = SH_ALLOC(BUFSIZ+2);
     1743      errbuf = SH_ALLOC(BUFSIZ);
    16831744      (void) regerror(status, &preg, errbuf, BUFSIZ);
    1684       errbuf[BUFSIZ] = '\0';
     1745      errbuf[BUFSIZ-1] = '\0';
    16851746      sh_error_handle ((-1), FIL__, __LINE__, status, MSG_E_REGEX,
    16861747                       errbuf, regex_str);
  • trunk/src/sh_utmp.c

    r30 r34  
    440440  memcpy (&c, &bar[2], 1);
    441441  memcpy (&d, &bar[3], 1);
    442   sprintf(foo, "%d.%d.%d.%d",                          /* known to fit  */
     442  sprintf(foo, _("%d.%d.%d.%d"),                        /* known to fit  */
    443443          (int) a, (int) b, (int) c, (int) d);
    444444  return foo;
     
    10641064                      ))
    10651065      sh_utmp_addlogin (ut);
    1066     /*************************************************
    1067     printf("%8s | %10s | %10s | %3d %5d | %16s | %ld\n",
    1068            ut->ut_name, ut->ut_id, ut->ut_line,
    1069            (int) ut->ut_type, (int) ut->ut_pid,
    1070            ut->ut_host, ut->ut_time);
    1071     ***************************************************/
    10721066    ++this_read;
    10731067  }
  • trunk/src/slib.c

    r29 r34  
    77#include <string.h>
    88#include <limits.h>
     9#ifdef HAVE_STDINT_H
     10/* for SIZE_MAX */
     11#include <stdint.h>
     12#endif
    913
    1014#include <unistd.h>
     
    25062510 * ---------------------------------------------------------------- */
    25072511
     2512#ifndef SIZE_MAX
     2513#define SIZE_MAX              (4294967295U)
     2514#endif
     2515
    25082516int sl_ok_muli (int a, int b) /* a*b */
    25092517{
    2510   if (a >= (INT_MIN / b) && a <= (INT_MAX / b))
     2518  if ((b == 0) || (a >= (INT_MIN / b) && a <= (INT_MAX / b)))
     2519    return SL_TRUE; /* no overflow */
     2520  return SL_FALSE;
     2521}
     2522
     2523int sl_ok_muls (size_t a, size_t b) /* a*b */
     2524{
     2525  if ((b == 0) || (a <= (SIZE_MAX / b)))
    25112526    return SL_TRUE; /* no overflow */
    25122527  return SL_FALSE;
     
    25402555}
    25412556
     2557int sl_ok_adds (size_t a, size_t b) /* a+b */
     2558{
     2559  if (a <= (SIZE_MAX - b))
     2560    return SL_TRUE; /* no overflow */
     2561  else
     2562    return SL_FALSE;
     2563}
     2564
    25422565int sl_ok_subi (int a, int b) /* a-b */
    25432566{
  • trunk/src/yulectl.c

    r22 r34  
    392392      return;
    393393    }
    394   if (NULL == fgets(message2, SH_MAXMSG, fp))
     394  if (NULL == fgets(message2, sizeof(message2), fp))
    395395    {
    396396      fprintf (stderr,
     
    545545      else
    546546        {
    547           fprintf(stderr, "ERROR: this command requires a hostname\n");
     547          fprintf(stderr, _("ERROR: this command requires a hostname\n"));
    548548          usage(argv[0]);
    549549          return (EXIT_FAILURE);
     
    567567      return (EXIT_FAILURE);
    568568    }
     569#ifdef HAVE_VSNPRINTF
     570  snprintf(sockname, size, _("%s/%s.sock"), clientcd, CLIENT);
     571#else
    569572  sprintf(sockname, _("%s/%s.sock"), clientcd, CLIENT);
    570 
     573#endif
    571574
    572575  /* Make the socket.
  • trunk/test/testrc_2.in

    r22 r34  
    4040file = /tmp
    4141file = /etc
     42
     43dir=1/usr
    4244
    4345[EventSeverity]
  • trunk/test/testrun_2.sh

    r30 r34  
    239239        ORIGINAL_4="# SetClientTimeLimit=1800"
    240240        REPLACEMENT_4="SetClientTimeLimit=20"
     241        # takes too much time if we leave that in
     242        ORIGINAL_5="dir=1"
     243        REPLACEMENT_5="#dir=1"
    241244        ex $RCFILE <<EOF
    242245%s/${ORIGINAL_1}/${REPLACEMENT_1}/g
     
    244247%s/${ORIGINAL_3}/${REPLACEMENT_3}/g
    245248%s/${ORIGINAL_4}/${REPLACEMENT_4}/g
     249%s/${ORIGINAL_5}/${REPLACEMENT_5}/g
    246250wq
    247251EOF
Note: See TracChangeset for help on using the changeset viewer.