X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Ffindlib%2Ffind.h;h=6fc90fed0f095be31150ad1942c9cba6ef21010e;hb=37190d54ceff7f2b45a58a1c6241688cc5cba1c2;hp=1408f17a2b78994f2e8a7abb424a56247746ad22;hpb=8626b962a18f0ba292d00e9e95adaac1815a89c9;p=bacula%2Fbacula diff --git a/bacula/src/findlib/find.h b/bacula/src/findlib/find.h old mode 100755 new mode 100644 index 1408f17a2b..6fc90fed0f --- a/bacula/src/findlib/find.h +++ b/bacula/src/findlib/find.h @@ -1,72 +1,121 @@ /* - * File types as returned by find_files() - * - * Kern Sibbald MIM - */ -/* - Copyright (C) 2000, 2001 Kern Sibbald and John Walker + Bacula® - The Network Backup Solution + + Copyright (C) 2001-2007 Free Software Foundation Europe e.V. - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. + This program is Free Software; you can redistribute it and/or + modify it under the terms of version two of the GNU General Public + License as published by the Free Software Foundation plus additions + that are listed in the file LICENSE. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of John Walker. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ftf@fsfeurope.org. +*/ +/* + * File types as returned by find_files() + * + * Kern Sibbald MMI */ #ifndef __FILES_H #define __FILES_H -#ifdef HAVE_FNMATCH -#include +#include "jcr.h" +#include "bfile.h" + +#ifdef HAVE_DIRENT_H +#include +#define NAMELEN(dirent) (strlen((dirent)->d_name)) +#endif + +#include +#if HAVE_UTIME_H +#include #else +struct utimbuf { + long actime; + long modtime; +}; +#endif + +#define MODE_RALL (S_IRUSR|S_IRGRP|S_IROTH) + #include "lib/fnmatch.h" +#include "lib/enh_fnmatch.h" + +#ifndef HAVE_REGEX_H +#include "lib/bregex.h" +#else +#include #endif +#include "save-cwd.h" -/* - * NOTE!!! These go on the tape, so don't change them. If - * need be, add to them. +#ifndef HAVE_READDIR_R +int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result); +#endif + + +/* + * Status codes returned by create_file() */ -#define FT_LNKSAVED 1 /* hard link to file already saved */ -#define FT_REGE 2 /* Regular file but empty */ -#define FT_REG 3 /* Regular file */ -#define FT_LNK 4 /* Soft Link */ -#define FT_DIR 5 /* Directory */ -#define FT_SPEC 6 /* Special file -- chr, blk, fifo, sock */ -#define FT_NOACCESS 7 /* Not able to access */ -#define FT_NOFOLLOW 8 /* Could not follow link */ -#define FT_NOSTAT 9 /* Could not stat file */ -#define FT_NOCHG 10 /* Incremental option, file not changed */ -#define FT_DIRNOCHG 11 /* Incremental option, directory not changed */ -#define FT_ISARCH 12 /* Trying to save archive file */ -#define FT_NORECURSE 13 /* No recursion into directory */ -#define FT_NOFSCHG 14 /* Different file system, prohibited */ -#define FT_NOOPEN 15 /* Could not open directory */ - -/* FileSet options */ -#define FO_MD5 0x1 /* Do MD5 checksum */ -#define FO_GZIP 0x2 /* Do Zlib compression */ - - -#define OPT_compute_MD5 0x01 -#define OPT_GZIP_compression 0x02 -#define OPT_no_recursion 0x04 +enum { + CF_SKIP = 1, /* skip file (not newer or something) */ + CF_ERROR, /* error creating file */ + CF_EXTRACT, /* file created, data to extract */ + CF_CREATED /* file created, no data to extract */ +}; +/* Options saved int "options" of the include/exclude lists. + * They are directly jammed ito "flag" of ff packet + */ +#define FO_MD5 (1<<1) /* Do MD5 checksum */ +#define FO_GZIP (1<<2) /* Do Zlib compression */ +#define FO_NO_RECURSION (1<<3) /* no recursion in directories */ +#define FO_MULTIFS (1<<4) /* multiple file systems */ +#define FO_SPARSE (1<<5) /* do sparse file checking */ +#define FO_IF_NEWER (1<<6) /* replace if newer */ +#define FO_NOREPLACE (1<<7) /* never replace */ +#define FO_READFIFO (1<<8) /* read data from fifo */ +#define FO_SHA1 (1<<9) /* Do SHA1 checksum */ +#define FO_PORTABLE (1<<10) /* Use portable data format -- no BackupWrite */ +#define FO_MTIMEONLY (1<<11) /* Use mtime rather than mtime & ctime */ +#define FO_KEEPATIME (1<<12) /* Reset access time */ +#define FO_EXCLUDE (1<<13) /* Exclude file */ +#define FO_ACL (1<<14) /* Backup ACLs */ +#define FO_NO_HARDLINK (1<<15) /* don't handle hard links */ +#define FO_IGNORECASE (1<<16) /* Ignore file name case */ +#define FO_HFSPLUS (1<<17) /* Resource forks and Finder Info */ +#define FO_WIN32DECOMP (1<<18) /* Use BackupRead decomposition */ +#define FO_SHA256 (1<<19) /* Do SHA256 checksum */ +#define FO_SHA512 (1<<20) /* Do SHA512 checksum */ +#define FO_ENCRYPT (1<<21) /* Encrypt data stream */ +#define FO_NOATIME (1<<22) /* Use O_NOATIME to prevent atime change */ +#define FO_ENHANCEDWILD (1<<23) /* Enhanced wild card processing */ +#define FO_CHKCHANGES (1<<24) /* Check if file have been modified during backup */ +#define FO_STRIPPATH (1<<25) /* Check for stripping path */ + struct s_included_file { struct s_included_file *next; - int options; /* backup options */ + uint32_t options; /* backup options */ int level; /* compression level */ int len; /* length of fname */ - int pattern; /* set if pattern */ + int pattern; /* set if wild card pattern */ char VerifyOpts[20]; /* Options for verify */ char fname[1]; }; @@ -77,51 +126,119 @@ struct s_excluded_file { char fname[1]; }; +/* FileSet definitions very similar to the resource + * contained in the Director because the components + * of the structure are passed by the Director to the + * File daemon and recompiled back into this structure + */ +#undef MAX_FOPTS +#define MAX_FOPTS 30 + +enum { + state_none, + state_options, + state_include, + state_error +}; + +/* File options structure */ +struct findFOPTS { + uint32_t flags; /* options in bits */ + int GZIP_level; /* GZIP level */ + int strip_path; /* strip path count */ + char VerifyOpts[MAX_FOPTS]; /* verify options */ + alist regex; /* regex string(s) */ + alist regexdir; /* regex string(s) for directories */ + alist regexfile; /* regex string(s) for files */ + alist wild; /* wild card strings */ + alist wilddir; /* wild card strings for directories */ + alist wildfile; /* wild card strings for files */ + alist wildbase; /* wild card strings for basenames */ + alist base; /* list of base names */ + alist fstype; /* file system type limitation */ + alist drivetype; /* drive type limitation */ + char *reader; /* reader program */ + char *writer; /* writer program */ +}; + + +/* This is either an include item or an exclude item */ +struct findINCEXE { + findFOPTS *current_opts; /* points to current options structure */ + alist opts_list; /* options list */ + dlist name_list; /* filename list -- holds dlistString */ +}; + +/* + * FileSet Resource + * + */ +struct findFILESET { + int state; + findINCEXE *incexe; /* current item */ + alist include_list; + alist exclude_list; +}; + +#ifdef HAVE_DARWIN_OS +struct HFSPLUS_INFO { + unsigned long length; /* Mandatory field */ + char fndrinfo[32]; /* Finder Info */ + off_t rsrclength; /* Size of resource fork */ +}; +#endif /* * Definition of the find_files packet passed as the * first argument to the find_files callback subroutine. */ -typedef struct ff { - char *fname; /* filename */ +struct FF_PKT { + char *top_fname; /* full filename before descending */ + char *fname; /* full filename */ char *link; /* link if file linked */ + POOLMEM *sys_fname; /* system filename */ + POOLMEM *fname_save; /* save when stripping path */ + POOLMEM *link_save; /* save when stripping path */ struct stat statp; /* stat packet */ + int32_t FileIndex; /* FileIndex of this file */ + int32_t LinkFI; /* FileIndex of main hard linked file */ + struct f_link *linked; /* Set if this file is hard linked */ int type; /* FT_ type from above */ - int flags; /* control flags */ int ff_errno; /* errno */ - int incremental; /* do incremental save */ + BFILE bfd; /* Bacula file descriptor */ time_t save_time; /* start of incremental time */ - int no_recursion; /* do not recurse into sub directories */ - int mtime_only; /* incremental on mtime_only */ - int dereference; /* follow links */ - int compute_MD5; /* compute MD5 checksum */ - int GZIP_compression; /* compress the file */ - int GZIP_level; /* compression level */ - int one_file_system; /* do not traverse file systems */ - int atime_preserve; /* preserve access times */ - int null_output_device; /* using null output device */ + bool dereference; /* follow links (not implemented) */ + bool null_output_device; /* using null output device */ + bool incremental; /* incremental save */ char VerifyOpts[20]; struct s_included_file *included_files_list; struct s_excluded_file *excluded_files_list; struct s_excluded_file *excluded_paths_list; + findFILESET *fileset; + int (*callback)(FF_PKT *, void *, bool); /* User's callback */ + + /* Values set by accept_file while processing Options */ + uint32_t flags; /* backup options */ + int GZIP_level; /* compression level */ + int strip_path; /* strip path count */ + char *reader; /* reader program */ + char *writer; /* writer program */ + alist fstypes; /* allowed file system types */ + alist drivetypes; /* allowed drive types */ + + /* List of all hard linked files found */ + struct f_link **linkhash; /* hard linked files */ + + /* Darwin specific things. + * To avoid clutter, we always include rsrc_bfd and volhas_attrlist */ + BFILE rsrc_bfd; /* fd for resource forks */ + bool volhas_attrlist; /* Volume supports getattrlist() */ +#ifdef HAVE_DARWIN_OS + struct HFSPLUS_INFO hfsinfo; /* Finder Info and resource fork size */ +#endif +}; + - struct f_link *linklist; /* hard linked files */ -} FF_PKT; - -/* From find.c */ -FF_PKT *init_find_files(); -void set_find_options(FF_PKT *ff, int incremental, time_t mtime); -int find_files(FF_PKT *ff, int sub(FF_PKT *ff_pkt, void *hpkt), void *pkt); -void term_find_files(FF_PKT *ff); - -/* From match.c */ -void init_include_exclude_files(FF_PKT *ff); -void term_include_exclude_files(FF_PKT *ff); -void add_fname_to_include_list(FF_PKT *ff, int prefixed, char *fname); -void add_fname_to_exclude_list(FF_PKT *ff, char *fname); -struct s_included_file *get_next_included_file( - FF_PKT *ff, struct s_included_file *inc); -int file_is_excluded(FF_PKT *ff, char *file); -int file_is_included(FF_PKT *ff, char *file); +#include "protos.h" #endif /* __FILES_H */