Exemplo n.º 1
0
 def generate_and_store_file_objects(self, file_paths: List[Path],
                                     extractor_dir: str,
                                     parent: FileObject):
     extracted_files = {}
     for item in file_paths:
         if not file_is_empty(item):
             current_file = FileObject(file_path=str(item))
             current_virtual_path = '{}|{}|{}'.format(
                 parent.get_base_of_virtual_path(
                     parent.get_virtual_file_paths()[
                         parent.get_root_uid()][0]), parent.get_uid(),
                 get_object_path_excluding_fact_dirs(
                     make_unicode_string(str(item)),
                     str(Path(extractor_dir, 'files'))))
             current_file.temporary_data[
                 'parent_fo_type'] = get_file_type_from_path(
                     parent.file_path)['mime']
             if current_file.get_uid(
             ) in extracted_files:  # the same file is extracted multiple times from one archive
                 extracted_files[current_file.get_uid()].virtual_file_path[
                     parent.get_root_uid()].append(current_virtual_path)
             else:
                 self.db_interface.set_unpacking_lock(current_file.uid)
                 self.file_storage_system.store_file(current_file)
                 current_file.virtual_file_path = {
                     parent.get_root_uid(): [current_virtual_path]
                 }
                 current_file.parent_firmware_uids.add(
                     parent.get_root_uid())
                 extracted_files[current_file.get_uid()] = current_file
     return extracted_files
Exemplo n.º 2
0
 def generate_and_store_file_objects(self, file_paths: List[Path],
                                     extraction_dir: Path,
                                     parent: FileObject):
     extracted_files = {}
     for item in file_paths:
         if not file_is_empty(item):
             current_file = FileObject(file_path=str(item))
             base = get_base_of_virtual_path(
                 parent.get_virtual_file_paths()[parent.get_root_uid()][0])
             current_virtual_path = join_virtual_path(
                 base, parent.uid,
                 get_relative_object_path(item, extraction_dir))
             current_file.temporary_data[
                 'parent_fo_type'] = get_file_type_from_path(
                     parent.file_path)['mime']
             if current_file.uid in extracted_files:  # the same file is extracted multiple times from one archive
                 extracted_files[current_file.uid].virtual_file_path[
                     parent.get_root_uid()].append(current_virtual_path)
             else:
                 self.db_interface.set_unpacking_lock(current_file.uid)
                 self.file_storage_system.store_file(current_file)
                 current_file.virtual_file_path = {
                     parent.get_root_uid(): [current_virtual_path]
                 }
                 current_file.parent_firmware_uids.add(
                     parent.get_root_uid())
                 extracted_files[current_file.uid] = current_file
     return extracted_files
Exemplo n.º 3
0
    def setUpClass(cls):
        test_init_dir = os.path.join(get_dir_of_file(__file__), 'data')
        test_files = {
            'systemd': 'etc/systemd/system/foobar',
            'inittab': 'etc/inittab',
            'rclocal': 'etc/rc.local',
            'upstart': 'etc/init/baz.conf',
            'runit': 'etc/service/lighttpd/run',
            'runit_symlink': 'etc/service/example/run',
            'runit_origin': 'etc/sv/example/run',
            'only_comments': 'etc/inittab.invalid',
            'initd': 'etc/init.d/skeleton',
            'README': 'etc/init.d/README',
            'initscript': 'etc/initscript'
        }

        for test_file, path in test_files.items():
            test_fo = FileObject(file_path=os.path.join(test_init_dir, path))
            setattr(cls, 'test_file_{}'.format(test_file), test_fo)
            test_fo.processed_analysis['file_type'] = {'mime': 'text/plain'}
            test_fo.root_uid = test_fo.uid
            test_fo.virtual_file_path = {test_fo.get_root_uid(): [path]}

        cls.test_file_not_text = FileObject(
            file_path='{}etc/systemd/system/foobar'.format(test_init_dir))
        cls.test_file_not_text.processed_analysis['file_type'] = {
            'mime': 'application/zip'
        }
Exemplo n.º 4
0
 def test_get_root_uid(self):
     fo = FileObject(binary=b'file_object')
     fo.virtual_file_path = {
         'root_uid_1': 'virtual_file_path',
         'root_uid_2': 'virtual_file_path'
     }
     assert fo.get_root_uid() in ['root_uid_1', 'root_uid_2']