libextractor

GNU libextractor
Log | Files | Refs | Submodules | README | LICENSE

test_tar.c (5809B)


      1 /*
      2      This file is part of libextractor.
      3      Copyright (C) 2026 Vidyut Samanta and Christian Grothoff
      4 
      5      libextractor is free software; you can redistribute it and/or modify
      6      it under the terms of the GNU General Public License as published
      7      by the Free Software Foundation; either version 3, or (at your
      8      option) any later version.
      9 
     10      libextractor is distributed in the hope that it will be useful, but
     11      WITHOUT ANY WARRANTY; without even the implied warranty of
     12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13      General Public License for more details.
     14 
     15      You should have received a copy of the GNU General Public License
     16      along with libextractor; see the file COPYING.  If not, write to the
     17      Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     18      Boston, MA 02110-1301, USA.
     19 */
     20 /**
     21  * @file plugins/test_tar.c
     22  * @brief testcase for the tar plugin
     23  * @author Christian Grothoff
     24  */
     25 #include "platform.h"
     26 #include "test_lib.h"
     27 
     28 
     29 /**
     30  * Shorthand for a plain UTF-8 text solution.
     31  */
     32 #define TEXT_SOLUTION(type, value) \
     33         { (type), EXTRACTOR_METAFORMAT_UTF8, "text/plain", \
     34           (value), strlen (value) + 1, 0, 0, NULL }
     35 
     36 
     37 /**
     38  * Main function for the tar testcase.
     39  *
     40  * @param argc number of arguments (ignored)
     41  * @param argv arguments (ignored)
     42  * @return 0 on success
     43  */
     44 int
     45 main (int argc, char *argv[])
     46 {
     47   struct SolutionData tar_test_sol[] = {
     48     TEXT_SOLUTION (EXTRACTOR_METATYPE_MIMETYPE,
     49                    "application/x-tar"),
     50     TEXT_SOLUTION (EXTRACTOR_METATYPE_FORMAT,
     51                    "ustar"),
     52     /* seven members; the directory and the links count too */
     53     TEXT_SOLUTION (EXTRACTOR_METATYPE_ENTRY_COUNT,
     54                    "7"),
     55     /* four regular files of 44 bytes each */
     56     TEXT_SOLUTION (EXTRACTOR_METATYPE_UNCOMPRESSED_SIZE,
     57                    "176"),
     58     /* the newest member mtime, 1710506096 */
     59     TEXT_SOLUTION (EXTRACTOR_METATYPE_MODIFICATION_DATE,
     60                    "2024-03-15T12:34:56Z"),
     61     /* -- ownership, the point of the plugin -- */
     62     TEXT_SOLUTION (EXTRACTOR_METATYPE_OWNER_USER,
     63                    "forensic"),
     64     TEXT_SOLUTION (EXTRACTOR_METATYPE_OWNER_USER,
     65                    "root"),
     66     TEXT_SOLUTION (EXTRACTOR_METATYPE_OWNER_GROUP,
     67                    "analysts"),
     68     TEXT_SOLUTION (EXTRACTOR_METATYPE_OWNER_GROUP,
     69                    "root"),
     70     TEXT_SOLUTION (EXTRACTOR_METATYPE_OWNER_UID,
     71                    "1000"),
     72     TEXT_SOLUTION (EXTRACTOR_METATYPE_OWNER_UID,
     73                    "0"),
     74     TEXT_SOLUTION (EXTRACTOR_METATYPE_OWNER_GID,
     75                    "100"),
     76     TEXT_SOLUTION (EXTRACTOR_METATYPE_OWNER_GID,
     77                    "0"),
     78     /* -- the distinct permission bits -- */
     79     TEXT_SOLUTION (EXTRACTOR_METATYPE_PERMISSIONS,
     80                    "0755"),
     81     TEXT_SOLUTION (EXTRACTOR_METATYPE_PERMISSIONS,
     82                    "0644"),
     83     TEXT_SOLUTION (EXTRACTOR_METATYPE_PERMISSIONS,
     84                    "0777"),
     85     TEXT_SOLUTION (EXTRACTOR_METATYPE_PERMISSIONS,
     86                    "0600"),
     87     TEXT_SOLUTION (EXTRACTOR_METATYPE_PERMISSIONS,
     88                    "0640"),
     89     /* -- member names, including one reassembled from the ustar
     90        prefix field -- */
     91     TEXT_SOLUTION (EXTRACTOR_METATYPE_FILENAME,
     92                    "evidence/"),
     93     TEXT_SOLUTION (EXTRACTOR_METATYPE_FILENAME,
     94                    "evidence/notes.txt"),
     95     TEXT_SOLUTION (EXTRACTOR_METATYPE_FILENAME,
     96                    "evidence/script.sh"),
     97     TEXT_SOLUTION (EXTRACTOR_METATYPE_FILENAME,
     98                    "evidence/latest.txt"),
     99     TEXT_SOLUTION (EXTRACTOR_METATYPE_FILENAME,
    100                    "evidence/hardlink.txt"),
    101     TEXT_SOLUTION (EXTRACTOR_METATYPE_FILENAME,
    102                    "evidence/root-owned.txt"),
    103     TEXT_SOLUTION (EXTRACTOR_METATYPE_FILENAME,
    104                    "evidence/dir00/dir01/dir02/dir03/dir04/dir05/dir06/dir07"
    105                    "/dir08/dir09/dir10/dir11/dir12/dir13/dir14/deep.txt"),
    106     /* -- link targets -- */
    107     TEXT_SOLUTION (EXTRACTOR_METATYPE_TARGET_PATH,
    108                    "notes.txt"),
    109     TEXT_SOLUTION (EXTRACTOR_METATYPE_TARGET_PATH,
    110                    "evidence/notes.txt"),
    111     { 0, 0, NULL, NULL, 0, -1, 0, NULL }
    112   };
    113   /* The archive plugin's sample doubles as a second, independently
    114      produced input: it is a GNU-format tar made in 2002, so it checks
    115      the magic discrimination and the ownership fields against a file
    116      this plugin's generator never touched. */
    117   struct SolutionData archive_test_sol[] = {
    118     TEXT_SOLUTION (EXTRACTOR_METATYPE_MIMETYPE,
    119                    "application/x-tar"),
    120     TEXT_SOLUTION (EXTRACTOR_METATYPE_FORMAT,
    121                    "gnu"),
    122     TEXT_SOLUTION (EXTRACTOR_METATYPE_ENTRY_COUNT,
    123                    "2"),
    124     TEXT_SOLUTION (EXTRACTOR_METATYPE_OWNER_USER,
    125                    "grothoff"),
    126     TEXT_SOLUTION (EXTRACTOR_METATYPE_OWNER_GROUP,
    127                    "grothoff"),
    128     TEXT_SOLUTION (EXTRACTOR_METATYPE_OWNER_UID,
    129                    "1000"),
    130     TEXT_SOLUTION (EXTRACTOR_METATYPE_OWNER_GID,
    131                    "1000"),
    132     TEXT_SOLUTION (EXTRACTOR_METATYPE_PERMISSIONS,
    133                    "0644"),
    134     TEXT_SOLUTION (EXTRACTOR_METATYPE_UNCOMPRESSED_SIZE,
    135                    "1980"),
    136     TEXT_SOLUTION (EXTRACTOR_METATYPE_MODIFICATION_DATE,
    137                    "2002-06-05T22:29:14Z"),
    138     TEXT_SOLUTION (EXTRACTOR_METATYPE_FILENAME,
    139                    "test.html"),
    140     TEXT_SOLUTION (EXTRACTOR_METATYPE_FILENAME,
    141                    "test.jpg"),
    142     { 0, 0, NULL, NULL, 0, -1, 0, NULL }
    143   };
    144   struct ProblemSet ps[] = {
    145     { "testdata/tar_test.tar",
    146       tar_test_sol },
    147     { "testdata/archive_test.tar",
    148       archive_test_sol },
    149     { NULL, NULL }
    150   };
    151 
    152   (void) argc;
    153   (void) argv;
    154   return ET_main ("tar", ps);
    155 }
    156 
    157 
    158 /* end of test_tar.c */