summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--README.Redhat90
-rw-r--r--bacula-autoconf.patch35
-rw-r--r--bacula-bat-build.patch39
-rw-r--r--bacula-build-cdp-plugin.patch43
-rw-r--r--bacula-desktop.patch34
-rw-r--r--bacula-dir.service13
-rw-r--r--bacula-dir.sysconfig9
-rw-r--r--bacula-docker-plugin.patch29
-rw-r--r--bacula-fd.service14
-rw-r--r--bacula-fd.sysconfig21
-rw-r--r--bacula-g++-options.patch15
-rw-r--r--bacula-install.patch48
-rw-r--r--bacula-logwatch.patch9
-rw-r--r--bacula-nagios.patch13
-rw-r--r--bacula-non-free-code.patch696
-rw-r--r--bacula-openssl.patch43
-rw-r--r--bacula-queryfile.patch39
-rw-r--r--bacula-sd.service13
-rw-r--r--bacula-sd.sysconfig9
-rw-r--r--bacula-seg-fault.patch21
-rw-r--r--bacula-sqlite-priv.patch9
-rw-r--r--bacula-use-crypto-from-openssl.patch296
-rw-r--r--bacula.logrotate9
-rw-r--r--bacula.spec762
-rw-r--r--quickstart_mysql.txt55
-rw-r--r--quickstart_postgresql.txt57
-rw-r--r--quickstart_sqlite3.txt52
-rw-r--r--sources2
29 files changed, 2477 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..5982c89 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1,2 @@
+/bacula-11.0.1.tar.gz
+/bacula-tray-monitor.png
diff --git a/README.Redhat b/README.Redhat
new file mode 100644
index 0000000..d6c1403
--- /dev/null
+++ b/README.Redhat
@@ -0,0 +1,90 @@
+======== Features
+
+- Standard components: director, storage, client, docs, bconsole.
+- Graphical components: bat, bacula-tray-monitor.
+- Tab completion for bconsole.
+- Nagios plugin.
+- HTML/PDF docs.
+- Quick start guides.
+- File Daemon bpipe-fd plugin.
+- POSIX.1e capabilities for File Daemon.
+- GZIP/LZO compression.
+- Static uid/gid of 133 (see "setup" package).
+- SQL libraries needed only by Director and Storage daemons.
+- SQL backend management through the alternatives system.
+
+======== Quick start
+
+Please look at the following files for a quick start with the various database
+backends:
+
+- quickstart_mysql.txt
+- quickstart_postgresql.txt
+- quickstart_sqlite3.txt
+
+======== PostgreSQL, MySQL and SQLite databases
+
+Bacula director supports different databases backends, if you want to switch
+away from the default PostgreSQL one you need to change the "libbaccats" (the
+catalogue library) symlink to the real library.
+
+To change to a different backend, issue the following command:
+
+# alternatives --config libbaccats.so
+
+There are 3 programs which provide 'libbaccats.so'.
+
+ Selection Command
+-----------------------------------------------
+ 1 /usr/lib64/libbaccats-mysql.so
+ 2 /usr/lib64/libbaccats-sqlite3.so
+*+ 3 /usr/lib64/libbaccats-postgresql.so
+
+Enter to keep the current selection[+], or type selection number: 1
+
+There is NO need to edit any part in the Bacula Director configuration; for the
+purposes of the database creation steps, the bacula-dir.conf configuration file
+can be left at their default values.
+
+======== Switiching between PostgreSQL, MySQL and SQLite backends
+
+To switch the configured backend to another one, follow the above procedure.
+Again, there's no need to edit the Bacula Director configuration file; the
+catalog resource can be left as is.
+
+Importing and exporting data between the various database formats is up to the
+user. If the database will be re-initialized from scratch, follow the quick
+start guides mentioned above.
+
+======== Upgrading from old Redhat releases
+
+When upgrading from old Redhat releases, the "bacula-libs-sql" package takes
+care of making the appropriate selection for the database backend based on what
+was previously configured on the old system.
+
+The default permissions in the "/etc/bacula" folder have changed; please perform
+the following commands for restoring the permissions for the correct operation
+of the daemons.
+
+# chown -R root:root /etc/bacula
+# chmod 755 /etc/bacula
+# chmod 640 /etc/bacula/*
+# chgrp bacula /etc/bacula/bacula-dir.conf /etc/bacula/query.sql
+
+All the files that are part of the Director configuration (included with @) must
+of course have the same permissions as the main configuration file.
+
+======== Documentation
+
+To see all the available documentation in both HTML and PDF formats, please
+install the "bacula-docs" package.
+
+======== Granting user access to the console
+
+The console configuration files are normally readable only by root for security
+reasons. If you need to grant access to a specific user or group of users to
+the consoles, you can adjust the ACLs on the configuration files. For example:
+
+# setfacl -m u:user:r /etc/bacula/bconsole.conf /etc/bacula/bat.conf
+
+This way the user 'user' can open the console without superuser privileges.
diff --git a/bacula-autoconf.patch b/bacula-autoconf.patch
new file mode 100644
index 0000000..0cfe4c8
--- /dev/null
+++ b/bacula-autoconf.patch
@@ -0,0 +1,35 @@
+diff -Naur bacula-7.0.4.old/autoconf/ltmain.sh bacula-7.0.4/autoconf/ltmain.sh
+--- bacula-7.0.4.old/autoconf/ltmain.sh 2014-07-24 17:43:23.085243360 +0200
++++ bacula-7.0.4/autoconf/ltmain.sh 2014-07-24 17:45:12.505330842 +0200
+@@ -2429,6 +2429,7 @@
+ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
+ -shared only do dynamic linking of libtool libraries
+ -shrext SUFFIX override the standard shared library file extension
++ -soname SONAME override the standard shared object name
+ -static do not do any dynamic linking of uninstalled libtool libraries
+ -static-libtool-libs
+ do not do any dynamic linking of libtool libraries
+@@ -5434,6 +5435,11 @@
+ prev=
+ continue
+ ;;
++ soname)
++ soname_spec="$arg"
++ prev=
++ continue
++ ;;
+ weak)
+ func_append weak_libs " $arg"
+ prev=
+@@ -5754,6 +5760,11 @@
+ continue
+ ;;
+
++ -soname)
++ prev=soname
++ continue
++ ;;
++
+ -static | -static-libtool-libs)
+ # The effects of -static are defined in a previous loop.
+ # We used to do the same as -all-static on platforms that
diff --git a/bacula-bat-build.patch b/bacula-bat-build.patch
new file mode 100644
index 0000000..f619814
--- /dev/null
+++ b/bacula-bat-build.patch
@@ -0,0 +1,39 @@
+diff -Naur bacula-11.0.0.old/src/qt-console/bat.pro.in bacula-11.0.0/src/qt-console/bat.pro.in
+--- bacula-11.0.0.old/src/qt-console/bat.pro.in 2021-01-12 12:36:32.639470258 +0100
++++ bacula-11.0.0/src/qt-console/bat.pro.in 2021-01-12 12:39:13.647417778 +0100
+@@ -6,7 +6,7 @@
+ #
+ # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ #
+-CONFIG += qt debug @QWT@
++CONFIG += qt release @QWT@
+
+ greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+@@ -15,7 +15,7 @@
+ bins.files = bat
+ confs.path = /$(DESTDIR)@sysconfdir@
+ confs.commands = ./install_conf_file
+-help.path = /$(DESTDIR)@docdir@
++help.path = /$(DESTDIR)@htmldir@
+ help.files = help/*.html images/status.png images/mail-message-new.png
+
+ TEMPLATE = app
+diff -Naur bacula-11.0.0.old/src/qt-console/main.cpp bacula-11.0.0/src/qt-console/main.cpp
+--- bacula-11.0.0.old/src/qt-console/main.cpp 2021-01-12 12:36:32.640470277 +0100
++++ bacula-11.0.0/src/qt-console/main.cpp 2021-01-12 12:39:13.647417778 +0100
+@@ -29,11 +29,11 @@
+ #include <QTranslator>
+
+ /*
+- * We need Qt version 4.8.4 or later to be able to comple correctly
++ * We need Qt version 4.6.2 or later to be able to comple correctly
+ */
+-#if QT_VERSION < 0x040804
++#if QT_VERSION < 0x040602
+ #error "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+-#error "You need Qt version 4.8.4 or later to build Bat"
++#error "You need Qt version 4.6.2 or later to build Bat"
+ #error "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ #endif
+
diff --git a/bacula-build-cdp-plugin.patch b/bacula-build-cdp-plugin.patch
new file mode 100644
index 0000000..9525a1e
--- /dev/null
+++ b/bacula-build-cdp-plugin.patch
@@ -0,0 +1,43 @@
+diff -Naur bacula-11.0.0.old/src/plugins/fd/Makefile.in bacula-11.0.0/src/plugins/fd/Makefile.in
+--- bacula-11.0.0.old/src/plugins/fd/Makefile.in 2021-01-15 14:28:41.375718846 +0100
++++ bacula-11.0.0/src/plugins/fd/Makefile.in 2021-01-15 14:37:51.212066769 +0100
+@@ -22,7 +22,7 @@
+ .c.lo:
+ $(LIBTOOL_COMPILE) $(CXX) $(DEFS) $(DEBUG) $(CPPFLAGS) $(CFLAGS) -I${SRCDIR} -I${FDDIR} -DTEST_PROGRAM -c $<
+
+-all: bpipe-fd.la test-plugin-fd.la test-deltaseq-fd.la pluglib.lo
++all: bpipe-fd.la cdp-fd.la test-plugin-fd.la test-deltaseq-fd.la pluglib.lo
+
+ example-plugin-fd.lo: example-plugin-fd.c ${FDDIR}/fd_plugins.h
+ $(LIBTOOL_COMPILE) $(CXX) $(DEFS) $(DEBUG) $(CPPFLAGS) $(CFLAGS) -I../.. -I${FDDIR} -c example-plugin-fd.c
+@@ -36,8 +36,6 @@
+ bpipe-fd.la: Makefile bpipe-fd$(DEFAULT_OBJECT_TYPE)
+ $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -shared bpipe-fd.lo -o $@ -rpath $(plugindir) -module -export-dynamic -avoid-version
+
+-cdp: cdp-fd.la
+-
+ cdp-fd.lo: cdp-fd.c journal.h folder-record.h file-record.h settings-record.h ${FDDIR}/fd_plugins.h
+ $(LIBTOOL_COMPILE) $(CXX) $(DEFS) $(DEBUG) $(CPPFLAGS) $(CFLAGS) -Wno-unused-function -I../.. -I${FDDIR} -c cdp-fd.c
+
+@@ -47,12 +45,6 @@
+ cdp-fd.la: Makefile cdp-fd$(DEFAULT_OBJECT_TYPE) journal.lo
+ $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -shared cdp-fd.lo journal.lo -o $@ -rpath $(plugindir) -module -export-dynamic -avoid-version
+
+-install-cdp: cdp-fd.la
+- $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) cdp-fd.la $(DESTDIR)$(plugindir)
+- $(RMF) $(DESTDIR)$(plugindir)/cdp-fd.la
+-
+-
+-
+ test-deltaseq-fd.lo: test-deltaseq-fd.c ${FDDIR}/fd_plugins.h fd_common.h
+ $(LIBTOOL_COMPILE) $(CXX) $(DEFS) $(DEBUG) $(CPPFLAGS) $(CFLAGS) -I../.. -I${FDDIR} -c test-deltaseq-fd.c
+
+@@ -69,6 +61,8 @@
+ $(MKDIR) $(DESTDIR)$(plugindir)
+ $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) bpipe-fd.la $(DESTDIR)$(plugindir)
+ $(RMF) $(DESTDIR)$(plugindir)/bpipe-fd.la
++ $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) cdp-fd.la $(DESTDIR)$(plugindir)
++ $(RMF) $(DESTDIR)$(plugindir)/cdp-fd.la
+
+ install-test-plugin: all
+ $(MKDIR) $(DESTDIR)$(plugindir)
diff --git a/bacula-desktop.patch b/bacula-desktop.patch
new file mode 100644
index 0000000..8f3371e
--- /dev/null
+++ b/bacula-desktop.patch
@@ -0,0 +1,34 @@
+diff -Naur bacula-9.6.5.old/scripts/bacula-tray-monitor.desktop.in bacula-9.6.5/scripts/bacula-tray-monitor.desktop.in
+--- bacula-9.6.5.old/scripts/bacula-tray-monitor.desktop.in 2020-07-24 09:11:40.976119619 +0200
++++ bacula-9.6.5/scripts/bacula-tray-monitor.desktop.in 2020-07-24 09:16:52.055851377 +0200
+@@ -5,6 +5,5 @@
+ Exec=@sbindir@/bacula-tray-monitor -c @sysconfdir@/bacula-tray-monitor.conf
+ Terminal=false
+ Type=Application
+-Encoding=UTF-8
+ X-Desktop-File-Install-Version=0.3
+-Categories=System;Application;Utility;X-Red-Hat-Base;
++Categories=System;Utility;
+diff -Naur bacula-9.6.5.old/scripts/bat.desktop.in bacula-9.6.5/scripts/bat.desktop.in
+--- bacula-9.6.5.old/scripts/bat.desktop.in 2020-07-24 09:11:40.976119619 +0200
++++ bacula-9.6.5/scripts/bat.desktop.in 2020-07-24 09:17:21.178294361 +0200
+@@ -5,7 +5,6 @@
+ Exec=@sbindir@/bat -c @sysconfdir@/bat.conf
+ Terminal=false
+ Type=Application
+-Encoding=UTF-8
+ StartupNotify=true
+ X-Desktop-File-Install-Version=0.3
+-Categories=System;Application;Utility;X-Red-Hat-Base;
++Categories=System;Utility;
+diff -Naur bacula-9.6.5.old/scripts/Makefile.in bacula-9.6.5/scripts/Makefile.in
+--- bacula-9.6.5.old/scripts/Makefile.in 2020-07-24 09:11:40.976119619 +0200
++++ bacula-9.6.5/scripts/Makefile.in 2020-07-24 09:17:57.725850277 +0200
+@@ -67,7 +67,6 @@
+ $(MV) -f ${DESTDIR}${scriptdir}/baculabackupreport ${DESTDIR}${scriptdir}/baculabackupreport.old; \
+ fi
+ $(INSTALL_SCRIPT) baculabackupreport $(DESTDIR)$(scriptdir)/baculabackupreport
+- $(INSTALL_SCRIPT) bacula-tray-monitor.desktop $(DESTDIR)$(scriptdir)/bacula-tray-monitor.desktop
+ chmod 0644 $(DESTDIR)$(scriptdir)/btraceback.gdb \
+ $(DESTDIR)$(scriptdir)/btraceback.dbx \
+ $(DESTDIR)$(scriptdir)/btraceback.mdb
diff --git a/bacula-dir.service b/bacula-dir.service
new file mode 100644
index 0000000..f7bd48e
--- /dev/null
+++ b/bacula-dir.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Bacula Director
+Documentation=man:bacula-dir(8)
+After=network.target nss-lookup.target
+
+[Service]
+Environment=CONFIG=/etc/bacula/bacula-dir.conf
+EnvironmentFile=-/etc/sysconfig/bacula-dir
+ExecStart=/usr/sbin/bacula-dir -f $OPTS -c $CONFIG -u $DIR_USER -g $DIR_GROUP
+Restart=on-failure
+
+[Install]
+WantedBy=multi-user.target
diff --git a/bacula-dir.sysconfig b/bacula-dir.sysconfig
new file mode 100644
index 0000000..4250591
--- /dev/null
+++ b/bacula-dir.sysconfig
@@ -0,0 +1,9 @@
+# User and group for bacula director
+# If no user is set bacula will run as root
+
+DIR_USER=bacula
+DIR_GROUP=bacula
+
+# Useful for debugging
+#
+# OPTS="-d 200"
diff --git a/bacula-docker-plugin.patch b/bacula-docker-plugin.patch
new file mode 100644
index 0000000..e005498
--- /dev/null
+++ b/bacula-docker-plugin.patch
@@ -0,0 +1,29 @@
+diff -Naur bacula-11.0.1.old/autoconf/configure.in bacula-11.0.1/autoconf/configure.in
+--- bacula-11.0.1.old/autoconf/configure.in 2021-02-11 14:12:19.547538024 +0100
++++ bacula-11.0.1/autoconf/configure.in 2021-02-11 14:12:25.803641252 +0100
+@@ -3240,20 +3240,11 @@
+ ]
+ )
+ if test x$support_docker = xyes -o x$support_docker = xauto; then
+- AC_CHECK_PROG(docker_bin, docker, yes, no, "/usr/bin/")
+- if test x$docker_bin = xyes; then
+- support_docker=yes
+- FD_PLUGIN_DIR="$FD_PLUGIN_DIR src/plugins/fd/docker"
+- PLUGCONFILES="${PLUGCONFILES} src/plugins/fd/docker/Makefile"
+- else
+- if test x$support_docker = xyes; then
+- echo " "
+- echo "You enabled a Docker Plugin build but 'docker' command not found."
+- echo " "
+- exit 1
+- fi
+- support_docker=no
+- fi
++ support_docker=yes
++ FD_PLUGIN_DIR="$FD_PLUGIN_DIR src/plugins/fd/docker"
++ PLUGCONFILES="${PLUGCONFILES} src/plugins/fd/docker/Makefile"
++else
++ support_docker=no
+ fi
+
+ AC_SUBST(FD_PLUGIN_DIR)
diff --git a/bacula-fd.service b/bacula-fd.service
new file mode 100644
index 0000000..2724c4b
--- /dev/null
+++ b/bacula-fd.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=Bacula File Daemon
+Documentation=man:bacula-fd(8)
+After=network.target nss-lookup.target
+
+[Service]
+Environment=CONFIG=/etc/bacula/bacula-fd.conf
+EnvironmentFile=-/etc/sysconfig/bacula-fd
+ExecStart=/usr/sbin/bacula-fd -f $OPTS -c $CONFIG -u $FD_USER -g $FD_GROUP
+IOSchedulingClass=idle
+Restart=on-failure
+
+[Install]
+WantedBy=multi-user.target
diff --git a/bacula-fd.sysconfig b/bacula-fd.sysconfig
new file mode 100644
index 0000000..09cae26
--- /dev/null
+++ b/bacula-fd.sysconfig
@@ -0,0 +1,21 @@
+# User and group for bacula client
+# If no user is set bacula will run as root
+
+FD_USER=root
+FD_GROUP=root
+
+# Useful for debugging
+#
+# OPTS="-d 200"
+
+
+# Set the following options if you want to run bacula-fd with ReadAll
+# capabilities after UID/GID switch.
+#
+# This allows the File Daemon to keep root read but drop write permission.
+# This, however, has the side effect of disabling backups of extended
+# attributes because this requires super user privileges.
+#
+# OPTS="-k"
+# FD_USER="bacula"
+# FD_GROUP="bacula"
diff --git a/bacula-g++-options.patch b/bacula-g++-options.patch
new file mode 100644
index 0000000..c99093f
--- /dev/null
+++ b/bacula-g++-options.patch
@@ -0,0 +1,15 @@
+diff -Naur bacula-11.0.1.old/autoconf/configure.in bacula-11.0.1/autoconf/configure.in
+--- bacula-11.0.1.old/autoconf/configure.in 2021-02-11 14:09:48.635047858 +0100
++++ bacula-11.0.1/autoconf/configure.in 2021-02-11 14:10:48.026027852 +0100
+@@ -3274,11 +3274,6 @@
+ AC_DEFINE(FDLIBS)
+
+ CFLAGS=${CFLAGS--O}
+-
+-if test x$have_gcc = xyes ; then
+- CPPFLAGS="$CPPFLAGS -x c++ -fno-strict-aliasing -fno-exceptions -fno-rtti"
+- CFLAGS="$CFLAGS -x c++ -fno-strict-aliasing -fno-exceptions -fno-rtti"
+-fi
+ LDFLAGS=${LDFLAGS--O}
+ CPPFLAGS="$CPPFLAGS"
+ CFLAGS="$CFLAGS"
diff --git a/bacula-install.patch b/bacula-install.patch
new file mode 100644
index 0000000..ecf7ceb
--- /dev/null
+++ b/bacula-install.patch
@@ -0,0 +1,48 @@
+diff -Naur bacula-11.0.1.old/autoconf/configure.in bacula-11.0.1/autoconf/configure.in
+--- bacula-11.0.1.old/autoconf/configure.in 2021-02-11 14:11:00.673236537 +0100
++++ bacula-11.0.1/autoconf/configure.in 2021-02-11 14:11:36.910834489 +0100
+@@ -3798,7 +3798,7 @@
+ cd src/qt-console
+ chmod 755 install_conf_file build-depkgs-qt-console
+ cd tray-monitor
+-chmod 755 install_conf_file
++chmod 755 install_conf_file build-depkgs-qt-console
+ cd ${BUILD_DIR}
+
+ cd scripts
+diff -Naur bacula-11.0.1.old/examples/nagios/check_bacula/Makefile.in bacula-11.0.1/examples/nagios/check_bacula/Makefile.in
+--- bacula-11.0.1.old/examples/nagios/check_bacula/Makefile.in 2021-02-11 14:09:48.630047776 +0100
++++ bacula-11.0.1/examples/nagios/check_bacula/Makefile.in 2021-02-11 14:11:07.708352620 +0100
+@@ -72,7 +72,7 @@
+ (cd $(srcdir); $(RMF) Makefile)
+
+ install: all
+- $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) check_bacula $(DESTDIR)$(sbindir)/check_bacula
++ $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) .libs/check_bacula $(DESTDIR)$(sbindir)/check_bacula
+
+ uninstall:
+ (cd $(DESTDIR)$(sbindir); $(RMF) check_bacula)
+diff -Naur bacula-11.0.1.old/src/qt-console/bat.pro.in bacula-11.0.1/src/qt-console/bat.pro.in
+--- bacula-11.0.1.old/src/qt-console/bat.pro.in 2021-02-11 14:09:48.599047264 +0100
++++ bacula-11.0.1/src/qt-console/bat.pro.in 2021-02-11 14:11:07.742353181 +0100
+@@ -12,7 +12,7 @@
+
+ datarootdir = @datarootdir@
+ bins.path = /$(DESTDIR)@sbindir@
+-bins.files = bat
++bins.files = .libs/bat
+ confs.path = /$(DESTDIR)@sysconfdir@
+ confs.commands = ./install_conf_file
+ help.path = /$(DESTDIR)@htmldir@
+diff -Naur bacula-11.0.1.old/src/qt-console/tray-monitor/tray-monitor.pro.in bacula-11.0.1/src/qt-console/tray-monitor/tray-monitor.pro.in
+--- bacula-11.0.1.old/src/qt-console/tray-monitor/tray-monitor.pro.in 2021-02-11 14:09:48.603047330 +0100
++++ bacula-11.0.1/src/qt-console/tray-monitor/tray-monitor.pro.in 2021-02-11 14:11:07.743353198 +0100
+@@ -26,7 +26,7 @@
+
+
+ bins.path = /$(DESTDIR)@sbindir@
+-bins.files = bacula-tray-monitor
++bins.files = .libs/bacula-tray-monitor
+ confs.path = /$(DESTDIR)@sysconfdir@
+ confs.commands = ./install_conf_file
+
diff --git a/bacula-logwatch.patch b/bacula-logwatch.patch
new file mode 100644
index 0000000..410893b
--- /dev/null
+++ b/bacula-logwatch.patch
@@ -0,0 +1,9 @@
+diff --git a/scripts/logwatch/logfile.bacula.conf.in b/scripts/logwatch/logfile.bacula.conf.in
+index 22b6e98..5d257ca 100644
+--- a/scripts/logwatch/logfile.bacula.conf.in
++++ b/scripts/logwatch/logfile.bacula.conf.in
+@@ -1,3 +1,3 @@
+ # What actual file? Defaults to LogPath if not absolute path....
+-LogFile = @logdir@/bacula.log
++LogFile = @logdir@/*.log
+
diff --git a/bacula-nagios.patch b/bacula-nagios.patch
new file mode 100644
index 0000000..10ea77a
--- /dev/null
+++ b/bacula-nagios.patch
@@ -0,0 +1,13 @@
+diff -Naur bacula-11.0.0.old/examples/nagios/check_bacula/Makefile.in bacula-11.0.0/examples/nagios/check_bacula/Makefile.in
+--- bacula-11.0.0.old/examples/nagios/check_bacula/Makefile.in 2021-01-15 14:28:41.415719526 +0100
++++ bacula-11.0.0/examples/nagios/check_bacula/Makefile.in 2021-01-15 15:01:26.371678793 +0100
+@@ -72,7 +72,8 @@
+ (cd $(srcdir); $(RMF) Makefile)
+
+ install: all
+- $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) .libs/check_bacula $(DESTDIR)$(sbindir)/check_bacula
++ $(MKDIR) $(DESTDIR)$(libdir)/nagios/plugins
++ $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) .libs/check_bacula $(DESTDIR)$(libdir)/nagios/plugins/check_bacula
+
+ uninstall:
+ (cd $(DESTDIR)$(sbindir); $(RMF) check_bacula)
diff --git a/bacula-non-free-code.patch b/bacula-non-free-code.patch
new file mode 100644
index 0000000..6e1b571
--- /dev/null
+++ b/bacula-non-free-code.patch
@@ -0,0 +1,696 @@
+diff -Naur bacula-11.0.1.old/src/lib/lib.h bacula-11.0.1/src/lib/lib.h
+--- bacula-11.0.1.old/src/lib/lib.h 2021-02-11 14:09:48.598047248 +0100
++++ bacula-11.0.1/src/lib/lib.h 2021-02-11 14:10:04.432308524 +0100
+@@ -57,7 +57,6 @@
+ #include "fnmatch.h"
+ #endif
+ #include "md5.h"
+-#include "sha1.h"
+ #include "tree.h"
+ #include "watchdog.h"
+ #include "btimers.h"
+diff -Naur bacula-11.0.1.old/src/lib/Makefile.in bacula-11.0.1/src/lib/Makefile.in
+--- bacula-11.0.1.old/src/lib/Makefile.in 2021-02-11 14:09:48.598047248 +0100
++++ bacula-11.0.1/src/lib/Makefile.in 2021-02-11 14:10:04.433308540 +0100
+@@ -40,7 +40,7 @@
+ flist.h fnmatch.h guid_to_name.h htable.h lex.h \
+ lib.h lz4.h md5.h mem_pool.h message.h \
+ openssl.h plugins.h protos.h queue.h rblist.h \
+- runscript.h rwlock.h serial.h sellist.h sha1.h sha2.h \
++ runscript.h rwlock.h serial.h sellist.h sha2.h \
+ smartall.h status.h tls.h tree.h var.h \
+ waitq.h watchdog.h workq.h \
+ parse_conf.h ini.h \
+@@ -57,7 +57,7 @@
+ guid_to_name.c hmac.c jcr.c lex.c lz4.c alist.c dlist.c \
+ md5.c message.c mem_pool.c openssl.c \
+ plugins.c priv.c queue.c bregex.c bsockcore.c \
+- runscript.c rwlock.c scan.c sellist.c serial.c sha1.c sha2.c \
++ runscript.c rwlock.c scan.c sellist.c serial.c sha2.c \
+ signal.c smartall.c rblist.c tls.c tree.c \
+ util.c var.c watchdog.c workq.c btimers.c \
+ worker.c flist.c bcollector.c collect.c \
+@@ -286,22 +286,6 @@
+ $(RMF) md5.o
+ $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) md5.c
+
+-sha1sum: Makefile libbac.la sha1.c
+- $(RMF) sha1.o
+- $(CXX) -DSHA1_SUM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) sha1.c
+- $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ sha1.o $(DLIB) -lbac -lm $(LIBS) $(OPENSSL_LIBS)
+- $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/
+- $(RMF) sha1.o
+- $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) sha1.c
+-
+-sha1_test: Makefile libbac.la sha1.c unittests.o
+- $(RMF) sha1.o
+- $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) sha1.c
+- $(LIBTOOL_LINK) $(CXX) $(LDFLAGS) -L. -o $@ sha1.o unittests.o $(DLIB) -lbac -lm $(LIBS)
+- $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) $@ $(DESTDIR)$(sbindir)/
+- $(RMF) sha1.o
+- $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) sha1.c
+-
+ bsnprintf_test: Makefile libbac.la bsnprintf.c unittests.o
+ $(RMF) bsnprintf.o
+ $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) bsnprintf.c
+@@ -397,7 +381,7 @@
+
+ clean: libtool-clean
+ @$(RMF) core a.out *.o *.bak *.tex *.pdf *~ *.intpro *.extpro 1 2 3
+- @$(RMF) rwlock_test md5sum sha1sum
++ @$(RMF) rwlock_test md5sum
+
+ realclean: clean
+ @$(RMF) tags
+diff -Naur bacula-11.0.1.old/src/lib/sha1.c bacula-11.0.1/src/lib/sha1.c
+--- bacula-11.0.1.old/src/lib/sha1.c 2021-02-11 14:09:48.598047248 +0100
++++ bacula-11.0.1/src/lib/sha1.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,517 +0,0 @@
+-/*
+- * sha1.c
+- *
+- * Description:
+- * This file implements the Secure Hashing Algorithm 1 as
+- * defined in FIPS PUB 180-1 published April 17, 1995.
+- *
+- * The SHA-1, produces a 160-bit message digest for a given
+- * data stream. It should take about 2**n steps to find a
+- * message with the same digest as a given message and
+- * 2**(n/2) to find any two messages with the same digest,
+- * when n is the digest size in bits. Therefore, this
+- * algorithm can serve as a means of providing a
+- * "fingerprint" for a message.
+- *
+- * Portability Issues:
+- * SHA-1 is defined in terms of 32-bit "words". This code
+- * uses <stdint.h> (included via "sha1.h" to define 32 and 8
+- * bit unsigned integer types. If your C compiler does not
+- * support 32 bit unsigned integers, this code is not
+- * appropriate.
+- *
+- * Caveats:
+- * SHA-1 is designed to work with messages less than 2^64 bits
+- * long. Although SHA-1 allows a message digest to be generated
+- * for messages of any number of bits less than 2^64, this
+- * implementation only works with messages with a length that is
+- * a multiple of the size of an 8-bit character.
+- *
+- * See sha1.h for copyright
+- */
+-
+-#include "sha1.h"
+-
+-/*
+- * Define the SHA1 circular left shift macro
+- */
+-#define SHA1CircularShift(bits,word) \
+- (((word) << (bits)) | ((word) >> (32-(bits))))
+-
+-/* Local Function Prototyptes */
+-static void SHA1PadMessage(SHA1Context *);
+-static void SHA1ProcessMessageBlock(SHA1Context *);
+-
+-/*
+- * SHA1Init
+- *
+- * Description:
+- * This function will initialize the SHA1Context in preparation
+- * for computing a new SHA1 message digest.
+- *
+- * Parameters:
+- * context: [in/out]
+- * The context to reset.
+- *
+- * Returns:
+- * sha Error Code.
+- *
+- */
+-int SHA1Init(SHA1Context *context)
+-{
+- if (!context)
+- {
+- return shaNull;
+- }
+-
+- context->Length_Low = 0;
+- context->Length_High = 0;
+- context->Message_Block_Index = 0;
+-
+- context->Intermediate_Hash[0] = 0x67452301;
+- context->Intermediate_Hash[1] = 0xEFCDAB89;
+- context->Intermediate_Hash[2] = 0x98BADCFE;
+- context->Intermediate_Hash[3] = 0x10325476;
+- context->Intermediate_Hash[4] = 0xC3D2E1F0;
+-
+- context->Computed = 0;
+- context->Corrupted = 0;
+-
+- return shaSuccess;
+-}
+-
+-/*
+- * SHA1Final
+- *
+- * Description:
+- * This function will return the 160-bit message digest into the
+- * Message_Digest array provided by the caller.
+- * NOTE: The first octet of hash is stored in the 0th element,
+- * the last octet of hash in the 19th element.
+- *
+- * Parameters:
+- * context: [in/out]
+- * The context to use to calculate the SHA-1 hash.
+- * Message_Digest: [out]
+- * Where the digest is returned.
+- *
+- * Returns:
+- * sha Error Code.
+- *
+- */
+-int SHA1Final(SHA1Context *context,
+- uint8_t Message_Digest[SHA1HashSize])
+-{
+- int i;
+-
+- if (!context || !Message_Digest) {
+- return shaNull;
+- }
+-
+- if (context->Corrupted) {
+- return context->Corrupted;
+- }
+-
+- if (!context->Computed) {
+- SHA1PadMessage(context);
+- for(i=0; i<64; ++i) {
+- /* message may be sensitive, clear it out */
+- context->Message_Block[i] = 0;
+- }
+- context->Length_Low = 0; /* and clear length */
+- context->Length_High = 0;
+- context->Computed = 1;
+-
+- }
+-
+- for(i = 0; i < SHA1HashSize; ++i) {
+- Message_Digest[i] = context->Intermediate_Hash[i>>2]
+- >> 8 * ( 3 - ( i & 0x03 ) );
+- }
+-
+- return shaSuccess;
+-}
+-
+-/*
+- * SHA1Update
+- *
+- * Description:
+- * This function accepts an array of octets as the next portion
+- * of the message.
+- *
+- * Parameters:
+- * context: [in/out]
+- * The SHA context to update
+- * message_array: [in]
+- * An array of characters representing the next portion of
+- * the message.
+- * length: [in]
+- * The length of the message in message_array
+- *
+- * Returns:
+- * sha Error Code.
+- *
+- */
+-int SHA1Update(SHA1Context *context,
+- const uint8_t *message_array,
+- unsigned length)
+-{
+- if (!length) {
+- return shaSuccess;
+- }
+-
+- if (!context || !message_array) {
+- return shaNull;
+- }
+-
+- if (context->Computed) {
+- context->Corrupted = shaStateError;
+-
+- return shaStateError;
+- }
+-
+- if (context->Corrupted) {
+- return context->Corrupted;
+- }
+- while(length-- && !context->Corrupted) {
+- context->Message_Block[context->Message_Block_Index++] =
+- (*message_array & 0xFF);
+-
+- context->Length_Low += 8;
+- if (context->Length_Low == 0) {
+- context->Length_High++;
+- if (context->Length_High == 0) {
+- /* Message is too long */
+- context->Corrupted = 1;
+- }
+- }
+-
+- if (context->Message_Block_Index == 64) {
+- SHA1ProcessMessageBlock(context);
+- }
+-
+- message_array++;
+- }
+-
+- return shaSuccess;
+-}
+-
+-/*
+- * SHA1ProcessMessageBlock
+- *
+- * Description:
+- * This function will process the next 512 bits of the message
+- * stored in the Message_Block array.
+- *
+- * Parameters:
+- * None.
+- *
+- * Returns:
+- * Nothing.
+- *
+- * Comments:
+-
+- * Many of the variable names in this code, especially the
+- * single character names, were used because those were the
+- * names used in the publication.
+- *
+- *
+- */
+-static void SHA1ProcessMessageBlock(SHA1Context *context)
+-{
+- const uint32_t K[] = { /* Constants defined in SHA-1 */
+- 0x5A827999,
+- 0x6ED9EBA1,
+- 0x8F1BBCDC,
+- 0xCA62C1D6
+- };
+- int t; /* Loop counter */
+- uint32_t temp; /* Temporary word value */
+- uint32_t W[80]; /* Word sequence */
+- uint32_t A, B, C, D, E; /* Word buffers */
+-
+- /*
+- * Initialize the first 16 words in the array W
+- */
+- for(t = 0; t < 16; t++) {
+- W[t] = context->Message_Block[t * 4] << 24;
+- W[t] |= context->Message_Block[t * 4 + 1] << 16;
+- W[t] |= context->Message_Block[t * 4 + 2] << 8;
+- W[t] |= context->Message_Block[t * 4 + 3];
+- }
+-
+- for(t = 16; t < 80; t++) {
+- W[t] = SHA1CircularShift(1,W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16]);
+- }
+-
+- A = context->Intermediate_Hash[0];
+- B = context->Intermediate_Hash[1];
+- C = context->Intermediate_Hash[2];
+- D = context->Intermediate_Hash[3];
+- E = context->Intermediate_Hash[4];
+-
+- for(t = 0; t < 20; t++) {
+- temp = SHA1CircularShift(5,A) +
+- ((B & C) | ((~B) & D)) + E + W[t] + K[0];
+- E = D;
+- D = C;
+- C = SHA1CircularShift(30,B);
+-
+- B = A;
+- A = temp;
+- }
+-
+- for(t = 20; t < 40; t++) {
+- temp = SHA1CircularShift(5,A) + (B ^ C ^ D) + E + W[t] + K[1];
+- E = D;
+- D = C;
+- C = SHA1CircularShift(30,B);
+- B = A;
+- A = temp;
+- }
+-
+- for(t = 40; t < 60; t++) {
+- temp = SHA1CircularShift(5,A) +
+- ((B & C) | (B & D) | (C & D)) + E + W[t] + K[2];
+- E = D;
+- D = C;
+- C = SHA1CircularShift(30,B);
+- B = A;
+- A = temp;
+- }
+-
+- for(t = 60; t < 80; t++) {
+- temp = SHA1CircularShift(5,A) + (B ^ C ^ D) + E + W[t] + K[3];
+- E = D;
+- D = C;
+- C = SHA1CircularShift(30,B);
+- B = A;
+- A = temp;
+- }
+-
+- context->Intermediate_Hash[0] += A;
+- context->Intermediate_Hash[1] += B;
+- context->Intermediate_Hash[2] += C;
+- context->Intermediate_Hash[3] += D;
+- context->Intermediate_Hash[4] += E;
+-
+- context->Message_Block_Index = 0;
+-}
+-
+-/*
+- * SHA1PadMessage
+- *
+-
+- * Description:
+- * According to the standard, the message must be padded to an even
+- * 512 bits. The first padding bit must be a '1'. The last 64
+- * bits represent the length of the original message. All bits in
+- * between should be 0. This function will pad the message
+- * according to those rules by filling the Message_Block array
+- * accordingly. It will also call the ProcessMessageBlock function
+- * provided appropriately. When it returns, it can be assumed that
+- * the message digest has been computed.
+- *
+- * Parameters:
+- * context: [in/out]
+- * The context to pad
+- * ProcessMessageBlock: [in]
+- * The appropriate SHA*ProcessMessageBlock function
+- * Returns:
+- * Nothing.
+- *
+- */
+-
+-static void SHA1PadMessage(SHA1Context *context)
+-{
+- /*
+- * Check to see if the current message block is too small to hold
+- * the initial padding bits and length. If so, we will pad the
+- * block, process it, and then continue padding into a second
+- * block.
+- */
+- if (context->Message_Block_Index > 55) {
+- context->Message_Block[context->Message_Block_Index++] = 0x80;
+- while(context->Message_Block_Index < 64) {
+- context->Message_Block[context->Message_Block_Index++] = 0;
+- }
+-
+- SHA1ProcessMessageBlock(context);
+-
+- while(context->Message_Block_Index < 56) {
+- context->Message_Block[context->Message_Block_Index++] = 0;
+- }
+- } else {
+- context->Message_Block[context->Message_Block_Index++] = 0x80;
+- while(context->Message_Block_Index < 56) {
+-
+- context->Message_Block[context->Message_Block_Index++] = 0;
+- }
+- }
+-
+- /*
+- * Store the message length as the last 8 octets
+- */
+- context->Message_Block[56] = context->Length_High >> 24;
+- context->Message_Block[57] = context->Length_High >> 16;
+- context->Message_Block[58] = context->Length_High >> 8;
+- context->Message_Block[59] = context->Length_High;
+- context->Message_Block[60] = context->Length_Low >> 24;
+- context->Message_Block[61] = context->Length_Low >> 16;
+- context->Message_Block[62] = context->Length_Low >> 8;
+- context->Message_Block[63] = context->Length_Low;
+-
+- SHA1ProcessMessageBlock(context);
+-}
+-
+-
+-#ifndef TEST_PROGRAM
+-#define TEST_PROGRAM_A
+-#endif
+-
+-#ifdef TEST_PROGRAM
+-/*
+- * sha1test.c
+- *
+- * Description:
+- * This file will exercise the SHA-1 code performing the three
+- * tests documented in FIPS PUB 180-1 plus one which calls
+- * SHA1Input with an exact multiple of 512 bits, plus a few
+- * error test checks.
+- *
+- * Portability Issues:
+- * None.
+- *
+- */
+-
+-#include <stdint.h>
+-#include <stdio.h>
+-#include <string.h>
+-#include "sha1.h"
+-#include "unittests.h"
+-
+-#define NRTESTS 4
+-
+-/*
+- * Define patterns for testing
+- */
+-#define TEST1 "abc"
+-#define TEST2a "abcdbcdecdefdefgefghfghighijhi"
+-
+-#define TEST2b "jkijkljklmklmnlmnomnopnopq"
+-#define TEST2 TEST2a TEST2b
+-#define TEST3 "a"
+-#define TEST4a "01234567012345670123456701234567"
+-#define TEST4b "01234567012345670123456701234567"
+- /* an exact multiple of 512 bits */
+-#define TEST4 TEST4a TEST4b
+-
+-const char *testarray[NRTESTS] =
+-{
+- TEST1,
+- TEST2,
+- TEST3,
+- TEST4
+-};
+-
+-int repeatcount[NRTESTS] = { 1, 1, 1000000, 10 };
+-
+-const uint8_t resultarray[NRTESTS][20] =
+-{
+- { 0xA9, 0x99, 0x3E, 0x36, 0x47, 0x06, 0x81, 0x6A, 0xBA, 0x3E, 0x25, 0x71, 0x78, 0x50, 0xC2, 0x6C, 0x9C, 0xD0, 0xD8, 0x9D },
+- { 0x84, 0x98, 0x3E, 0x44, 0x1C, 0x3B, 0xD2, 0x6E, 0xBA, 0xAE, 0x4A, 0xA1, 0xF9, 0x51, 0x29, 0xE5, 0xE5, 0x46, 0x70, 0xF1 },
+- { 0x34, 0xAA, 0x97, 0x3C, 0xD4, 0xC4, 0xDA, 0xA4, 0xF6, 0x1E, 0xEB, 0x2B, 0xDB, 0xAD, 0x27, 0x31, 0x65, 0x34, 0x01, 0x6F },
+- { 0xDE, 0xA3, 0x56, 0xA2, 0xCD, 0xDD, 0x90, 0xC7, 0xA7, 0xEC, 0xED, 0xC5, 0xEB, 0xB5, 0x63, 0x93, 0x4F, 0x46, 0x04, 0x52 },
+-};
+-
+-int main()
+-{
+- Unittests sha1_test("sha1_test");
+- SHA1Context sha;
+- int i, j, err;
+- uint8_t Message_Digest[20];
+- bool check_cont;
+- bool ct;
+-
+- /*
+- * Perform SHA-1 tests
+- */
+- for(j = 0; j < 4; ++j) {
+- // printf( "\nTest %d: %d, '%s'\n", j+1, repeatcount[j], testarray[j]);
+- err = SHA1Init(&sha);
+- nok(err, "Test SHA1Init");
+- if (err) {
+- break; /* out of for j loop */
+- }
+- ct = true;
+- for(i = 0; i < repeatcount[j]; ++i) {
+- err = SHA1Update(&sha, (const unsigned char *) testarray[j], strlen(testarray[j]));
+- if (i < 5){
+- nok(err, "Test SHA1Update");
+- }
+- if (ct && repeatcount[j] > 4 && i > 4){
+- ct = false;
+- printf("...\n");
+- }
+- if (err) {
+- nok(err, "Test SHA1Update");
+- break; /* out of for i loop */
+- }
+- }
+-
+- err = SHA1Final(&sha, Message_Digest);
+- nok(err, "Test SHA1Final");
+- check_cont = true;
+- for(i = 0; i < 20 ; ++i) {
+- if (Message_Digest[i] != resultarray[j][i]){
+- check_cont = false;
+- }
+- }
+- ok(check_cont, "Checking expected result");
+- }
+-
+- /* Test some error returns */
+- err = SHA1Update(&sha,(const unsigned char *) testarray[1], 1);
+- ok(err == shaStateError, "Checking for shaStateError");
+- err = SHA1Init(0);
+- ok(err == shaNull, "Checking for shaNull");
+-
+- return report();
+-}
+-
+-#endif /* TEST_PROGRAM */
+-
+-#ifdef SHA1_SUM
+-/*
+- * Reads a single ASCII file and prints the HEX sha1 sum.
+- */
+-#include <stdio.h>
+-int main(int argc, char *argv[])
+-{
+- FILE *fd;
+- SHA1Context ctx;
+- char buf[5000];
+- char signature[25];
+-
+- if (argc < 1) {
+- printf("Must have filename\n");
+- exit(1);
+- }
+- fd = fopen(argv[1], "rb");
+- if (!fd) {
+- berrno be;
+- printf("Could not open %s: ERR=%s\n", argv[1], be.bstrerror(errno));
+- exit(1);
+- }
+- SHA1Init(&ctx);
+- while (fgets(buf, sizeof(buf), fd)) {
+- SHA1Update(&ctx, (unsigned char *)buf, strlen(buf));
+- }
+- SHA1Final(&ctx, (unsigned char *)signature);
+- for (int i=0; i < 20; i++) {
+- printf("%02x", signature[i]& 0xFF);
+- }
+- printf(" %s\n", argv[1]);
+- fclose(fd);
+-}
+-#endif /* SHA1_SUM */
+diff -Naur bacula-11.0.1.old/src/lib/sha1.h bacula-11.0.1/src/lib/sha1.h
+--- bacula-11.0.1.old/src/lib/sha1.h 2021-02-11 14:09:48.599047264 +0100
++++ bacula-11.0.1/src/lib/sha1.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,107 +0,0 @@
+-/*
+- * sha1.h
+- *
+- * Description:
+- * This is the header file for code which implements the Secure
+- * Hashing Algorithm 1 as defined in FIPS PUB 180-1 published
+- * April 17, 1995.
+- *
+- * Many of the variable names in this code, especially the
+- * single character names, were used because those were the names
+- * used in the publication.
+- *
+- * Please read the file sha1.c for more information.
+- *
+- * Full Copyright Statement
+- *
+- * Copyright (C) The Internet Society (2001). All Rights Reserved.
+- *
+- * This document and translations of it may be copied and furnished to
+- * others, and derivative works that comment on or otherwise explain it
+- * or assist in its implementation may be prepared, copied, published
+- * and distributed, in whole or in part, without restriction of any
+- * kind, provided that the above copyright notice and this paragraph are
+- * included on all such copies and derivative works. However, this
+- * document itself may not be modified in any way, such as by removing
+- * the copyright notice or references to the Internet Society or other
+- * Internet organizations, except as needed for the purpose of
+- * developing Internet standards in which case the procedures for
+- * copyrights defined in the Internet Standards process must be
+- * followed, or as required to translate it into languages other than
+- * English.
+- *
+- * The limited permissions granted above are perpetual and will not be
+- * revoked by the Internet Society or its successors or assigns.
+- *
+- * This document and the information contained herein is provided on an
+- * "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
+- * TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+- * BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
+- * HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
+- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+- *
+- * Acknowledgement
+- *
+- * Funding for the RFC Editor function is currently provided by the
+- * Internet Society.
+- *
+- */
+-
+-#ifndef _SHA1_H_
+-#define _SHA1_H_
+-
+-#include "bacula.h"
+-
+-/*
+- * If you do not have the ISO standard stdint.h header file, then you
+- * must typdef the following:
+- * name meaning
+- * uint32_t unsigned 32 bit integer
+- * uint8_t unsigned 8 bit integer (i.e., unsigned char)
+- * int32_t integer of 32 bits
+- *
+- */
+-
+-#ifndef _SHA_enum_
+-#define _SHA_enum_
+-enum
+-{
+- shaSuccess = 0,
+- shaNull, /* Null pointer parameter */
+- shaInputTooLong, /* input data too long */
+- shaStateError /* called Input after Result */
+-};
+-#endif
+-#define SHA1HashSize 20
+-
+-/*
+- * This structure will hold context information for the SHA-1
+- * hashing operation
+- */
+-typedef struct SHA1Context
+-{
+- uint32_t Intermediate_Hash[SHA1HashSize/4]; /* Message Digest */
+-
+- uint32_t Length_Low; /* Message length in bits */
+- uint32_t Length_High; /* Message length in bits */
+-
+- /* Index into message block array */
+- int32_t Message_Block_Index;
+- uint8_t Message_Block[64]; /* 512-bit message blocks */
+-
+- int Computed; /* Is the digest computed? */
+- int Corrupted; /* Is the message digest corrupted? */
+-} SHA1Context;
+-
+-/*
+- * Function Prototypes
+- */
+-
+-int SHA1Init(SHA1Context *);
+-int SHA1Update(SHA1Context *,
+- const uint8_t *,
+- unsigned int);
+-int SHA1Final(SHA1Context *,
+- uint8_t Message_Digest[SHA1HashSize]);
+-
+-#endif
diff --git a/bacula-openssl.patch b/bacula-openssl.patch
new file mode 100644
index 0000000..1d87083
--- /dev/null
+++ b/bacula-openssl.patch
@@ -0,0 +1,43 @@
+diff -Naur bacula-11.0.1.old/src/lib/crypto.c bacula-11.0.1/src/lib/crypto.c
+--- bacula-11.0.1.old/src/lib/crypto.c 2021-02-11 14:08:38.220885976 +0100
++++ bacula-11.0.1/src/lib/crypto.c 2021-02-11 14:08:42.518956898 +0100
+@@ -42,7 +42,7 @@
+ * For OpenSSL version 1.x, EVP_PKEY_encrypt no longer
+ * exists. It was not an official API.
+ */
+-#ifdef HAVE_OPENSSLv1
++#if (OPENSSL_VERSION_NUMBER >= 0x10000000L)
+ #define EVP_PKEY_encrypt EVP_PKEY_encrypt_old
+ #define EVP_PKEY_decrypt EVP_PKEY_decrypt_old
+ #endif
+diff -Naur bacula-11.0.1.old/src/lib/tls.c bacula-11.0.1/src/lib/tls.c
+--- bacula-11.0.1.old/src/lib/tls.c 2021-02-11 14:08:38.218885943 +0100
++++ bacula-11.0.1/src/lib/tls.c 2021-02-11 14:08:42.565957674 +0100
+@@ -47,9 +47,6 @@
+
+ #include "openssl-compat.h"
+
+-/* No anonymous ciphers, no <128 bit ciphers, no export ciphers, no MD5 ciphers */
+-#define TLS_DEFAULT_CIPHERS "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"
+-
+ /* TLS Context Structure */
+ struct TLS_Context {
+ SSL_CTX *openssl;
+@@ -350,7 +347,7 @@
+ SSL_CTX_set_options(ctx->openssl, SSL_OP_SINGLE_DH_USE);
+ }
+
+- if (SSL_CTX_set_cipher_list(ctx->openssl, TLS_DEFAULT_CIPHERS) != 1) {
++ if (SSL_CTX_set_cipher_list(ctx->openssl, "PROFILE=SYSTEM") != 1) {
+ Jmsg0(NULL, M_ERROR, 0,
+ _("Error setting cipher list, no valid ciphers available\n"));
+ goto err;
+@@ -551,7 +548,7 @@
+ extname = OBJ_nid2sn(OBJ_obj2nid(X509_EXTENSION_get_object(ext)));
+
+ if (strcmp(extname, "subjectAltName") == 0) {
+-#ifdef HAVE_OPENSSLv1
++#if (OPENSSL_VERSION_NUMBER >= 0x10000000L)
+ const X509V3_EXT_METHOD *method;
+ #else
+ X509V3_EXT_METHOD *method;
diff --git a/bacula-queryfile.patch b/bacula-queryfile.patch
new file mode 100644
index 0000000..16b8312
--- /dev/null
+++ b/bacula-queryfile.patch
@@ -0,0 +1,39 @@
+diff -Naur bacula-11.0.0.old/src/dird/bacula-dir.conf.in bacula-11.0.0/src/dird/bacula-dir.conf.in
+--- bacula-11.0.0.old/src/dird/bacula-dir.conf.in 2021-01-12 12:36:32.650470459 +0100
++++ bacula-11.0.0/src/dird/bacula-dir.conf.in 2021-01-12 12:36:38.297573839 +0100
+@@ -18,7 +18,7 @@
+ Director { # define myself
+ Name = @basename@-dir
+ DIRport = @dir_port@ # where we listen for UA connections
+- QueryFile = "@scriptdir@/query.sql"
++ QueryFile = "@sysconfdir@/query.sql"
+ WorkingDirectory = "@working_dir@"
+ PidDirectory = "@piddir@"
+ Maximum Concurrent Jobs = 20
+diff -Naur bacula-11.0.0.old/src/dird/Makefile.in bacula-11.0.0/src/dird/Makefile.in
+--- bacula-11.0.0.old/src/dird/Makefile.in 2021-01-12 12:36:32.657470588 +0100
++++ bacula-11.0.0/src/dird/Makefile.in 2021-01-12 12:37:37.827663637 +0100
+@@ -125,11 +125,11 @@
+ @if test "x${dir_group}" != "x"; then \
+ chgrp -f ${dir_group} ${DESTDIR}${sysconfdir}/$$destconf ; \
+ fi
+- @if test -f ${DESTDIR}${scriptdir}/query.sql; then \
++ @if test -f ${DESTDIR}${sysconfdir}/query.sql; then \
+ echo " ==> Saving existing query.sql to query.sql.old"; \
+- $(MV) -f ${DESTDIR}${scriptdir}/query.sql ${DESTDIR}${scriptdir}/query.sql.old; \
++ $(MV) -f ${DESTDIR}${sysconfdir}/query.sql ${DESTDIR}${sysconfdir}/query.sql.old; \
+ fi
+- ${INSTALL_DATA} query.sql ${DESTDIR}${scriptdir}/query.sql
++ ${INSTALL_DATA} query.sql ${DESTDIR}${sysconfdir}/query.sql
+ @if test -f static-bacula-dir; then \
+ $(LIBTOOL_INSTALL) $(INSTALL_PROGRAM) static-bacula-dir $(DESTDIR)$(sbindir)/static-bacula-dir; \
+ fi
+@@ -138,7 +138,7 @@
+ uninstall:
+ (cd $(DESTDIR)$(sbindir); $(RMF) bacula-dir bdirjson)
+ (cd $(DESTDIR)$(sysconfdir); $(RMF) bacula-dir.conf bacula-dir.conf.new)
+- (cd $(DESTDIR)$(scriptdir); $(RMF) query.sql)
++ (cd $(DESTDIR)$(sysconfdir); $(RMF) query.sql)
+
+
+
diff --git a/bacula-sd.service b/bacula-sd.service
new file mode 100644
index 0000000..e05e94b
--- /dev/null
+++ b/bacula-sd.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Bacula Storage Daemon
+Documentation=man:bacula-sd(8)
+After=network.target nss-lookup.target
+
+[Service]
+Environment=CONFIG=/etc/bacula/bacula-sd.conf
+EnvironmentFile=-/etc/sysconfig/bacula-sd
+ExecStart=/usr/sbin/bacula-sd -f $OPTS -c $CONFIG -u $SD_USER -g $SD_GROUP
+Restart=on-failure
+
+[Install]
+WantedBy=multi-user.target
diff --git a/bacula-sd.sysconfig b/bacula-sd.sysconfig
new file mode 100644
index 0000000..d3c5c48
--- /dev/null
+++ b/bacula-sd.sysconfig
@@ -0,0 +1,9 @@
+# Users for bacula storage
+# If no user is set bacula will run as root
+
+SD_USER=bacula
+SD_GROUP=tape
+
+# Useful for debugging
+#
+# OPTS="-d 200"
diff --git a/bacula-seg-fault.patch b/bacula-seg-fault.patch
new file mode 100644
index 0000000..be28655
--- /dev/null
+++ b/bacula-seg-fault.patch
@@ -0,0 +1,21 @@
+diff -Naur bacula-11.0.0.old/src/lib/message.c bacula-11.0.0/src/lib/message.c
+--- bacula-11.0.0.old/src/lib/message.c 2021-01-12 12:36:32.630470094 +0100
++++ bacula-11.0.0/src/lib/message.c 2021-01-12 12:39:42.477945569 +0100
+@@ -28,6 +28,7 @@
+ *
+ */
+
++#include <assert.h>
+ #include "bacula.h"
+ #include "jcr.h"
+
+@@ -1476,7 +1477,8 @@
+
+ if (type == M_ABORT) {
+ char *p = 0;
+- p[0] = 0; /* generate segmentation violation */
++ // p[0] = 0; /* generate segmentation violation */
++ assert(p!=NULL);
+ }
+ if (type == M_ERROR_TERM) {
+ exit(1);
diff --git a/bacula-sqlite-priv.patch b/bacula-sqlite-priv.patch
new file mode 100644
index 0000000..20b0fb7
--- /dev/null
+++ b/bacula-sqlite-priv.patch
@@ -0,0 +1,9 @@
+diff -Naur bacula-11.0.0.old/src/cats/make_sqlite3_tables.in bacula-11.0.0/src/cats/make_sqlite3_tables.in
+--- bacula-11.0.0.old/src/cats/make_sqlite3_tables.in 2021-01-12 12:36:32.660470643 +0100
++++ bacula-11.0.0/src/cats/make_sqlite3_tables.in 2021-01-12 12:38:45.241897767 +0100
+@@ -555,4 +555,5 @@
+ echo ""
+
+ chmod 640 ${db_name}.db
++chown bacula:bacula ${db_name}.db
+ exit 0
diff --git a/bacula-use-crypto-from-openssl.patch b/bacula-use-crypto-from-openssl.patch
new file mode 100644
index 0000000..80608c1
--- /dev/null
+++ b/bacula-use-crypto-from-openssl.patch
@@ -0,0 +1,296 @@
+Author: Vaclav Dolezal <vdolezal@redhat.com>
+Date: Mon Aug 12 14:51:39 2019 +0200
+
+ Use functions from OpenSSL for HMAC, MD5 and random bytes
+
+diff -up bacula-11.0.1/src/dird/dird_conf.c.orig bacula-11.0.1/src/dird/dird_conf.c
+--- bacula-11.0.1/src/dird/dird_conf.c.orig 2021-02-05 22:23:44.000000000 +0100
++++ bacula-11.0.1/src/dird/dird_conf.c 2022-02-11 19:43:38.870718113 +0100
+@@ -43,6 +43,10 @@
+ #include "bacula.h"
+ #include "dird.h"
+
++#if HAVE_OPENSSL
++# include <openssl/evp.h>
++#endif
++
+ /* Define the first and last resource ID record
+ * types. Note, these should be unique for each
+ * daemon though not a requirement.
+@@ -1783,6 +1787,11 @@ void free_resource(RES *rres, int type)
+ free(res->res_fs.exclude_items);
+ }
+ res->res_fs.num_excludes = 0;
++#if HAVE_OPENSSL
++ EVP_MD_CTX_free(res->res_fs.md5c);
++ res->res_fs.md5c = NULL;
++ res->res_fs.have_MD5 = false;
++#endif
+ break;
+ case R_POOL:
+ if (res->res_pool.pool_type) {
+diff -up bacula-11.0.1/src/dird/dird_conf.h.orig bacula-11.0.1/src/dird/dird_conf.h
+--- bacula-11.0.1/src/dird/dird_conf.h.orig 2021-02-05 22:23:44.000000000 +0100
++++ bacula-11.0.1/src/dird/dird_conf.h 2022-02-11 19:43:38.870718113 +0100
+@@ -25,6 +25,10 @@
+
+ /* NOTE: #includes at the end of this file */
+
++#if HAVE_OPENSSL
++# include <openssl/evp.h>
++#endif
++
+ /*
+ * Resource codes -- they must be sequential for indexing
+ */
+@@ -608,7 +612,11 @@ public:
+ INCEXE **exclude_items;
+ int32_t num_excludes;
+ bool have_MD5; /* set if MD5 initialized */
++#if HAVE_OPENSSL
++ EVP_MD_CTX *md5c; /* MD5 of include/exclude */
++#else
+ struct MD5Context md5c; /* MD5 of include/exclude */
++#endif
+ char MD5[30]; /* base 64 representation of MD5 */
+ bool ignore_fs_changes; /* Don't force Full if FS changed */
+ bool enable_vss; /* Enable Volume Shadow Copy */
+diff -up bacula-11.0.1/src/dird/inc_conf.c.orig bacula-11.0.1/src/dird/inc_conf.c
+--- bacula-11.0.1/src/dird/inc_conf.c.orig 2021-02-05 22:23:44.000000000 +0100
++++ bacula-11.0.1/src/dird/inc_conf.c 2022-02-11 19:43:38.870718113 +0100
+@@ -32,6 +32,10 @@
+ #include <regex.h>
+ #endif
+
++#if HAVE_OPENSSL
++# include <openssl/evp.h>
++#endif
++
+ /* Forward referenced subroutines */
+
+ void store_inc(LEX *lc, RES_ITEM *item, int index, int pass);
+@@ -390,7 +394,17 @@ static void store_newinc(LEX *lc, RES_IT
+ bool options;
+
+ if (!res_all.res_fs.have_MD5) {
++#if HAVE_OPENSSL
++ res_all.res_fs.md5c = EVP_MD_CTX_new();
++ if (!res_all.res_fs.md5c
++ || !EVP_DigestInit_ex(res_all.res_fs.md5c, EVP_md5(), NULL)
++ ) {
++ Emsg1(M_ERROR_TERM, 0, "MD5 computation failed: %s\n",
++ ERR_reason_error_string(ERR_peek_last_error()));
++ }
++#else
+ MD5Init(&res_all.res_fs.md5c);
++#endif
+ res_all.res_fs.have_MD5 = true;
+ }
+ bmemset(&res_incexe, 0, sizeof(INCEXE));
+@@ -656,7 +670,13 @@ static void store_fname(LEX *lc, RES_ITE
+ }
+ case T_QUOTED_STRING:
+ if (res_all.res_fs.have_MD5) {
++#if HAVE_OPENSSL
++ if (!EVP_DigestUpdate(res_all.res_fs.md5c, (void *)lc->str, (size_t) lc->str_len))
++ Emsg1(M_ERROR_TERM, 0, "MD5 computation failed: %s\n",
++ ERR_reason_error_string(ERR_peek_last_error()));
++#else
+ MD5Update(&res_all.res_fs.md5c, (unsigned char *)lc->str, lc->str_len);
++#endif
+ }
+ incexe = &res_incexe;
+ if (incexe->name_list.size() == 0) {
+@@ -699,7 +719,13 @@ static void store_plugin_name(LEX *lc, R
+ }
+ case T_QUOTED_STRING:
+ if (res_all.res_fs.have_MD5) {
++#if HAVE_OPENSSL
++ if (!EVP_DigestUpdate(res_all.res_fs.md5c, (void *)lc->str, (size_t) lc->str_len))
++ Emsg1(M_ERROR_TERM, 0, "MD5 computation failed: %s\n",
++ ERR_reason_error_string(ERR_peek_last_error()));
++#else
+ MD5Update(&res_all.res_fs.md5c, (unsigned char *)lc->str, lc->str_len);
++#endif
+ }
+ incexe = &res_incexe;
+ if (incexe->plugin_list.size() == 0) {
+diff -up bacula-11.0.1/src/dird/job.c.orig bacula-11.0.1/src/dird/job.c
+--- bacula-11.0.1/src/dird/job.c.orig 2021-02-05 22:23:44.000000000 +0100
++++ bacula-11.0.1/src/dird/job.c 2022-02-11 19:43:38.871718095 +0100
+@@ -27,6 +27,10 @@
+ #include "bacula.h"
+ #include "dird.h"
+
++#if HAVE_OPENSSL
++# include <openssl/evp.h>
++#endif
++
+ /* Forward referenced subroutines */
+ static void *job_thread(void *arg);
+ static void job_monitor_watchdog(watchdog_t *self);
+@@ -1342,10 +1346,27 @@ bool get_or_create_fileset_record(JCR *j
+ memset(&fsr, 0, sizeof(FILESET_DBR));
+ bstrncpy(fsr.FileSet, jcr->fileset->hdr.name, sizeof(fsr.FileSet));
+ if (jcr->fileset->have_MD5) {
++#if HAVE_OPENSSL
++ EVP_MD_CTX *mdctx = EVP_MD_CTX_new();
++ if (!mdctx)
++ Emsg1(M_ERROR_TERM, 0, "MD5 computation failed: %s\n",
++ ERR_reason_error_string(ERR_peek_last_error()));
++#else
+ struct MD5Context md5c;
++#endif
+ unsigned char digest[MD5HashSize];
++#if HAVE_OPENSSL
++ if (!EVP_MD_CTX_copy_ex(mdctx, jcr->fileset->md5c)
++ || !EVP_DigestFinal_ex(mdctx, digest, NULL)
++ ) {
++ Emsg1(M_ERROR_TERM, 0, "MD5 computation failed: %s\n",
++ ERR_reason_error_string(ERR_peek_last_error()));
++ }
++ EVP_MD_CTX_free(mdctx);
++#else
+ memcpy(&md5c, &jcr->fileset->md5c, sizeof(md5c));
+ MD5Final(digest, &md5c);
++#endif
+ /*
+ * Keep the flag (last arg) set to false otherwise old FileSets will
+ * get new MD5 sums and the user will get Full backups on everything
+diff -up bacula-11.0.1/src/lib/hmac.c.orig bacula-11.0.1/src/lib/hmac.c
+--- bacula-11.0.1/src/lib/hmac.c.orig 2021-02-05 22:23:44.000000000 +0100
++++ bacula-11.0.1/src/lib/hmac.c 2022-02-11 19:43:38.871718095 +0100
+@@ -26,6 +26,10 @@
+ */
+ #include "bacula.h"
+
++#if HAVE_OPENSSL
++# include <openssl/hmac.h>
++#endif
++
+ #define PAD_LEN 64 /* PAD length */
+ #define SIG_LEN MD5HashSize /* MD5 digest length */
+
+@@ -36,6 +40,19 @@ hmac_md5(
+ uint8_t* key, /* pointer to authentication key */
+ int key_len, /* length of authentication key */
+ uint8_t *hmac) /* returned hmac-md5 */
++#if HAVE_OPENSSL
++{
++ if (!HMAC(
++ EVP_md5(),
++ key, key_len,
++ text, text_len,
++ hmac, NULL
++ )) {
++ Emsg0(M_ERROR_TERM, 0, "HMAC computation failed\n");
++ }
++
++}
++#else
+ {
+ MD5Context md5c;
+ uint8_t k_ipad[PAD_LEN]; /* inner padding - key XORd with ipad */
+@@ -90,6 +107,7 @@ hmac_md5(
+ MD5Update(&md5c, hmac, SIG_LEN); /* hash inner hash */
+ MD5Final(hmac, &md5c); /* store results */
+ }
++#endif
+ /*
+ Test Vectors (Trailing '\0' of a character string not included in test):
+
+diff -up bacula-11.0.1/src/lib/parse_conf.c.orig bacula-11.0.1/src/lib/parse_conf.c
+--- bacula-11.0.1/src/lib/parse_conf.c.orig 2021-02-05 22:23:44.000000000 +0100
++++ bacula-11.0.1/src/lib/parse_conf.c 2022-02-11 19:43:38.871718095 +0100
+@@ -59,6 +59,10 @@
+ #define MAX_PATH 1024
+ #endif
+
++#if HAVE_OPENSSL
++# include <openssl/evp.h>
++#endif
++
+ /*
+ * Define the Union of all the common resource structure definitions.
+ */
+@@ -588,7 +592,11 @@ void store_dir(LEX *lc, RES_ITEM *item,
+ void store_password(LEX *lc, RES_ITEM *item, int index, int pass)
+ {
+ unsigned int i, j;
++#if HAVE_OPENSSL
++ EVP_MD_CTX *mdctx = NULL;
++#else
+ struct MD5Context md5c;
++#endif
+ unsigned char digest[CRYPTO_DIGEST_MD5_SIZE];
+ char sig[100];
+
+@@ -598,9 +606,21 @@ void store_password(LEX *lc, RES_ITEM *i
+ } else {
+ lex_get_token(lc, T_STRING);
+ if (pass == 1) {
++#if HAVE_OPENSSL
++ mdctx = EVP_MD_CTX_new();
++ if (!mdctx
++ || !EVP_DigestInit_ex(mdctx, EVP_md5(), NULL)
++ || !EVP_DigestUpdate(mdctx, (const void *) lc->str, (size_t) lc->str_len)
++ || !EVP_DigestFinal_ex(mdctx, digest, NULL)
++ ) {
++ Emsg1(M_ERROR_TERM, 0, "MD5 computation failed: %s\n",
++ ERR_reason_error_string(ERR_peek_last_error()));
++ }
++#else
+ MD5Init(&md5c);
+ MD5Update(&md5c, (unsigned char *) (lc->str), lc->str_len);
+ MD5Final(digest, &md5c);
++#endif
+ for (i = j = 0; i < sizeof(digest); i++) {
+ sprintf(&sig[j], "%02x", digest[i]);
+ j += 2;
+diff -up bacula-11.0.1/src/lib/util.c.orig bacula-11.0.1/src/lib/util.c
+--- bacula-11.0.1/src/lib/util.c.orig 2021-02-05 22:23:44.000000000 +0100
++++ bacula-11.0.1/src/lib/util.c 2022-02-11 19:43:38.872718077 +0100
+@@ -707,6 +707,35 @@ int do_shell_expansion(char *name, int n
+ from SpeakFreely by John Walker */
+
+ void make_session_key(char *key, char *seed, int mode)
++#if HAVE_OPENSSL
++{
++ int j, k;
++ unsigned char buf[16];
++
++ (void) seed;
++
++ if (!RAND_bytes(buf, sizeof(buf)))
++ Emsg1(M_ERROR_TERM, 0, "Random bytes generation failed: %s\n",
++ ERR_reason_error_string(ERR_peek_last_error()));
++
++ if (mode) {
++ for (j = k = 0; j < 16; j++) {
++ unsigned char rb = buf[j];
++
++#define Rad16(x) ((x) + 'A')
++ key[k++] = Rad16((rb >> 4) & 0xF);
++ key[k++] = Rad16(rb & 0xF);
++#undef Rad16
++ if (j & 1) {
++ key[k++] = '-';
++ }
++ }
++ key[--k] = 0;
++ } else {
++ memcpy(key, buf, sizeof(buf));
++ }
++}
++#else
+ {
+ int j, k;
+ struct MD5Context md5c;
+@@ -790,6 +819,7 @@ void make_session_key(char *key, char *s
+ }
+ }
+ #undef nextrand
++#endif
+
+ void encode_session_key(char *encode, char *session, char *key, int maxlen)
+ {
diff --git a/bacula.logrotate b/bacula.logrotate
new file mode 100644
index 0000000..c14fede
--- /dev/null
+++ b/bacula.logrotate
@@ -0,0 +1,9 @@
+# Bacula logrotate script
+
+/var/log/bacula/*.log {
+ monthly
+ rotate 4
+ notifempty
+ missingok
+}
+
diff --git a/bacula.spec b/bacula.spec
new file mode 100644
index 0000000..8a1d454
--- /dev/null
+++ b/bacula.spec
@@ -0,0 +1,762 @@
+%global uid 133
+%global username bacula
+
+%if 0%{?rhel} && ! 0%{?epel}
+%bcond_with nagios
+%else
+%bcond_without nagios
+%endif
+
+Name: bacula
+Version: 11.0.1
+Release: 5%{?dist}
+Summary: Cross platform network backup for Linux, Unix, Mac and Windows
+# See LICENSE for details
+License: AGPLv3 with exceptions
+URL: http://www.bacula.org
+
+Source0: http://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.gz
+
+Source2: quickstart_postgresql.txt
+Source3: quickstart_mysql.txt
+Source4: quickstart_sqlite3.txt
+Source5: README.Redhat
+Source6: %{name}.logrotate
+Source10: %{name}-fd.service
+Source11: %{name}-dir.service
+Source12: %{name}-sd.service
+Source15: %{name}-fd.sysconfig
+Source16: %{name}-dir.sysconfig
+Source17: %{name}-sd.sysconfig
+Source19: https://salsa.debian.org/bacula-team/bacula/-/raw/master/debian/additions/bacula-tray-monitor.png#/bacula-tray-monitor.png
+
+Patch1: %{name}-openssl.patch
+Patch2: %{name}-queryfile.patch
+Patch3: %{name}-sqlite-priv.patch
+Patch4: %{name}-bat-build.patch
+Patch5: %{name}-seg-fault.patch
+Patch6: %{name}-logwatch.patch
+Patch7: %{name}-non-free-code.patch
+Patch8: %{name}-desktop.patch
+Patch9: %{name}-g++-options.patch
+Patch10: %{name}-install.patch
+Patch11: %{name}-docker-plugin.patch
+# Original patch removed by mistake, upstream is not willing to add it again:
+# http://www.bacula.org/git/cgit.cgi/bacula/commit/?h=Branch-7.0&id=51b3b98fb77ab3c0decee455cc6c4d2eb3c5303a
+# Without this, there is no library providing the correct shared object name
+# required by the daemons.
+# http://bugs.bacula.org/view.php?id=2084
+Patch12: %{name}-autoconf.patch
+Patch13: %{name}-build-cdp-plugin.patch
+Patch14: %{name}-nagios.patch
+Patch15: %{name}-use-crypto-from-openssl.patch
+
+BuildRequires: desktop-file-utils
+BuildRequires: perl-generators
+BuildRequires: sed
+
+BuildRequires: autoconf
+BuildRequires: automake
+BuildRequires: gcc
+BuildRequires: gcc-c++
+BuildRequires: glibc-devel
+BuildRequires: libacl-devel
+BuildRequires: libstdc++-devel
+BuildRequires: libxml2-devel
+BuildRequires: libcap-devel
+BuildRequires: lzo-devel
+BuildRequires: make
+BuildRequires: ncurses-devel
+BuildRequires: openssl-devel
+BuildRequires: qt5-qtbase-devel
+BuildRequires: readline-devel
+BuildRequires: sqlite-devel
+BuildRequires: systemd
+BuildRequires: zlib-devel
+
+%if 0%{?fedora} || 0%{?rhel} > 7
+BuildRequires: mariadb-connector-c-devel
+# https://fedoraproject.org/wiki/Changes/perl_Package_to_Install_Core_Modules
+BuildRequires: perl-interpreter
+%else
+BuildRequires: mysql-devel
+BuildRequires: perl
+BuildRequires: tcp_wrappers-devel
+%endif
+
+%if 0%{?fedora}
+BuildRequires: libpq-devel
+%else
+BuildRequires: postgresql-devel
+%endif
+
+%description
+Bacula is a set of programs that allow you to manage the backup, recovery, and
+verification of computer data across a network of different computers. It is
+based on a client/server architecture and is efficient and relatively easy to
+use, while offering many advanced storage management features that make it easy
+to find and recover lost or damaged files.
+
+%package libs
+Summary: Bacula libraries
+
+%description libs
+Bacula is a set of programs that allow you to manage the backup,
+recovery, and verification of computer data across a network of
+different computers. It is based on a client/server architecture.
+
+This package contains basic Bacula libraries, which are used by all
+Bacula programs.
+
+%package libs-sql
+Summary: Bacula SQL libraries
+Obsoletes: bacula-libs-mysql <= 5.0.3
+Obsoletes: bacula-libs-sqlite <= 5.0.3
+Obsoletes: bacula-libs-postgresql <= 5.0.3
+Provides: bacula-libs-mysql = %{version}-%{release}
+Provides: bacula-libs-sqlite = %{version}-%{release}
+Provides: bacula-libs-postgresql = %{version}-%{release}
+
+%description libs-sql
+Bacula is a set of programs that allow you to manage the backup, recovery, and
+verification of computer data across a network of different computers. It is
+based on a client/server architecture.
+
+This package contains the SQL Bacula libraries, which are used by Director and
+Storage daemons. You have to select your preferred catalog library through the
+alternatives system.
+
+%package common
+Summary: Common Bacula files
+Provides: group(%username) = %uid
+Provides: user(%username) = %uid
+Requires: bacula-libs%{?_isa} = %{version}-%{release}
+Requires(pre): shadow-utils
+Requires(postun): shadow-utils
+
+%description common
+Bacula is a set of programs that allow you to manage the backup, recovery, and
+verification of computer data across a network of different computers. It is
+based on a client/server architecture.
+
+This package contains files common to all Bacula daemons.
+
+%package director
+Summary: Bacula Director files
+Requires: bacula-common%{?_isa} = %{version}-%{release}
+Requires: bacula-libs%{?_isa} = %{version}-%{release}
+Requires: bacula-libs-sql%{?_isa} = %{version}-%{release}
+# Director backends merged into core.
+Provides: bacula-director-common = %{version}-%{release}
+Obsoletes: bacula-director-common < 5.2.3-5
+Provides: bacula-director-mysql = %{version}-%{release}
+Obsoletes: bacula-director-mysql < 5.2.3-5
+Provides: bacula-director-sqlite = %{version}-%{release}
+Obsoletes: bacula-director-sqlite < 5.2.3-5
+Provides: bacula-director-postgresql = %{version}-%{release}
+Obsoletes: bacula-director-postgresql < 5.2.3-5
+
+Requires(post): systemd
+Requires(preun): systemd
+Requires(postun): systemd
+
+%description director
+Bacula is a set of programs that allow you to manage the backup, recovery, and
+verification of computer data across a network of different computers. It is
+based on a client/server architecture.
+
+This package contains the director files.
+
+%package logwatch
+Summary: Bacula Director logwatch scripts
+BuildArch: noarch
+Requires: bacula-director = %{version}-%{release}
+Requires: logwatch
+
+%description logwatch
+Bacula is a set of programs that allow you to manage the backup, recovery, and
+verification of computer data across a network of different computers. It is
+based on a client/server architecture.
+
+This package contains logwatch scripts for Bacula Director.
+
+%package storage
+Summary: Bacula storage daemon files
+Requires: bacula-common%{?_isa} = %{version}-%{release}
+Requires: bacula-libs%{?_isa} = %{version}-%{release}
+Requires: bacula-libs-sql%{?_isa} = %{version}-%{release}
+Requires: mt-st
+Requires: mtx
+# Storage backends merged into core.
+Provides: bacula-storage-common = %{version}-%{release}
+Obsoletes: bacula-storage-common < 5.2.2-2
+Provides: bacula-storage-mysql = %{version}-%{release}
+Obsoletes: bacula-storage-mysql < 5.2.0
+Provides: bacula-storage-sqlite = %{version}-%{release}
+Obsoletes: bacula-storage-sqlite < 5.2.0
+Provides: bacula-storage-postgresql = %{version}-%{release}
+Obsoletes: bacula-storage-postgresql < 5.2.0
+
+Requires(post): systemd
+Requires(preun): systemd
+Requires(postun): systemd
+
+%description storage
+Bacula is a set of programs that allow you to manage the backup, recovery, and
+verification of computer data across a network of different computers. It is
+based on a client/server architecture.
+
+This package contains the storage daemon, the daemon responsible for writing
+the data received from the clients onto tape drives or other mass storage
+devices.
+
+%package client
+Summary: Bacula backup client
+Requires: bacula-common%{?_isa} = %{version}-%{release}
+Requires: bacula-libs%{?_isa} = %{version}-%{release}
+
+Requires(post): systemd
+Requires(preun): systemd
+Requires(postun): systemd
+
+%description client
+Bacula is a set of programs that allow you to manage the backup, recovery, and
+verification of computer data across a network of different computers. It is
+based on a client/server architecture.
+
+This package contains the bacula client, the daemon running on the system to be
+backed up.
+
+%package console
+Summary: Bacula management console
+Obsoletes: bacula-console-wxwidgets <= 5.0.3
+Requires: bacula-libs%{?_isa} = %{version}-%{release}
+
+%description console
+Bacula is a set of programs that allow you to manage the backup, recovery, and
+verification of computer data across a network of different computers. It is
+based on a client/server architecture.
+
+This package contains the command-line management console for the bacula backup
+system.
+
+%package console-bat
+Summary: Bacula bat console
+Requires: bacula-libs%{?_isa} = %{version}-%{release}
+Requires: dejavu-lgc-sans-fonts
+
+%description console-bat
+Bacula is a set of programs that allow you to manage the backup, recovery, and
+verification of computer data across a network of different computers. It is
+based on a client/server architecture.
+
+This package contains the bat version of the bacula management console.
+
+%package traymonitor
+Summary: Bacula system tray monitor
+Requires: bacula-libs%{?_isa} = %{version}-%{release}
+Requires: dejavu-lgc-sans-fonts
+
+%description traymonitor
+Bacula is a set of programs that allow you to manage the backup, recovery, and
+verification of computer data across a network of different computers. It is
+based on a client/server architecture.
+
+This package contains the Gnome and KDE compatible tray monitor to monitor your
+bacula server.
+
+%package devel
+Summary: Bacula development files
+Requires: bacula-libs%{?_isa} = %{version}-%{release}
+Requires: bacula-libs-sql%{?_isa} = %{version}-%{release}
+
+%description devel
+Bacula is a set of programs that allow you to manage the backup, recovery, and
+verification of computer data across a network of different computers. It is
+based on a client/server architecture.
+
+This development package contains static libraries and header files.
+
+%if %{with nagios}
+%package -n nagios-plugins-bacula
+Summary: Nagios Plugin - check_bacula
+Requires: bacula-libs%{?_isa} = %{version}-%{release}
+Requires: nagios-common%{?_isa}
+
+%description -n nagios-plugins-bacula
+Provides check_bacula support for Nagios.
+%endif
+
+%prep
+%autosetup -p1
+
+cp %{SOURCE2} %{SOURCE3} %{SOURCE4} %{SOURCE5} .
+
+# Regenerate configure
+pushd autoconf
+sed -i -r 's/(hardcode_into_libs)=.*$/\1=no/' libtool/libtool.m4
+aclocal -I bacula-macros/ -I gettext-macros/ -I libtool/
+popd
+autoconf -I autoconf/ -o configure autoconf/configure.in
+
+# Remove execution permissions from files we're packaging as docs later on
+find updatedb -type f | xargs chmod -x
+
+%build
+export CFLAGS="%{optflags} -I%{_includedir}/ncurses"
+export CPPFLAGS="%{optflags} -I%{_includedir}/ncurses"
+export PATH="$PATH:%{_qt5_bindir}"
+
+%configure \
+ --disable-conio \
+ --disable-rpath \
+ --disable-s3 \
+ --docdir=%{_datadir}/bacula \
+ --enable-bat \
+ --enable-batch-insert \
+ --enable-build-dird \
+ --enable-build-stored \
+ --enable-includes \
+ --enable-largefile \
+ --enable-readline \
+ --enable-smartalloc \
+ --sysconfdir=%{_sysconfdir}/bacula \
+ --with-basename=bacula \
+ --with-bsrdir=%{_localstatedir}/spool/bacula \
+ --with-dir-password=@@DIR_PASSWORD@@ \
+ --with-fd-password=@@FD_PASSWORD@@ \
+ --with-hostname=localhost \
+ --with-logdir=%{_localstatedir}/log/bacula \
+ --with-mon-dir-password=@@MON_DIR_PASSWORD@@ \
+ --with-mon-fd-password=@@MON_FD_PASSWORD@@ \
+ --with-mon-sd-password=@@MON_SD_PASSWORD@@ \
+ --with-mysql \
+ --with-openssl \
+ --with-pid-dir=%{_localstatedir}/run \
+ --with-plugindir=%{_libdir}/%{name} \
+ --with-postgresql \
+ --with-scriptdir=%{_libexecdir}/bacula \
+ --with-sd-password=@@SD_PASSWORD@@ \
+ --with-smtp-host=localhost \
+ --with-sqlite3 \
+ --with-subsys-dir=%{_localstatedir}/lock/subsys \
+%if 0%{!?fedora} || 0%{!?rhel} > 7
+ --with-tcp-wrappers \
+%endif
+ --with-working-dir=%{_localstatedir}/spool/bacula \
+ --with-x
+
+# Remove RPATH
+sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
+sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
+
+pushd src/qt-console/
+ %{?qmake_qt5}%{!?qmake_qt5:qmake-qt5} bat.pro
+ pushd tray-monitor
+ %{?qmake_qt5}%{!?qmake_qt5:qmake-qt5} tray-monitor.pro
+ popd
+popd
+
+%make_build
+%make_build -C src/tools/cdp-client
+%if %{with nagios}
+%make_build -C examples/nagios/check_bacula
+%endif
+
+pushd src/qt-console/
+ %{?qmake_qt5}%{!?qmake_qt5:qmake-qt5} bat.pro
+ pushd tray-monitor
+ %{?qmake_qt5}%{!?qmake_qt5:qmake-qt5} tray-monitor.pro
+ popd
+popd
+
+# Convert image to png for tray monitor icon
+%install
+%make_install
+%make_install -C src/tools/cdp-client
+%if %{with nagios}
+%make_install -C examples/nagios/check_bacula
+%endif
+
+# This will be managed through alternatives, as it requires the name to NOT
+# change between upgrades, so the versioned library name can not be used.
+rm -f %{buildroot}%{_libdir}/libbaccats.so
+
+# Bat
+install -p -m 644 -D src/qt-console/images/bat_icon.png %{buildroot}%{_datadir}/pixmaps/bat_icon.png
+install -p -m 644 -D scripts/bat.desktop %{buildroot}%{_datadir}/applications/bat.desktop
+install -p -m 755 -D src/qt-console/.libs/bat %{buildroot}%{_sbindir}/bat
+
+install -p -m 644 -D manpages/bacula-tray-monitor.1 %{buildroot}%{_mandir}/man1/bacula-tray-monitor.1
+install -p -m 644 -D %{SOURCE19} %{buildroot}%{_datadir}/pixmaps/bacula-tray-monitor.png
+install -p -m 644 -D scripts/bacula-tray-monitor.desktop %{buildroot}%{_datadir}/applications/bacula-tray-monitor.desktop
+
+# Logrotate
+mkdir -p %{buildroot}%{_localstatedir}/log/bacula
+install -p -m 644 -D %{SOURCE6} %{buildroot}%{_sysconfdir}/logrotate.d/bacula
+
+# Logwatch
+install -p -m 755 -D scripts/logwatch/bacula %{buildroot}%{_sysconfdir}/logwatch/scripts/services/bacula
+install -p -m 755 -D scripts/logwatch/applybaculadate %{buildroot}%{_sysconfdir}/logwatch/scripts/shared/applybaculadate
+install -p -m 644 -D scripts/logwatch/logfile.bacula.conf %{buildroot}%{_sysconfdir}/logwatch/conf/logfiles/bacula.conf
+install -p -m 644 -D scripts/logwatch/services.bacula.conf %{buildroot}%{_sysconfdir}/logwatch/conf/services/bacula.conf
+
+# Systemd unit files
+mkdir -p %{buildroot}%{_unitdir}
+install -p -m 644 -D %{SOURCE10} %{buildroot}%{_unitdir}/bacula-fd.service
+install -p -m 644 -D %{SOURCE11} %{buildroot}%{_unitdir}/bacula-dir.service
+install -p -m 644 -D %{SOURCE12} %{buildroot}%{_unitdir}/bacula-sd.service
+
+# Sysconfig
+install -p -m 644 -D %{SOURCE15} %{buildroot}%{_sysconfdir}/sysconfig/bacula-fd
+install -p -m 644 -D %{SOURCE16} %{buildroot}%{_sysconfdir}/sysconfig/bacula-dir
+install -p -m 644 -D %{SOURCE17} %{buildroot}%{_sysconfdir}/sysconfig/bacula-sd
+
+# Spool directory
+mkdir -p %{buildroot}%{_localstatedir}/spool/bacula
+
+# Remove stuff we do not need
+rm -f %{buildroot}%{_libexecdir}/bacula/{bacula,bacula-ctl-*,startmysql,stopmysql,bconsole,make_catalog_backup}
+rm -f %{buildroot}%{_sbindir}/bacula
+rm -f %{buildroot}%{_mandir}/man8/bacula.8.gz
+rm -f %{buildroot}%{_libdir}/*.la
+rm -f %{buildroot}%{_datadir}/bacula/{ChangeLog,INSTALL,LICENSE*,README,ReleaseNotes,VERIFYING,technotes}
+
+# Fix up some perms so rpmlint does not complain too much
+chmod 755 %{buildroot}%{_sbindir}/*
+chmod 755 %{buildroot}%{_libdir}/%{name}/*
+chmod 755 %{buildroot}%{_libexecdir}/bacula/*
+chmod 644 %{buildroot}%{_libexecdir}/bacula/btraceback.*
+
+%ldconfig_scriptlets libs
+
+%post libs-sql
+/usr/sbin/alternatives --install %{_libdir}/libbaccats.so libbaccats.so %{_libdir}/libbaccats-mysql.so 50
+/usr/sbin/alternatives --install %{_libdir}/libbaccats.so libbaccats.so %{_libdir}/libbaccats-sqlite3.so 40
+/usr/sbin/alternatives --install %{_libdir}/libbaccats.so libbaccats.so %{_libdir}/libbaccats-postgresql.so 60
+
+# Fix for automatic selection of backends during upgrades
+if readlink /etc/alternatives/libbaccats.so | grep --silent mysql || \
+ readlink /etc/alternatives/bacula-dir | grep --silent mysql || \
+ readlink /etc/alternatives/bacula-sd | grep --silent mysql; then
+ /usr/sbin/alternatives --set libbaccats.so %{_libdir}/libbaccats-mysql.so
+elif readlink /etc/alternatives/libbaccats.so | grep --silent sqlite || \
+ readlink /etc/alternatives/bacula-dir | grep --silent sqlite || \
+ readlink /etc/alternatives/bacula-sd | grep --silent sqlite; then
+ /usr/sbin/alternatives --set libbaccats.so %{_libdir}/libbaccats-sqlite3.so
+else
+ /usr/sbin/alternatives --set libbaccats.so %{_libdir}/libbaccats-postgresql.so
+fi
+%{?ldconfig}
+
+%preun libs-sql
+if [ "$1" = 0 ]; then
+ /usr/sbin/alternatives --remove libbaccats.so %{_libdir}/libbaccats-mysql.so
+ /usr/sbin/alternatives --remove libbaccats.so %{_libdir}/libbaccats-sqlite3.so
+ /usr/sbin/alternatives --remove libbaccats.so %{_libdir}/libbaccats-postgresql.so
+fi
+
+%ldconfig_postun libs-sql
+
+%pre common
+getent group %username >/dev/null || groupadd -g %uid -r %username &>/dev/null || :
+getent passwd %username >/dev/null || useradd -u %uid -r -s /sbin/nologin \
+ -d /var/spool/bacula -M -c 'Bacula Backup System' -g %username %username &>/dev/null || :
+exit 0
+
+%post client
+%systemd_post %{name}-fd.service
+
+%preun client
+%systemd_preun %{name}-fd.service
+
+%postun client
+%systemd_postun_with_restart %{name}-fd.service
+
+%post director
+%systemd_post %{name}-dir.service
+
+%preun director
+%systemd_preun %{name}-dir.service
+
+%postun director
+%systemd_postun_with_restart %{name}-dir.service
+
+%post storage
+%systemd_post %{name}-sd.service
+
+%preun storage
+%systemd_preun %{name}-sd.service
+
+%postun storage
+%systemd_postun_with_restart %{name}-sd.service
+
+%files libs
+%license LICENSE
+%doc AUTHORS ChangeLog SUPPORT ReleaseNotes LICENSE-FAQ LICENSE-FOSS
+%{_libdir}/libbac-%{version}.so
+%{_libdir}/libbaccfg-%{version}.so
+%{_libdir}/libbacfind-%{version}.so
+%{_libdir}/libbacsd-%{version}.so
+
+%files libs-sql
+# On Fedora 28 this gets recreated automatically even if the library is
+# deleted in the install section.
+# On EPEL 6 this is required until RPM assembly time or an error is given due
+# to the missing library.
+# So: leave the library in place until the very end and just exclude it.
+%exclude %{_libdir}/libbaccats-%{version}.so
+%{_libdir}/libbaccats-mysql-%{version}.so
+%{_libdir}/libbaccats-mysql.so
+%{_libdir}/libbaccats-postgresql-%{version}.so
+%{_libdir}/libbaccats-postgresql.so
+%{_libdir}/libbaccats-sqlite3-%{version}.so
+%{_libdir}/libbaccats-sqlite3.so
+%{_libdir}/libbacsql-%{version}.so
+
+%files common
+%doc README.Redhat quickstart_*
+%config(noreplace) %{_sysconfdir}/logrotate.d/bacula
+%dir %{_localstatedir}/log/bacula %attr(750, bacula, bacula)
+%dir %{_localstatedir}/spool/bacula %attr(750, bacula, bacula)
+%dir %{_libexecdir}/%{name}
+%dir %{_sysconfdir}/%{name} %attr(755,root,root)
+%{_libexecdir}/%{name}/btraceback.dbx
+%{_libexecdir}/%{name}/btraceback.gdb
+%{_libexecdir}/%{name}/bacula_config
+%{_libexecdir}/%{name}/btraceback.mdb
+%{_mandir}/man8/btraceback.8*
+%{_sbindir}/btraceback
+
+%files director
+%doc updatedb examples/sample-query.sql
+%config(noreplace) %{_sysconfdir}/bacula/bacula-dir.conf %attr(640,root,bacula)
+%config(noreplace) %{_sysconfdir}/bacula/query.sql %attr(640,root,bacula)
+%config(noreplace) %{_sysconfdir}/sysconfig/bacula-dir
+%{_libexecdir}/%{name}/baculabackupreport
+%{_libexecdir}/%{name}/create_bacula_database
+%{_libexecdir}/%{name}/delete_catalog_backup
+%{_libexecdir}/%{name}/drop_bacula_database
+%{_libexecdir}/%{name}/drop_bacula_tables
+%{_libexecdir}/%{name}/grant_bacula_privileges
+%{_libexecdir}/%{name}/make_bacula_tables
+%{_libexecdir}/%{name}/make_catalog_backup.pl
+%{_libexecdir}/%{name}/update_bacula_tables
+%{_libexecdir}/%{name}/create_mysql_database
+%{_libexecdir}/%{name}/drop_mysql_database
+%{_libexecdir}/%{name}/drop_mysql_tables
+%{_libexecdir}/%{name}/grant_mysql_privileges
+%{_libexecdir}/%{name}/make_mysql_tables
+%{_libexecdir}/%{name}/update_mysql_tables
+%{_libexecdir}/%{name}/create_sqlite3_database
+%{_libexecdir}/%{name}/drop_sqlite3_database
+%{_libexecdir}/%{name}/drop_sqlite3_tables
+%{_libexecdir}/%{name}/grant_sqlite3_privileges
+%{_libexecdir}/%{name}/make_sqlite3_tables
+%{_libexecdir}/%{name}/update_sqlite3_tables
+%{_libexecdir}/%{name}/create_postgresql_database
+%{_libexecdir}/%{name}/drop_postgresql_database
+%{_libexecdir}/%{name}/drop_postgresql_tables
+%{_libexecdir}/%{name}/grant_postgresql_privileges
+%{_libexecdir}/%{name}/make_postgresql_tables
+%{_libexecdir}/%{name}/update_postgresql_tables
+%{_mandir}/man1/bsmtp.1*
+%{_mandir}/man8/bacula-dir.8*
+%{_mandir}/man8/bregex.8*
+%{_mandir}/man8/bwild.8*
+%{_mandir}/man8/dbcheck.8*
+%{_sbindir}/bacula-dir
+%{_sbindir}/bdirjson
+%{_sbindir}/bregex
+%{_sbindir}/bsmtp
+%{_sbindir}/bwild
+%{_sbindir}/dbcheck
+%{_unitdir}/bacula-dir.service
+
+%files logwatch
+%config(noreplace) %{_sysconfdir}/logwatch/conf/logfiles/bacula.conf
+%config(noreplace) %{_sysconfdir}/logwatch/conf/services/bacula.conf
+%{_sysconfdir}/logwatch/scripts/services/bacula
+%{_sysconfdir}/logwatch/scripts/shared/applybaculadate
+
+%files storage
+%config(noreplace) %{_sysconfdir}/bacula/bacula-sd.conf %attr(640,root,root)
+%config(noreplace) %{_sysconfdir}/sysconfig/bacula-sd
+%{_libexecdir}/%{name}/disk-changer
+%{_libexecdir}/%{name}/isworm
+%{_libexecdir}/%{name}/mtx-changer
+%{_libexecdir}/%{name}/mtx-changer.conf
+%{_libexecdir}/%{name}/tapealert
+%{_mandir}/man8/bacula-sd.8*
+%{_mandir}/man8/bcopy.8*
+%{_mandir}/man8/bextract.8*
+%{_mandir}/man8/bls.8*
+%{_mandir}/man8/bscan.8*
+%{_mandir}/man8/btape.8*
+%{_sbindir}/bacula-sd
+%{_sbindir}/bcopy
+%{_sbindir}/bextract
+%{_sbindir}/bls
+%{_sbindir}/bscan
+%{_sbindir}/bsdjson
+%{_sbindir}/btape
+%{_unitdir}/bacula-sd.service
+
+%files client
+%config(noreplace) %{_sysconfdir}/bacula/bacula-fd.conf %attr(640,root,root)
+%config(noreplace) %{_sysconfdir}/sysconfig/bacula-fd
+%{_mandir}/man8/bacula-fd.8*
+%{_libdir}/%{name}/bpipe-fd.so
+%{_libdir}/%{name}/cdp-fd.so
+%{_libdir}/%{name}/docker-fd.so
+%{_sbindir}/bacula-fd
+%{_sbindir}/bfdjson
+%{_sbindir}/cdp-client
+%{_unitdir}/bacula-fd.service
+
+%files console
+%config(noreplace) %{_sysconfdir}/bacula/bconsole.conf %attr(640,root,root)
+%{_mandir}/man8/bconsole.8*
+%{_sbindir}/bconsole
+%{_sbindir}/bbconsjson
+
+%files console-bat
+%config(noreplace) %{_sysconfdir}/bacula/bat.conf %attr(640,root,root)
+%{_datadir}/applications/bat.desktop
+%{_datadir}/bacula/*.html
+%{_datadir}/bacula/*.png
+%{_datadir}/pixmaps/bat_icon.png
+%{_mandir}/man1/bat.1*
+%{_sbindir}/bat
+
+%files traymonitor
+%config(noreplace) %{_sysconfdir}/bacula/bacula-tray-monitor.conf %attr(640,root,root)
+%{_datadir}/applications/bacula-tray-monitor.desktop
+%{_datadir}/pixmaps/bacula-tray-monitor.png
+%{_mandir}/man1/bacula-tray-monitor.1*
+%{_sbindir}/bacula-tray-monitor
+
+%files devel
+%{_includedir}/bacula
+%{_libdir}/libbac.so
+%{_libdir}/libbaccfg.so
+%{_libdir}/libbacfind.so
+%{_libdir}/libbacsd.so
+%{_libdir}/libbacsql.so
+
+%if %{with nagios}
+%files -n nagios-plugins-bacula
+%{_libdir}/nagios/plugins/check_bacula
+%endif
+
+%changelog
+* Tue Feb 15 2022 Pavel Cahyna <pcahyna@redhat.com> - 11.0.1-5
+- Make nagios-plugin build conditional and disabled on RHEL to avoid
+ generating this subpackage that has missing dependencies
+- Fix flags for annobin in Qt tools (bat & tray-monitor) build
+- Add a forgotten RHEL 8 patch to use openssl crypto (random numbers, hmac,
+ hashing functions)
+ Resolves: rhbz#1935458
+
+* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 11.0.1-4
+- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
+ Related: rhbz#1991688
+
+* Wed Jun 16 2021 Mohan Boddu <mboddu@redhat.com> - 11.0.1-3
+- Rebuilt for RHEL 9 BETA for openssl 3.0
+ Related: rhbz#1971065
+
+* Thu Apr 15 2021 Mohan Boddu <mboddu@redhat.com> - 11.0.1-2
+- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
+
+* Thu Feb 11 2021 Simone Caronni <negativo17@gmail.com> - 11.0.1-1
+- Update to 11.0.1.
+
+* Mon Feb 08 2021 Pavel Raiskup <praiskup@redhat.com> - 11.0.0-5
+- rebuild for libpq ABI fix rhbz#1908268
+
+* Thu Jan 28 2021 Simone Caronni <negativo17@gmail.com> - 11.0.0-4
+- Remove leftover ImageMagick build requirement.
+
+* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 11.0.0-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Fri Jan 15 2021 Simone Caronni <negativo17@gmail.com> - 11.0.0-2
+- Build CDP plugin components.
+
+* Tue Jan 12 2021 Simone Caronni <negativo17@gmail.com> - 11.0.0-1
+- Update to 11.0.0.
+- Enable Docker plugin.
+
+* Tue Jan 12 2021 Simone Caronni <negativo17@gmail.com> - 9.6.7-1
+- Update to 9.6.7.
+- Drop support for building on CentOS/RHEL 6 and upgrades from version 2.4.
+- Trim changelog.
+
+* Wed Oct 07 2020 Simone Caronni <negativo17@gmail.com> - 9.6.6-1
+- Update to 9.6.6.
+
+* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 9.6.5-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Fri Jul 24 2020 Simone Caronni <negativo17@gmail.com> - 9.6.5-1
+- Update to 9.6.5.
+
+* Tue Mar 17 2020 Simone Caronni <negativo17@gmail.com> - 9.6.3-1
+- Update to 9.6.3.
+
+* Thu Mar 05 2020 Simone Caronni <negativo17@gmail.com> - 9.6.2-2
+- Fix RHEL/CentOS 6 builds.
+
+* Sat Feb 29 2020 Simone Caronni <negativo17@gmail.com> - 9.6.2-1
+- Update to 9.6.2.
+
+* Mon Feb 10 2020 Václav Doležal <vdolezal@redhat.com> - 9.4.4-4
+- Fix FTBFS (#1799185)
+
+* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 9.4.4-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 9.4.4-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
+* Wed May 29 2019 Simone Caronni <negativo17@gmail.com> - 9.4.4-1
+- Update to 9.4.4.
+
+* Sat May 18 2019 Simone Caronni <negativo17@gmail.com> - 9.4.3-2
+- SPEC file cleanups.
+
+* Wed May 15 2019 Simone Caronni <negativo17@gmail.com> - 9.4.3-1
+- Update to 9.4.3.
+
+* Thu Apr 18 2019 Simone Caronni <negativo17@gmail.com> - 9.4.2-1
+- Update to 9.4.2.
+
+* Sun Feb 17 2019 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 9.4.1-6
+- Rebuild for readline 8.0
+
+* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 9.4.1-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
+* Mon Jan 14 2019 Björn Esser <besser82@fedoraproject.org> - 9.4.1-4
+- Rebuilt for libcrypt.so.2 (#1666033)
+
+* Sun Jan 13 2019 Simone Caronni <negativo17@gmail.com> - 9.4.1-3
+- Build QT programs with QT 5 on RHEL/CentOS 7. Also, reduce the number of
+ required QT packages for building.
+
+* Sun Jan 13 2019 Simone Caronni <negativo17@gmail.com> - 9.4.1-2
+- Add Debian patch to enable/disable S3 support at configure time.
+- Disable S3 as it does not currently build:
+ http://bugs.bacula.org/view.php?id=2446
+- Update RPM macros.
+
+* Sat Jan 12 2019 Simone Caronni <negativo17@gmail.com> - 9.4.1-1
+- Update to 9.4.1.
+
+* Sat Jan 12 2019 Simone Caronni <negativo17@gmail.com> - 9.4.0-1
+- Update to 9.4.0.
+
+* Sat Jan 12 2019 Simone Caronni <negativo17@gmail.com> - 9.2.1-2
+- Make the build succeed also on supported RHEL and Fedora releases.
+- Remove Fedora 27 references.
diff --git a/quickstart_mysql.txt b/quickstart_mysql.txt
new file mode 100644
index 0000000..e923357
--- /dev/null
+++ b/quickstart_mysql.txt
@@ -0,0 +1,55 @@
+======== Quick installation guide with the MySQL backend ========
+
+Perform the following commands to install Bacula with its default configuration
+and all daemons and consoles in one server.
+
+1) Install packages
+
+# yum -y install mysql-server \
+ bacula-director bacula-storage bacula-client \
+ bacula-console bacula-console-bat
+
+2) Select the MySQL database backend
+
+# alternatives --set libbaccats.so /usr/lib64/libbaccats-mysql.so
+
+3) Create database
+
+# systemctl enable mysqld.service
+# systemctl start mysqld.service
+
+# cd /usr/libexec/bacula
+# ./create_bacula_database mysql
+# ./make_bacula_tables mysql
+# ./grant_bacula_privileges mysql
+
+4) Change passwords in /etc/bacula/*.conf with something you like.
+
+# sed -i -e 's/@@DIR_PASSWORD@@/dir-password/g' \
+ -e 's/@@FD_PASSWORD@@/fd-password/g' \
+ -e 's/@@SD_PASSWORD@@/sd-password/g' \
+ -e 's/@@MON_DIR_PASSWORD@@/mon-dir-password/g' \
+ -e 's/@@MON_FD_PASSWORD@@/mon-fd-password/g' \
+ -e 's/@@MON_SD_PASSWORD@@/mon-sd-password/g' \
+ /etc/bacula/*.conf
+
+5) Enable daemons and check they are working
+
+# systemctl enable bacula-dir.service
+# systemctl enable bacula-sd.service
+# systemctl enable bacula-fd.service
+
+# systemctl start bacula-dir.service
+# echo status dir=bacula-dir | bconsole
+
+# systemctl start bacula-sd.service
+# echo status storage=bacula-sd | bconsole
+
+# systemctl start bacula-fd.service
+# echo status client=bacula-fd | bconsole
+
+6) To grant console access to regular users add the read permission to the
+console configuration files. Remember that there is no authentication check; so
+a user that can launch the console can perform any command.
+
+# chmod +r /etc/bacula/bconsole.conf /etc/bacula/bat.conf
diff --git a/quickstart_postgresql.txt b/quickstart_postgresql.txt
new file mode 100644
index 0000000..bb26666
--- /dev/null
+++ b/quickstart_postgresql.txt
@@ -0,0 +1,57 @@
+======== Quick installation guide with the default PostgreSQL backend ========
+
+Perform the following commands to install Bacula with its default configuration
+and all daemons and consoles in one server.
+
+1) Install packages
+
+# yum -y install postgresql-server \
+ bacula-director bacula-storage bacula-client \
+ bacula-console bacula-console-bat
+
+2) Select the PostgreSQL database backend
+
+# alternatives --set libbaccats.so /usr/lib64/libbaccats-postgresql.so
+
+3) Create database
+
+# postgresql-setup initdb
+# systemctl enable postgresql.service
+# systemctl start postgresql.service
+
+# su - postgres
+$ cd /usr/libexec/bacula
+$ ./create_bacula_database
+$ ./make_bacula_tables
+$ ./grant_bacula_privileges
+
+4) Change passwords in /etc/bacula/*.conf with something you like.
+
+# sed -i -e 's/@@DIR_PASSWORD@@/dir-password/g' \
+ -e 's/@@FD_PASSWORD@@/fd-password/g' \
+ -e 's/@@SD_PASSWORD@@/sd-password/g' \
+ -e 's/@@MON_DIR_PASSWORD@@/mon-dir-password/g' \
+ -e 's/@@MON_FD_PASSWORD@@/mon-fd-password/g' \
+ -e 's/@@MON_SD_PASSWORD@@/mon-sd-password/g' \
+ /etc/bacula/*.conf
+
+5) Enable daemons and check they are working
+
+# systemctl enable bacula-dir.service
+# systemctl enable bacula-sd.service
+# systemctl enable bacula-fd.service
+
+# systemctl start bacula-dir.service
+# echo status dir=bacula-dir | bconsole
+
+# systemctl start bacula-sd.service
+# echo status storage=bacula-sd | bconsole
+
+# systemctl start bacula-fd.service
+# echo status client=bacula-fd | bconsole
+
+6) To grant console access to regular users add the read permission to the
+console configuration files. Remember that there is no authentication check; so
+a user that can launch the console can perform any command.
+
+# chmod +r /etc/bacula/bconsole.conf /etc/bacula/bat.conf
diff --git a/quickstart_sqlite3.txt b/quickstart_sqlite3.txt
new file mode 100644
index 0000000..fb684d5
--- /dev/null
+++ b/quickstart_sqlite3.txt
@@ -0,0 +1,52 @@
+======== Quick installation guide with the SQLite backend ========
+
+Perform the following commands to install Bacula with its default configuration
+and all daemons and consoles in one server.
+
+1) Install packages
+
+# yum -y install sqlite \
+ bacula-director bacula-storage bacula-client \
+ bacula-console bacula-console-bat
+
+2) Select the SQLite database backend
+
+# alternatives --set libbaccats.so /usr/lib64/libbaccats-sqlite3.so
+
+3) Create database
+
+# cd /usr/libexec/bacula
+# ./create_bacula_database sqlite3
+# ./make_bacula_tables sqlite3
+# ./grant_bacula_privileges sqlite3
+
+4) Change passwords in /etc/bacula/*.conf with something you like.
+
+# sed -i -e 's/@@DIR_PASSWORD@@/dir-password/g' \
+ -e 's/@@FD_PASSWORD@@/fd-password/g' \
+ -e 's/@@SD_PASSWORD@@/sd-password/g' \
+ -e 's/@@MON_DIR_PASSWORD@@/mon-dir-password/g' \
+ -e 's/@@MON_FD_PASSWORD@@/mon-fd-password/g' \
+ -e 's/@@MON_SD_PASSWORD@@/mon-sd-password/g' \
+ /etc/bacula/*.conf
+
+5) Enable daemons and check they are working
+
+# systemctl enable bacula-dir.service
+# systemctl enable bacula-sd.service
+# systemctl enable bacula-fd.service
+
+# systemctl start bacula-dir.service
+# echo status dir=bacula-dir | bconsole
+
+# systemctl start bacula-sd.service
+# echo status storage=bacula-sd | bconsole
+
+# systemctl start bacula-fd.service
+# echo status client=bacula-fd | bconsole
+
+6) To grant console access to regular users add the read permission to the
+console configuration files. Remember that there is no authentication check; so
+a user that can launch the console can perform any command.
+
+# chmod +r /etc/bacula/bconsole.conf /etc/bacula/bat.conf
diff --git a/sources b/sources
new file mode 100644
index 0000000..0b0371d
--- /dev/null
+++ b/sources
@@ -0,0 +1,2 @@
+f88b5d4ebd838caf24c8927d5e14f961 bacula-11.0.1.tar.gz
+eb4a0218fb34fa1f5f351bad99922c3b bacula-tray-monitor.png