/*
- Bacula® - The Network Backup Solution
-
- Copyright (C) 2003-2007 Free Software Foundation Europe e.V.
-
- 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 and included
- 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.
-
- 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., 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.
+ 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
#ifndef __BFILE_H
#define __BFILE_H
-#ifdef HAVE_PYTHON
-#undef _POSIX_C_SOURCE
-#include <Python.h>
-struct Python_IO {
- PyObject *fo;
- PyObject *fr;
- PyObject *fc;
-};
-#else
-struct Python_IO {
-};
-#endif
-
-
-/* this should physically correspond to WIN32_STREAM_ID
- * from winbase.h on Win32. We didn't inlcude cStreamName
- * as we don't use it and don't need it for a correct struct size.
- */
-
-#define WIN32_BACKUP_DATA 1
-
-typedef struct _BWIN32_STREAM_ID {
- int32_t dwStreamId;
- int32_t dwStreamAttributes;
- int64_t Size;
- int32_t dwStreamNameSize;
-} BWIN32_STREAM_ID, *LPBWIN32_STREAM_ID ;
-
+#include "win32filter.h"
typedef struct _PROCESS_WIN32_BACKUPAPIBLOCK_CONTEXT {
int64_t liNextHeader;
bool bIsInData;
- BWIN32_STREAM_ID header_stream;
+ BWIN32_STREAM_ID header_stream;
} PROCESS_WIN32_BACKUPAPIBLOCK_CONTEXT;
/* =======================================================
*
* =======================================================
*/
-#if defined(HAVE_WIN32)
+#ifdef HAVE_WIN32
enum {
BF_CLOSED,
/* In bfile.c */
/* Basic Win32 low level I/O file packet */
-struct BFILE {
+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 */
- PROCESS_WIN32_BACKUPAPIBLOCK_CONTEXT win32DecompContext; /* context for decomposition of win32 backup streams */
+ 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 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 */
/* =======================================================
/* Basic Unix low level I/O file packet */
struct BFILE {
int fid; /* file id on Unix */
- int m_flags; /* open flags */
- 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 */
- PROCESS_WIN32_BACKUPAPIBLOCK_CONTEXT win32DecompContext; /* context for decomposition of win32 backup streams */
+ 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_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);