Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/sh_unix.c

    r20 r30  
    127127unsigned long mask_USER0        = MASK_USER_;
    128128unsigned long mask_USER1        = MASK_USER_;
     129unsigned long mask_USER2        = MASK_USER_;
     130unsigned long mask_USER3        = MASK_USER_;
     131unsigned long mask_USER4        = MASK_USER_;
    129132unsigned long mask_ALLIGNORE    = MASK_ALLIGNORE_;
    130133unsigned long mask_ATTRIBUTES   = MASK_ATTRIBUTES_;
     
    142145  mask_USER0        = MASK_USER_;
    143146  mask_USER1        = MASK_USER_;
     147  mask_USER2        = MASK_USER_;
     148  mask_USER3        = MASK_USER_;
     149  mask_USER4        = MASK_USER_;
    144150  mask_ALLIGNORE    = MASK_ALLIGNORE_;
    145151  mask_ATTRIBUTES   = MASK_ATTRIBUTES_;
     
    307313    *p = '0' + (u % 10);
    308314    u /= 10;
    309   } while (u);
    310   if (iisneg == 1) {
     315  } while (u && (p != str));
     316  if ((iisneg == 1) && (p != str)) {
    311317    --p;
    312318    *p = '-';
     
    323329extern int OnlyStderr;
    324330
    325 int safe_logger (int signal, int method, pid_t thepid)
     331int safe_logger (int signal, int method, char * details)
    326332{
    327333  int i = 0;
     
    331337  char  str[128];
    332338  char  * p;
    333 
     339 
    334340  char l0[64], l1[64], l2[64], l3[64];
    335341  char a0[32], a1[32], a2[32];
    336342  char e0[128];
    337343  char msg[128];
    338 
     344 
    339345  char * locations[] = { NULL, NULL, NULL, NULL, NULL };
    340346  char * envp[]      = { NULL, NULL };
    341347  char * argp[]      = { NULL, NULL, NULL, NULL, NULL };
    342 
     348 
     349  pid_t  thepid = getpid();
     350 
    343351  if ((sh.flag.isdaemon == S_FALSE) || (OnlyStderr == S_TRUE))
    344352    method = 1;
    345 
     353 
    346354  /* seems that solaris cc needs this way of initializing ...
    347355   */
     
    350358  locations[2] = l2;
    351359  locations[3] = l3;
    352 
     360 
    353361  envp[0] = e0;
    354 
     362 
    355363  argp[0] = a0;
    356364  argp[1] = a1;
    357365  argp[2] = a2;
    358 
    359   strcpy (l0, _("/usr/bin/logger"));                   /* known to fit  */
    360   strcpy (l1, _("/usr/sbin/logger"));                  /* known to fit  */
    361   strcpy (l2, _("/usr/ucb/logger"));                   /* known to fit  */
    362   strcpy (l3, _("/bin/logger"));                       /* known to fit  */
    363 
    364   strcpy (a0, _("logger"));                            /* known to fit  */
    365   strcpy (a1, _("-p"));                                /* known to fit  */
    366   strcpy (a2, _("daemon.alert"));                      /* known to fit  */
    367 
    368   strcpy (e0,                                          /* known to fit  */
    369           _("PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/ucb:/usr/local/bin"));
    370 
     366 
    371367  sl_strlcpy(msg, _("samhain["), 128);
    372368  p = safe_itoa((int) thepid, str, 128);
     
    375371  if (signal == 0)
    376372    {
    377       sl_strlcat(msg, _("]: out of memory"), 128);
     373      if (details == NULL) {
     374        sl_strlcat(msg, _("]: out of memory"), 128);
     375      } else {
     376        sl_strlcat(msg, _("]: "), 128);
     377        sl_strlcat(msg, details, 128);
     378      }
    378379    }
    379380  else
     
    393394    return 0;
    394395  }
     396
     397  sl_strlcpy (l0, _("/usr/bin/logger"), 64);
     398  sl_strlcpy (l1, _("/usr/sbin/logger"), 64);
     399  sl_strlcpy (l2, _("/usr/ucb/logger"), 64);
     400  sl_strlcpy (l3, _("/bin/logger"), 64);
     401
     402  sl_strlcpy (a0, _("logger"), 32);
     403  sl_strlcpy (a1, _("-p"), 32);
     404  sl_strlcpy (a2, _("daemon.alert"), 32);
     405
     406  sl_strlcpy (e0,
     407              _("PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/ucb:/usr/local/bin"),
     408              128);
     409
    395410  while (locations[i] != NULL) {
    396411    status = stat(locations[i], &buf);
     
    414429}
    415430
     431void safe_fatal (int signal, int method, char * details,
     432                char * file, int line)
     433{
     434  char msg[128];
     435  char str[128];
     436  char * p;
     437  p = safe_itoa((int) line, str, 128);
     438  sl_strlcpy(msg, _("FATAL: "), 128);
     439  sl_strlcat(msg, file, 128);
     440  sl_strlcat(msg, ": ", 128);
     441  if (p && (*p)) {
     442    sl_strlcat(msg, p   , 128);
     443    sl_strlcat(msg, ": ", 128);
     444  }
     445  sl_strlcat(msg, details, 128);
     446  safe_logger (signal, method, msg);
     447  _exit(EXIT_FAILURE);
     448}
    416449
    417450extern char sh_sig_msg[64];
     
    451484        {
    452485          chdir ("/");
    453           safe_logger (mysignal, 0, getpid());
     486          safe_logger (mysignal, 0, NULL);
    454487        }
    455488      _exit(mysignal);
     
    504537    memset (skey, '\0', sizeof(sh_key_t));
    505538  if (immediate_exit_fast < 2)
    506     safe_logger (mysignal, 0, getpid());
     539    safe_logger (mysignal, 0, NULL);
    507540  _exit(mysignal);
    508541#else
     
    518551      close_ipc ();
    519552#endif
    520       safe_logger (mysignal, 0, getpid());
     553      safe_logger (mysignal, 0, NULL);
    521554      chdir ("/");
    522555      raise(SIGFPE);
     
    819852/* checksum the own binary
    820853 */
    821 int sh_unix_self_hash (char * c)
     854int sh_unix_self_hash (const char * c)
    822855{
    823856  char message[512];
     
    891924
    892925/* added    Tue Feb 22 10:36:44 NFT 2000 Rainer Wichmann            */
    893 static int tf_add_trusted_user_int(char * c)
     926static int tf_add_trusted_user_int(const char * c)
    894927{
    895928  register struct passwd *          w;
     
    919952}
    920953
    921 int tf_add_trusted_user(char * c)
     954int tf_add_trusted_user(const char * c)
    922955{
    923956  int    i;
     
    12291262  char ** env1;
    12301263  int   envlen = 0;
     1264  size_t len;
    12311265
    12321266  SL_ENTER(_("sh_unix_copyenv"));
     
    12481282  envlen = 0;
    12491283
    1250   while (env0 != NULL && env0[envlen] != NULL) {
    1251     env1[envlen] = malloc (strlen(env0[envlen]) + 1); /* only once */
     1284  while (env0 != NULL && env0[envlen] != NULL) {
     1285    len = strlen(env0[envlen]) + 1;
     1286    env1[envlen] = malloc (len); /* only once */
    12521287    if (env1[envlen] == NULL)
    12531288      {
     
    12551290        SL_RET0(_("sh_unix_copyenv"));
    12561291      }
    1257     strcpy(env1[envlen], env0[envlen]);                /* known to fit  */
     1292    sl_strlcpy(env1[envlen], env0[envlen], len);
    12581293    ++envlen;
    12591294  }
     
    14161451#include <arpa/inet.h>
    14171452
     1453char * sh_unix_h_name (struct hostent * host_entry)
     1454{
     1455        char ** p;
     1456        if (strchr(host_entry->h_name, '.')) {
     1457                return host_entry->h_name;
     1458        } else {
     1459                for (p = host_entry->h_aliases; *p; ++p) {
     1460                        if (strchr(*p, '.'))
     1461                                return *p;
     1462                }
     1463        }
     1464        return host_entry->h_name;
     1465}
     1466
    14181467/* uname() on FreeBSD is broken, because the 'nodename' buf is too small
    14191468 * to hold a valid (leftmost) domain label.
     
    14351484
    14361485  (void) uname (&buf);
    1437 
     1486  /* flawfinder: ignore */ /* ff bug, ff sees system() */
    14381487  sl_strlcpy (sh.host.system,  buf.sysname, SH_MINIBUF);
    14391488  sl_strlcpy (sh.host.release, buf.release, SH_MINIBUF);
     
    14861535  else
    14871536    {
    1488       sl_strlcpy (sh.host.name, he1->h_name, SH_PATHBUF);
     1537      sl_strlcpy (sh.host.name, sh_unix_h_name(he1), SH_PATHBUF);
    14891538    }
    14901539 
     
    15341583  if (he1 != NULL)
    15351584    {
    1536       sl_strlcpy (sh.host.name, he1->h_name, SH_PATHBUF);
     1585      sl_strlcpy (sh.host.name, sh_unix_h_name(he1), SH_PATHBUF);
    15371586    }
    15381587  else
     
    16391688          aud_exit(FIL__, __LINE__, EXIT_FAILURE);
    16401689        }
     1690      /* flawfinder: ignore */
    16411691      return (chroot(chroot_dir));
    16421692    }
     
    19231973}
    19241974
    1925 int sh_unix_settimeserver (char * address)
     1975int sh_unix_settimeserver (const char * address)
    19261976{
    19271977
     
    20962146/* whether to use localtime for file timesatams in logs
    20972147 */
    2098 int sh_unix_uselocaltime (char * c)
     2148int sh_unix_uselocaltime (const char * c)
    20992149{
    21002150  int i;
     
    27322782}
    27332783
    2734 int sh_unix_set_io_limit (char * c)
     2784int sh_unix_set_io_limit (const char * c)
    27352785{
    27362786  long val;
     
    27722822  if (tmpFile.size < fbuf->st_size)
    27732823    {
    2774       strcpy(fileHash,                         /* known to fit */
    2775              sh_tiger_generic_hash (filename, TIGER_FD, tmpFile.size,
    2776                                     alert_timeout));
     2824      sl_strlcpy(fileHash,
     2825                sh_tiger_generic_hash (filename, TIGER_FD, tmpFile.size,
     2826                                       alert_timeout),
     2827                KEY_LEN+1);
    27772828
    27782829      /* return */
     
    27812832
    27822833 out:
    2783   strcpy(fileHash,                              /* known to fit */
    2784          _("000000000000000000000000000000000000000000000000"));
     2834  sl_strlcpy(fileHash,
     2835             _("000000000000000000000000000000000000000000000000"),
     2836             KEY_LEN+1);
    27852837  SL_RETURN( -1, _("sh_unix_checksum_size"));
    27862838}
     
    29032955    {
    29042956      if (fileHash != NULL)
    2905         strcpy(fileHash,                              /* known to fit */
    2906                _("000000000000000000000000000000000000000000000000"));
     2957        sl_strlcpy(fileHash,
     2958                   _("000000000000000000000000000000000000000000000000"),
     2959                   KEY_LEN+1);
    29072960    }
    29082961 
     
    29202973          if ((theFile->check_mask & MODI_CHK) == 0)
    29212974            {
    2922               strcpy(fileHash,                         /* known to fit */
    2923                      _("000000000000000000000000000000000000000000000000"));
     2975              sl_strlcpy(fileHash,
     2976                         _("000000000000000000000000000000000000000000000000"),
     2977                         KEY_LEN+1);
    29242978            }
    29252979          else if ((theFile->check_mask & MODI_PREL) != 0 &&
     
    29292983              if (0 != sh_prelink_run (theFile->fullpath,
    29302984                                       fileHash, alert_timeout))
    2931                 strcpy(fileHash,                       /* known to fit */
    2932                        _("000000000000000000000000000000000000000000000000"));
     2985                sl_strlcpy(fileHash,
     2986                           _("000000000000000000000000000000000000000000000000"),
     2987                           KEY_LEN+1);
    29332988            }
    29342989          else
    29352990            {
    29362991              tiger_fd = rval_open;
    2937               strcpy(fileHash,                         /* known to fit */
    2938                      sh_tiger_generic_hash (theFile->fullpath, TIGER_FD, 0,
    2939                                             alert_timeout));
     2992              sl_strlcpy(fileHash,
     2993                         sh_tiger_generic_hash (theFile->fullpath,
     2994                                                TIGER_FD, 0,
     2995                                                alert_timeout),
     2996                         KEY_LEN+1);
    29402997              if ((theFile->check_mask & MODI_SGROW) != 0)
    29412998                {
     
    29603017          if ((theFile->check_mask & MODI_CHK) == 0)
    29613018            {
    2962               strcpy(fileHash,                         /* known to fit */
    2963                      _("000000000000000000000000000000000000000000000000"));
     3019              sl_strlcpy(fileHash,
     3020                         _("000000000000000000000000000000000000000000000000"),
     3021                         KEY_LEN+1);
    29643022            }
    29653023          else if (policy == SH_LEVEL_PRELINK &&
     
    29693027              if (0 != sh_prelink_run (theFile->fullpath,
    29703028                                       fileHash, alert_timeout))
    2971                 strcpy(fileHash,                       /* known to fit */
    2972                        _("000000000000000000000000000000000000000000000000"));
     3029                sl_strlcpy(fileHash,
     3030                           _("000000000000000000000000000000000000000000000000"),
     3031                           KEY_LEN+1);
    29733032            }
    29743033          else
     
    31453204      linknamebuf = SH_ALLOC(PATH_MAX);
    31463205
     3206      /* flawfinder: ignore */
    31473207      linksize    = readlink (theFile->fullpath, linknamebuf, PATH_MAX-1);
    31483208
     
    31603220          SH_FREE(tmp2);
    31613221          SH_FREE(linknamebuf);
     3222          theFile->linkpath[0] = '-';
     3223          theFile->linkpath[1] = '\0';
    31623224          SL_RETURN((-1),_("sh_unix_getinfo"));
    31633225        }
     
    39824044    {
    39834045#ifdef WITH_TPT
    3984       sl_snprintf(str, 128, _("file: %s line: %d page: %d"),
     4046      sl_snprintf(str, sizeof(str), _("file: %s line: %d page: %d"),
    39854047                  page_list->file, page_list->line, i+1);
    39864048      sh_error_handle(SH_ERR_INFO, FIL__, __LINE__, i, MSG_E_SUBGEN,
     
    39904052      ++i;
    39914053    }
    3992   sl_snprintf(str, 128, _("%d pages locked"), i);
     4054  sl_snprintf(str, sizeof(str), _("%d pages locked"), i);
    39934055  sh_error_handle(SH_ERR_INFO, FIL__, __LINE__, i, MSG_E_SUBGEN,
    39944056                  str, _("sh_unix_count_mlock"));
Note: See TracChangeset for help on using the changeset viewer.