1592ddf
diff --git a/bacula/autoconf/config.guess b/bacula/autoconf/config.guess
1592ddf
index b79252d..981c376 100755
1592ddf
--- a/bacula/autoconf/config.guess
1592ddf
+++ b/bacula/autoconf/config.guess
1592ddf
@@ -1001,6 +1001,9 @@ EOF
1592ddf
     ppcle:Linux:*:*)
1592ddf
 	echo powerpcle-unknown-linux-${LIBC}
1592ddf
 	exit ;;
1592ddf
+    ppc64el:Linux:*:*)
1592ddf
+	echo powerpc64le-unknown-linux-${LIBC}
1592ddf
+	exit ;;
1592ddf
     s390:Linux:*:* | s390x:Linux:*:*)
1592ddf
 	echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
1592ddf
 	exit ;;
1592ddf
diff --git a/bacula/autoconf/configure.in b/bacula/autoconf/configure.in
1592ddf
index db86e4d..0843981 100644
1592ddf
--- a/bacula/autoconf/configure.in
1592ddf
+++ b/bacula/autoconf/configure.in
1592ddf
@@ -2479,7 +2479,7 @@ if test x$support_lzo = xyes; then
1592ddf
 	     AC_CHECK_HEADER(${with_lzo}/lzo/lzoconf.h,
1592ddf
 		[
1592ddf
 		    AC_DEFINE(HAVE_LZO, 1, [Define to 1 if you have LZO compression])
1592ddf
-		    LZO_LIBS="${LZO_LDFLAGS} -lzo2"
1592ddf
+		    LZO_LIBS="${LZO_LDFLAGS} -llzo2"
1592ddf
 		    have_lzo="yes"	
1592ddf
 		], [
1592ddf
 		    echo " "
1592ddf
@@ -3294,6 +3294,8 @@ AC_OUTPUT([autoconf/Make.common \
1592ddf
 	   src/qt-console/bat.pro.mingw32 \
1592ddf
 	   src/qt-console/bat.pro.mingw64 \
1592ddf
 	   src/qt-console/install_conf_file \
1592ddf
+	   src/qt-console/tray-monitor/tray-monitor.conf \
1592ddf
+	   src/qt-console/tray-monitor/tray-monitor.pro \
1592ddf
 	   src/qt-console/tray-monitor/tray-monitor.pro.mingw32 \
1592ddf
 	   src/qt-console/tray-monitor/tray-monitor.pro.mingw64 \
1592ddf
 	   src/dird/Makefile \
1592ddf
diff --git a/bacula/configure b/bacula/configure
1592ddf
index ba59ba1..e476645 100755
1592ddf
--- a/bacula/configure
1592ddf
+++ b/bacula/configure
1592ddf
@@ -1,6 +1,6 @@
1592ddf
 #! /bin/sh
1592ddf
 # Guess values for system-dependent variables and create Makefiles.
1592ddf
-# Generated by GNU Autoconf 2.69 for bacula 7.1.0.
1592ddf
+# Generated by GNU Autoconf 2.69 for bacula 7.2.0.
1592ddf
 #
1592ddf
 #
1592ddf
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
1592ddf
@@ -587,8 +587,8 @@ MAKEFLAGS=
1592ddf
 # Identity of this package.
1592ddf
 PACKAGE_NAME='bacula'
1592ddf
 PACKAGE_TARNAME='bacula'
1592ddf
-PACKAGE_VERSION='7.1.0'
1592ddf
-PACKAGE_STRING='bacula 7.1.0'
1592ddf
+PACKAGE_VERSION='7.2.0'
1592ddf
+PACKAGE_STRING='bacula 7.2.0'
1592ddf
 PACKAGE_BUGREPORT=''
1592ddf
 PACKAGE_URL=''
1592ddf
 
1592ddf
@@ -1562,7 +1562,7 @@ if test "$ac_init_help" = "long"; then
1592ddf
   # Omit some internal or obsolete options to make the list less imposing.
1592ddf
   # This message is too long to be a string in the A/UX 3.1 sh.
1592ddf
   cat <<_ACEOF
1592ddf
-\`configure' configures bacula 7.1.0 to adapt to many kinds of systems.
1592ddf
+\`configure' configures bacula 7.2.0 to adapt to many kinds of systems.
1592ddf
 
1592ddf
 Usage: $0 [OPTION]... [VAR=VALUE]...
1592ddf
 
1592ddf
@@ -1631,7 +1631,7 @@ fi
1592ddf
 
1592ddf
 if test -n "$ac_init_help"; then
1592ddf
   case $ac_init_help in
1592ddf
-     short | recursive ) echo "Configuration of bacula 7.1.0:";;
1592ddf
+     short | recursive ) echo "Configuration of bacula 7.2.0:";;
1592ddf
    esac
1592ddf
   cat <<\_ACEOF
1592ddf
 
1592ddf
@@ -1826,7 +1826,7 @@ fi
1592ddf
 test -n "$ac_init_help" && exit $ac_status
1592ddf
 if $ac_init_version; then
1592ddf
   cat <<\_ACEOF
1592ddf
-bacula configure 7.1.0
1592ddf
+bacula configure 7.2.0
1592ddf
 generated by GNU Autoconf 2.69
1592ddf
 
1592ddf
 Copyright (C) 2012 Free Software Foundation, Inc.
1592ddf
@@ -2761,7 +2761,7 @@ cat >config.log <<_ACEOF
1592ddf
 This file contains any messages produced by compilers while
1592ddf
 running configure, to aid debugging if configure makes a mistake.
1592ddf
 
1592ddf
-It was created by bacula $as_me 7.1.0, which was
1592ddf
+It was created by bacula $as_me 7.2.0, which was
1592ddf
 generated by GNU Autoconf 2.69.  Invocation command line was
1592ddf
 
1592ddf
   $ $0 $@
1592ddf
@@ -29417,7 +29417,7 @@ if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
1592ddf
 
1592ddf
 $as_echo "#define HAVE_LZO 1" >>confdefs.h
1592ddf
 
1592ddf
-		    LZO_LIBS="${LZO_LDFLAGS} -lzo2"
1592ddf
+		    LZO_LIBS="${LZO_LDFLAGS} -llzo2"
1592ddf
 		    have_lzo="yes"
1592ddf
 
1592ddf
 else
1592ddf
@@ -30881,7 +30881,7 @@ if test "x${subsysdir}" = "x${sbindir}" ; then
1592ddf
 fi
1592ddf
 
1592ddf
 
1592ddf
-ac_config_files="$ac_config_files autoconf/Make.common Makefile manpages/Makefile scripts/btraceback scripts/bconsole scripts/bacula scripts/bacula-ctl-dir scripts/bacula-ctl-fd scripts/bacula-ctl-sd scripts/devel_bacula scripts/Makefile scripts/logrotate scripts/mtx-changer scripts/disk-changer scripts/dvd-handler scripts/dvd-simulator scripts/logwatch/Makefile scripts/logwatch/logfile.bacula.conf scripts/bat.desktop scripts/bat.desktop.xsu scripts/bat.desktop.consolehelper scripts/bat.console_apps src/Makefile src/host.h src/console/Makefile src/console/bconsole.conf src/qt-console/bat.conf src/qt-console/bat.pro src/qt-console/bat.pro.mingw32 src/qt-console/bat.pro.mingw64 src/qt-console/install_conf_file src/qt-console/tray-monitor/tray-monitor.pro.mingw32 src/qt-console/tray-monitor/tray-monitor.pro.mingw64 src/dird/Makefile src/dird/bacula-dir.conf src/lib/Makefile src/stored/Makefile src/stored/bacula-sd.conf src/filed/Makefile src/filed/bacula-fd.conf src/cats/Makefile src/cats/make_catalog_backup.pl src/cats/make_catalog_backup src/cats/delete_catalog_backup src/cats/create_postgresql_database src/cats/update_postgresql_tables src/cats/make_postgresql_tables src/cats/grant_postgresql_privileges src/cats/drop_postgresql_tables src/cats/drop_postgresql_database src/cats/create_mysql_database src/cats/update_mysql_tables src/cats/make_mysql_tables src/cats/grant_mysql_privileges src/cats/drop_mysql_tables src/cats/drop_mysql_database src/cats/create_sqlite3_database src/cats/update_sqlite3_tables src/cats/make_sqlite3_tables src/cats/grant_sqlite3_privileges src/cats/drop_sqlite3_tables src/cats/drop_sqlite3_database src/cats/sqlite src/cats/mysql src/cats/create_bacula_database src/cats/update_bacula_tables src/cats/grant_bacula_privileges src/cats/make_bacula_tables src/cats/drop_bacula_tables src/cats/drop_bacula_database src/cats/install-default-backend src/findlib/Makefile src/tools/Makefile src/plugins/fd/Makefile src/plugins/sd/Makefile src/plugins/dir/Makefile po/Makefile.in updatedb/update_mysql_tables updatedb/update_sqlite3_tables updatedb/update_postgresql_tables updatedb/update_mysql_tables_9_to_10 updatedb/update_sqlite3_tables_9_to_10 updatedb/update_postgresql_tables_9_to_10 updatedb/update_mysql_tables_10_to_11 updatedb/update_sqlite3_tables_10_to_11 updatedb/update_postgresql_tables_10_to_11 updatedb/update_mysql_tables_11_to_12 updatedb/update_sqlite3_tables_11_to_12 updatedb/update_postgresql_tables_11_to_12 updatedb/update_mysql_tables_12_to_13 updatedb/update_postgresql_tables_12_to_13 updatedb/update_mysql_tables_13_to_14 updatedb/update_postgresql_tables_13_to_14 examples/nagios/check_bacula/Makefile platforms/rpms/redhat/bacula.spec platforms/rpms/redhat/bacula-bat.spec platforms/rpms/redhat/bacula-docs.spec platforms/rpms/redhat/bacula-mtx.spec platforms/rpms/suse/bacula.spec platforms/rpms/suse/bacula-bat.spec platforms/rpms/suse/bacula-docs.spec platforms/rpms/suse/bacula-mtx.spec $PFILES"
1592ddf
+ac_config_files="$ac_config_files autoconf/Make.common Makefile manpages/Makefile scripts/btraceback scripts/bconsole scripts/bacula scripts/bacula-ctl-dir scripts/bacula-ctl-fd scripts/bacula-ctl-sd scripts/devel_bacula scripts/Makefile scripts/logrotate scripts/mtx-changer scripts/disk-changer scripts/dvd-handler scripts/dvd-simulator scripts/logwatch/Makefile scripts/logwatch/logfile.bacula.conf scripts/bat.desktop scripts/bat.desktop.xsu scripts/bat.desktop.consolehelper scripts/bat.console_apps src/Makefile src/host.h src/console/Makefile src/console/bconsole.conf src/qt-console/bat.conf src/qt-console/bat.pro src/qt-console/bat.pro.mingw32 src/qt-console/bat.pro.mingw64 src/qt-console/install_conf_file src/qt-console/tray-monitor/tray-monitor.conf src/qt-console/tray-monitor/tray-monitor.pro src/qt-console/tray-monitor/tray-monitor.pro.mingw32 src/qt-console/tray-monitor/tray-monitor.pro.mingw64 src/dird/Makefile src/dird/bacula-dir.conf src/lib/Makefile src/stored/Makefile src/stored/bacula-sd.conf src/filed/Makefile src/filed/bacula-fd.conf src/cats/Makefile src/cats/make_catalog_backup.pl src/cats/make_catalog_backup src/cats/delete_catalog_backup src/cats/create_postgresql_database src/cats/update_postgresql_tables src/cats/make_postgresql_tables src/cats/grant_postgresql_privileges src/cats/drop_postgresql_tables src/cats/drop_postgresql_database src/cats/create_mysql_database src/cats/update_mysql_tables src/cats/make_mysql_tables src/cats/grant_mysql_privileges src/cats/drop_mysql_tables src/cats/drop_mysql_database src/cats/create_sqlite3_database src/cats/update_sqlite3_tables src/cats/make_sqlite3_tables src/cats/grant_sqlite3_privileges src/cats/drop_sqlite3_tables src/cats/drop_sqlite3_database src/cats/sqlite src/cats/mysql src/cats/create_bacula_database src/cats/update_bacula_tables src/cats/grant_bacula_privileges src/cats/make_bacula_tables src/cats/drop_bacula_tables src/cats/drop_bacula_database src/cats/install-default-backend src/findlib/Makefile src/tools/Makefile src/plugins/fd/Makefile src/plugins/sd/Makefile src/plugins/dir/Makefile po/Makefile.in updatedb/update_mysql_tables updatedb/update_sqlite3_tables updatedb/update_postgresql_tables updatedb/update_mysql_tables_9_to_10 updatedb/update_sqlite3_tables_9_to_10 updatedb/update_postgresql_tables_9_to_10 updatedb/update_mysql_tables_10_to_11 updatedb/update_sqlite3_tables_10_to_11 updatedb/update_postgresql_tables_10_to_11 updatedb/update_mysql_tables_11_to_12 updatedb/update_sqlite3_tables_11_to_12 updatedb/update_postgresql_tables_11_to_12 updatedb/update_mysql_tables_12_to_13 updatedb/update_postgresql_tables_12_to_13 updatedb/update_mysql_tables_13_to_14 updatedb/update_postgresql_tables_13_to_14 examples/nagios/check_bacula/Makefile platforms/rpms/redhat/bacula.spec platforms/rpms/redhat/bacula-bat.spec platforms/rpms/redhat/bacula-docs.spec platforms/rpms/redhat/bacula-mtx.spec platforms/rpms/suse/bacula.spec platforms/rpms/suse/bacula-bat.spec platforms/rpms/suse/bacula-docs.spec platforms/rpms/suse/bacula-mtx.spec $PFILES"
1592ddf
 
1592ddf
 ac_config_commands="$ac_config_commands default"
1592ddf
 
1592ddf
@@ -31392,7 +31392,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
1592ddf
 # report actual input values of CONFIG_FILES etc. instead of their
1592ddf
 # values after options handling.
1592ddf
 ac_log="
1592ddf
-This file was extended by bacula $as_me 7.1.0, which was
1592ddf
+This file was extended by bacula $as_me 7.2.0, which was
1592ddf
 generated by GNU Autoconf 2.69.  Invocation command line was
1592ddf
 
1592ddf
   CONFIG_FILES    = $CONFIG_FILES
1592ddf
@@ -31458,7 +31458,7 @@ _ACEOF
1592ddf
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
1592ddf
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
1592ddf
 ac_cs_version="\\
1592ddf
-bacula config.status 7.1.0
1592ddf
+bacula config.status 7.2.0
1592ddf
 configured by $0, generated by GNU Autoconf 2.69,
1592ddf
   with options \\"\$ac_cs_config\\"
1592ddf
 
1592ddf
@@ -32001,6 +32001,8 @@ do
1592ddf
     "src/qt-console/bat.pro.mingw32") CONFIG_FILES="$CONFIG_FILES src/qt-console/bat.pro.mingw32" ;;
1592ddf
     "src/qt-console/bat.pro.mingw64") CONFIG_FILES="$CONFIG_FILES src/qt-console/bat.pro.mingw64" ;;
1592ddf
     "src/qt-console/install_conf_file") CONFIG_FILES="$CONFIG_FILES src/qt-console/install_conf_file" ;;
1592ddf
+    "src/qt-console/tray-monitor/tray-monitor.conf") CONFIG_FILES="$CONFIG_FILES src/qt-console/tray-monitor/tray-monitor.conf" ;;
1592ddf
+    "src/qt-console/tray-monitor/tray-monitor.pro") CONFIG_FILES="$CONFIG_FILES src/qt-console/tray-monitor/tray-monitor.pro" ;;
1592ddf
     "src/qt-console/tray-monitor/tray-monitor.pro.mingw32") CONFIG_FILES="$CONFIG_FILES src/qt-console/tray-monitor/tray-monitor.pro.mingw32" ;;
1592ddf
     "src/qt-console/tray-monitor/tray-monitor.pro.mingw64") CONFIG_FILES="$CONFIG_FILES src/qt-console/tray-monitor/tray-monitor.pro.mingw64" ;;
1592ddf
     "src/dird/Makefile") CONFIG_FILES="$CONFIG_FILES src/dird/Makefile" ;;
1592ddf
diff --git a/bacula/examples/devices/DVD.conf b/bacula/examples/devices/DVD.conf
1592ddf
deleted file mode 100644
1592ddf
index 8c6552a..0000000
1592ddf
--- a/bacula/examples/devices/DVD.conf
1592ddf
+++ /dev/null
1592ddf
@@ -1,22 +0,0 @@
1592ddf
-#
1592ddf
-# A DVD device
1592ddf
-#
1592ddf
-Device {
1592ddf
-  Name = "DVD Writer"
1592ddf
-  Media Type = DVD
1592ddf
-  Device Type = DVD
1592ddf
-  Archive Device = /dev/hdc
1592ddf
-  LabelMedia = yes;                   # lets Bacula label unlabeled media
1592ddf
-  Random Access = Yes;
1592ddf
-  AutomaticMount = yes;               # when device opened, read it
1592ddf
-  RemovableMedia = yes;
1592ddf
-  AlwaysOpen = no;
1592ddf
-  MaximumPartSize = 800M;
1592ddf
-  RequiresMount = yes;
1592ddf
-  MountPoint = /mnt/cdrom;
1592ddf
-  MountCommand = "/bin/mount -t iso9660 -o ro %a %m";
1592ddf
-  UnmountCommand = "/bin/umount %m";
1592ddf
-  SpoolDirectory = /tmp/backup;
1592ddf
-  WritePartCommand = "@scriptdir@/dvd-handler %a write %e %v"
1592ddf
-  FreeSpaceCommand = "@scriptdir@/dvd-handler %a free"
1592ddf
-}
1592ddf
diff --git a/bacula/manpages/Makefile.in b/bacula/manpages/Makefile.in
1592ddf
index e4d107a..db38f64 100644
1592ddf
--- a/bacula/manpages/Makefile.in
1592ddf
+++ b/bacula/manpages/Makefile.in
1592ddf
@@ -8,7 +8,7 @@
1592ddf
 
1592ddf
 MAN8 = bacula.8 bacula-dir.8 bacula-fd.8 bacula-sd.8 \
1592ddf
        bconsole.8 bcopy.8 bextract.8 bls.8 bscan.8 btape.8 \
1592ddf
-       btraceback.8 dbcheck.8 bwild.8 bregex.8 bpluginfo.8
1592ddf
+       btraceback.8 dbcheck.8 bwild.8 bregex.8
1592ddf
 
1592ddf
 MAN1 = bsmtp.1 bat.1
1592ddf
       
1592ddf
diff --git a/bacula/manpages/bconsole.8 b/bacula/manpages/bconsole.8
1592ddf
index 7bce096..478f02c 100644
1592ddf
--- a/bacula/manpages/bconsole.8
1592ddf
+++ b/bacula/manpages/bconsole.8
1592ddf
@@ -39,7 +39,7 @@ No conio (for scripting).
1592ddf
 .B \-s
1592ddf
 No signals (for debugging).
1592ddf
 .TP
1592ddf
-.b \-u\  nn
1592ddf
+.B \-u\  nn
1592ddf
 Set command execution timeout to \fInn\fP seconds.
1592ddf
 .TP
1592ddf
 .B \-t
1592ddf
diff --git a/bacula/platforms/rpms/redhat/bacula.spec.in b/bacula/platforms/rpms/redhat/bacula.spec.in
1592ddf
index 8f59a8f..5d3c231 100644
1592ddf
--- a/bacula/platforms/rpms/redhat/bacula.spec.in
1592ddf
+++ b/bacula/platforms/rpms/redhat/bacula.spec.in
1592ddf
@@ -65,6 +65,8 @@
1592ddf
 %define log_dir        %_libdir/bacula/log
1592ddf
 %endif
1592ddf
 
1592ddf
+%define systemd_dir    /lib/systemd/system
1592ddf
+
1592ddf
 # Daemon user:group Don't change them unless you know what you are doing
1592ddf
 %define director_daemon_user    bacula
1592ddf
 %define storage_daemon_user     bacula
1592ddf
@@ -75,7 +77,7 @@
1592ddf
 
1592ddf
 %define depkgs ../depkgs
1592ddf
 
1592ddf
-# probems with mandriva build:
1592ddf
+# problems with mandriva build:
1592ddf
 # nothing provides libbonobo2_0-devel, nothing provides libbonoboui2_0-devel
1592ddf
 
1592ddf
 #--------------------------------------------------------------------------
1592ddf
@@ -142,6 +144,8 @@ Source2: Release_Notes-%{version}-%{release}.tar.gz
1592ddf
 %{?build_fc17:%define fc17 1}
1592ddf
 %define fc18 0
1592ddf
 %{?build_fc18:%define fc18 1}
1592ddf
+%define fc22 0
1592ddf
+%{?build_fc22:%define fc22 1}
1592ddf
 # Whitebox Enterprise build
1592ddf
 %define wb3 0
1592ddf
 %{?build_wb3:%define wb3 1}
1592ddf
@@ -162,6 +166,9 @@ Source2: Release_Notes-%{version}-%{release}.tar.gz
1592ddf
 %define rhel6 0
1592ddf
 %{?build_rhel6:%define rhel6 1}
1592ddf
 %{?build_el6:%define rhel6 1}
1592ddf
+%define rhel7 0
1592ddf
+%{?build_rhel7:%define rhel7 1}
1592ddf
+%{?build_el7:%define rhel7 1}
1592ddf
 # CentOS build
1592ddf
 %define centos3 0
1592ddf
 %{?build_centos3:%define centos3 1}
1592ddf
@@ -199,6 +206,8 @@ Source2: Release_Notes-%{version}-%{release}.tar.gz
1592ddf
 %{?build_su111:%define su111 1}
1592ddf
 %define su112 0
1592ddf
 %{?build_su112:%define su112 1}
1592ddf
+%define su113 0
1592ddf
+%{?build_su113:%define su113 1}
1592ddf
 %define su120 0
1592ddf
 %{?build_su120:%define su120 1}
1592ddf
 %define su131 0
1592ddf
@@ -214,13 +223,29 @@ Source2: Release_Notes-%{version}-%{release}.tar.gz
1592ddf
 %define client_only 0
1592ddf
 %{?build_client_only:%define client_only 1}
1592ddf
 
1592ddf
+# if the platform is using systemd
1592ddf
+%define usesystemd 0
1592ddf
+
1592ddf
+%if %{rhel7} || %{fc22}
1592ddf
+%define usesystemd 1
1592ddf
+%endif
1592ddf
+
1592ddf
+# depending if we use systemd or not, we use chkconfig or systemctl
1592ddf
+%if %{usesystemd}
1592ddf
+%define service_enable    systemctl enable
1592ddf
+%define service_disable   systemctl disable
1592ddf
+%else
1592ddf
+%define service_enable    /sbin/chkconfig --add
1592ddf
+%define service_disable   /sbin/chkconfig --del
1592ddf
+%endif
1592ddf
+
1592ddf
 # Setup some short cuts
1592ddf
 %define rhat 0
1592ddf
 %if %{rh7} || %{rh8} || %{rh9}
1592ddf
 %define rhat 1
1592ddf
 %endif
1592ddf
 %define fed 0
1592ddf
-%if %{fc16} || %{fc17} || %{fc18}
1592ddf
+%if %{fc16} || %{fc17} || %{fc18} || %{fc22}
1592ddf
 %define fed 1
1592ddf
 %endif
1592ddf
 %define suse 0
1592ddf
@@ -228,7 +253,7 @@ Source2: Release_Notes-%{version}-%{release}.tar.gz
1592ddf
 %define suse 1
1592ddf
 %endif
1592ddf
 %define rhel 0
1592ddf
-%if %{rhel3} || %{rhel4} || %{rhel5} || %{rhel6} || %{centos3} || %{centos4} || %{centos5} || %{centos6}
1592ddf
+%if %{rhel3} || %{rhel4} || %{rhel5} || %{rhel6} || %{rhel7} || %{centos3} || %{centos4} || %{centos5} || %{centos6}
1592ddf
 %define rhel 1
1592ddf
 %endif
1592ddf
 %define scil 0
1592ddf
@@ -283,7 +308,7 @@ exit 1
1592ddf
 %{?build_x86_64:%define x86_64 1}
1592ddf
 
1592ddf
 # check what distribution we are
1592ddf
-%if %{fc16} || %{fc17} || %{fc18}
1592ddf
+%if %{fc16} || %{fc17} || %{fc18} || %{fc22}
1592ddf
 %define _dist %(grep Fedora /etc/redhat-release)
1592ddf
 %endif
1592ddf
 %if %{centos5} || %{centos4} || %{centos3}
1592ddf
@@ -361,6 +386,7 @@ BuildRequires: libstdc++-devel, zlib-devel
1592ddf
 BuildRequires: openssl-devel
1592ddf
 BuildRequires: libacl-devel
1592ddf
 BuildRequires: pkgconfig
1592ddf
+BuildRequires: bzip2-devel
1592ddf
 %if ! %{rh7}
1592ddf
 BuildRequires: libxml2-devel
1592ddf
 %endif
1592ddf
@@ -486,7 +512,7 @@ Provides: %{product}
1592ddf
 Provides: %{product}-libs
1592ddf
 %endif
1592ddf
 
1592ddf
-Requires: libstdc++, zlib, openssl
1592ddf
+Requires: libstdc++, zlib, openssl, bzip2-libs
1592ddf
 Requires: glibc, readline, %{name}-libs
1592ddf
 
1592ddf
 %if %{python}
1592ddf
@@ -656,6 +682,9 @@ export BACULA="Bacula"
1592ddf
 %if %{rh7} || %{rh8} || %{rh9}
1592ddf
         --disable-batch-insert \
1592ddf
 %endif
1592ddf
+%if %{usesystemd}
1592ddf
+        --with-systemd=%{systemd_dir} \
1592ddf
+%endif
1592ddf
         --with-tcp-wrappers  \
1592ddf
         --with-dir-user=%{director_daemon_user} \
1592ddf
         --with-dir-group=%{daemon_group} \
1592ddf
@@ -696,10 +725,22 @@ mkdir -p $RPM_BUILD_ROOT%{sqlite_bindir}
1592ddf
 
1592ddf
 make DESTDIR=$RPM_BUILD_ROOT install
1592ddf
 
1592ddf
+# bsnapshot
1592ddf
+make DESTDIR=$RPM_BUILD_ROOT -C ../bacula-%{_version}/src/tools/ install-bsnapshot
1592ddf
+
1592ddf
+%if %{usesystemd}
1592ddf
+make DESTDIR=$RPM_BUILD_ROOT -C platforms/systemd install-dir install-service
1592ddf
+%endif
1592ddf
+
1592ddf
 # Remove docs for programs that are depreciated
1592ddf
 rm -f $RPM_BUILD_ROOT%{_mandir}/man1/bacula-bgnome-console.1.%{manpage_ext}
1592ddf
 rm -f $RPM_BUILD_ROOT%{_mandir}/man1/bacula-bwxconsole.1.%{manpage_ext}
1592ddf
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/bacula-tray-monitor.1.%{manpage_ext}
1592ddf
 rm -f $RPM_BUILD_ROOT%{script_dir}/gconsole
1592ddf
+
1592ddf
+# Remove docs for programs only included in bee
1592ddf
+rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bpluginfo.8.%{manpage_ext}
1592ddf
+
1592ddf
 # Storage-ctl packaged in shstore rpm
1592ddf
 rm -f $RPM_BUILD_ROOT%{script_dir}/storage-ctl
1592ddf
 rm -f $RPM_BUILD_ROOT%{script_dir}/storage-ctl.conf
1592ddf
@@ -718,25 +759,32 @@ rm -f $RPM_BUILD_ROOT%{script_dir}/stopmysql
1592ddf
 %endif
1592ddf
 
1592ddf
 # install the init scripts
1592ddf
+%if !%{usesystemd}
1592ddf
 %if %{suse}
1592ddf
 cp -p platforms/suse/bacula-dir $RPM_BUILD_ROOT/etc/init.d/bacula-dir
1592ddf
 cp -p platforms/suse/bacula-fd $RPM_BUILD_ROOT/etc/init.d/bacula-fd
1592ddf
 cp -p platforms/suse/bacula-sd $RPM_BUILD_ROOT/etc/init.d/bacula-sd
1592ddf
-%endif
1592ddf
+%endif				 # suse
1592ddf
 %if %{mdk}
1592ddf
 cp -p platforms/mandrake/bacula-dir $RPM_BUILD_ROOT/etc/init.d/bacula-dir
1592ddf
 cp -p platforms/mandrake/bacula-fd $RPM_BUILD_ROOT/etc/init.d/bacula-fd
1592ddf
 cp -p platforms/mandrake/bacula-sd $RPM_BUILD_ROOT/etc/init.d/bacula-sd
1592ddf
-%endif
1592ddf
+%endif				 # mdk
1592ddf
 %if ! %{suse} && ! %{mdk}
1592ddf
 cp -p platforms/redhat/bacula-dir $RPM_BUILD_ROOT/etc/init.d/bacula-dir
1592ddf
 cp -p platforms/redhat/bacula-fd $RPM_BUILD_ROOT/etc/init.d/bacula-fd
1592ddf
 cp -p platforms/redhat/bacula-sd $RPM_BUILD_ROOT/etc/init.d/bacula-sd
1592ddf
-%endif
1592ddf
+%endif				 # !suse && !mdk
1592ddf
 chmod 0754 $RPM_BUILD_ROOT/etc/init.d/*
1592ddf
+%endif				 # ! usesystemd
1592ddf
+
1592ddf
 %if %{client_only}
1592ddf
 rm -f $RPM_BUILD_ROOT/etc/init.d/bacula-dir
1592ddf
 rm -f $RPM_BUILD_ROOT/etc/init.d/bacula-sd
1592ddf
+rm -f $RPM_BUILD_ROOT%{script_dir}/breload
1592ddf
+rm -f $RPM_BUILD_ROOT%{script_dir}/manual_prune.pl
1592ddf
+rm -f $RPM_BUILD_ROOT%{systemd_dir}/bacula-dir.service
1592ddf
+rm -f $RPM_BUILD_ROOT%{systemd_dir}/bacula-sd.service
1592ddf
 %endif
1592ddf
 
1592ddf
 # install sqlite
1592ddf
@@ -756,6 +804,8 @@ cp -p updatedb/* $RPM_BUILD_ROOT%{script_dir}/updatedb/
1592ddf
 # install specific scripts
1592ddf
 
1592ddf
 # install special upgrade script, except for sqlite3
1592ddf
+%if ! %{sqlite}
1592ddf
+%endif
1592ddf
 
1592ddf
 %if ! %{client_only}
1592ddf
 # install the sample-query.sql file
1592ddf
@@ -789,7 +839,6 @@ rm -f $RPM_BUILD_ROOT%{_mandir}/man8/dbcheck.8.%{manpage_ext}
1592ddf
 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bregex.8.%{manpage_ext}
1592ddf
 rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bwild.8.%{manpage_ext}
1592ddf
 rm -f $RPM_BUILD_ROOT%{_mandir}/man1/bsmtp.1.%{manpage_ext}
1592ddf
-rm -f $RPM_BUILD_ROOT%{_mandir}/man8/bpluginfo.8.gz
1592ddf
 rm -f $RPM_BUILD_ROOT%{script_dir}/bacula
1592ddf
 rm -f $RPM_BUILD_ROOT%{script_dir}/bacula_config
1592ddf
 rm -f $RPM_BUILD_ROOT%{script_dir}/bacula-ctl-dir
1592ddf
@@ -803,7 +852,6 @@ rm -rf $RPM_BUILD_ROOT%{script_dir}/updatedb
1592ddf
 rm -f $RPM_BUILD_ROOT%{script_dir}/bconsole
1592ddf
 rm -f $RPM_BUILD_ROOT%{script_dir}/mtx-changer.conf
1592ddf
 rm -f $RPM_BUILD_ROOT%{_sbindir}/bacula
1592ddf
-rm -f $RPM_BUILD_ROOT%{_sbindir}/bpluginfo
1592ddf
 
1592ddf
 %endif
1592ddf
 
1592ddf
@@ -887,15 +935,24 @@ rm -f $RPM_BUILD_DIR/Release_Notes-%{version}-%{release}.txt
1592ddf
 %attr(-, root, %{daemon_group}) %{script_dir}/bacula-ctl-fd
1592ddf
 %attr(-, root, %{daemon_group}) %{script_dir}/bacula-ctl-sd
1592ddf
 %attr(-, root, %{daemon_group}) %{plugin_dir}/bpipe-fd.so
1592ddf
-%attr(-, root, %{daemon_group}) /etc/init.d/bacula-dir
1592ddf
-%attr(-, root, %{daemon_group}) /etc/init.d/bacula-fd
1592ddf
+#%attr(-, root, %{daemon_group}) /etc/init.d/bacula-dir
1592ddf
+#%attr(-, root, %{daemon_group}) /etc/init.d/bacula-fd
1592ddf
 %attr(-, root, %{daemon_group}) %{_sbindir}/dbcheck
1592ddf
-%attr(-, root, %{daemon_group}) %{_sbindir}/bpluginfo
1592ddf
 %attr(-, root, %{storage_daemon_group}) %{script_dir}/dvd-handler
1592ddf
-%attr(-, root, %{storage_daemon_group}) /etc/init.d/bacula-sd
1592ddf
+#%attr(-, root, %{storage_daemon_group}) /etc/init.d/bacula-sd
1592ddf
 %attr(-, root, %{storage_daemon_group}) %{script_dir}/mtx-changer
1592ddf
 %attr(-, root, %{storage_daemon_group}) %config(noreplace) %{script_dir}/mtx-changer.conf
1592ddf
 
1592ddf
+%if %{usesystemd}
1592ddf
+%attr(-, root, %{daemon_group}) %{systemd_dir}/bacula-dir.service
1592ddf
+%attr(-, root, %{daemon_group}) %{systemd_dir}/bacula-fd.service
1592ddf
+%attr(-, root, %{daemon_group}) %{systemd_dir}/bacula-sd.service
1592ddf
+%else
1592ddf
+%attr(-, root, %{daemon_group}) /etc/init.d/bacula-dir
1592ddf
+%attr(-, root, %{daemon_group}) /etc/init.d/bacula-fd
1592ddf
+%attr(-, root, %{storage_daemon_group}) /etc/init.d/bacula-sd
1592ddf
+%endif
1592ddf
+
1592ddf
 /etc/logrotate.d/bacula
1592ddf
 %{logwatch_dir}/scripts/services/bacula
1592ddf
 %{logwatch_dir}/scripts/shared/applybaculadate
1592ddf
@@ -917,6 +974,8 @@ rm -f $RPM_BUILD_DIR/Release_Notes-%{version}-%{release}.txt
1592ddf
 %attr(-, root, %{daemon_group}) %{_sbindir}/bscan
1592ddf
 %attr(-, root, %{daemon_group}) %{_sbindir}/btape
1592ddf
 
1592ddf
+%attr(755, root, root) %{_sbindir}/bsnapshot
1592ddf
+
1592ddf
 %{_sbindir}/bacula-fd
1592ddf
 %{_sbindir}/bacula
1592ddf
 %{_sbindir}/bcopy
1592ddf
@@ -940,7 +999,6 @@ rm -f $RPM_BUILD_DIR/Release_Notes-%{version}-%{release}.txt
1592ddf
 %{_mandir}/man8/bwild.8.%{manpage_ext}
1592ddf
 %{_mandir}/man1/bsmtp.1.%{manpage_ext}
1592ddf
 %{_mandir}/man1/bat.1.%{manpage_ext}
1592ddf
-%{_mandir}/man8/bpluginfo.8.gz
1592ddf
 
1592ddf
 %_prefix/share/doc/*
1592ddf
 
1592ddf
@@ -1079,14 +1137,14 @@ fi
1592ddf
 # add our links
1592ddf
 if [ "$1" -ge 1 ] ; then
1592ddf
 %if %{suse} && %{mysql}
1592ddf
-  /sbin/chkconfig --add mysql
1592ddf
+  %{service_enable} mysql
1592ddf
 %endif
1592ddf
 %if %{suse} && %{postgresql}
1592ddf
-  /sbin/chkconfig --add postgresql
1592ddf
+  %{service_enable} postgresql
1592ddf
 %endif
1592ddf
-  /sbin/chkconfig --add bacula-dir
1592ddf
-  /sbin/chkconfig --add bacula-fd
1592ddf
-  /sbin/chkconfig --add bacula-sd
1592ddf
+  %{service_enable} bacula-dir
1592ddf
+  %{service_enable} bacula-fd
1592ddf
+  %{service_enable} bacula-sd
1592ddf
 fi
1592ddf
 %endif
1592ddf
 
1592ddf
@@ -1103,6 +1161,9 @@ if [ -d %{sysconf_dir} ]; then
1592ddf
        done
1592ddf
    fi
1592ddf
    host=`hostname -s`
1592ddf
+   if [ "$host" = "" ]; then
1592ddf
+       host=localhost
1592ddf
+   fi
1592ddf
    for file in *.conf; do
1592ddf
       sed -f .rpm.sed $file > $file.new
1592ddf
       sed "s@XXX_HOSTNAME_XXX@${host}@g" $file.new > $file
1592ddf
@@ -1212,6 +1273,9 @@ if [ -d %{sysconf_dir} ]; then
1592ddf
        done
1592ddf
    fi
1592ddf
    host=`hostname -s`
1592ddf
+   if [ "$host" = "" ]; then
1592ddf
+       host=localhost
1592ddf
+   fi
1592ddf
    for file in *.conf; do
1592ddf
       sed -f .rpm.sed $file > $file.new
1592ddf
       sed "s@XXX_HOSTNAME_XXX@${host}@g" $file.new > $file
1592ddf
@@ -1234,9 +1298,9 @@ fi
1592ddf
 %if ! %{client_only}
1592ddf
 # delete our links
1592ddf
 if [ $1 = 0 ]; then
1592ddf
-  /sbin/chkconfig --del bacula-dir
1592ddf
-  /sbin/chkconfig --del bacula-fd
1592ddf
-  /sbin/chkconfig --del bacula-sd
1592ddf
+  %{service_disable} bacula-dir
1592ddf
+  %{service_disable} bacula-fd
1592ddf
+  %{service_disable} bacula-sd
1592ddf
 fi
1592ddf
 %endif
1592ddf
 
1592ddf
@@ -1246,8 +1310,17 @@ fi
1592ddf
 %attr(-, root, %{daemon_group}) %dir %{plugin_dir}
1592ddf
 #%attr(-, root, %{daemon_group}) %dir %{log_dir}
1592ddf
 %attr(-, root, %{daemon_group}) %dir %{sysconf_dir}
1592ddf
+
1592ddf
+# SD/DIR might write here
1592ddf
+%attr(-, %{storage_daemon_user}, %{daemon_group}) %dir %{log_dir}
1592ddf
+#%attr(-, root, %{daemon_group}) %{script_dir}/bacula-ctl-fd
1592ddf
+
1592ddf
+%if %{usesystemd}
1592ddf
+%attr(-, root, %{daemon_group})  %{systemd_dir}/bacula-fd.service
1592ddf
+%else
1592ddf
 %{script_dir}/bacula-ctl-fd
1592ddf
 /etc/init.d/bacula-fd
1592ddf
+%endif
1592ddf
 
1592ddf
 /etc/logrotate.d/bacula
1592ddf
 
1592ddf
@@ -1295,7 +1368,7 @@ fi
1592ddf
 %post client
1592ddf
 # add our link
1592ddf
 if [ "$1" -ge 1 ] ; then
1592ddf
-   /sbin/chkconfig --add bacula-fd
1592ddf
+   %{service_enable} bacula-fd
1592ddf
 fi
1592ddf
 
1592ddf
 if [ -d %{sysconf_dir} ]; then
1592ddf
@@ -1311,6 +1384,9 @@ if [ -d %{sysconf_dir} ]; then
1592ddf
        done
1592ddf
    fi
1592ddf
    host=`hostname -s`
1592ddf
+   if [ "$host" = "" ]; then
1592ddf
+       host=localhost
1592ddf
+   fi
1592ddf
    for file in *.conf; do
1592ddf
       sed -f .rpm.sed $file > $file.new
1592ddf
       sed "s@XXX_HOSTNAME_XXX@${host}@g" $file.new > $file
1592ddf
@@ -1321,7 +1397,7 @@ fi
1592ddf
 %preun client
1592ddf
 # delete our link
1592ddf
 if [ $1 = 0 ]; then
1592ddf
-   /sbin/chkconfig --del bacula-fd
1592ddf
+   %{service_disable} bacula-fd
1592ddf
 fi
1592ddf
 
1592ddf
 %files libs
1592ddf
diff --git a/bacula/platforms/systemd/Makefile.in b/bacula/platforms/systemd/Makefile.in
1592ddf
index 37c257d..2c3ddba 100644
1592ddf
--- a/bacula/platforms/systemd/Makefile.in
1592ddf
+++ b/bacula/platforms/systemd/Makefile.in
1592ddf
@@ -21,55 +21,55 @@ nothing:
1592ddf
 install: install-dir install-conf install-autostart
1592ddf
 
1592ddf
 install-dir:
1592ddf
-        mkdir -p $(DESTDIR)/$(SYSTEMD_UNITDIR) $(DESTDIR)/$(SYSTEMD_TMPFILES)
1592ddf
+	mkdir -p $(DESTDIR)/$(SYSTEMD_UNITDIR) $(DESTDIR)/$(SYSTEMD_TMPFILES)
1592ddf
 
1592ddf
 install-conf:
1592ddf
-        @$(INSTALL_PROGRAM) -m 644 bacula.conf $(DESTDIR)/$(SYSTEMD_TMPFILES)/bacula.conf
1592ddf
+	@$(INSTALL_PROGRAM) -m 644 bacula.conf $(DESTDIR)/$(SYSTEMD_TMPFILES)/bacula.conf
1592ddf
 
1592ddf
 install-autostart: install-autostart-fd install-autostart-sd install-autostart-dir
1592ddf
 
1592ddf
 install-service:
1592ddf
-        @$(INSTALL_PROGRAM) -m 644 bacula-fd.service $(DESTDIR)/$(SYSTEMD_UNITDIR)
1592ddf
-        @$(INSTALL_PROGRAM) -m 644 bacula-dir.service $(DESTDIR)/$(SYSTEMD_UNITDIR)
1592ddf
-        @$(INSTALL_PROGRAM) -m 644 bacula-sd.service $(DESTDIR)/$(SYSTEMD_UNITDIR)
1592ddf
+	@$(INSTALL_PROGRAM) -m 644 bacula-fd.service $(DESTDIR)/$(SYSTEMD_UNITDIR)
1592ddf
+	@$(INSTALL_PROGRAM) -m 644 bacula-dir.service $(DESTDIR)/$(SYSTEMD_UNITDIR)
1592ddf
+	@$(INSTALL_PROGRAM) -m 644 bacula-sd.service $(DESTDIR)/$(SYSTEMD_UNITDIR)
1592ddf
 
1592ddf
 install-autostart-fd:
1592ddf
-        @if test x$(DESTDIR) = x -a  -f $(SYSTEMD_UNITDIR)/bacula-fd.service; then \
1592ddf
-           /bin/systemctl stop bacula-fd.service; \
1592ddf
-           /bin/systemctl disable bacula-fd.service; \
1592ddf
-        fi
1592ddf
-        @$(INSTALL_PROGRAM) -m 644 bacula-fd.service $(DESTDIR)/$(SYSTEMD_UNITDIR)/bacula-fd.service
1592ddf
-        # set symlinks for script at startup and shutdown
1592ddf
-        @if test x$(DESTDIR) = x ; then \
1592ddf
-           /bin/systemctl enable bacula-fd.service; \
1592ddf
-           /bin/systemctl start bacula-fd.service; \
1592ddf
-        fi
1592ddf
+	@if test x$(DESTDIR) = x -a  -f $(SYSTEMD_UNITDIR)/bacula-fd.service; then \
1592ddf
+	   /bin/systemctl stop bacula-fd.service; \
1592ddf
+	   /bin/systemctl disable bacula-fd.service; \
1592ddf
+	fi
1592ddf
+	@$(INSTALL_PROGRAM) -m 644 bacula-fd.service $(DESTDIR)/$(SYSTEMD_UNITDIR)/bacula-fd.service
1592ddf
+	# set symlinks for script at startup and shutdown
1592ddf
+	@if test x$(DESTDIR) = x ; then \
1592ddf
+	   /bin/systemctl enable bacula-fd.service; \
1592ddf
+	   /bin/systemctl start bacula-fd.service; \
1592ddf
+	fi
1592ddf
 
1592ddf
 
1592ddf
 install-autostart-sd:
1592ddf
-        @if test x$(DESTDIR) = x -a  -f $(SYSTEMD_UNITDIR)/bacula-sd.service; then \
1592ddf
-           /bin/systemctl stop bacula-sd.service; \
1592ddf
-           /bin/systemctl disable bacula-sd.service; \
1592ddf
-        fi
1592ddf
-        @$(INSTALL_PROGRAM) -m 644 bacula-sd.service $(DESTDIR)/$(SYSTEMD_UNITDIR)/bacula-sd.service
1592ddf
-        # set symlinks for script at startup and shutdown
1592ddf
-        @if test x$(DESTDIR) = x ; then \
1592ddf
-           /bin/systemctl enable bacula-sd.service; \
1592ddf
-           /bin/systemctl start bacula-sd.service; \
1592ddf
-        fi
1592ddf
+	@if test x$(DESTDIR) = x -a  -f $(SYSTEMD_UNITDIR)/bacula-sd.service; then \
1592ddf
+	   /bin/systemctl stop bacula-sd.service; \
1592ddf
+	   /bin/systemctl disable bacula-sd.service; \
1592ddf
+	fi
1592ddf
+	@$(INSTALL_PROGRAM) -m 644 bacula-sd.service $(DESTDIR)/$(SYSTEMD_UNITDIR)/bacula-sd.service
1592ddf
+	# set symlinks for script at startup and shutdown
1592ddf
+	@if test x$(DESTDIR) = x ; then \
1592ddf
+	   /bin/systemctl enable bacula-sd.service; \
1592ddf
+	   /bin/systemctl start bacula-sd.service; \
1592ddf
+	fi
1592ddf
 
1592ddf
 
1592ddf
 install-autostart-dir:
1592ddf
-        @if test x$(DESTDIR) = x -a  -f $(SYSTEMD_UNITDIR)/bacula-dir.service; then \
1592ddf
-           /bin/systemctl stop bacula-dir.service; \
1592ddf
-           /bin/systemctl disable bacula-dir.service; \
1592ddf
-        fi
1592ddf
-        @$(INSTALL_PROGRAM) -m 644 bacula-dir.service $(DESTDIR)/$(SYSTEMD_UNITDIR)/bacula-dir.service
1592ddf
-        # set symlinks for script at startup and shutdown
1592ddf
-        @if test x$(DESTDIR) = x ; then \
1592ddf
-           /bin/systemctl enable bacula-dir.service; \
1592ddf
-           /bin/systemctl start bacula-dir.service; \
1592ddf
-        fi
1592ddf
+	@if test x$(DESTDIR) = x -a  -f $(SYSTEMD_UNITDIR)/bacula-dir.service; then \
1592ddf
+	   /bin/systemctl stop bacula-dir.service; \
1592ddf
+	   /bin/systemctl disable bacula-dir.service; \
1592ddf
+	fi
1592ddf
+	@$(INSTALL_PROGRAM) -m 644 bacula-dir.service $(DESTDIR)/$(SYSTEMD_UNITDIR)/bacula-dir.service
1592ddf
+	# set symlinks for script at startup and shutdown
1592ddf
+	@if test x$(DESTDIR) = x ; then \
1592ddf
+	   /bin/systemctl enable bacula-dir.service; \
1592ddf
+	   /bin/systemctl start bacula-dir.service; \
1592ddf
+	fi
1592ddf
 
1592ddf
 
1592ddf
 uninstall: uninstall-autostart uninstall-conf
1592ddf
@@ -77,37 +77,37 @@ uninstall: uninstall-autostart uninstall-conf
1592ddf
 uninstall-autostart: uninstall-autostart-fd uninstall-autostart-sd uninstall-autostart-dir
1592ddf
 
1592ddf
 uninstall-autostart-fd:
1592ddf
-        @if test x$(DESTDIR) = x -a  -f $(SYSTEMD_UNITDIR)/bacula-fd.service; then \
1592ddf
-           /bin/systemctl stop bacula-fd.service; \
1592ddf
-           /bin/systemctl disable bacula-fd.service; \
1592ddf
-        fi
1592ddf
-        @rm -f  $(DESTDIR)$(SYSTEMD_UNITDIR)/bacula-fd.service
1592ddf
+	@if test x$(DESTDIR) = x -a  -f $(SYSTEMD_UNITDIR)/bacula-fd.service; then \
1592ddf
+	   /bin/systemctl stop bacula-fd.service; \
1592ddf
+	   /bin/systemctl disable bacula-fd.service; \
1592ddf
+	fi
1592ddf
+	@rm -f	$(DESTDIR)$(SYSTEMD_UNITDIR)/bacula-fd.service
1592ddf
 
1592ddf
 
1592ddf
 uninstall-autostart-sd:
1592ddf
-        @if test x$(DESTDIR) = x -a  -f $(SYSTEMD_UNITDIR)/bacula-sd.service; then \
1592ddf
-           /bin/systemctl stop bacula-fd.service; \
1592ddf
-           /bin/systemctl disable bacula-fd.service; \
1592ddf
-        fi
1592ddf
-        @rm -f  $(DESTDIR)$(SYSTEMD_UNITDIR)/bacula-sd.service
1592ddf
+	@if test x$(DESTDIR) = x -a  -f $(SYSTEMD_UNITDIR)/bacula-sd.service; then \
1592ddf
+	   /bin/systemctl stop bacula-fd.service; \
1592ddf
+	   /bin/systemctl disable bacula-fd.service; \
1592ddf
+	fi
1592ddf
+	@rm -f	$(DESTDIR)$(SYSTEMD_UNITDIR)/bacula-sd.service
1592ddf
 
1592ddf
 uninstall-autostart-dir:
1592ddf
-        @if test x$(DESTDIR) = x -a  -f $(SYSTEMD)/bacula-dir.service; then \
1592ddf
-           /bin/systemctl stop bacula-dir.service; \
1592ddf
-           /bin/systemctl disable bacula-dir.service; \
1592ddf
-        fi
1592ddf
-        @rm -f  $(DESTDIR)$(SYSTEMD_UNITDIR)/bacula-dir.service
1592ddf
+	@if test x$(DESTDIR) = x -a  -f $(SYSTEMD)/bacula-dir.service; then \
1592ddf
+	   /bin/systemctl stop bacula-dir.service; \
1592ddf
+	   /bin/systemctl disable bacula-dir.service; \
1592ddf
+	fi
1592ddf
+	@rm -f	$(DESTDIR)$(SYSTEMD_UNITDIR)/bacula-dir.service
1592ddf
 
1592ddf
 uninstall-conf:
1592ddf
-        @rm -f  $(DESTDIR)/$(SYSTEMD_TMPFILES)/bacula.conf
1592ddf
+	@rm -f	$(DESTDIR)/$(SYSTEMD_TMPFILES)/bacula.conf
1592ddf
 
1592ddf
 clean:
1592ddf
-        @rm -f 1 2 3
1592ddf
+	@rm -f 1 2 3
1592ddf
 
1592ddf
 distclean: clean
1592ddf
-        @rm -f Makefile bacula-*.spec bacula.*.spec bacula.spec
1592ddf
-        @rm -f bacula.conf bacula-sd.service bacula-fd.service bacula-dir.service
1592ddf
+	@rm -f Makefile bacula-*.spec bacula.*.spec bacula.spec
1592ddf
+	@rm -f bacula.conf bacula-sd.service bacula-fd.service bacula-dir.service
1592ddf
 
1592ddf
 devclean: clean
1592ddf
-        @rm -f Makefile bacula-*.spec bacula.*.spec bacula.spec
1592ddf
-        @rm -f bacula.conf bacula-sd.service bacula-fd.service bacula-dir.service
1592ddf
+	@rm -f Makefile bacula-*.spec bacula.*.spec bacula.spec
1592ddf
+	@rm -f bacula.conf bacula-sd.service bacula-fd.service bacula-dir.service
1592ddf
diff --git a/bacula/src/cats/bvfs.c b/bacula/src/cats/bvfs.c
1592ddf
index d73a49b..1d4619d 100644
1592ddf
--- a/bacula/src/cats/bvfs.c
1592ddf
+++ b/bacula/src/cats/bvfs.c
1592ddf
@@ -472,6 +472,7 @@ static int update_path_hierarchy_cache(JCR *jcr,
1592ddf
       free(result);
1592ddf
    }
1592ddf
 
1592ddf
+   
1592ddf
    if (mdb->bdb_get_type_index() == SQL_TYPE_SQLITE3) {
1592ddf
       Mmsg(mdb->cmd,
1592ddf
  "INSERT INTO PathVisibility (PathId, JobId) "
1592ddf
@@ -481,7 +482,19 @@ static int update_path_hierarchy_cache(JCR *jcr,
1592ddf
       "AND h.PPathId NOT IN (SELECT PathId FROM PathVisibility WHERE JobId=%s)",
1592ddf
            jobid, jobid, jobid );
1592ddf
 
1592ddf
-   } else {
1592ddf
+   }  else if (mdb->bdb_get_type_index() == SQL_TYPE_MYSQL) {
1592ddf
+      Mmsg(mdb->cmd,
1592ddf
+  "INSERT INTO PathVisibility (PathId, JobId)  "
1592ddf
+   "SELECT a.PathId,%s "
1592ddf
+   "FROM ( "
1592ddf
+     "SELECT DISTINCT h.PPathId AS PathId "
1592ddf
+       "FROM PathHierarchy AS h "
1592ddf
+       "JOIN  PathVisibility AS p ON (h.PathId=p.PathId) "
1592ddf
+      "WHERE p.JobId=%s) AS a "
1592ddf
+      "LEFT JOIN PathVisibility AS b ON (b.JobId=%s and a.PathId = b.PathId) "
1592ddf
+      "WHERE b.PathId IS NULL",  jobid, jobid, jobid);
1592ddf
+
1592ddf
+   } else {                     /* TODO: Test the MYSQL Query with PostgreSQL */
1592ddf
       Mmsg(mdb->cmd,
1592ddf
   "INSERT INTO PathVisibility (PathId, JobId)  "
1592ddf
    "SELECT a.PathId,%s "
1592ddf
diff --git a/bacula/src/filed/acl.c b/bacula/src/filed/acl.c
1592ddf
index 8a63b6b..f8c3dd8 100644
1592ddf
--- a/bacula/src/filed/acl.c
1592ddf
+++ b/bacula/src/filed/acl.c
1592ddf
@@ -927,7 +927,7 @@ static bacl_rtn_code generic_set_acl_on_os(JCR *jcr,
1592ddf
  * Define the supported ACL streams for this OS
1592ddf
  */
1592ddf
 static int os_access_acl_streams[1] = {
1592ddf
-   STREAM_ACL_DARWIN_ACCESS_ACL
1592ddf
+   STREAM_ACL_DARWIN_ACCESS
1592ddf
 };
1592ddf
 static int os_default_acl_streams[1] = {
1592ddf
    -1
1592ddf
@@ -956,7 +956,7 @@ static bacl_rtn_code darwin_backup_acl_streams(JCR *jcr, FF_PKT *ff_pkt)
1592ddf
 #endif
1592ddf
 
1592ddf
    if (jcr->acl_ctx->content_length > 0) {
1592ddf
-      return send_acl_stream(jcr, STREAM_ACL_DARWIN_ACCESS_ACL);
1592ddf
+      return send_acl_stream(jcr, STREAM_ACL_DARWIN_ACCESS);
1592ddf
    }
1592ddf
    return bacl_rtn_ok;
1592ddf
 }
1592ddf
@@ -988,11 +988,11 @@ static bacl_rtn_code (*os_restore_acl_streams)
1592ddf
  * Define the supported ACL streams for these OSes
1592ddf
  */
1592ddf
 static int os_access_acl_streams[2] = {
1592ddf
-   STREAM_ACL_FREEBSD_ACCESS_ACL,
1592ddf
-   STREAM_ACL_FREEBSD_NFS4_ACL
1592ddf
+   STREAM_ACL_FREEBSD_ACCESS,
1592ddf
+   STREAM_ACL_FREEBSD_NFS4
1592ddf
 };
1592ddf
 static int os_default_acl_streams[1] = {
1592ddf
-   STREAM_ACL_FREEBSD_DEFAULT_ACL
1592ddf
+   STREAM_ACL_FREEBSD_DEFAULT
1592ddf
 };
1592ddf
 
1592ddf
 static bacl_rtn_code freebsd_backup_acl_streams(JCR *jcr, FF_PKT *ff_pkt)
1592ddf
@@ -1065,7 +1065,7 @@ static bacl_rtn_code freebsd_backup_acl_streams(JCR *jcr, FF_PKT *ff_pkt)
1592ddf
          return bacl_rtn_fatal;
1592ddf
 
1592ddf
       if (jcr->acl_ctx->content_length > 0) {
1592ddf
-         if (send_acl_stream(jcr, STREAM_ACL_FREEBSD_NFS4_ACL) == bacl_rtn_fatal)
1592ddf
+         if (send_acl_stream(jcr, STREAM_ACL_FREEBSD_NFS4) == bacl_rtn_fatal)
1592ddf
             return bacl_rtn_fatal;
1592ddf
       }
1592ddf
       break;
1592ddf
@@ -1077,7 +1077,7 @@ static bacl_rtn_code freebsd_backup_acl_streams(JCR *jcr, FF_PKT *ff_pkt)
1592ddf
          return bacl_rtn_fatal;
1592ddf
 
1592ddf
       if (jcr->acl_ctx->content_length > 0) {
1592ddf
-         if (send_acl_stream(jcr, STREAM_ACL_FREEBSD_ACCESS_ACL) == bacl_rtn_fatal)
1592ddf
+         if (send_acl_stream(jcr, STREAM_ACL_FREEBSD_ACCESS) == bacl_rtn_fatal)
1592ddf
             return bacl_rtn_fatal;
1592ddf
       }
1592ddf
 
1592ddf
@@ -1088,7 +1088,7 @@ static bacl_rtn_code freebsd_backup_acl_streams(JCR *jcr, FF_PKT *ff_pkt)
1592ddf
          if (generic_get_acl_from_os(jcr, BACL_TYPE_DEFAULT) == bacl_rtn_fatal)
1592ddf
             return bacl_rtn_fatal;
1592ddf
          if (jcr->acl_ctx->content_length > 0) {
1592ddf
-            if (send_acl_stream(jcr, STREAM_ACL_FREEBSD_DEFAULT_ACL) == bacl_rtn_fatal)
1592ddf
+            if (send_acl_stream(jcr, STREAM_ACL_FREEBSD_DEFAULT) == bacl_rtn_fatal)
1592ddf
                return bacl_rtn_fatal;
1592ddf
          }
1592ddf
       }
1592ddf
@@ -1113,13 +1113,13 @@ static bacl_rtn_code freebsd_restore_acl_streams(JCR *jcr,
1592ddf
     */
1592ddf
    switch (stream) {
1592ddf
    case STREAM_UNIX_ACCESS_ACL:
1592ddf
-   case STREAM_ACL_FREEBSD_ACCESS_ACL:
1592ddf
+   case STREAM_ACL_FREEBSD_ACCESS:
1592ddf
    case STREAM_UNIX_DEFAULT_ACL:
1592ddf
-   case STREAM_ACL_FREEBSD_DEFAULT_ACL:
1592ddf
+   case STREAM_ACL_FREEBSD_DEFAULT:
1592ddf
       acl_enabled = pathconf(jcr->last_fname, _PC_ACL_EXTENDED);
1592ddf
       acl_type_name = "POSIX";
1592ddf
       break;
1592ddf
-   case STREAM_ACL_FREEBSD_NFS4_ACL:
1592ddf
+   case STREAM_ACL_FREEBSD_NFS4:
1592ddf
 #if defined(_PC_ACL_NFS4)
1592ddf
       acl_enabled = pathconf(jcr->last_fname, _PC_ACL_NFS4);
1592ddf
 #endif
1592ddf
@@ -1159,12 +1159,12 @@ static bacl_rtn_code freebsd_restore_acl_streams(JCR *jcr,
1592ddf
     */
1592ddf
    switch (stream) {
1592ddf
    case STREAM_UNIX_ACCESS_ACL:
1592ddf
-   case STREAM_ACL_FREEBSD_ACCESS_ACL:
1592ddf
+   case STREAM_ACL_FREEBSD_ACCESS:
1592ddf
       return generic_set_acl_on_os(jcr, BACL_TYPE_ACCESS, content, content_length);
1592ddf
    case STREAM_UNIX_DEFAULT_ACL:
1592ddf
-   case STREAM_ACL_FREEBSD_DEFAULT_ACL:
1592ddf
+   case STREAM_ACL_FREEBSD_DEFAULT:
1592ddf
       return generic_set_acl_on_os(jcr, BACL_TYPE_DEFAULT, content, content_length);
1592ddf
-   case STREAM_ACL_FREEBSD_NFS4_ACL:
1592ddf
+   case STREAM_ACL_FREEBSD_NFS4:
1592ddf
       return generic_set_acl_on_os(jcr, BACL_TYPE_NFS4, content, content_length);
1592ddf
    default:
1592ddf
       break;
1592ddf
@@ -1273,11 +1273,11 @@ static bacl_rtn_code (*os_restore_acl_streams)
1592ddf
  * Define the supported ACL streams for this OS
1592ddf
  */
1592ddf
 static int os_access_acl_streams[1] = {
1592ddf
-   STREAM_ACL_TRU64_ACCESS_ACL
1592ddf
+   STREAM_ACL_TRU64_ACCESS
1592ddf
 };
1592ddf
 static int os_default_acl_streams[2] = {
1592ddf
-   STREAM_ACL_TRU64_DEFAULT_ACL,
1592ddf
-   STREAM_ACL_TRU64_DEFAULT_DIR_ACL
1592ddf
+   STREAM_ACL_TRU64_DEFAULT,
1592ddf
+   STREAM_ACL_TRU64_DEFAULT_DIR
1592ddf
 };
1592ddf
 
1592ddf
 static bacl_rtn_code tru64_backup_acl_streams(JCR *jcr, FF_PKT *ff_pkt)
1592ddf
@@ -1564,8 +1564,8 @@ char *acl_strerror(int);
1592ddf
  * Define the supported ACL streams for this OS
1592ddf
  */
1592ddf
 static int os_access_acl_streams[2] = {
1592ddf
-   STREAM_ACL_SOLARIS_ACLENT,
1592ddf
-   STREAM_ACL_SOLARIS_ACE
1592ddf
+   STREAM_ACL_SOLARIS_POSIX,
1592ddf
+   STREAM_ACL_SOLARIS_NFS4
1592ddf
 };
1592ddf
 static int os_default_acl_streams[1] = {
1592ddf
    -1
1592ddf
@@ -1653,10 +1653,10 @@ static bacl_rtn_code solaris_backup_acl_streams(JCR *jcr, FF_PKT *ff_pkt)
1592ddf
 
1592ddf
       switch (acl_type(aclp)) {
1592ddf
       case ACLENT_T:
1592ddf
-         stream_status = send_acl_stream(jcr, STREAM_ACL_SOLARIS_ACLENT);
1592ddf
+         stream_status = send_acl_stream(jcr, STREAM_ACL_SOLARIS_POSIX);
1592ddf
          break;
1592ddf
       case ACE_T:
1592ddf
-         stream_status = send_acl_stream(jcr, STREAM_ACL_SOLARIS_ACE);
1592ddf
+         stream_status = send_acl_stream(jcr, STREAM_ACL_SOLARIS_NFS4);
1592ddf
          break;
1592ddf
       default:
1592ddf
          break;
1592ddf
@@ -1673,8 +1673,8 @@ static bacl_rtn_code solaris_restore_acl_streams(JCR *jcr, int stream, char *con
1592ddf
    acl_t *aclp;
1592ddf
    int acl_enabled, error;
1592ddf
 
1592ddf
-   if (stream != STREAM_UNIX_ACCESS_ACL || stream != STREAM_ACL_SOLARIS_ACLENT ||
1592ddf
-       stream != STREAM_ACL_SOLARIS_ACE) {
1592ddf
+   if (stream != STREAM_UNIX_ACCESS_ACL || stream != STREAM_ACL_SOLARIS_POSIX ||
1592ddf
+       stream != STREAM_ACL_SOLARIS_NFS4) {
1592ddf
       return bacl_rtn_error;
1592ddf
    }
1592ddf
 
1592ddf
@@ -1709,7 +1709,7 @@ static bacl_rtn_code solaris_restore_acl_streams(JCR *jcr, int stream, char *con
1592ddf
     * On a filesystem with ACL support make sure this particular ACL type can be restored.
1592ddf
     */
1592ddf
    switch (stream) {
1592ddf
-   case STREAM_ACL_SOLARIS_ACLENT:
1592ddf
+   case STREAM_ACL_SOLARIS_POSIX:
1592ddf
       /*
1592ddf
        * An aclent can be restored on filesystems with _ACL_ACLENT_ENABLED or _ACL_ACE_ENABLED support.
1592ddf
        */
1592ddf
@@ -1720,7 +1720,7 @@ static bacl_rtn_code solaris_restore_acl_streams(JCR *jcr, int stream, char *con
1592ddf
          return bacl_rtn_error;
1592ddf
       }
1592ddf
       break;
1592ddf
-   case STREAM_ACL_SOLARIS_ACE:
1592ddf
+   case STREAM_ACL_SOLARIS_NFS4:
1592ddf
       /*
1592ddf
        * An ace can only be restored on a filesystem with _ACL_ACE_ENABLED support.
1592ddf
        */
1592ddf
@@ -1750,7 +1750,7 @@ static bacl_rtn_code solaris_restore_acl_streams(JCR *jcr, int stream, char *con
1592ddf
     * Validate that the conversion gave us the correct acl type.
1592ddf
     */
1592ddf
    switch (stream) {
1592ddf
-   case STREAM_ACL_SOLARIS_ACLENT:
1592ddf
+   case STREAM_ACL_SOLARIS_POSIX:
1592ddf
       if (acl_type(aclp) != ACLENT_T) {
1592ddf
          Mmsg1(jcr->errmsg,
1592ddf
                _("wrong encoding of acl type in acl stream on file \"%s\"\n"),
1592ddf
@@ -1758,7 +1758,7 @@ static bacl_rtn_code solaris_restore_acl_streams(JCR *jcr, int stream, char *con
1592ddf
          return bacl_rtn_error;
1592ddf
       }
1592ddf
       break;
1592ddf
-   case STREAM_ACL_SOLARIS_ACE:
1592ddf
+   case STREAM_ACL_SOLARIS_NFS4:
1592ddf
       if (acl_type(aclp) != ACE_T) {
1592ddf
          Mmsg1(jcr->errmsg,
1592ddf
                _("wrong encoding of acl type in acl stream on file \"%s\"\n"),
1592ddf
@@ -1802,7 +1802,7 @@ static bacl_rtn_code solaris_restore_acl_streams(JCR *jcr, int stream, char *con
1592ddf
  * Define the supported ACL streams for this OS
1592ddf
  */
1592ddf
 static int os_access_acl_streams[1] = {
1592ddf
-   STREAM_ACL_SOLARIS_ACLENT
1592ddf
+   STREAM_ACL_SOLARIS_POSIX
1592ddf
 };
1592ddf
 static int os_default_acl_streams[1] = {
1592ddf
    -1
1592ddf
@@ -1861,7 +1861,7 @@ static bacl_rtn_code solaris_backup_acl_streams(JCR *jcr, FF_PKT *ff_pkt)
1592ddf
             pm_strcpy(jcr->acl_ctx->content, acl_text);
1592ddf
          actuallyfree(acl_text);
1592ddf
          free(acls);
1592ddf
-         return send_acl_stream(jcr, STREAM_ACL_SOLARIS_ACLENT);
1592ddf
+         return send_acl_stream(jcr, STREAM_ACL_SOLARIS_POSIX);
1592ddf
       }
1592ddf
 
1592ddf
       berrno be;
1592ddf
@@ -2027,7 +2027,7 @@ bool backup_acl_streams(JCR *jcr, FF_PKT *ff_pkt)
1592ddf
        * AFS is a non OS specific filesystem so see if this path is on an AFS filesystem
1592ddf
        * Set the BACL_FLAG_SAVE_AFS flag if it is. If not set the BACL_FLAG_SAVE_NATIVE flag.
1592ddf
        */
1592ddf
-      if (fstype_equals(jcr->last_fname, "afs")) {
1592ddf
+      if (fstype_cmp(ff_pkt, "afs")) {
1592ddf
          jcr->acl_ctx->flags |= BACL_FLAG_SAVE_AFS;
1592ddf
       } else {
1592ddf
          jcr->acl_ctx->flags |= BACL_FLAG_SAVE_NATIVE;
1592ddf
@@ -2128,7 +2128,7 @@ bacl_rtn_code restore_acl_streams(JCR *jcr, int stream,
1592ddf
        * AFS is a non OS specific filesystem so see if this path is on an AFS filesystem
1592ddf
        * Set the BACL_FLAG_RESTORE_AFS flag if it is. If not set the BACL_FLAG_RETORE_NATIVE flag.
1592ddf
        */
1592ddf
-      if (fstype_equals(jcr->last_fname, "afs")) {
1592ddf
+      if (fstype_cmp(ff_pkt, "afs")) {
1592ddf
          jcr->acl_ctx->flags |= BACL_FLAG_RESTORE_AFS;
1592ddf
       } else {
1592ddf
          jcr->acl_ctx->flags |= BACL_FLAG_RESTORE_NATIVE;
1592ddf
diff --git a/bacula/src/filed/backup.h b/bacula/src/filed/backup.h
1592ddf
index 4ce8c1c..2cf0223 100644
1592ddf
--- a/bacula/src/filed/backup.h
1592ddf
+++ b/bacula/src/filed/backup.h
1592ddf
@@ -50,10 +50,12 @@ struct bctx_t {
1592ddf
 
1592ddf
    /* Compression variables */
1592ddf
 #if defined(HAVE_LIBZ) || defined(HAVE_LZO)
1592ddf
-   uLong compress_len;
1592ddf
    uLong max_compress_len;
1592ddf
+   uLong compress_len;
1592ddf
    Bytef *cbuf;
1592ddf
    Bytef *cbuf2;
1592ddf
+#else
1592ddf
+   uint64_t max_compress_len;
1592ddf
 #endif
1592ddf
 #ifdef HAVE_LZO
1592ddf
    comp_stream_header ch;
1592ddf
diff --git a/bacula/src/findlib/bfile.c b/bacula/src/findlib/bfile.c
1592ddf
index 92d6286..99b3a5f 100644
1592ddf
--- a/bacula/src/findlib/bfile.c
1592ddf
+++ b/bacula/src/findlib/bfile.c
1592ddf
@@ -537,9 +537,10 @@ int bopen(BFILE *bfd, const char *fname, uint64_t flags, mode_t mode)
1592ddf
    bfd->win32DecompContext.liNextHeader = 0;
1592ddf
 
1592ddf
 #if defined(HAVE_POSIX_FADVISE) && defined(POSIX_FADV_WILLNEED)
1592ddf
-   if (bfd->fid != -1 && flags & O_RDONLY) {
1592ddf
+   /* If not RDWR or WRONLY must be Read Only */
1592ddf
+   if (bfd->fid != -1 && !(flags & (O_RDWR|O_WRONLY))) {
1592ddf
       int stat = posix_fadvise(bfd->fid, 0, 0, POSIX_FADV_WILLNEED);
1592ddf
-      Dmsg2(400, "Did posix_fadvise on %s stat=%d\n", fname, stat);
1592ddf
+      Dmsg3(400, "Did posix_fadvise WILLNEED on %s fid=%d stat=%d\n", fname, bfd->fid, stat);
1592ddf
    }
1592ddf
 #endif
1592ddf
 
1592ddf
@@ -585,10 +586,12 @@ int bclose(BFILE *bfd)
1592ddf
    }
1592ddf
 
1592ddf
 #if defined(HAVE_POSIX_FADVISE) && defined(POSIX_FADV_DONTNEED)
1592ddf
-   if (bfd->m_flags & O_RDONLY) {
1592ddf
+   /* If not RDWR or WRONLY must be Read Only */
1592ddf
+   if (!(bfd->m_flags & (O_RDWR|O_WRONLY))) {
1592ddf
       fdatasync(bfd->fid);            /* sync the file */
1592ddf
       /* Tell OS we don't need it any more */
1592ddf
       posix_fadvise(bfd->fid, 0, 0, POSIX_FADV_DONTNEED);
1592ddf
+      Dmsg1(400, "Did posix_fadvise DONTNEED on fid=%d\n", bfd->fid);
1592ddf
    }
1592ddf
 #endif
1592ddf
 
1592ddf
@@ -653,4 +656,3 @@ boffset_t blseek(BFILE *bfd, boffset_t offset, int whence)
1592ddf
    bfd->berrno = errno;
1592ddf
    return pos;
1592ddf
 }
1592ddf
-
1592ddf
diff --git a/bacula/src/findlib/fstype.c b/bacula/src/findlib/fstype.c
1592ddf
index 3ed575d..c2bc83d 100644
1592ddf
--- a/bacula/src/findlib/fstype.c
1592ddf
+++ b/bacula/src/findlib/fstype.c
1592ddf
@@ -31,7 +31,9 @@
1592ddf
 #include "find.h"
1592ddf
 #include <sys/types.h>
1592ddf
 #include <sys/stat.h>
1592ddf
-
1592ddf
+#ifdef HAVE_SUN_OS
1592ddf
+  #include <sys/mnttab.h>
1592ddf
+#endif
1592ddf
 #else /* Set up for testing a stand alone program */
1592ddf
 
1592ddf
 #include <stdio.h>
1592ddf
@@ -84,6 +86,15 @@ void add_mtab_item(void *user_ctx, struct stat *st, const char *fstype,
1592ddf
    }
1592ddf
 }
1592ddf
 
1592ddf
+/* Compare directly the FS from a fname with a string */
1592ddf
+bool fstype_cmp(FF_PKT *ff_pkt, const char *fsname)
1592ddf
+{
1592ddf
+   char buf[256];
1592ddf
+   if (fstype(ff_pkt, buf, sizeof(buf))) {
1592ddf
+      return (strcmp(buf, fsname) == 0);
1592ddf
+   }
1592ddf
+   return false;
1592ddf
+}
1592ddf
 
1592ddf
 /*
1592ddf
  * These functions should be implemented for each OS
1592ddf
@@ -373,7 +384,7 @@ bool read_mtab(mtab_handler_t *mtab_handler, void *user_ctx)
1592ddf
       mtab_handler(user_ctx, &st, mnt.mnt_fstype, mnt.mnt_mountp,
1592ddf
          mnt.mnt_mntopts, mnt.mnt_special);
1592ddf
    }
1592ddf
-   fclose(fp);
1592ddf
+   fclose(mntfp);
1592ddf
    V(mutex);
1592ddf
 #endif
1592ddf
 
1592ddf
diff --git a/bacula/src/findlib/protos.h b/bacula/src/findlib/protos.h
1592ddf
index 7291ee8..12514ad 100644
1592ddf
--- a/bacula/src/findlib/protos.h
1592ddf
+++ b/bacula/src/findlib/protos.h
1592ddf
@@ -81,7 +81,7 @@ bool path_list_add(JCR *jcr, uint32_t len, char *fname);
1592ddf
 
1592ddf
 /* from fstype.c */
1592ddf
 bool fstype(FF_PKT *ff_pkt, char *fs, int fslen);
1592ddf
-bool fstype_equals(const char *fname, const char *fstype_name);
1592ddf
+bool fstype_cmp(FF_PKT *ff_pkt, const char *fstype_name);
1592ddf
 
1592ddf
 /* from drivetype.c */
1592ddf
 bool drivetype(const char *fname, char *fs, int fslen);
1592ddf
diff --git a/bacula/src/lib/address_conf.c b/bacula/src/lib/address_conf.c
1592ddf
index 59dbd0f..66a49d2 100644
1592ddf
--- a/bacula/src/lib/address_conf.c
1592ddf
+++ b/bacula/src/lib/address_conf.c
1592ddf
@@ -613,10 +613,19 @@ char *sockaddr_to_ascii(const struct sockaddr *sa, int socklen, char *buf, int b
1592ddf
   /* This is the more modern way of doing it */
1592ddf
   char clienthost[NI_MAXHOST];
1592ddf
   char clientservice[NI_MAXSERV];
1592ddf
-  int status;
1592ddf
-  status = getnameinfo(sa, socklen, clienthost, sizeof(clienthost),
1592ddf
-                       clientservice, sizeof(clientservice),
1592ddf
-                       NI_NUMERICHOST | NI_NUMERICSERV);
1592ddf
+  int status = 1;
1592ddf
+  if (sa->sa_family == AF_INET) {
1592ddf
+     status = getnameinfo(sa, socklen, clienthost, sizeof(clienthost),
1592ddf
+                 clientservice, sizeof(clientservice),
1592ddf
+                 NI_NUMERICHOST | NI_NUMERICSERV);
1592ddf
+  }
1592ddf
+#ifdef HAVE_IPV6
1592ddf
+  else {
1592ddf
+     status = getnameinfo(sa, sizeof(sockaddr_in6), clienthost, sizeof(clienthost),
1592ddf
+                 clientservice, sizeof(clientservice),
1592ddf
+                 NI_NUMERICHOST | NI_NUMERICSERV);
1592ddf
+  }
1592ddf
+#endif
1592ddf
   if (status == 0) {
1592ddf
      /* Enclose IPv6 in [] */
1592ddf
      if (strchr(clienthost, ':') != NULL) {
1592ddf
diff --git a/bacula/src/qt-console/tray-monitor/authenticate.cpp b/bacula/src/qt-console/tray-monitor/authenticate.cpp
1592ddf
index 16f78dd..dde4682 100644
1592ddf
--- a/bacula/src/qt-console/tray-monitor/authenticate.cpp
1592ddf
+++ b/bacula/src/qt-console/tray-monitor/authenticate.cpp
1592ddf
@@ -30,7 +30,7 @@
1592ddf
  *
1592ddf
  */
1592ddf
 
1592ddf
-#include "winhdrs.h"
1592ddf
+//#include "winhdrs.h"
1592ddf
 #include "tray-monitor.h"
1592ddf
 
1592ddf
 void senditf(const char *fmt, ...);
1592ddf
diff --git a/bacula/src/qt-console/tray-monitor/tray-ui.h b/bacula/src/qt-console/tray-monitor/tray-ui.h
1592ddf
index e4e5dfc..ce2b22f 100644
1592ddf
--- a/bacula/src/qt-console/tray-monitor/tray-ui.h
1592ddf
+++ b/bacula/src/qt-console/tray-monitor/tray-ui.h
1592ddf
@@ -27,7 +27,7 @@
1592ddf
 # endif
1592ddf
 #endif
1592ddf
 
1592ddf
-#include "winhdrs.h"
1592ddf
+//#include "winhdrs.h"
1592ddf
 #include <QAction>
1592ddf
 #include <QApplication>
1592ddf
 #include <QButtonGroup>
1592ddf
diff --git a/bacula/src/stored/block.h b/bacula/src/stored/block.h
1592ddf
index ff8f085..a8552b0 100644
1592ddf
--- a/bacula/src/stored/block.h
1592ddf
+++ b/bacula/src/stored/block.h
1592ddf
@@ -127,7 +127,6 @@ struct DEV_BLOCK {
1592ddf
    int32_t  rechdr_items;             /* number of items in rechdr queue */
1592ddf
    char    *bufp;                     /* pointer into buffer */
1592ddf
    char     ser_buf[BLKHDR2_LENGTH];  /* Serial buffer for data */
1592ddf
-   POOLMEM *rechdr_queue;             /* record header queue */
1592ddf
    POOLMEM *buf;                      /* actual data buffer */
1592ddf
 };
1592ddf
 
1592ddf
diff --git a/bacula/src/stored/block_util.c b/bacula/src/stored/block_util.c
1592ddf
index 7fc45d2..86e097d 100644
1592ddf
--- a/bacula/src/stored/block_util.c
1592ddf
+++ b/bacula/src/stored/block_util.c
1592ddf
@@ -135,7 +135,6 @@ DEV_BLOCK *new_block(DEVICE *dev)
1592ddf
     */
1592ddf
    block->buf_len = len;
1592ddf
    block->buf = get_memory(block->buf_len);
1592ddf
-   block->rechdr_queue = get_memory(block->buf_len);
1592ddf
    block->rechdr_items = 0;
1592ddf
    empty_block(block);
1592ddf
    block->BlockVer = BLOCK_VER;       /* default write version */
1592ddf
@@ -187,7 +186,6 @@ void free_block(DEV_BLOCK *block)
1592ddf
    if (block) {
1592ddf
       Dmsg1(999, "free_block buffer %x\n", block->buf);
1592ddf
       free_memory(block->buf);
1592ddf
-      free_memory(block->rechdr_queue);
1592ddf
       Dmsg1(999, "free_block block %x\n", block);
1592ddf
       free_memory((POOLMEM *)block);
1592ddf
    }
1592ddf
diff --git a/bacula/src/stored/mount.c b/bacula/src/stored/mount.c
1592ddf
index 0aae19a..a93e0e7 100644
1592ddf
--- a/bacula/src/stored/mount.c
1592ddf
+++ b/bacula/src/stored/mount.c
1592ddf
@@ -620,7 +620,7 @@ void DCR::do_swapping(bool is_writing)
1592ddf
       if (dev->vol) {
1592ddf
          dev->vol->clear_swapping();
1592ddf
          Dmsg1(100, "=== set in_use vol=%s\n", dev->vol->vol_name);
1592ddf
-         dev->vol->set_in_use();
1592ddf
+         dev->vol->clear_in_use();
1592ddf
          dev->VolHdr.VolumeName[0] = 0;  /* don't yet have right Volume */
1592ddf
       } else {
1592ddf
          Dmsg1(100, "No vol on dev=%s\n", dev->print_name());
1592ddf
diff --git a/bacula/src/tools/bpluginfo.c b/bacula/src/tools/bpluginfo.c
1592ddf
new file mode 100644
1592ddf
index 0000000..1655bd5
1592ddf
--- /dev/null
1592ddf
+++ b/bacula/src/tools/bpluginfo.c
1592ddf
@@ -0,0 +1,625 @@
1592ddf
+/*
1592ddf
+ * Contributed in 2012 by Inteos sp. z o.o.
1592ddf
+ *
1592ddf
+ * Utility tool display various information about Bacula plugin,
1592ddf
+ * including but not limited to:
1592ddf
+ * - Name and Author of the plugin
1592ddf
+ * - Plugin License
1592ddf
+ * - Description
1592ddf
+ * - API version
1592ddf
+ * - Enabled functions, etc.
1592ddf
+ */
1592ddf
+/*
1592ddf
+   Bacula® - The Network Backup Solution
1592ddf
+
1592ddf
+   Copyright (C) 2006-2014 Free Software Foundation Europe e.V.
1592ddf
+
1592ddf
+   The main author of Bacula is Kern Sibbald, with contributions from many
1592ddf
+   others, a complete list can be found in the file AUTHORS.
1592ddf
+
1592ddf
+   You may use this file and others of this release according to the
1592ddf
+   license defined in the LICENSE file, which includes the Affero General
1592ddf
+   Public License, v3.0 ("AGPLv3") and some additional permissions and
1592ddf
+   terms pursuant to its AGPLv3 Section 7.
1592ddf
+
1592ddf
+   Bacula® is a registered trademark of Kern Sibbald.
1592ddf
+*/
1592ddf
+
1592ddf
+#include <stdio.h>
1592ddf
+#include <unistd.h>
1592ddf
+#include <limits.h>
1592ddf
+#include <stdlib.h>
1592ddf
+#include <string.h>
1592ddf
+#include <stdint.h>
1592ddf
+#ifndef __WIN32__
1592ddf
+#include <dlfcn.h>
1592ddf
+#endif
1592ddf
+#include "bacula.h"
1592ddf
+#include "../filed/fd_plugins.h"
1592ddf
+#include "../dird/dir_plugins.h"
1592ddf
+// I can't include sd_plugins.h here ...
1592ddf
+#include "../stored/stored.h"
1592ddf
+#include "assert_macro.h"
1592ddf
+
1592ddf
+extern "C" {
1592ddf
+   typedef int (*loadPlugin) (void *binfo, void *bfuncs, void **pinfo,
1592ddf
+               void **pfuncs);
1592ddf
+   typedef int (*unloadPlugin) (void);
1592ddf
+}
1592ddf
+#define DEFAULT_API_VERSION   1
1592ddf
+enum plugintype {
1592ddf
+   DIRPLUGIN,
1592ddf
+   FDPLUGIN,
1592ddf
+   SDPLUGIN,
1592ddf
+   ERRORPLUGIN,
1592ddf
+};
1592ddf
+
1592ddf
+/*
1592ddf
+ * pDirInfo
1592ddf
+ * pInfo
1592ddf
+ * psdInfo
1592ddf
+ */
1592ddf
+typedef union _pluginfo pluginfo;
1592ddf
+union _pluginfo {
1592ddf
+   pDirInfo pdirinfo;
1592ddf
+   pInfo pfdinfo;
1592ddf
+   psdInfo psdinfo;
1592ddf
+};
1592ddf
+
1592ddf
+/*
1592ddf
+ * pDirFuncs
1592ddf
+ * pFuncs
1592ddf
+ * psdFuncs
1592ddf
+ */
1592ddf
+typedef union _plugfuncs plugfuncs;
1592ddf
+union _plugfuncs {
1592ddf
+   pDirFuncs pdirfuncs;
1592ddf
+   pFuncs pfdfuncs;
1592ddf
+   psdFuncs psdfuncs;
1592ddf
+};
1592ddf
+
1592ddf
+/*
1592ddf
+ * bDirFuncs
1592ddf
+ * bFuncs
1592ddf
+ * bsdFuncs
1592ddf
+ */
1592ddf
+/*
1592ddf
+ * TODO: change to union
1592ddf
+ *
1592ddf
+typedef union _baculafuncs baculafuncs;
1592ddf
+union _baculafuncs {
1592ddf
+   bDirFuncs bdirfuncs;
1592ddf
+   bFuncs bfdfuncs;
1592ddf
+   bsdFuncs bsdfuncs;
1592ddf
+};
1592ddf
+*/
1592ddf
+typedef struct _baculafuncs baculafuncs;
1592ddf
+struct _baculafuncs {
1592ddf
+   uint32_t size;
1592ddf
+   uint32_t version;
1592ddf
+   int (*registerBaculaEvents) (void *ctx, ...);
1592ddf
+   int (*getBaculaValue) (void *ctx, int var, void *value);
1592ddf
+   int (*setBaculaValue) (void *ctx, int var, void *value);
1592ddf
+   int (*JobMessage) (void *ctx, const char *file, int line, int type, int64_t mtime,
1592ddf
+            const char *fmt, ...);
1592ddf
+   int (*DebugMessage) (void *ctx, const char *file, int line, int level,
1592ddf
+         const char *fmt, ...);
1592ddf
+   void *(*baculaMalloc) (void *ctx, const char *file, int line, size_t size);
1592ddf
+   void (*baculaFree) (void *ctx, const char *file, int line, void *mem);
1592ddf
+};
1592ddf
+
1592ddf
+/*
1592ddf
+ * bDirInfo
1592ddf
+ * bInfo
1592ddf
+ * bsdInfo
1592ddf
+ */
1592ddf
+typedef union _baculainfos baculainfos;
1592ddf
+union _baculainfos {
1592ddf
+   bDirInfo bdirinfo;
1592ddf
+   bInfo bfdinfo;
1592ddf
+   bsdInfo bsdinfo;
1592ddf
+};
1592ddf
+
1592ddf
+/*
1592ddf
+typedef struct _baculainfos baculainfos;
1592ddf
+struct _baculainfos {
1592ddf
+   uint32_t size;
1592ddf
+   uint32_t version;
1592ddf
+};
1592ddf
+*/
1592ddf
+
1592ddf
+typedef struct _progdata progdata;
1592ddf
+struct _progdata {
1592ddf
+   int verbose;
1592ddf
+   int listinfo;
1592ddf
+   int listfunc;
1592ddf
+   char *pluginfile;
1592ddf
+   void *pluginhandle;
1592ddf
+   int bapiversion;
1592ddf
+   int bplugtype;
1592ddf
+   pluginfo *pinfo;
1592ddf
+   plugfuncs *pfuncs;
1592ddf
+};
1592ddf
+
1592ddf
+/* memory allocation/deallocation */
1592ddf
+#define MALLOC(size) \
1592ddf
+   (char *) bmalloc ( size );
1592ddf
+
1592ddf
+#define ASSERT_MEMORY(m) \
1592ddf
+   if ( m == NULL ){ \
1592ddf
+      printf ( "Error: memory allocation error!\n" ); \
1592ddf
+      exit (10); \
1592ddf
+   }
1592ddf
+
1592ddf
+#define FREE(ptr) \
1592ddf
+   if ( ptr != NULL ){ \
1592ddf
+      bfree ( ptr ); \
1592ddf
+      ptr = NULL; \
1592ddf
+   }
1592ddf
+
1592ddf
+int registerBaculaEvents(void *ctx, ...)
1592ddf
+{
1592ddf
+   return 0;
1592ddf
+};
1592ddf
+
1592ddf
+int getBaculaValue(void *ctx, int var, void *value)
1592ddf
+{
1592ddf
+   return 0;
1592ddf
+};
1592ddf
+
1592ddf
+int setBaculaValue(void *ctx, int var, void *value)
1592ddf
+{
1592ddf
+   return 0;
1592ddf
+};
1592ddf
+
1592ddf
+int DebugMessage(void *ctx, const char *file, int line, int level, const char *fmt, ...)
1592ddf
+{
1592ddf
+#ifdef DEBUGMSG
1592ddf
+   printf("DG: %s:%d %s\n", file, line, fmt);
1592ddf
+#endif
1592ddf
+   return 0;
1592ddf
+};
1592ddf
+
1592ddf
+int JobMessage(void *ctx, const char *file, int line, int type, int64_t mtime,
1592ddf
+          const char *fmt, ...)
1592ddf
+{
1592ddf
+#ifdef DEBUGMSG
1592ddf
+   printf("JM: %s:%d <%d> %s\n", file, line, type, fmt);
1592ddf
+#endif
1592ddf
+   return 0;
1592ddf
+};
1592ddf
+
1592ddf
+void *baculaMalloc(void *ctx, const char *file, int line, size_t size)
1592ddf
+{
1592ddf
+   return MALLOC(size);
1592ddf
+};
1592ddf
+
1592ddf
+void baculaFree(void *ctx, const char *file, int line, void *mem)
1592ddf
+{
1592ddf
+   FREE(mem);
1592ddf
+};
1592ddf
+
1592ddf
+/*
1592ddf
+ * displays a short help
1592ddf
+ */
1592ddf
+void print_help(int argc, char *argv[])
1592ddf
+{
1592ddf
+
1592ddf
+   printf("\n"
1592ddf
+     "Usage: bpluginfo [options] <plugin_file.so>\n"
1592ddf
+     "       -v          verbose\n"
1592ddf
+     "       -i          list plugin header information only (default)\n"
1592ddf
+     "       -f          list plugin functions information only\n"
1592ddf
+     "       -a <api>    bacula api version (default %d)\n"
1592ddf
+     "       -h          help screen\n" "\n", DEFAULT_API_VERSION);
1592ddf
+}
1592ddf
+
1592ddf
+/* allocates and resets a main program data variable */
1592ddf
+progdata *allocpdata(void)
1592ddf
+{
1592ddf
+
1592ddf
+   progdata *pdata;
1592ddf
+
1592ddf
+   pdata = (progdata *) bmalloc(sizeof(progdata));
1592ddf
+   ASSERT_MEMORY(pdata);
1592ddf
+   memset(pdata, 0, sizeof(progdata));
1592ddf
+
1592ddf
+   return pdata;
1592ddf
+}
1592ddf
+
1592ddf
+/* releases all allocated program data resources */
1592ddf
+void freepdata(progdata * pdata)
1592ddf
+{
1592ddf
+
1592ddf
+   if (pdata->pluginfile) {
1592ddf
+      FREE(pdata->pluginfile);
1592ddf
+   }
1592ddf
+   FREE(pdata);
1592ddf
+}
1592ddf
+
1592ddf
+/*
1592ddf
+ * parse execution arguments and fills required pdata structure fields
1592ddf
+ *
1592ddf
+ * input:
1592ddf
+ *    pdata - pointer to program data structure
1592ddf
+ *    argc, argv - execution envinroment variables
1592ddf
+ * output:
1592ddf
+ *    pdata - required structure fields
1592ddf
+ *
1592ddf
+ * supported options:
1592ddf
+ * -v    verbose flag
1592ddf
+ * -i    list plugin header info only (default)
1592ddf
+ * -f    list implemented functions only
1592ddf
+ * -a    bacula api version (default 1)
1592ddf
+ * -h    help screen
1592ddf
+ */
1592ddf
+void parse_args(progdata * pdata, int argc, char *argv[])
1592ddf
+{
1592ddf
+
1592ddf
+   int i;
1592ddf
+   char *dirtmp;
1592ddf
+   char *progdir;
1592ddf
+   int api;
1592ddf
+   int s;
1592ddf
+
1592ddf
+   if (argc < 2) {
1592ddf
+      /* TODO - add a real help screen */
1592ddf
+      printf("\nNot enough parameters!\n");
1592ddf
+      print_help(argc, argv);
1592ddf
+      exit(1);
1592ddf
+   }
1592ddf
+
1592ddf
+   if (argc > 5) {
1592ddf
+      /* TODO - add a real help screen */
1592ddf
+      printf("\nToo many parameters!\n");
1592ddf
+      print_help(argc, argv);
1592ddf
+      exit(1);
1592ddf
+   }
1592ddf
+
1592ddf
+   for (i = 1; i < argc; i++) {
1592ddf
+      if (strcmp(argv[i], "-h") == 0) {
1592ddf
+         /* help screen */
1592ddf
+         print_help(argc, argv);
1592ddf
+         exit(0);
1592ddf
+      }
1592ddf
+      if (strcmp(argv[i], "-v") == 0) {
1592ddf
+          /* verbose option */
1592ddf
+          pdata->verbose = 1;
1592ddf
+          continue;
1592ddf
+      }
1592ddf
+      if (strcmp(argv[i], "-f") == 0) {
1592ddf
+         /* functions list */
1592ddf
+         pdata->listfunc = 1;
1592ddf
+         continue;
1592ddf
+      }
1592ddf
+      if (strcmp(argv[i], "-i") == 0) {
1592ddf
+         /* header list */
1592ddf
+         pdata->listinfo = 1;
1592ddf
+         continue;
1592ddf
+      }
1592ddf
+      if (strcmp(argv[i], "-a") == 0) {
1592ddf
+         /* bacula api version */
1592ddf
+         if (i < argc - 1) {
1592ddf
+            s = sscanf(argv[i + 1], "%d", &api);
1592ddf
+            if (s == 1) {
1592ddf
+               pdata->bapiversion = api;
1592ddf
+               i++;
1592ddf
+               continue;
1592ddf
+            }
1592ddf
+         }
1592ddf
+         printf("\nAPI version number required!\n");
1592ddf
+         print_help(argc, argv);
1592ddf
+         exit(1);
1592ddf
+      }
1592ddf
+      if (!pdata->pluginfile) {
1592ddf
+          if (argv[i][0] != '/') {
1592ddf
+             dirtmp = MALLOC(PATH_MAX);
1592ddf
+             ASSERT_MEMORY(dirtmp);
1592ddf
+             progdir = MALLOC(PATH_MAX);
1592ddf
+             ASSERT_MEMORY(progdir);
1592ddf
+             dirtmp = getcwd(dirtmp, PATH_MAX);
1592ddf
+
1592ddf
+             strcat(dirtmp, "/");
1592ddf
+             strcat(dirtmp, argv[i]);
1592ddf
+
1592ddf
+             if (realpath(dirtmp, progdir) == NULL) {
1592ddf
+                /* error in resolving path */
1592ddf
+                FREE(progdir);
1592ddf
+                progdir = bstrdup(argv[i]);
1592ddf
+             }
1592ddf
+             pdata->pluginfile = bstrdup(progdir);
1592ddf
+             FREE(dirtmp);
1592ddf
+             FREE(progdir);
1592ddf
+          } else {
1592ddf
+             pdata->pluginfile = bstrdup(argv[i]);
1592ddf
+          }
1592ddf
+    continue;
1592ddf
+      }
1592ddf
+   }
1592ddf
+}
1592ddf
+
1592ddf
+/*
1592ddf
+ * checks a plugin type based on a plugin magic string
1592ddf
+ *
1592ddf
+ * input:
1592ddf
+ *    pdata - program data with plugin info structure
1592ddf
+ * output:
1592ddf
+ *    int - enum plugintype
1592ddf
+ */
1592ddf
+int getplugintype(progdata * pdata)
1592ddf
+{
1592ddf
+
1592ddf
+   ASSERT_NVAL_RET_V(pdata, ERRORPLUGIN);
1592ddf
+
1592ddf
+   pluginfo *pinfo = pdata->pinfo;
1592ddf
+
1592ddf
+   ASSERT_NVAL_RET_V(pinfo, ERRORPLUGIN);
1592ddf
+
1592ddf
+   if (pinfo->pdirinfo.plugin_magic &&
1592ddf
+       strcmp(pinfo->pdirinfo.plugin_magic, DIR_PLUGIN_MAGIC) == 0) {
1592ddf
+      return DIRPLUGIN;
1592ddf
+   } else
1592ddf
+      if (pinfo->pfdinfo.plugin_magic &&
1592ddf
+     strcmp(pinfo->pfdinfo.plugin_magic, FD_PLUGIN_MAGIC) == 0) {
1592ddf
+      return FDPLUGIN;
1592ddf
+   } else
1592ddf
+      if (pinfo->psdinfo.plugin_magic &&
1592ddf
+     strcmp(pinfo->psdinfo.plugin_magic, SD_PLUGIN_MAGIC) == 0) {
1592ddf
+      return SDPLUGIN;
1592ddf
+   } else {
1592ddf
+      return ERRORPLUGIN;
1592ddf
+   }
1592ddf
+}
1592ddf
+
1592ddf
+/*
1592ddf
+ * prints any available information about a plugin
1592ddf
+ *
1592ddf
+ * input:
1592ddf
+ *    pdata - program data with plugin info structure
1592ddf
+ * output:
1592ddf
+ *    printed info
1592ddf
+ */
1592ddf
+void dump_pluginfo(progdata * pdata)
1592ddf
+{
1592ddf
+
1592ddf
+   ASSERT_NVAL_RET(pdata);
1592ddf
+
1592ddf
+   pluginfo *pinfo = pdata->pinfo;
1592ddf
+
1592ddf
+   ASSERT_NVAL_RET(pinfo);
1592ddf
+
1592ddf
+   plugfuncs *pfuncs = pdata->pfuncs;
1592ddf
+
1592ddf
+   ASSERT_NVAL_RET(pfuncs);
1592ddf
+
1592ddf
+   switch (pdata->bplugtype) {
1592ddf
+   case DIRPLUGIN:
1592ddf
+      printf("\nPlugin type:\t\tBacula Director plugin\n");
1592ddf
+      if (pdata->verbose) {
1592ddf
+         printf("Plugin magic:\t\t%s\n", NPRT(pinfo->pdirinfo.plugin_magic));
1592ddf
+      }
1592ddf
+      printf("Plugin version:\t\t%s\n", pinfo->pdirinfo.plugin_version);
1592ddf
+      printf("Plugin release date:\t%s\n", NPRT(pinfo->pdirinfo.plugin_date));
1592ddf
+      printf("Plugin author:\t\t%s\n", NPRT(pinfo->pdirinfo.plugin_author));
1592ddf
+      printf("Plugin licence:\t\t%s\n", NPRT(pinfo->pdirinfo.plugin_license));
1592ddf
+      printf("Plugin description:\t%s\n", NPRT(pinfo->pdirinfo.plugin_description));
1592ddf
+      printf("Plugin API version:\t%d\n", pinfo->pdirinfo.version);
1592ddf
+      break;
1592ddf
+   case FDPLUGIN:
1592ddf
+      printf("\nPlugin type:\t\tFile Daemon plugin\n");
1592ddf
+      if (pdata->verbose) {
1592ddf
+         printf("Plugin magic:\t\t%s\n", NPRT(pinfo->pfdinfo.plugin_magic));
1592ddf
+      }
1592ddf
+      printf("Plugin version:\t\t%s\n", pinfo->pfdinfo.plugin_version);
1592ddf
+      printf("Plugin release date:\t%s\n", NPRT(pinfo->pfdinfo.plugin_date));
1592ddf
+      printf("Plugin author:\t\t%s\n", NPRT(pinfo->pfdinfo.plugin_author));
1592ddf
+      printf("Plugin licence:\t\t%s\n", NPRT(pinfo->pfdinfo.plugin_license));
1592ddf
+      printf("Plugin description:\t%s\n", NPRT(pinfo->pfdinfo.plugin_description));
1592ddf
+      printf("Plugin API version:\t%d\n", pinfo->pfdinfo.version);
1592ddf
+      break;
1592ddf
+   case SDPLUGIN:
1592ddf
+      printf("\nPlugin type:\t\tBacula Storage plugin\n");
1592ddf
+      if (pdata->verbose) {
1592ddf
+         printf("Plugin magic:\t\t%s\n", NPRT(pinfo->psdinfo.plugin_magic));
1592ddf
+      }
1592ddf
+      printf("Plugin version:\t\t%s\n", pinfo->psdinfo.plugin_version);
1592ddf
+      printf("Plugin release date:\t%s\n", NPRT(pinfo->psdinfo.plugin_date));
1592ddf
+      printf("Plugin author:\t\t%s\n", NPRT(pinfo->psdinfo.plugin_author));
1592ddf
+      printf("Plugin licence:\t\t%s\n", NPRT(pinfo->psdinfo.plugin_license));
1592ddf
+      printf("Plugin description:\t%s\n", NPRT(pinfo->psdinfo.plugin_description));
1592ddf
+      printf("Plugin API version:\t%d\n", pinfo->psdinfo.version);
1592ddf
+      break;
1592ddf
+   default:
1592ddf
+      printf("\nUnknown plugin type or other Error\n\n");
1592ddf
+   }
1592ddf
+}
1592ddf
+
1592ddf
+/*
1592ddf
+ * prints any available information about plugin' functions
1592ddf
+ *
1592ddf
+ * input:
1592ddf
+ *    pdata - program data with plugin info structure
1592ddf
+ * output:
1592ddf
+ *    printed info
1592ddf
+ */
1592ddf
+void dump_plugfuncs(progdata * pdata)
1592ddf
+{
1592ddf
+
1592ddf
+   ASSERT_NVAL_RET(pdata);
1592ddf
+
1592ddf
+   plugfuncs *pfuncs = pdata->pfuncs;
1592ddf
+
1592ddf
+   ASSERT_NVAL_RET(pfuncs);
1592ddf
+
1592ddf
+   printf("\nPlugin functions:\n");
1592ddf
+
1592ddf
+   switch (pdata->bplugtype) {
1592ddf
+   case DIRPLUGIN:
1592ddf
+      if (pdata->verbose) {
1592ddf
+          if (pfuncs->pdirfuncs.newPlugin) {
1592ddf
+             printf(" newPlugin()\n");
1592ddf
+          }
1592ddf
+          if (pfuncs->pdirfuncs.freePlugin) {
1592ddf
+             printf(" freePlugin()\n");
1592ddf
+          }
1592ddf
+      }
1592ddf
+      if (pfuncs->pdirfuncs.getPluginValue) {
1592ddf
+         printf(" getPluginValue()\n");
1592ddf
+      }
1592ddf
+      if (pfuncs->pdirfuncs.setPluginValue) {
1592ddf
+         printf(" setPluginValue()\n");
1592ddf
+      }
1592ddf
+      if (pfuncs->pdirfuncs.handlePluginEvent) {
1592ddf
+         printf(" handlePluginEvent()\n");
1592ddf
+      }
1592ddf
+      break;
1592ddf
+   case FDPLUGIN:
1592ddf
+      if (pdata->verbose) {
1592ddf
+          if (pfuncs->pfdfuncs.newPlugin) {
1592ddf
+             printf(" newPlugin()\n");
1592ddf
+          }
1592ddf
+          if (pfuncs->pfdfuncs.freePlugin) {
1592ddf
+             printf(" freePlugin()\n");
1592ddf
+          }
1592ddf
+      }
1592ddf
+      if (pfuncs->pfdfuncs.getPluginValue) {
1592ddf
+         printf(" getPluginValue()\n");
1592ddf
+      }
1592ddf
+      if (pfuncs->pfdfuncs.setPluginValue) {
1592ddf
+         printf(" setPluginValue()\n");
1592ddf
+      }
1592ddf
+      if (pfuncs->pfdfuncs.handlePluginEvent) {
1592ddf
+         printf(" handlePluginEvent()\n");
1592ddf
+      }
1592ddf
+      if (pfuncs->pfdfuncs.startBackupFile) {
1592ddf
+         printf(" startBackupFile()\n");
1592ddf
+      }
1592ddf
+      if (pfuncs->pfdfuncs.endBackupFile) {
1592ddf
+         printf(" endBackupFile()\n");
1592ddf
+      }
1592ddf
+      if (pfuncs->pfdfuncs.startRestoreFile) {
1592ddf
+         printf(" startRestoreFile()\n");
1592ddf
+      }
1592ddf
+      if (pfuncs->pfdfuncs.endRestoreFile) {
1592ddf
+         printf(" endRestoreFile()\n");
1592ddf
+      }
1592ddf
+      if (pfuncs->pfdfuncs.pluginIO) {
1592ddf
+         printf(" pluginIO()\n");
1592ddf
+      }
1592ddf
+      if (pfuncs->pfdfuncs.createFile) {
1592ddf
+         printf(" createFile()\n");
1592ddf
+      }
1592ddf
+      if (pfuncs->pfdfuncs.setFileAttributes) {
1592ddf
+         printf(" setFileAttributes()\n");
1592ddf
+      }
1592ddf
+      if (pfuncs->pfdfuncs.checkFile) {
1592ddf
+         printf(" checkFile()\n");
1592ddf
+      }
1592ddf
+      break;
1592ddf
+   case SDPLUGIN:
1592ddf
+      if (pdata->verbose) {
1592ddf
+          if (pfuncs->psdfuncs.newPlugin) {
1592ddf
+             printf(" newPlugin()\n");
1592ddf
+          }
1592ddf
+          if (pfuncs->psdfuncs.freePlugin) {
1592ddf
+             printf(" freePlugin()\n");
1592ddf
+          }
1592ddf
+      }
1592ddf
+      if (pfuncs->psdfuncs.getPluginValue) {
1592ddf
+         printf(" getPluginValue()\n");
1592ddf
+      }
1592ddf
+      if (pfuncs->psdfuncs.setPluginValue) {
1592ddf
+         printf(" setPluginValue()\n");
1592ddf
+      }
1592ddf
+      if (pfuncs->psdfuncs.handlePluginEvent) {
1592ddf
+         printf(" handlePluginEvent()\n");
1592ddf
+      }
1592ddf
+      break;
1592ddf
+   default:
1592ddf
+      printf("\nUnknown plugin type or other Error\n\n");
1592ddf
+   }
1592ddf
+}
1592ddf
+
1592ddf
+/*
1592ddf
+ * input parameters:
1592ddf
+ *    argv[0] [options] <plugin_filename.so>
1592ddf
+ *
1592ddf
+ * exit codes:
1592ddf
+ *    0 - success
1592ddf
+ *    1 - cannot load a plugin
1592ddf
+ *    2 - cannot find a loadPlugin function
1592ddf
+ *    3 - cannot find an unloadPlugin function
1592ddf
+ *    10 - not enough memory
1592ddf
+ */
1592ddf
+int main(int argc, char *argv[])
1592ddf
+{
1592ddf
+
1592ddf
+   progdata *pdata;
1592ddf
+   loadPlugin loadplugfunc;
1592ddf
+   unloadPlugin unloadplugfunc;
1592ddf
+   baculafuncs bfuncs = {
1592ddf
+      sizeof(bfuncs),
1592ddf
+      1,
1592ddf
+      registerBaculaEvents,
1592ddf
+      getBaculaValue,
1592ddf
+      setBaculaValue,
1592ddf
+      JobMessage,
1592ddf
+      DebugMessage,
1592ddf
+      baculaMalloc,
1592ddf
+      baculaFree,
1592ddf
+   };
1592ddf
+   baculainfos binfos;
1592ddf
+
1592ddf
+   pdata = allocpdata();
1592ddf
+   parse_args(pdata, argc, argv);
1592ddf
+
1592ddf
+   binfos.bfdinfo.size = sizeof(binfos);
1592ddf
+   binfos.bfdinfo.version = DEFAULT_API_VERSION;
1592ddf
+
1592ddf
+   pdata->pluginhandle = dlopen(pdata->pluginfile, RTLD_LAZY);
1592ddf
+   if (pdata->pluginhandle == NULL) {
1592ddf
+      printf("\nCannot load a plugin: %s\n\n", dlerror());
1592ddf
+      freepdata(pdata);
1592ddf
+      exit(1);
1592ddf
+   }
1592ddf
+
1592ddf
+   loadplugfunc = (loadPlugin) dlsym(pdata->pluginhandle, "loadPlugin");
1592ddf
+   if (loadplugfunc == NULL) {
1592ddf
+      printf("\nCannot find loadPlugin function: %s\n", dlerror());
1592ddf
+      printf("\nWhether the file is a really Bacula plugin?\n\n");
1592ddf
+      freepdata(pdata);
1592ddf
+      exit(2);
1592ddf
+   }
1592ddf
+
1592ddf
+   unloadplugfunc = (unloadPlugin) dlsym(pdata->pluginhandle, "unloadPlugin");
1592ddf
+   if (unloadplugfunc == NULL) {
1592ddf
+      printf("\nCannot find unloadPlugin function: %s\n", dlerror());
1592ddf
+      printf("\nWhether the file is a really Bacula plugin?\n\n");
1592ddf
+      freepdata(pdata);
1592ddf
+      exit(3);
1592ddf
+   }
1592ddf
+
1592ddf
+   if (pdata->bapiversion > 0) {
1592ddf
+      binfos.bdirinfo.version = pdata->bapiversion;
1592ddf
+   }
1592ddf
+
1592ddf
+   loadplugfunc(&binfos, &bfuncs, (void **)&pdata->pinfo, (void **)&pdata->pfuncs);
1592ddf
+
1592ddf
+   pdata->bplugtype = getplugintype(pdata);
1592ddf
+
1592ddf
+   if (!pdata->listfunc) {
1592ddf
+      dump_pluginfo(pdata);
1592ddf
+   }
1592ddf
+   if ((!pdata->listinfo && pdata->listfunc) || pdata->verbose) {
1592ddf
+      dump_plugfuncs(pdata);
1592ddf
+   }
1592ddf
+   printf("\n");
1592ddf
+
1592ddf
+   unloadplugfunc();
1592ddf
+
1592ddf
+   dlclose(pdata->pluginhandle);
1592ddf
+
1592ddf
+   freepdata(pdata);
1592ddf
+
1592ddf
+   return 0;
1592ddf
+}
1592ddf
diff --git a/bacula/src/version.h b/bacula/src/version.h
1592ddf
index 48265be..677a81f 100644
1592ddf
--- a/bacula/src/version.h
1592ddf
+++ b/bacula/src/version.h
1592ddf
@@ -6,8 +6,8 @@
1592ddf
 
1592ddf
 /* Note: there can be only *one* VERSION in this file */
1592ddf
 #define VERSION "7.2.0"
1592ddf
-#define BDATE   "14 August 2015"
1592ddf
-#define LSMDATE "14Aug15"
1592ddf
+#define BDATE   "17 November 2015"
1592ddf
+#define LSMDATE "17Nov15"
1592ddf
 
1592ddf
 #define RELEASE 1   /* Use ONLY in rpms */
1592ddf
 
1592ddf
@@ -15,6 +15,12 @@
1592ddf
 #define BYEAR "2015"       /* year for copyright messages in progs */
1592ddf
 
1592ddf
 /*
1592ddf
+ * Versions of packages needed to build Bacula components
1592ddf
+ */
1592ddf
+#define DEPKGS_QT_VERSION  "01Jan13"
1592ddf
+#define DEPKGS_VERSION     "26Jun14"
1592ddf
+
1592ddf
+/*
1592ddf
    Bacula(R) - The Network Backup Solution
1592ddf
 
1592ddf
    Copyright (C) 2000-2015 Kern Sibbald
1592ddf
diff --git a/bacula/updatedb/update_mysql_tables.in b/bacula/updatedb/update_mysql_tables.in
1592ddf
index a800011..4ae0513 100644
1592ddf
--- a/bacula/updatedb/update_mysql_tables.in
1592ddf
+++ b/bacula/updatedb/update_mysql_tables.in
1592ddf
@@ -9,8 +9,8 @@
1592ddf
 echo " "
1592ddf
 echo "This script will update a Bacula MySQL database from version 12-14 to 15"
1592ddf
 echo " "
1592ddf
-echo "Depending on the current version of your catalog, you may have to run this script"
1592ddf
-echo "	multiple times"
1592ddf
+echo "Depending on the current version of your catalog,"
1592ddf
+echo "you may have to run this script multiple times."
1592ddf
 echo " "
1592ddf
 
1592ddf
 bindir=@MYSQL_BINDIR@
1592ddf
@@ -116,10 +116,10 @@ CREATE TABLE Snapshot (
1592ddf
   SnapshotId	  INTEGER UNSIGNED AUTO_INCREMENT,
1592ddf
   Name		  TINYBLOB NOT NULL,
1592ddf
   JobId 	  INTEGER UNSIGNED DEFAULT 0,
1592ddf
-  FileSetId INTEGER UNSIGNED DEFAULT 0;
1592ddf
+  FileSetId	  INTEGER UNSIGNED DEFAULT 0,
1592ddf
   CreateTDate	  BIGINT   NOT NULL,
1592ddf
   CreateDate	  DATETIME NOT NULL,
1592ddf
-  ClientId	  INTEGER DEFAULT 0,
1592ddf
+  ClientId	  INTEGER UNSIGNED DEFAULT 0,
1592ddf
   Volume	  TINYBLOB NOT NULL,
1592ddf
   Device	  TINYBLOB NOT NULL,
1592ddf
   Type		  TINYBLOB NOT NULL,
1592ddf
diff --git a/bacula/updatedb/update_postgresql_tables.in b/bacula/updatedb/update_postgresql_tables.in
1592ddf
index 6681046..c3db92a 100644
1592ddf
--- a/bacula/updatedb/update_postgresql_tables.in
1592ddf
+++ b/bacula/updatedb/update_postgresql_tables.in
1592ddf
@@ -3,14 +3,14 @@
1592ddf
 # Copyright (C) 2000-2015 Kern Sibbald
1592ddf
 # License: BSD 2-Clause; see file LICENSE-FOSS
1592ddf
 #
1592ddf
-# Shell script to update MySQL tables from Bacula Community version 
1592ddf
+# Shell script to update PostgreSQL tables from Bacula Community version 
1592ddf
 #  5.0.x, 5.2.x, 7.0.x
1592ddf
 #
1592ddf
 echo " "
1592ddf
-echo "This script will update a Bacula MySQL database from version 12-14 to 15"
1592ddf
+echo "This script will update a Bacula PostgreSQL database from version 12-14 to 15"
1592ddf
 echo " "
1592ddf
-echo "Depending on the current version of your catalog, you may have to run this script"
1592ddf
-echo "	multiple times"
1592ddf
+echo "Depending on the current version of your catalog,"
1592ddf
+echo "you may have to run this script multiple times."
1592ddf
 echo " "
1592ddf
 
1592ddf
 bindir=@POSTGRESQL_BINDIR@