Codebase list dfvfs / 1cdb6fd
Imported Upstream version 20151008+dfsg Hilko Bengen 8 years ago
18 changed file(s) with 17 addition(s) and 115 deletion(s). Raw diff Collapse all Expand all
0 python-dfvfs (20150915-1) unstable; urgency=low
0 python-dfvfs (20151008-1) unstable; urgency=low
11
22 * Auto-generated
33
4 -- Log2Timeline <log2timeline-dev@googlegroups.com> Tue, 15 Sep 2015 07:27:31 +0200
4 -- Log2Timeline <log2timeline-dev@googlegroups.com> Thu, 08 Oct 2015 19:28:03 +0200
00 # -*- coding: utf-8 -*-
11
2 __version__ = '20150915'
2 __version__ = '20151008'
4747 """Comparable representation of the path specification."""
4848 string_parts = []
4949
50 if self.data_stream is not None:
50 if self.data_stream:
5151 string_parts.append(u'data stream: {0:s}'.format(self.data_stream))
5252 if self.location is not None:
5353 string_parts.append(u'location: {0:s}'.format(self.location))
4242 """Comparable representation of the path specification."""
4343 string_parts = []
4444
45 if self.data_stream is not None:
45 if self.data_stream:
4646 string_parts.append(u'data stream: {0:s}'.format(self.data_stream))
4747 if self.inode is not None:
4848 string_parts.append(u'inode: {0:d}'.format(self.inode))
2525 class DataStream(object):
2626 """Class that implements the VFS data stream interface."""
2727
28 def __init__(self, file_entry_object):
29 """Initializes the data stream object.
30
31 Args:
32 file_entry_object: the file entry object (instance of FileEntry).
33 """
34 super(DataStream, self).__init__()
35 self._file_entry = file_entry_object
28 # The data stream object should not have a reference to its
29 # file entry since that will create a cyclic reference.
3630
3731 @property
3832 def name(self):
3933 """The name."""
4034 return u''
41
42 def GetFileObject(self):
43 """Retrieves the file-like object (instance of file_io.FileIO) or None."""
44 return self._file_entry.GetFileObject()
4535
4636
4737 class Directory(object):
141131 # It is assumed that directory and link file entries typically
142132 # do not have data streams.
143133 if not self._directory and not self.link:
144 self._data_streams.append(DataStream(self))
134 self._data_streams.append(DataStream())
145135
146136 return self._data_streams
147137
144144 class NTFSDataStream(file_entry.DataStream):
145145 """Class that implements a data stream object using pyfsntfs."""
146146
147 def __init__(self, file_entry_object, fsntfs_data_stream):
147 def __init__(self, fsntfs_data_stream):
148148 """Initializes the data stream object.
149149
150150 Args:
151 file_entry_object: the file entry object (instance of NFTSFileEntry).
152151 fsntfs_data_stream: the NTFS data stream object (instance of
153152 pyfsntfs.data_stream).
154153 """
155 super(NTFSDataStream, self).__init__(file_entry_object)
154 super(NTFSDataStream, self).__init__()
156155 self._fsntfs_data_stream = fsntfs_data_stream
157156
158157 @property
161160 if self._fsntfs_data_stream:
162161 return self._fsntfs_data_stream.name
163162 return u''
164
165 def GetFileObject(self):
166 """Retrieves the file-like object.
167
168 Returns:
169 A file-like object (instance of FileIO) or None.
170 """
171 if self._fsntfs_data_stream:
172 return self._file_entry.GetFileObject(
173 data_stream_name=self._fsntfs_data_stream.name)
174 return self._file_entry.GetFileObject()
175163
176164
177165 class NTFSDirectory(file_entry.Directory):
295283
296284 self._data_streams = []
297285 if fsntfs_file_entry.has_default_data_stream():
298 self._data_streams.append(NTFSDataStream(self, None))
286 self._data_streams.append(NTFSDataStream(None))
299287
300288 for fsntfs_data_stream in fsntfs_file_entry.alternate_data_streams:
301 self._data_streams.append(
302 NTFSDataStream(self, fsntfs_data_stream))
289 self._data_streams.append(NTFSDataStream(fsntfs_data_stream))
303290
304291 return self._data_streams
305292
3333 class TSKDataStream(file_entry.DataStream):
3434 """Class that implements a data stream object using pytks3."""
3535
36 def __init__(self, file_entry_object, tsk_attribute):
36 def __init__(self, tsk_attribute):
3737 """Initializes the data stream object.
3838
3939 Args:
40 file_entry_object: the file entry object (instance of NFTSFileEntry).
4140 tsk_attribute: the TSK attribute object (instance of pytsk3.Attribute).
4241 """
43 super(TSKDataStream, self).__init__(file_entry_object)
42 super(TSKDataStream, self).__init__()
4443 self._tsk_attribute = tsk_attribute
4544
4645 @property
5150 # data stream.
5251 return self._tsk_attribute.info.name or u''
5352 return u''
54
55 def GetFileObject(self):
56 """Retrieves the file-like object.
57
58 Returns:
59 A file-like object (instance of FileIO) or None.
60
61 Raises:
62 BackEndError: if the data stream name cannot be decoded properly.
63 """
64 if self._tsk_attribute:
65 # The value of the attribute name will be None for the default
66 # data stream. In dfvfs we use an empty string for the default
67 # data stream.
68 data_stream_name = self._tsk_attribute.info.name or u''
69 try:
70 data_stream_name = data_stream_name.decode(u'utf8')
71 except UnicodeError:
72 raise errors.BackEndError(u'Unable to decode data stream name.')
73
74 return self._file_entry.GetFileObject(data_stream_name=data_stream_name)
75 return self._file_entry.GetFileObject()
7653
7754
7855 class TSKDirectory(file_entry.Directory):
261238 tsk_fs_meta_type = getattr(
262239 tsk_file.info.meta, u'type', pytsk3.TSK_FS_META_TYPE_UNDEF)
263240 if tsk_fs_meta_type == pytsk3.TSK_FS_META_TYPE_REG:
264 self._data_streams.append(TSKDataStream(self, None))
241 self._data_streams.append(TSKDataStream(None))
265242
266243 else:
267244 for tsk_attribute in tsk_file:
270247
271248 attribute_type = getattr(tsk_attribute.info, u'type', None)
272249 if attribute_type in known_data_attribute_types:
273 self._data_streams.append(TSKDataStream(self, tsk_attribute))
250 self._data_streams.append(TSKDataStream(tsk_attribute))
274251
275252 return self._data_streams
276253
476453 """
477454 data_stream_names = [
478455 data_stream.name for data_stream in self._GetDataStreams()]
479 if data_stream_name not in data_stream_names:
456 if data_stream_name and data_stream_name not in data_stream_names:
480457 return
481458
482459 path_spec = copy.deepcopy(self.path_spec)
118118 self.assertNotEqual(data_stream, None)
119119 self.assertEqual(data_stream.name, data_stream_name)
120120
121 file_object = data_stream.GetFileObject()
122 self.assertNotEqual(file_object, None)
123 file_object.close()
124
125121 data_stream = file_entry.GetDataStream(u'bogus')
126122 self.assertEqual(data_stream, None)
127123
127127 self.assertNotEqual(data_stream, None)
128128 self.assertEqual(data_stream.name, data_stream_name)
129129
130 file_object = data_stream.GetFileObject()
131 self.assertNotEqual(file_object, None)
132 file_object.close()
133
134130 data_stream = file_entry.GetDataStream(u'bogus')
135131 self.assertEqual(data_stream, None)
136132
235235 self.assertNotEqual(data_stream, None)
236236 self.assertEqual(data_stream.name, data_stream_name)
237237
238 file_object = data_stream.GetFileObject()
239 self.assertNotEqual(file_object, None)
240 file_object.close()
241
242238 data_stream = file_entry.GetDataStream(u'bogus')
243239 self.assertEqual(data_stream, None)
244240
117117 self.assertNotEqual(data_stream, None)
118118 self.assertEqual(data_stream.name, data_stream_name)
119119
120 file_object = data_stream.GetFileObject()
121 self.assertNotEqual(file_object, None)
122 file_object.close()
123
124120 data_stream = file_entry.GetDataStream(u'bogus')
125121 self.assertEqual(data_stream, None)
126122
275275 self.assertNotEqual(data_stream, None)
276276 self.assertEqual(data_stream.name, data_stream_name)
277277
278 file_object = data_stream.GetFileObject()
279 self.assertNotEqual(file_object, None)
280 file_object.close()
281
282278 data_stream = file_entry.GetDataStream(u'bogus')
283279 self.assertEqual(data_stream, None)
284280
293289 self.assertNotEqual(data_stream, None)
294290 self.assertEqual(data_stream.name, data_stream_name)
295291
296 file_object = data_stream.GetFileObject()
297 self.assertNotEqual(file_object, None)
298 file_object.close()
299
300292
301293 if __name__ == '__main__':
302294 unittest.main()
157157 self.assertNotEqual(data_stream, None)
158158 self.assertEqual(data_stream.name, data_stream_name)
159159
160 file_object = data_stream.GetFileObject()
161 self.assertNotEqual(file_object, None)
162 file_object.close()
163
164160 data_stream = file_entry.GetDataStream(u'bogus')
165161 self.assertEqual(data_stream, None)
166162
157157 self.assertNotEqual(data_stream, None)
158158 self.assertEqual(data_stream.name, data_stream_name)
159159
160 file_object = data_stream.GetFileObject()
161 self.assertNotEqual(file_object, None)
162 file_object.close()
163
164160 data_stream = file_entry.GetDataStream(u'bogus')
165161 self.assertEqual(data_stream, None)
166162
295295 self.assertNotEqual(data_stream, None)
296296 self.assertEqual(data_stream.name, data_stream_name)
297297
298 file_object = data_stream.GetFileObject()
299 self.assertNotEqual(file_object, None)
300 file_object.close()
301
302298 data_stream = file_entry.GetDataStream(u'bogus')
303299 self.assertEqual(data_stream, None)
304300
313309 self.assertNotEqual(data_stream, None)
314310 self.assertEqual(data_stream.name, data_stream_name)
315311
316 file_object = data_stream.GetFileObject()
317 self.assertNotEqual(file_object, None)
318 file_object.close()
319
320312
321313 if __name__ == '__main__':
322314 unittest.main()
171171 self.assertNotEqual(data_stream, None)
172172 self.assertEqual(data_stream.name, data_stream_name)
173173
174 file_object = data_stream.GetFileObject()
175 self.assertNotEqual(file_object, None)
176 file_object.close()
177
178174 data_stream = file_entry.GetDataStream(u'bogus')
179175 self.assertEqual(data_stream, None)
180176
179179 self.assertNotEqual(data_stream, None)
180180 self.assertEqual(data_stream.name, data_stream_name)
181181
182 file_object = data_stream.GetFileObject()
183 self.assertNotEqual(file_object, None)
184 file_object.close()
185
186182 data_stream = file_entry.GetDataStream(u'bogus')
187183 self.assertEqual(data_stream, None)
188184
155155 self.assertNotEqual(data_stream, None)
156156 self.assertEqual(data_stream.name, data_stream_name)
157157
158 file_object = data_stream.GetFileObject()
159 self.assertNotEqual(file_object, None)
160 file_object.close()
161
162158 data_stream = file_entry.GetDataStream(u'bogus')
163159 self.assertEqual(data_stream, None)
164160