Changeset 68 for trunk/src/sh_hash.c


Ignore:
Timestamp:
Oct 30, 2006, 12:03:44 AM (18 years ago)
Author:
rainer
Message:

Update trunk to samhain 2.3

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/sh_hash.c

    r40 r68  
    285285  char           * fullpath;
    286286  char           * linkpath;
     287  char           * attr_string;
    287288  int              visited;
    288289  int              reported;
     
    337338#endif
    338339
     340#define REC_FLAGS_ATTR (1<<8)
     341#define REC_FLAGS_MASK 0xFF00
    339342
    340343/**************************************************************
     
    389392  theFile->hardlinks = p->theFile.hardlinks;
    390393
     394  if (p->attr_string)
     395    theFile->attr_string = sh_util_strdup(p->attr_string);
     396  else
     397    theFile->attr_string = NULL;
     398
    391399  SL_RETURN((theFile), _("sh_hash_create_ft"));
    392400}
     
    440448  SH_FREE(tmp);
    441449  SH_FREE(str);
     450  if (theFile->attr_string)
     451    SH_FREE(theFile->attr_string);
    442452  SH_FREE(theFile);
    443453  return 0;
     
    517527                                   MSG_FI_MISS2, tmp, str);
    518528                  SH_FREE(str);
     529                  if (theFile->attr_string)
     530                    SH_FREE(theFile->attr_string);
    519531                  SH_FREE(theFile);
    520532
     
    532544              theFile = sh_hash_create_ft (p, fileHash);
    533545              sh_hash_pushdata (theFile, fileHash);
     546              if (theFile->attr_string)
     547                SH_FREE(theFile->attr_string);
    534548              SH_FREE(theFile);
    535549            }
     
    554568                  p->linkpath = NULL;
    555569                }
     570              if (p->attr_string)
     571                {
     572                  SH_FREE(p->attr_string);
     573                  p->attr_string = NULL;
     574                }
    556575              SH_FREE(p);
    557576              p = NULL;
     
    576595                           MSG_FI_MISS2, tmp, str);
    577596          SH_FREE(str);
     597          if (theFile->attr_string)
     598            SH_FREE(theFile->attr_string);
    578599          SH_FREE(theFile);
    579600
     
    635656      SH_FREE(p->linkpath);
    636657      p->linkpath = NULL;
     658    }
     659  if (p->attr_string)
     660    {
     661      SH_FREE(p->attr_string);
     662      p->attr_string = NULL;
    637663    }
    638664  SH_FREE(p);
     
    696722              if(p->linkpath)
    697723                SH_FREE(p->linkpath);
     724              if(p->attr_string)
     725                SH_FREE(p->attr_string);
    698726              memcpy(p, s, sizeof(sh_file_t));
    699727              p->next = q;
     
    868896  char * fullpath;
    869897  char * linkpath;
     898  char * attr_string = NULL;
    870899  char * tmp;
    871900
     
    908937#endif
    909938
    910   if (ft.mark != REC_MAGIC)
     939  if ((ft.mark & ~REC_FLAGS_MASK) != REC_MAGIC)
    911940    {
    912941      SH_FREE(p);
     
    967996    linkpath[len-2] = '\0';
    968997
     998  /* Read next record -- Part Four -- attr_string
     999   */
     1000  if ((ft.mark & REC_FLAGS_ATTR) != 0)
     1001    {
     1002      i =  sh_hash_getline (sh_fin_fd, line, size);
     1003      if (i < 0 )
     1004        {
     1005          SH_FREE(line);
     1006          SH_FREE(fullpath);
     1007          SH_FREE(linkpath);
     1008          SH_FREE(p);
     1009          dlog(1, FIL__, __LINE__,
     1010               _("There is a corrupt record in the file signature database: %s\nThe attribute string is missing.\n"),
     1011               (NULL == file_path('D', 'R'))? _("(null)"):file_path('D', 'R'));
     1012          sh_error_handle ((-1), FIL__, __LINE__, 0, MSG_P_NODATA,
     1013                           ( (NULL == file_path('D', 'R')) ? _("(null)") :
     1014                             file_path('D', 'R'))
     1015                           );
     1016          aud_exit (FIL__, __LINE__,EXIT_FAILURE);
     1017        }
     1018
     1019      tmp = unquote_string (line);
     1020
     1021      len = sl_strlen(tmp)+1;
     1022      attr_string = SH_ALLOC(len);
     1023      (void) sl_strlcpy (attr_string, tmp, len);
     1024      if (tmp)
     1025        SH_FREE(tmp);
     1026      if (attr_string[len-2] == '\n')
     1027        attr_string[len-2] = '\0';
     1028    }
     1029
    9691030  /* Read next record -- Part Four -- Decode
    9701031   */
     
    9861047      sh_do_decode(linkpath, sl_strlen(linkpath));
    9871048    }
     1049  if ((ft.mark & REC_FLAGS_ATTR) != 0)
     1050    { 
     1051      sh_do_decode(attr_string, sl_strlen(attr_string));
     1052    }
    9881053#endif
    9891054
     
    9951060  p->fullpath  = fullpath;
    9961061  p->linkpath  = linkpath;
     1062
     1063  p->attr_string = attr_string;
    9971064
    9981065  /* set to an invalid value
     
    13131380  char *  fullpath = NULL;
    13141381  char *  linkpath = NULL;
     1382  char *  attr_string = NULL;
    13151383
    13161384  char * line = NULL;
     
    15181586    }
    15191587
     1588  if (buf != NULL && buf->attr_string != NULL)
     1589    {
     1590      old_len = sl_strlen(buf->attr_string);
     1591#if defined(SH_STEALTH)
     1592      sh_do_encode(buf->attr_string, old_len);
     1593#endif
     1594      tmp = quote_string(buf->attr_string);
     1595      if (tmp)
     1596        {
     1597          attr_string = tmp;
     1598          tmp = NULL;
     1599        }
     1600#if defined(SH_STEALTH)
     1601      sh_do_decode(buf->attr_string, old_len);
     1602#endif
     1603    }
     1604
     1605
    15201606  if (buf != NULL) {
    15211607    p.mark = REC_MAGIC;
     1608    if (attr_string)
     1609      p.mark |= REC_FLAGS_ATTR;
    15221610    sl_strlcpy(p.c_mode,   buf->c_mode,   11);
    15231611    sl_strlcpy(p.c_group,  buf->c_group,  GROUP_MAX+1);
     
    16401728      sl_write_line (pushdata_fd, fullpath,    sl_strlen(fullpath));
    16411729      sl_write_line (pushdata_fd, linkpath,    sl_strlen(linkpath));
     1730      if (attr_string)
     1731        sl_write_line (pushdata_fd, attr_string,    sl_strlen(attr_string));
    16421732    } else {
    16431733      fwrite (&p, sizeof(sh_filestore_t), 1, stdout);
    16441734      printf ("%s\n", fullpath);
    16451735      printf ("%s\n", linkpath);
     1736      if (attr_string)
     1737        printf ("%s\n", attr_string);
    16461738    }
    16471739
     
    16561748  SH_FREE(fullpath);
    16571749  SH_FREE(linkpath);
     1750  if (attr_string)
     1751    SH_FREE(attr_string);
    16581752
    16591753  SL_RET0(_("sh_hash_pushdata"));
     
    16891783          f = sh_hash_create_ft (p, fileHash);
    16901784          sh_hash_pushdata (f, fileHash);
     1785          if (f->attr_string)
     1786            SH_FREE(f->attr_string);
    16911787          SH_FREE(f);
    16921788        }
     
    17571853  tmpFile->mtime = p->theFile.mtime;
    17581854  tmpFile->ctime = p->theFile.ctime;
     1855
     1856  tmpFile->attr_string = NULL;
    17591857  return 0;
    17601858}
     
    18571955  int         i = 0;
    18581956  char      * p;
     1957
     1958  tmpFile.attr_string = NULL;
    18591959
    18601960  sl_strlcpy(tmpFile.fullpath, key, PATH_MAX);
     
    19792079  char * fullpath;
    19802080  char * linkpath;
     2081  char * attr_string = NULL;
    19812082
    19822083  SL_ENTER(_("sh_hash_push_int"));
     
    19852086
    19862087  p.mark = REC_MAGIC;
     2088  if (buf->attr_string)
     2089    p.mark |= REC_FLAGS_ATTR;
    19872090  sl_strlcpy(p.c_mode,   buf->c_mode,   11);
    19882091  sl_strlcpy(p.c_group,  buf->c_group,  GROUP_MAX+1);
     
    20152118  fp->modi_mask = 0L;
    20162119
     2120  if (buf->attr_string)
     2121    attr_string = sh_util_strdup(buf->attr_string);
     2122  fp->attr_string = attr_string;
     2123
    20172124  len = sl_strlen(buf->fullpath);
    20182125  if (len <= MAX_PATH_STORE)
     
    22352342        }
    22362343    }
     2344
     2345  if (theFile->attr_string)
     2346    {
     2347      tmp_lnk     = sh_util_safe_name(theFile->attr_string);
     2348      if (tmp_lnk)
     2349        {
     2350          if (is_new)
     2351            sl_snprintf(tmp, SH_BUFSIZE, _("acl_new=\"%s\" "), tmp_lnk);
     2352          else
     2353            sl_snprintf(tmp, SH_BUFSIZE, _("acl_old=\"%s\" "), tmp_lnk);
     2354          SH_FREE(tmp_lnk);
     2355          sl_strlcat(msg, tmp, SH_BUFSIZE);
     2356        }
     2357    }
     2358
    22372359 
    22382360  SH_FREE(tmp);
     
    23872509    }
    23882510 
     2511  if (theFile->attr_string)
     2512    {
     2513      tmp_lnk     = sh_util_safe_name(theFile->attr_string);
     2514      if (tmp_lnk)
     2515        {
     2516          if (is_new)
     2517            sl_snprintf(tmp, SH_BUFSIZE, _(", acl_new=<%s> "), tmp_lnk);
     2518          else
     2519            sl_snprintf(tmp, SH_BUFSIZE, _(", acl_old=<%s> "), tmp_lnk);
     2520          SH_FREE(tmp_lnk);
     2521          sl_strlcat(msg, tmp, SH_BUFSIZE);
     2522        }
     2523    }
     2524
    23892525  SH_FREE(tmp);
    23902526  return (msg);
     
    26052741
    26062742  if ( (  (theFile->mode != p->theFile.mode)
     2743#if defined(USE_ACL) || defined(USE_XATTR)
     2744          || ( (sh_unix_check_selinux|sh_unix_check_acl) &&
     2745               (
     2746                (theFile->attr_string == NULL && p->attr_string != NULL) ||
     2747                (theFile->attr_string != NULL && p->attr_string == NULL) ||
     2748                (theFile->attr_string != NULL && 0 != strcmp(theFile->attr_string, p->attr_string))
     2749                )
     2750               )
     2751#endif
    26072752#if defined(__linux__) || defined(HAVE_STAT_FLAGS)
    26082753          || (theFile->attributes != p->theFile.attributes)
    26092754#endif
    2610         )
     2755          )
    26112756       && (theFile->check_mask & MODI_MOD) != 0)
    26122757    {
     
    26522797    }
    26532798 
    2654   if ( theFile->atime != (time_t) p->theFile.atime &&
    2655        (theFile->check_mask & MODI_ATM) != 0)
     2799  if ( (theFile->check_mask & MODI_ATM) != 0 &&
     2800       theFile->atime != (time_t) p->theFile.atime)
    26562801    {
    26572802      modi_mask |= MODI_ATM;
     
    27052850      if (   ((modi_mask & MODI_MOD) != 0)
    27062851#if defined(HAVE_LIBPRELUDE) && defined(HAVE_LIBPRELUDE_9)
    2707           || ((modi_mask & MODI_USR) != 0)
    2708           || ((modi_mask & MODI_GRP) != 0)
     2852             || ((modi_mask & MODI_USR) != 0)
     2853             || ((modi_mask & MODI_GRP) != 0)
    27092854#endif
    27102855             )
     
    27292874          sl_snprintf(tmp, SH_BUFSIZE,
    27302875                      _("mode_old=\"%s\" mode_new=\"%s\" imode_old=\"%ld\" imode_new=\"%ld\" "),
    2731 #else
    2732                       sl_snprintf(tmp, SH_BUFSIZE, _("mode_old=<%s>, mode_new=<%s>, "),
    2733 #endif
    2734                       p->theFile.c_mode, theFile->c_mode
     2876                      p->theFile.c_mode, theFile->c_mode,
     2877                      (long) p->theFile.mode, (long) theFile->mode);
     2878#else
     2879          sl_snprintf(tmp, SH_BUFSIZE, _("mode_old=<%s>, mode_new=<%s>, "),
     2880                      p->theFile.c_mode, theFile->c_mode);
     2881#endif
     2882#endif
     2883          sl_strlcat(msg, tmp, SH_BUFSIZE);
     2884
     2885#if defined(USE_ACL) || defined(USE_XATTR)
     2886          if (theFile->attr_string != NULL || p->attr_string != NULL)
     2887            {
     2888              sl_snprintf(tmp, SH_BUFSIZE,
    27352889#ifdef SH_USE_XML
    2736                       , (long) p->theFile.mode, (long) theFile->mode
    2737 #endif
    2738                       );
    2739 #endif
    2740           sl_strlcat(msg, tmp, SH_BUFSIZE);
     2890                          _("acl_old=\"%s\" acl_new=\"%s\" "),
     2891#else
     2892                          _("acl_old=<%s>, acl_new=<%s>, "),
     2893#endif
     2894                          (p->attr_string)       ? p->attr_string       : _("none"),
     2895                          (theFile->attr_string) ? theFile->attr_string : _("none"));
     2896             
     2897              sl_strlcat(msg, tmp, SH_BUFSIZE);
     2898            }
     2899#endif
     2900
    27412901#ifdef REPLACE_OLD
    27422902          if ((modi_mask & MODI_MOD) != 0)
     
    27542914                  p->theFile.attributes = theFile->attributes;
    27552915#endif
     2916#if defined(USE_ACL) || defined(USE_XATTR)
     2917                  if      (p->attr_string == NULL && theFile->attr_string != NULL)
     2918                    { p->attr_string = sh_util_strdup (theFile->attr_string); }
     2919                  else if (p->attr_string != NULL && theFile->attr_string == NULL)
     2920                    { SH_FREE(p->attr_string); p->attr_string = NULL; }
     2921                  else if (theFile->attr_string != NULL && p->attr_string != NULL)
     2922                    {
     2923                      if (0 != strcmp(theFile->attr_string, p->attr_string))
     2924                        {
     2925                          SH_FREE(p->attr_string);
     2926                          p->attr_string = sh_util_strdup (theFile->attr_string);
     2927                        }
     2928                    }
     2929#endif
    27562930                }
    27572931            }
     
    30393213              sl_strlcpy(theFile->c_attributes, p->theFile.c_attributes, 16);
    30403214              theFile->attributes =  p->theFile.attributes;
     3215#endif
     3216#if defined(USE_ACL) || defined(USE_XATTR)
     3217              if      (theFile->attr_string == NULL && p->attr_string != NULL)
     3218                { theFile->attr_string = sh_util_strdup (p->attr_string); }
     3219              else if (theFile->attr_string != NULL && p->attr_string == NULL)
     3220                { SH_FREE(theFile->attr_string); theFile->attr_string = NULL; }
     3221              else if (theFile->attr_string != NULL && p->attr_string != NULL)
     3222                {
     3223                  if (0 != strcmp(theFile->attr_string, p->attr_string))
     3224                    {
     3225                      SH_FREE(theFile->attr_string);
     3226                      theFile->attr_string = sh_util_strdup (p->attr_string);
     3227                    }
     3228                }
    30413229#endif
    30423230             
     
    30843272              p->theFile.attributes = theFile->attributes;
    30853273#endif
     3274#if defined(USE_ACL) || defined(USE_XATTR)
     3275              if      (p->attr_string == NULL && theFile->attr_string != NULL)
     3276                { p->attr_string = sh_util_strdup (theFile->attr_string); }
     3277              else if (p->attr_string != NULL && theFile->attr_string == NULL)
     3278                { SH_FREE(p->attr_string); p->attr_string = NULL; }
     3279              else if (theFile->attr_string != NULL && p->attr_string != NULL)
     3280                {
     3281                  if (0 != strcmp(theFile->attr_string, p->attr_string))
     3282                    {
     3283                      SH_FREE(p->attr_string);
     3284                      p->attr_string = sh_util_strdup (theFile->attr_string);
     3285                    }
     3286                }
     3287#endif
    30863288             
    30873289              if (theFile->c_mode[0] == 'l')
     
    32163418  char * tmp;
    32173419  char   str[81];
     3420  size_t i;
    32183421
    32193422  if (ListWithDelimiter == S_TRUE)
     
    32703473      tmp = sh_util_safe_name(p->linkpath);
    32713474      if (ListWithDelimiter == S_TRUE)
    3272         printf(_(" %s\n"), tmp);
     3475        printf(_(" %s"), tmp);
    32733476      else
    3274         printf(_(" -> %s\n"), tmp);
     3477        printf(_(" -> %s"), tmp);
    32753478      SH_FREE(tmp);
    32763479    }
    3277   else
    3278     printf("\n");
     3480  if (ListWithDelimiter == S_TRUE)
     3481    putchar(',');
     3482
     3483  if (p->attr_string)
     3484    {
     3485      tmp = sh_util_safe_name(p->attr_string);
     3486      if (ListWithDelimiter == S_TRUE) {
     3487        for (i = 0; i < strlen(tmp); ++i)
     3488          if (tmp[i] == ',') tmp[i] = ';';
     3489      }
     3490      printf(_(" %s"), tmp);
     3491      SH_FREE(tmp);
     3492    }
     3493  else
     3494    {
     3495      if (ListWithDelimiter == S_TRUE)
     3496        printf(_(" no_attr"));
     3497    }
     3498  putchar('\n');
    32793499
    32803500  return;
Note: See TracChangeset for help on using the changeset viewer.