Disk ARchive  2.6.8
Full featured and portable backup and archiving tool
i_archive.hpp
Go to the documentation of this file.
1 /*********************************************************************/
2 // dar - disk archive - a backup/restoration program
3 // Copyright (C) 2002-2020 Denis Corbin
4 //
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 //
19 // to contact the author : http://dar.linux.free.fr/email.html
20 /*********************************************************************/
21 
25 
26 
27 #ifndef I_ARCHIVE_HPP
28 #define I_ARCHIVE_HPP
29 
30 #include "../my_config.h"
31 #include <vector>
32 #include <string>
33 #include <memory>
34 
35 #include "erreurs.hpp"
36 #include "path.hpp"
37 #include "statistics.hpp"
38 #include "archive_options.hpp"
39 #include "pile.hpp"
40 #include "list_entry.hpp"
41 #include "crypto.hpp"
42 #include "slice_layout.hpp"
43 #include "mem_ui.hpp"
44 #include "archive_summary.hpp"
46 #include "catalogue.hpp"
47 #include "archive.hpp"
48 #include "header_version.hpp"
49 
50 namespace libdar
51 {
52 
55 
57 
58  class archive::i_archive: public mem_ui
59  {
60  public:
61 
63 
64  i_archive(const std::shared_ptr<user_interaction> & dialog,
65  const path & chem,
66  const std::string & basename,
67  const std::string & extension,
68  const archive_options_read & options);
69 
70 
72 
73  i_archive(const std::shared_ptr<user_interaction> & dialog,
74  const path & fs_root,
75  const path & sauv_path,
76  const std::string & filename,
77  const std::string & extension,
78  const archive_options_create & options,
79  statistics * progressive_report);
80 
82 
83  i_archive(const std::shared_ptr<user_interaction> & dialog,
84  const path & sauv_path,
85  std::shared_ptr<archive> ref_arch1,
86  const std::string & filename,
87  const std::string & extension,
88  const archive_options_merge & options,
89  statistics * progressive_report);
90 
92 
93  i_archive(const std::shared_ptr<user_interaction> & dialog,
94  const path & chem_src,
95  const std::string & basename_src,
96  const std::string & extension_src,
97  const archive_options_read & options_read,
98  const path & chem_dst,
99  const std::string & basename_dst,
100  const std::string & extension_dst,
101  const archive_options_repair & options_repair);
102 
104 
105  i_archive(const i_archive & ref) = delete;
106  i_archive(i_archive && ref) = delete;
107  i_archive & operator = (const i_archive & ref) = delete;
108  i_archive & operator = (i_archive && ref) = delete;
109 
111 
112  ~i_archive() { free_mem(); };
113 
114 
116 
117  statistics op_extract(const path &fs_root,
118  const archive_options_extract & options,
119  statistics *progressive_report);
120 
122 
123  void summary();
124 
127 
128 
130 
131  void op_listing(archive_listing_callback callback,
132  void *context,
133  const archive_options_listing & options) const;
134 
136 
137  statistics op_diff(const path & fs_root,
138  const archive_options_diff & options,
139  statistics * progressive_report);
140 
141 
143 
144  statistics op_test(const archive_options_test & options,
145  statistics * progressive_report);
146 
147 
149 
150  void op_isolate(const path &sauv_path,
151  const std::string & filename,
152  const std::string & extension,
153  const archive_options_isolate & options);
154 
155 
157 
159  void *context,
160  const std::string & dir,
161  bool fetch_ea = false);
162 
164 
165  const std::vector<list_entry> get_children_in_table(const std::string & dir, bool fetch_ea = false) const;
166 
168  bool has_subdirectory(const std::string & dir) const;
169 
171  const entree_stats get_stats() const { if(cat == nullptr) throw SRC_BUG; return cat->get_stats(); };
172 
174  const std::list<signator> & get_signatories() const { return gnupg_signed; };
175 
178  void init_catalogue() const;
179 
181 
182  const catalogue & get_catalogue() const;
183 
185 
187 
189  void set_to_unsaved_data_and_FSA() { if(cat == nullptr) throw SRC_BUG; cat->set_to_unsaved_data_and_FSA(); };
190 
192 
193  bool get_catalogue_slice_layout(slice_layout & slicing) const;
194 
196 
197  U_64 get_first_slice_header_size() const;
198 
200 
201  U_64 get_non_first_slice_header_size() const;
202 
203 
204  private:
205  enum operation { oper_create, oper_isolate, oper_merge, oper_repair };
206 
211  bool exploitable;
214  std::list<signator> gnupg_signed;
215  slice_layout slices;
216 
217  void free_mem();
218  void check_gnupg_signed() const;
219 
220  const catalogue & get_cat() const { if(cat == nullptr) throw SRC_BUG; else return *cat; };
221  const header_version & get_header() const { return ver; };
222 
223  bool get_sar_param(infinint & sub_file_size, infinint & first_file_size, infinint & last_file_size,
224  infinint & total_file_number);
225  std::shared_ptr<entrepot> get_entrepot();
226  infinint get_level2_size();
227  infinint get_cat_size() const { return local_cat_size; };
228 
229  statistics op_create_in(operation op,
230  const path & fs_root,
231  const std::shared_ptr<entrepot> & sauv_path_t,
232  archive *ref_arch,
233  const mask & selection,
234  const mask & subtree,
235  const std::string & filename,
236  const std::string & extension,
237  bool allow_over,
238  bool warn_over,
239  bool info_details,
240  bool display_treated,
241  bool display_treated_only_dir,
242  bool display_skipped,
243  bool display_finished,
244  const infinint & pause,
245  bool empty_dir,
246  compression algo,
247  U_I compression_level,
248  const infinint & file_size,
249  const infinint & first_file_size,
250  const mask & ea_mask,
251  const std::string & execute,
252  crypto_algo crypto,
253  const secu_string & pass,
254  U_32 crypto_size,
255  const std::vector<std::string> & gnupg_recipients,
256  const std::vector<std::string> & gnupg_signatories,
257  const mask & compr_mask,
258  const infinint & min_compr_size,
259  bool nodump,
260  const std::string & exclude_by_ea,
261  const infinint & hourshift,
262  bool empty,
263  bool alter_atime,
264  bool furtive_read_mode,
265  bool same_fs,
266  comparison_fields what_to_check,
267  bool snapshot,
268  bool cache_directory_tagging,
269  const infinint & fixed_date,
270  const std::string & slice_permission,
271  const infinint & repeat_count,
272  const infinint & repeat_byte,
273  bool add_marks_for_sequential_reading,
274  bool security_check,
275  const infinint & sparse_file_min_size,
276  const std::string & user_comment,
277  hash_algo hash,
278  const infinint & slice_min_digits,
279  const std::string & backup_hook_file_execute,
280  const mask & backup_hook_file_mask,
281  bool ignore_unknown,
282  const fsa_scope & scope,
283  bool multi_threaded,
284  bool delta_signature,
285  bool build_delta_sig,
286  const mask & delta_mask,
287  const infinint & delta_sig_min_size,
288  bool delta_diff,
289  bool zeroing_neg_date,
290  const std::set<std::string> & ignored_symlinks,
291  modified_data_detection mod_data_detect,
292  const infinint & iteration_count,
293  hash_algo kdf_hash,
294  const delta_sig_block_size & sig_block_len,
295  statistics * progressive_report);
296 
297  void op_create_in_sub(operation op,
298  const path & fs_root,
299  const std::shared_ptr<entrepot> & sauv_path_t,
300  catalogue * ref_cat1,
301  const catalogue * ref_cat2,
302  bool initial_pause,
303  const mask & selection,
304  const mask & subtree,
305  const std::string & filename,
306  const std::string & extension,
307  bool allow_over,
308  const crit_action & overwrite,
309  bool warn_over,
310  bool info_details,
311  bool display_treated,
312  bool display_treated_only_dir,
313  bool display_skipped,
314  bool display_finished,
315  const infinint & pause,
316  bool empty_dir,
317  compression algo,
318  U_I compression_level,
319  const infinint & file_size,
320  const infinint & first_file_size,
321  const mask & ea_mask,
322  const std::string & execute,
323  crypto_algo crypto,
324  const secu_string & pass,
325  U_32 crypto_size,
326  const std::vector<std::string> & gnupg_recipients,
327  const std::vector<std::string> & gnupg_signatories,
328  const mask & compr_mask,
329  const infinint & min_compr_size,
330  bool nodump,
331  const std::string & exclude_by_ea,
332  const infinint & hourshift,
333  bool empty,
334  bool alter_atime,
335  bool furtive_read_mode,
336  bool same_fs,
337  comparison_fields what_to_check,
338  bool snapshot,
339  bool cache_directory_tagging,
340  bool keep_compressed,
341  const infinint & fixed_date,
342  const std::string & slice_permission,
343  const infinint & repeat_count,
344  const infinint & repeat_byte,
345  bool decremental,
346  bool add_marks_for_sequential_reading,
347  bool security_check,
348  const infinint & sparse_file_min_size,
349  const std::string & user_comment,
350  hash_algo hash,
351  const infinint & slice_min_digits,
352  const std::string & backup_hook_file_execute,
353  const mask & backup_hook_file_mask,
354  bool ignore_unknown,
355  const fsa_scope & scope,
356  bool multi_threaded,
357  bool delta_signature,
358  bool build_delta_sig,
359  const mask & delta_mask,
360  const infinint & delta_sig_min_size,
361  bool delta_diff,
362  bool zeroing_neg_date,
363  const std::set<std::string> & ignored_symlinks,
364  modified_data_detection mod_data_detect,
365  const infinint & iteration_count,
366  hash_algo kdf_hash,
367  const delta_sig_block_size & sign_block_len,
368  statistics * st_ptr
369  );
370 
371  void disable_natural_destruction();
372  void enable_natural_destruction();
373  const label & get_layer1_data_name() const;
374  const label & get_catalogue_data_name() const;
376  void check_against_isolation(bool lax) const;
377  const cat_directory *get_dir_object(const std::string & dir) const;
378  void load_catalogue();
379  };
380 
381 } // end of namespace
382 
383 #endif
libdar::archive::i_archive::summary_data
archive_summary summary_data()
same information as summary() but as broken out data
libdar::hash_algo
hash_algo
hashing algorithm available
Definition: archive_aux.hpp:62
libdar::archive::i_archive::only_contains_an_isolated_catalogue
bool only_contains_an_isolated_catalogue() const
true if the current archive only contains an isolated catalogue
archive.hpp
the archive class is defined in this module
libdar::archive::i_archive::get_entrepot
std::shared_ptr< entrepot > get_entrepot()
this method may return nullptr if no entrepot is used (pipes used for archive building,...
libdar::archive::i_archive::local_cat_size
infinint local_cat_size
size of the catalogue on disk
Definition: i_archive.hpp:210
libdar::archive::i_archive::ver
header_version ver
information for the archive header
Definition: i_archive.hpp:208
libdar::archive::i_archive::init_catalogue
void init_catalogue() const
libdar::archive::i_archive::~i_archive
~i_archive()
the destructor
Definition: i_archive.hpp:112
libdar::compression
compression
the different compression algorithm available
Definition: compression.hpp:45
libdar::pile
stores a stack of generic_files writing/reading on each others
Definition: pile.hpp:43
libdar::archive::i_archive::op_create_in_sub
void op_create_in_sub(operation op, const path &fs_root, const std::shared_ptr< entrepot > &sauv_path_t, catalogue *ref_cat1, const catalogue *ref_cat2, bool initial_pause, const mask &selection, const mask &subtree, const std::string &filename, const std::string &extension, bool allow_over, const crit_action &overwrite, bool warn_over, bool info_details, bool display_treated, bool display_treated_only_dir, bool display_skipped, bool display_finished, const infinint &pause, bool empty_dir, compression algo, U_I compression_level, const infinint &file_size, const infinint &first_file_size, const mask &ea_mask, const std::string &execute, crypto_algo crypto, const secu_string &pass, U_32 crypto_size, const std::vector< std::string > &gnupg_recipients, const std::vector< std::string > &gnupg_signatories, const mask &compr_mask, const infinint &min_compr_size, bool nodump, const std::string &exclude_by_ea, const infinint &hourshift, bool empty, bool alter_atime, bool furtive_read_mode, bool same_fs, comparison_fields what_to_check, bool snapshot, bool cache_directory_tagging, bool keep_compressed, const infinint &fixed_date, const std::string &slice_permission, const infinint &repeat_count, const infinint &repeat_byte, bool decremental, bool add_marks_for_sequential_reading, bool security_check, const infinint &sparse_file_min_size, const std::string &user_comment, hash_algo hash, const infinint &slice_min_digits, const std::string &backup_hook_file_execute, const mask &backup_hook_file_mask, bool ignore_unknown, const fsa_scope &scope, bool multi_threaded, bool delta_signature, bool build_delta_sig, const mask &delta_mask, const infinint &delta_sig_min_size, bool delta_diff, bool zeroing_neg_date, const std::set< std::string > &ignored_symlinks, modified_data_detection mod_data_detect, const infinint &iteration_count, hash_algo kdf_hash, const delta_sig_block_size &sign_block_len, statistics *st_ptr)
libdar::archive::i_archive::check_against_isolation
void check_against_isolation(bool lax) const
throw Erange exception if the archive only contains an isolated catalogue
libdar::archive_listing_callback
void(*)(const std::string &the_path, const list_entry &entry, void *context) archive_listing_callback
callback function type expected for archive::op_listing and archive::get_children_of()
Definition: archive_listing_callback.hpp:42
list_entry.hpp
class of objects describing an entry in the archive, used by archive::get_children_in_table
libdar::infinint
the arbitrary large positive integer class
Definition: real_infinint.hpp:61
libdar::archive::i_archive::get_catalogue_slice_layout
bool get_catalogue_slice_layout(slice_layout &slicing) const
returns the slice layout of the archive, or of the archive of reference in case of isolated catalogue
libdar::archive::i_archive::op_test
statistics op_test(const archive_options_test &options, statistics *progressive_report)
test the archive integrity
libdar::archive::i_archive::summary
void summary()
display a summary of the archive
libdar::compile_time::nodump
bool nodump() noexcept
returns whether nodump flag support has been activated at compilation time
libdar::archive::i_archive::drop_all_filedescriptors
void drop_all_filedescriptors()
closes all filedescriptors and associated even when in sequential read mode
libdar::entree_stats
holds the statistics contents of a catalogue
Definition: entree_stats.hpp:48
libdar::archive::i_archive::op_extract
statistics op_extract(const path &fs_root, const archive_options_extract &options, statistics *progressive_report)
extraction of data from an archive
libdar::archive::i_archive::get_children_in_table
const std::vector< list_entry > get_children_in_table(const std::string &dir, bool fetch_ea=false) const
getting information about the given directory (alternative to get_children_of)
libdar::archive::i_archive::get_children_of
bool get_children_of(archive_listing_callback callback, void *context, const std::string &dir, bool fetch_ea=false)
getting information about a given directory
libdar::archive::i_archive::gnupg_signed
std::list< signator > gnupg_signed
list of signature found in the archive (reading an existing archive)
Definition: i_archive.hpp:214
libdar::mem_ui
class mem_ui to keep a copy of a user_interaction object
Definition: mem_ui.hpp:54
libdar::archive_options_extract
class holding optional parameters used to extract files from an existing archive
Definition: archive_options.hpp:1193
libdar::archive::i_archive::stack
pile stack
the different layer through which the archive contents is read or wrote
Definition: i_archive.hpp:207
erreurs.hpp
contains all the excetion class thrown by libdar
libdar::archive_options_listing
class holding optional parameters used to list the contents of an existing archive
Definition: archive_options.hpp:1336
libdar::archive::i_archive::get_non_first_slice_header_size
U_64 get_non_first_slice_header_size() const
get the non first slice header
slice_layout.hpp
object describing the slicing of an archive
libdar::archive_options_repair
class holding optional parameters used to create an archive
Definition: archive_options.hpp:1604
archive_options.hpp
this file contains a set of classes used to transmit options to archive operation
libdar::path
the class path is here to manipulate paths in the Unix notation: using'/'
Definition: path.hpp:50
libdar::statistics
class used by libdar::archive class to give a summary of treated file during and after an operation
Definition: statistics.hpp:69
libdar::archive::i_archive::exploitable
bool exploitable
is false if only the catalogue is available (for reference backup or isolation).
Definition: i_archive.hpp:211
libdar::archive::i_archive::i_archive
i_archive(const std::shared_ptr< user_interaction > &dialog, const path &chem, const std::string &basename, const std::string &extension, const archive_options_read &options)
this constructor opens an already existing archive (for reading) [this is the "read" constructor]
header_version.hpp
archive global header/trailer structure is defined here
libdar::archive_options_read
class holding optional parameters used to read an existing archive
Definition: archive_options.hpp:63
libdar::archive_summary
the archive_summary class provides information about a given archive
Definition: archive_summary.hpp:44
libdar::archive::i_archive::has_subdirectory
bool has_subdirectory(const std::string &dir) const
returns true if the pointed directory has one or more subdirectories
statistics.hpp
class handling access to the data summary of treated files after and during each operation
libdar::archive_options_test
class holding optional parameters used to test the structure coherence of an existing archive
Definition: archive_options.hpp:1531
libdar::archive_options_merge
class holding optional parameters used to proceed to the merge operation
Definition: archive_options.hpp:900
pile.hpp
class pile definition. Used to manage a stack of generic_file objects
libdar::archive::i_archive::lax_read_mode
bool lax_read_mode
whether the archive has been openned in lax mode (unused for creation/merging/isolation)
Definition: i_archive.hpp:212
libdar::archive::i_archive
the archive::i_archive class implements the most general operations on archives
Definition: i_archive.hpp:58
libdar::comparison_fields
comparison_fields
how to consider file change during comparison and incremental backup
Definition: archive_aux.hpp:52
libdar::archive::i_archive::cat
catalogue * cat
archive contents
Definition: i_archive.hpp:209
libdar::archive::i_archive::get_stats
const entree_stats get_stats() const
retrieving statistics about archive contents
Definition: i_archive.hpp:171
libdar::archive_options_create
class holding optional parameters used to create an archive
Definition: archive_options.hpp:275
libdar::archive::i_archive::op_diff
statistics op_diff(const path &fs_root, const archive_options_diff &options, statistics *progressive_report)
archive comparison with filesystem
libdar::crypto_algo
crypto_algo
the different cypher available for encryption (strong or weak)
Definition: crypto.hpp:49
libdar::archive::i_archive::get_signatories
const std::list< signator > & get_signatories() const
retrieving signature information about the archive
Definition: i_archive.hpp:174
archive_summary.hpp
datastructure returned by archive::summary_data
libdar::catalogue
the catalogue class which gather all objects contained in a give archive
Definition: catalogue.hpp:60
libdar::header_version
manages the archive header and trailer
Definition: header_version.hpp:47
libdar::archive::archive
archive(const std::shared_ptr< user_interaction > &dialog, const path &chem, const std::string &basename, const std::string &extension, const archive_options_read &options)
this constructor opens an already existing archive (for reading) [this is the "read" constructor]
libdar::archive::i_archive::get_first_slice_header_size
U_64 get_first_slice_header_size() const
get the first slice header
catalogue.hpp
here is defined the classe used to manage catalogue of archives
libdar::archive::i_archive::sequential_read
bool sequential_read
whether the archive is read in sequential mode
Definition: i_archive.hpp:213
libdar::archive_options_isolate
class holding optional parameters used to isolate an existing archive
Definition: archive_options.hpp:691
crypto.hpp
the crypto algoritm definition
libdar::archive::i_archive::get_catalogue
const catalogue & get_catalogue() const
gives access to internal catalogue (not to be used from the API)
path.hpp
here is the definition of the path class
libdar::modified_data_detection
modified_data_detection
how to detect data has changed when some fields
Definition: archive_aux.hpp:43
libdar::archive::i_archive::slices
slice_layout slices
slice layout, archive is not sliced <=> first_size or other_size fields is set to zero (in practice b...
Definition: i_archive.hpp:215
libdar::archive::i_archive::op_isolate
void op_isolate(const path &sauv_path, const std::string &filename, const std::string &extension, const archive_options_isolate &options)
this methodes isolates the catalogue of a the current archive into a separated archive
archive_listing_callback.hpp
definition of the user defined callback function used for archive listing
libdar::archive::i_archive::set_to_unsaved_data_and_FSA
void set_to_unsaved_data_and_FSA()
change all inode as unsaved (equal to differential backup with no change met)
Definition: i_archive.hpp:189
libdar::archive::i_archive::op_listing
void op_listing(archive_listing_callback callback, void *context, const archive_options_listing &options) const
listing of the archive contents
libdar::fsa_scope
std::set< fsa_family > fsa_scope
set of fsa families
Definition: fsa_family.hpp:70
mem_ui.hpp
class mem_ui definition. This class is to be used as parent class to handle user_interaction object m...
libdar
libdar namespace encapsulate all libdar symbols
Definition: archive.hpp:46