X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Ffindlib%2Fbfile.h;h=78e3b58a3b175f7620d86f98c591d23ad70e3da6;hb=10cfd798ced2d27f61ead2de6fe9b1bcc8e3468d;hp=a38e53c1c1d2463c1ece075b1b4130ae2811d6cc;hpb=5de09d68674f4298eb4c3a0de3fe062b4d1bf2d1;p=bacula%2Fbacula diff --git a/bacula/src/findlib/bfile.h b/bacula/src/findlib/bfile.h index a38e53c1c1..78e3b58a3b 100644 --- a/bacula/src/findlib/bfile.h +++ b/bacula/src/findlib/bfile.h @@ -1,3 +1,21 @@ +/* + Bacula(R) - The Network Backup Solution + + Copyright (C) 2000-2018 Kern Sibbald + + The original author of Bacula is Kern Sibbald, with contributions + from many others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + This notice must be preserved when any source code is + conveyed and/or propagated. + + Bacula(R) is a registered trademark of Kern Sibbald. +*/ /* * Bacula low level File I/O routines. This routine simulates * open(), read(), write(), and close(), but using native routines. @@ -5,41 +23,17 @@ * * Kern Sibbald May MMIII */ -/* - Copyright (C) 2000-2005 Kern Sibbald - - 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. - - 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. - - */ #ifndef __BFILE_H #define __BFILE_H -#ifdef HAVE_PYTHON -#undef _POSIX_C_SOURCE -#include -struct Python_IO { - PyObject *fo; - PyObject *fr; - PyObject *fc; -}; -#else -struct Python_IO { -}; -#endif +#include "win32filter.h" + +typedef struct _PROCESS_WIN32_BACKUPAPIBLOCK_CONTEXT { + int64_t liNextHeader; + bool bIsInData; + BWIN32_STREAM_ID header_stream; +} PROCESS_WIN32_BACKUPAPIBLOCK_CONTEXT; /* ======================================================= * @@ -47,10 +41,7 @@ struct Python_IO { * * ======================================================= */ -#if defined(HAVE_CYGWIN) || defined(HAVE_WIN32) - -#include -#include "../lib/winapi.h" +#ifdef HAVE_WIN32 enum { BF_CLOSED, @@ -61,23 +52,37 @@ enum { /* In bfile.c */ /* Basic Win32 low level I/O file packet */ -struct BFILE { - int use_backup_api; /* set if using BackupRead/Write */ +class BFILE { +public: + bool use_backup_api; /* set if using BackupRead/Write */ int mode; /* set if file is open */ HANDLE fh; /* Win32 file handle */ int fid; /* fd if doing Unix style */ LPVOID lpContext; /* BackupRead/Write context */ + PVOID pvContext; /* Windows encryption (EFS) context */ POOLMEM *errmsg; /* error message buffer */ DWORD rw_bytes; /* Bytes read or written */ DWORD lerror; /* Last error code */ + DWORD fattrs; /* Windows file attributes */ int berrno; /* errno */ - char *prog; /* reader/writer program if any */ + int block; /* Count of read/writes */ + uint64_t total_bytes; /* bytes written */ + boffset_t offset; /* Delta offset */ JCR *jcr; /* jcr for editing job codes */ - Python_IO pio; /* Python I/O routines */ + Win32Filter win32filter; /* context for decomposition of win32 backup streams */ + int use_backup_decomp; /* set if using BackupRead Stream Decomposition */ + bool reparse_point; /* set if reparse point */ + bool cmd_plugin; /* set if we have a command plugin */ + bool const is_encrypted() const; }; +/* Windows encrypted file system */ +inline const bool BFILE::is_encrypted() const + { return (fattrs & FILE_ATTRIBUTE_ENCRYPTED) != 0; }; + HANDLE bget_handle(BFILE *bfd); + #else /* Linux/Unix systems */ /* ======================================================= @@ -90,32 +95,43 @@ HANDLE bget_handle(BFILE *bfd); /* Basic Unix low level I/O file packet */ struct BFILE { int fid; /* file id on Unix */ - int berrno; - char *prog; /* reader/writer program if any */ + int berrno; /* errno */ + int32_t lerror; /* not used - simplies Win32 builds */ + int block; /* Count of read/writes */ + uint64_t m_flags; /* open flags */ + uint64_t total_bytes; /* bytes written */ + boffset_t offset; /* Delta offset */ JCR *jcr; /* jcr for editing job codes */ - Python_IO pio; /* Python I/O routines */ + Win32Filter win32filter; /* context for decomposition of win32 backup streams */ + int use_backup_decomp; /* set if using BackupRead Stream Decomposition */ + bool reparse_point; /* not used in Unix */ + bool cmd_plugin; /* set if we have a command plugin */ }; #endif void binit(BFILE *bfd); bool is_bopen(BFILE *bfd); +#ifdef HAVE_WIN32 +void set_fattrs(BFILE *bfd, struct stat *statp); +#else +#define set_fattrs(bfd, fattrs) +#endif bool set_win32_backup(BFILE *bfd); bool set_portable_backup(BFILE *bfd); -bool set_prog(BFILE *bfd, char *prog, JCR *jcr); +bool set_cmd_plugin(BFILE *bfd, JCR *jcr); bool have_win32_api(); bool is_portable_backup(BFILE *bfd); -bool is_stream_supported(int stream); +bool is_restore_stream_supported(int stream); bool is_win32_stream(int stream); -char *xberror(BFILE *bfd); /* DO NOT USE -- use berrno class */ -int bopen(BFILE *bfd, const char *fname, int flags, mode_t mode); -#ifdef HAVE_DARWIN_OS -int bopen_rsrc(BFILE *bfd, const char *fname, int flags, mode_t mode); -#endif +int bopen(BFILE *bfd, const char *fname, uint64_t flags, mode_t mode); +int bopen_rsrc(BFILE *bfd, const char *fname, uint64_t flags, mode_t mode); int bclose(BFILE *bfd); ssize_t bread(BFILE *bfd, void *buf, size_t count); ssize_t bwrite(BFILE *bfd, void *buf, size_t count); -off_t blseek(BFILE *bfd, off_t offset, int whence); +boffset_t blseek(BFILE *bfd, boffset_t offset, int whence); const char *stream_to_ascii(int stream); +bool processWin32BackupAPIBlock (BFILE *bfd, void *pBuffer, ssize_t dwSize); + #endif /* __BFILE_H */