From: Kern Sibbald Date: Tue, 22 Jul 2008 12:41:58 +0000 (+0000) Subject: Remove debug statement that crashes the SD at the end of X-Git-Tag: Release-3.0.0~1125 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=b1fa47a7cc22f5284fd1897e100480b923acbcda;p=bacula%2Fbacula Remove debug statement that crashes the SD at the end of a tape during restore. Fixes bug #1125. git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@7415 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/patches/2.4.0-bacula.patch b/bacula/patches/2.4.0-bacula.patch new file mode 100644 index 0000000000..bc7e3746e7 --- /dev/null +++ b/bacula/patches/2.4.0-bacula.patch @@ -0,0 +1,47 @@ +Index: scripts/bacula.in +=================================================================== +--- scripts/bacula.in (revision 7106) ++++ scripts/bacula.in (working copy) +@@ -13,22 +13,20 @@ + # easier to "steal" this code for the development + # environment where they are different. + # +-BACFDCFG=@sysconfdir@ +-BACSDCFG=@sysconfdir@ +-BACDIRCFG=@sysconfdir@ ++SCRIPTDIR=@scriptdir@ + + case "$1" in + start) +- [ -x ${BACSDCFG}/bacula-ctl-sd ] && ${BACSDCFG}/bacula-ctl-sd $1 $2 +- [ -x ${BACFDCFG}/bacula-ctl-fd ] && ${BACFDCFG}/bacula-ctl-fd $1 $2 +- [ -x ${BACDIRCFG}/bacula-ctl-dir ] && ${BACDIRCFG}/bacula-ctl-dir $1 $2 ++ [ -x ${SCRIPTDIR}/bacula-ctl-sd ] && ${SCRIPTDIR}/bacula-ctl-sd $1 $2 ++ [ -x ${SCRIPTDIR}/bacula-ctl-fd ] && ${SCRIPTDIR}/bacula-ctl-fd $1 $2 ++ [ -x ${SCRIPTDIR}/bacula-ctl-dir ] && ${SCRIPTDIR}/bacula-ctl-dir $1 $2 + ;; + + stop) + # Stop the FD first so that SD will fail jobs and update catalog +- [ -x ${BACFDCFG}/bacula-ctl-fd ] && ${BACFDCFG}/bacula-ctl-fd $1 $2 +- [ -x ${BACSDCFG}/bacula-ctl-sd ] && ${BACSDCFG}/bacula-ctl-sd $1 $2 +- [ -x ${BACDIRCFG}/bacula-ctl-dir ] && ${BACDIRCFG}/bacula-ctl-dir $1 $2 ++ [ -x ${SCRIPTDIR}/bacula-ctl-fd ] && ${SCRIPTDIR}/bacula-ctl-fd $1 $2 ++ [ -x ${SCRIPTDIR}/bacula-ctl-sd ] && ${SCRIPTDIR}/bacula-ctl-sd $1 $2 ++ [ -x ${SCRIPTDIR}/bacula-ctl-dir ] && ${SCRIPTDIR}/bacula-ctl-dir $1 $2 + echo + sleep 6 + ;; +@@ -39,9 +37,9 @@ + ;; + + status) +- [ -x ${BACSDCFG}/bacula-ctl-sd ] && ${BACSDCFG}/bacula-ctl-sd status +- [ -x ${BACFDCFG}/bacula-ctl-fd ] && ${BACFDCFG}/bacula-ctl-fd status +- [ -x ${BACDIRCFG}/bacula-ctl-dir ] && ${BACDIRCFG}/bacula-ctl-dir status ++ [ -x ${SCRIPTDIR}/bacula-ctl-sd ] && ${SCRIPTDIR}/bacula-ctl-sd status ++ [ -x ${SCRIPTDIR}/bacula-ctl-fd ] && ${SCRIPTDIR}/bacula-ctl-fd status ++ [ -x ${SCRIPTDIR}/bacula-ctl-dir ] && ${SCRIPTDIR}/bacula-ctl-dir status + ;; + + *) diff --git a/bacula/patches/2.4.0-bus-error.patch b/bacula/patches/2.4.0-bus-error.patch new file mode 100644 index 0000000000..f5827e4815 --- /dev/null +++ b/bacula/patches/2.4.0-bus-error.patch @@ -0,0 +1,392 @@ +Index: src/gnome2-console/console_conf.c +=================================================================== +--- src/gnome2-console/console_conf.c (revision 7106) ++++ src/gnome2-console/console_conf.c (working copy) +@@ -24,7 +24,7 @@ + /* + Bacula® - The Network Backup Solution + +- Copyright (C) 2000-2006 Free Software Foundation Europe e.V. ++ Copyright (C) 2000-2008 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. +@@ -82,8 +82,8 @@ + {"dirport", store_int, ITEM(dir_res.DIRport), 0, ITEM_DEFAULT, 9101}, + {"address", store_str, ITEM(dir_res.address), 0, ITEM_REQUIRED, 0}, + {"password", store_password, ITEM(dir_res.password), 0, 0, 0}, +- {"tlsenable", store_bit, ITEM(dir_res.tls_enable), 1, 0, 0}, +- {"tlsrequire", store_bit, ITEM(dir_res.tls_require), 1, 0, 0}, ++ {"tlsenable", store_bool, ITEM(dir_res.tls_enable), 1, 0, 0}, ++ {"tlsrequire", store_bool, ITEM(dir_res.tls_require), 1, 0, 0}, + {"tlscacertificatefile", store_dir, ITEM(dir_res.tls_ca_certfile), 0, 0, 0}, + {"tlscacertificatedir", store_dir, ITEM(dir_res.tls_ca_certdir), 0, 0, 0}, + {"tlscertificate", store_dir, ITEM(dir_res.tls_certfile), 0, 0, 0}, +@@ -95,8 +95,8 @@ + {"name", store_name, ITEM(con_res.hdr.name), 0, ITEM_REQUIRED, 0}, + {"description", store_str, ITEM(con_res.hdr.desc), 0, 0, 0}, + {"password", store_password, ITEM(con_res.password), 0, ITEM_REQUIRED, 0}, +- {"tlsenable", store_bit, ITEM(con_res.tls_enable), 1, 0, 0}, +- {"tlsrequire", store_bit, ITEM(con_res.tls_require), 1, 0, 0}, ++ {"tlsenable", store_bool, ITEM(con_res.tls_enable), 1, 0, 0}, ++ {"tlsrequire", store_bool, ITEM(con_res.tls_require), 1, 0, 0}, + {"tlscacertificatefile", store_dir, ITEM(con_res.tls_ca_certfile), 0, 0, 0}, + {"tlscacertificatedir", store_dir, ITEM(con_res.tls_ca_certdir), 0, 0, 0}, + {"tlscertificate", store_dir, ITEM(con_res.tls_certfile), 0, 0, 0}, +Index: src/gnome2-console/console_conf.h +=================================================================== +--- src/gnome2-console/console_conf.h (revision 7106) ++++ src/gnome2-console/console_conf.h (working copy) +@@ -8,7 +8,7 @@ + /* + Bacula® - The Network Backup Solution + +- Copyright (C) 2002-2006 Free Software Foundation Europe e.V. ++ Copyright (C) 2002-2008 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. +@@ -66,8 +66,8 @@ + int DIRport; /* UA server port */ + char *address; /* UA server address */ + char *password; /* UA server password */ +- int tls_enable; /* Enable TLS */ +- int tls_require; /* Require TLS */ ++ bool tls_enable; /* Enable TLS */ ++ bool tls_require; /* Require TLS */ + char *tls_ca_certfile; /* TLS CA Certificate File */ + char *tls_ca_certdir; /* TLS CA Certificate Directory */ + char *tls_certfile; /* TLS Client Certificate File */ +@@ -84,8 +84,8 @@ + struct CONRES { + RES hdr; + char *password; /* UA server password */ +- int tls_enable; /* Enable TLS on all connections */ +- int tls_require; /* Require TLS on all connections */ ++ bool tls_enable; /* Enable TLS on all connections */ ++ bool tls_require; /* Require TLS on all connections */ + char *tls_ca_certfile; /* TLS CA Certificate File */ + char *tls_ca_certdir; /* TLS CA Certificate Directory */ + char *tls_certfile; /* TLS Client Certificate File */ +Index: src/wx-console/console_conf.c +=================================================================== +--- src/wx-console/console_conf.c (revision 7106) ++++ src/wx-console/console_conf.c (working copy) +@@ -100,12 +100,12 @@ + {"rcfile", store_dir, ITEM(res_cons.rc_file), 0, 0, 0}, + {"historyfile", store_dir, ITEM(res_cons.hist_file), 0, 0, 0}, + {"password", store_password, ITEM(res_cons.password), 0, ITEM_REQUIRED, 0}, +- {"tlsenable", store_bit, ITEM(res_cons.tls_enable), 1, 0, 0}, +- {"tlsrequire", store_bit, ITEM(res_cons.tls_require), 1, 0, 0}, + {"tlscacertificatefile", store_dir, ITEM(res_cons.tls_ca_certfile), 0, 0, 0}, + {"tlscacertificatedir", store_dir, ITEM(res_cons.tls_ca_certdir), 0, 0, 0}, + {"tlscertificate", store_dir, ITEM(res_cons.tls_certfile), 0, 0, 0}, + {"tlskey", store_dir, ITEM(res_cons.tls_keyfile), 0, 0, 0}, ++ {"tlsenable", store_bool, ITEM(res_cons.tls_enable), 1, 0, 0}, ++ {"tlsrequire", store_bool, ITEM(res_cons.tls_require), 1, 0, 0}, + {NULL, NULL, {0}, 0, 0, 0} + }; + +@@ -117,12 +117,12 @@ + {"dirport", store_int, ITEM(res_dir.DIRport), 0, ITEM_DEFAULT, 9101}, + {"address", store_str, ITEM(res_dir.address), 0, 0, 0}, + {"password", store_password, ITEM(res_dir.password), 0, ITEM_REQUIRED, 0}, +- {"tlsenable", store_bit, ITEM(res_dir.tls_enable), 1, 0, 0}, +- {"tlsrequire", store_bit, ITEM(res_dir.tls_require), 1, 0, 0}, + {"tlscacertificatefile", store_dir, ITEM(res_dir.tls_ca_certfile), 0, 0, 0}, + {"tlscacertificatedir", store_dir, ITEM(res_dir.tls_ca_certdir), 0, 0, 0}, + {"tlscertificate", store_dir, ITEM(res_dir.tls_certfile), 0, 0, 0}, + {"tlskey", store_dir, ITEM(res_dir.tls_keyfile), 0, 0, 0}, ++ {"tlsenable", store_bool, ITEM(res_dir.tls_enable), 1, 0, 0}, ++ {"tlsrequire", store_bool, ITEM(res_dir.tls_require), 1, 0, 0}, + {NULL, NULL, {0}, 0, 0, 0} + }; + +Index: src/wx-console/console_conf.h +=================================================================== +--- src/wx-console/console_conf.h (revision 7106) ++++ src/wx-console/console_conf.h (working copy) +@@ -4,7 +4,7 @@ + /* + Bacula® - The Network Backup Solution + +- Copyright (C) 2000-2006 Free Software Foundation Europe e.V. ++ Copyright (C) 2000-2008 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. +@@ -63,14 +63,13 @@ + char *rc_file; /* startup file */ + char *hist_file; /* command history file */ + char *password; /* UA server password */ +- int tls_enable; /* Enable TLS on all connections */ +- int tls_require; /* Require TLS on all connections */ + char *tls_ca_certfile; /* TLS CA Certificate File */ + char *tls_ca_certdir; /* TLS CA Certificate Directory */ + char *tls_certfile; /* TLS Client Certificate File */ + char *tls_keyfile; /* TLS Client Key File */ +- + TLS_CONTEXT *tls_ctx; /* Shared TLS Context */ ++ bool tls_enable; /* Enable TLS on all connections */ ++ bool tls_require; /* Require TLS on all connections */ + }; + + /* Director */ +@@ -79,14 +78,13 @@ + int DIRport; /* UA server port */ + char *address; /* UA server address */ + char *password; /* UA server password */ +- int tls_enable; /* Enable TLS on all connections */ +- int tls_require; /* Require TLS on all connections */ + char *tls_ca_certfile; /* TLS CA Certificate File */ + char *tls_ca_certdir; /* TLS CA Certificate Directory */ + char *tls_certfile; /* TLS Client Certificate File */ + char *tls_keyfile; /* TLS Client Key File */ +- + TLS_CONTEXT *tls_ctx; /* Shared TLS Context */ ++ bool tls_enable; /* Enable TLS on all connections */ ++ bool tls_require; /* Require TLS on all connections */ + }; + + +Index: src/stored/stored_conf.c +=================================================================== +--- src/stored/stored_conf.c (revision 7106) ++++ src/stored/stored_conf.c (working copy) +@@ -1,7 +1,7 @@ + /* + Bacula® - The Network Backup Solution + +- Copyright (C) 2000-2007 Free Software Foundation Europe e.V. ++ Copyright (C) 2000-2008 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. +@@ -77,9 +77,9 @@ + {"scriptsdirectory", store_dir, ITEM(res_store.scripts_directory), 0, 0, 0}, + {"maximumconcurrentjobs", store_pint, ITEM(res_store.max_concurrent_jobs), 0, ITEM_DEFAULT, 20}, + {"heartbeatinterval", store_time, ITEM(res_store.heartbeat_interval), 0, ITEM_DEFAULT, 0}, +- {"tlsenable", store_bit, ITEM(res_store.tls_enable), 1, 0, 0}, +- {"tlsrequire", store_bit, ITEM(res_store.tls_require), 1, 0, 0}, +- {"tlsverifypeer", store_bit, ITEM(res_store.tls_verify_peer), 1, ITEM_DEFAULT, 1}, ++ {"tlsenable", store_bool, ITEM(res_store.tls_enable), 1, 0, 0}, ++ {"tlsrequire", store_bool, ITEM(res_store.tls_require), 1, 0, 0}, ++ {"tlsverifypeer", store_bool, ITEM(res_store.tls_verify_peer), 1, ITEM_DEFAULT, 1}, + {"tlscacertificatefile", store_dir, ITEM(res_store.tls_ca_certfile), 0, 0, 0}, + {"tlscacertificatedir", store_dir, ITEM(res_store.tls_ca_certdir), 0, 0, 0}, + {"tlscertificate", store_dir, ITEM(res_store.tls_certfile), 0, 0, 0}, +@@ -96,10 +96,10 @@ + {"name", store_name, ITEM(res_dir.hdr.name), 0, ITEM_REQUIRED, 0}, + {"description", store_str, ITEM(res_dir.hdr.desc), 0, 0, 0}, + {"password", store_password, ITEM(res_dir.password), 0, ITEM_REQUIRED, 0}, +- {"monitor", store_bit, ITEM(res_dir.monitor), 1, ITEM_DEFAULT, 0}, +- {"tlsenable", store_bit, ITEM(res_dir.tls_enable), 1, 0, 0}, +- {"tlsrequire", store_bit, ITEM(res_dir.tls_require), 1, 0, 0}, +- {"tlsverifypeer", store_bit, ITEM(res_dir.tls_verify_peer), 1, ITEM_DEFAULT, 1}, ++ {"monitor", store_bool, ITEM(res_dir.monitor), 1, ITEM_DEFAULT, 0}, ++ {"tlsenable", store_bool, ITEM(res_dir.tls_enable), 1, 0, 0}, ++ {"tlsrequire", store_bool, ITEM(res_dir.tls_require), 1, 0, 0}, ++ {"tlsverifypeer", store_bool, ITEM(res_dir.tls_verify_peer), 1, ITEM_DEFAULT, 1}, + {"tlscacertificatefile", store_dir, ITEM(res_dir.tls_ca_certfile), 0, 0, 0}, + {"tlscacertificatedir", store_dir, ITEM(res_dir.tls_ca_certdir), 0, 0, 0}, + {"tlscertificate", store_dir, ITEM(res_dir.tls_certfile), 0, 0, 0}, +@@ -137,7 +137,7 @@ + {"checklabels", store_bit, ITEM(res_dev.cap_bits), CAP_CHECKLABELS, ITEM_DEFAULT, 0}, + {"requiresmount", store_bit, ITEM(res_dev.cap_bits), CAP_REQMOUNT, ITEM_DEFAULT, 0}, + {"offlineonunmount", store_bit, ITEM(res_dev.cap_bits), CAP_OFFLINEUNMOUNT, ITEM_DEFAULT, 0}, +- {"autoselect", store_bit, ITEM(res_dev.autoselect), 1, ITEM_DEFAULT, 1}, ++ {"autoselect", store_bool, ITEM(res_dev.autoselect), 1, ITEM_DEFAULT, 1}, + {"changerdevice", store_strname,ITEM(res_dev.changer_name), 0, 0, 0}, + {"changercommand", store_strname,ITEM(res_dev.changer_command), 0, 0, 0}, + {"alertcommand", store_strname,ITEM(res_dev.alert_command), 0, 0, 0}, +@@ -177,9 +177,6 @@ + }; + + +-// {"mountanonymousvolumes", store_bit, ITEM(res_dev.cap_bits), CAP_ANONVOLS, ITEM_DEFAULT, 0}, +- +- + /* Message resource */ + extern RES_ITEM msgs_items[]; + +Index: src/stored/stored_conf.h +=================================================================== +--- src/stored/stored_conf.h (revision 7106) ++++ src/stored/stored_conf.h (working copy) +@@ -1,7 +1,7 @@ + /* + Bacula® - The Network Backup Solution + +- Copyright (C) 2000-2007 Free Software Foundation Europe e.V. ++ Copyright (C) 2000-2008 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. +@@ -126,9 +126,9 @@ + char *spool_directory; /* Spool file directory */ + int dev_type; /* device type */ + int label_type; /* label type */ +- int autoselect; /* Automatically select from AutoChanger */ ++ bool autoselect; /* Automatically select from AutoChanger */ + uint32_t drive_index; /* Autochanger drive index */ +- uint32_t cap_bits; /* Capabilities of this device */ ++ int cap_bits; /* Capabilities of this device */ + utime_t max_changer_wait; /* Changer timeout */ + utime_t max_rewind_wait; /* maximum secs to wait for rewind */ + utime_t max_open_wait; /* maximum secs to wait for open */ +Index: src/console/console_conf.c +=================================================================== +--- src/console/console_conf.c (revision 7106) ++++ src/console/console_conf.c (working copy) +@@ -1,7 +1,7 @@ + /* + Bacula® - The Network Backup Solution + +- Copyright (C) 2000-2007 Free Software Foundation Europe e.V. ++ Copyright (C) 2000-2008 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. +@@ -88,8 +88,8 @@ + {"rcfile", store_dir, ITEM(res_cons.rc_file), 0, 0, 0}, + {"historyfile", store_dir, ITEM(res_cons.hist_file), 0, 0, 0}, + {"password", store_password, ITEM(res_cons.password), 0, ITEM_REQUIRED, 0}, +- {"tlsenable", store_bit, ITEM(res_cons.tls_enable), 1, 0, 0}, +- {"tlsrequire", store_bit, ITEM(res_cons.tls_require), 1, 0, 0}, ++ {"tlsenable", store_bool, ITEM(res_cons.tls_enable), 1, 0, 0}, ++ {"tlsrequire", store_bool, ITEM(res_cons.tls_require), 1, 0, 0}, + {"tlscacertificatefile", store_dir, ITEM(res_cons.tls_ca_certfile), 0, 0, 0}, + {"tlscacertificatedir", store_dir, ITEM(res_cons.tls_ca_certdir), 0, 0, 0}, + {"tlscertificate", store_dir, ITEM(res_cons.tls_certfile), 0, 0, 0}, +@@ -107,8 +107,8 @@ + {"dirport", store_int, ITEM(res_dir.DIRport), 0, ITEM_DEFAULT, 9101}, + {"address", store_str, ITEM(res_dir.address), 0, 0, 0}, + {"password", store_password, ITEM(res_dir.password), 0, ITEM_REQUIRED, 0}, +- {"tlsenable", store_bit, ITEM(res_dir.tls_enable), 1, 0, 0}, +- {"tlsrequire", store_bit, ITEM(res_dir.tls_require), 1, 0, 0}, ++ {"tlsenable", store_bool, ITEM(res_dir.tls_enable), 1, 0, 0}, ++ {"tlsrequire", store_bool, ITEM(res_dir.tls_require), 1, 0, 0}, + {"tlscacertificatefile", store_dir, ITEM(res_dir.tls_ca_certfile), 0, 0, 0}, + {"tlscacertificatedir", store_dir, ITEM(res_dir.tls_ca_certdir), 0, 0, 0}, + {"tlscertificate", store_dir, ITEM(res_dir.tls_certfile), 0, 0, 0}, +Index: src/console/console_conf.h +=================================================================== +--- src/console/console_conf.h (revision 7106) ++++ src/console/console_conf.h (working copy) +@@ -64,16 +64,15 @@ + char *rc_file; /* startup file */ + char *hist_file; /* command history file */ + char *password; /* UA server password */ +- int tls_enable; /* Enable TLS on all connections */ +- int tls_require; /* Require TLS on all connections */ + char *tls_ca_certfile; /* TLS CA Certificate File */ + char *tls_ca_certdir; /* TLS CA Certificate Directory */ + char *tls_certfile; /* TLS Client Certificate File */ + char *tls_keyfile; /* TLS Client Key File */ + char *director; /* bind to director */ + utime_t heartbeat_interval; /* Interval to send heartbeats to Dir */ +- + TLS_CONTEXT *tls_ctx; /* Shared TLS Context */ ++ bool tls_enable; /* Enable TLS on all connections */ ++ bool tls_require; /* Require TLS on all connections */ + }; + + /* Director */ +@@ -82,15 +81,14 @@ + int DIRport; /* UA server port */ + char *address; /* UA server address */ + char *password; /* UA server password */ +- int tls_enable; /* Enable TLS */ +- int tls_require; /* Require TLS */ + char *tls_ca_certfile; /* TLS CA Certificate File */ + char *tls_ca_certdir; /* TLS CA Certificate Directory */ + char *tls_certfile; /* TLS Client Certificate File */ + char *tls_keyfile; /* TLS Client Key File */ + utime_t heartbeat_interval; /* Interval to send heartbeats to Dir */ +- + TLS_CONTEXT *tls_ctx; /* Shared TLS Context */ ++ bool tls_enable; /* Enable TLS */ ++ bool tls_require; /* Require TLS */ + }; + + +Index: src/tray-monitor/tray_conf.c +=================================================================== +--- src/tray-monitor/tray_conf.c (revision 7106) ++++ src/tray-monitor/tray_conf.c (working copy) +@@ -82,7 +82,7 @@ + static RES_ITEM mon_items[] = { + {"name", store_name, ITEM(res_monitor.hdr.name), 0, ITEM_REQUIRED, 0}, + {"description", store_str, ITEM(res_monitor.hdr.desc), 0, 0, 0}, +- {"requiressl", store_bit, ITEM(res_monitor.require_ssl), 1, ITEM_DEFAULT, 0}, ++ {"requiressl", store_bool, ITEM(res_monitor.require_ssl), 1, ITEM_DEFAULT, 0}, + {"password", store_password, ITEM(res_monitor.password), 0, ITEM_REQUIRED, 0}, + {"refreshinterval", store_time,ITEM(res_monitor.RefreshInterval), 0, ITEM_DEFAULT, 5}, + {"fdconnecttimeout", store_time,ITEM(res_monitor.FDConnectTimeout), 0, ITEM_DEFAULT, 60 * 30}, +@@ -96,7 +96,7 @@ + {"description", store_str, ITEM(res_dir.hdr.desc), 0, 0, 0}, + {"dirport", store_int, ITEM(res_dir.DIRport), 0, ITEM_DEFAULT, 9101}, + {"address", store_str, ITEM(res_dir.address), 0, 0, 0}, +- {"enablessl", store_bit, ITEM(res_dir.enable_ssl), 1, ITEM_DEFAULT, 0}, ++ {"enablessl", store_bool, ITEM(res_dir.enable_ssl), 1, ITEM_DEFAULT, 0}, + {NULL, NULL, {0}, 0, 0, 0} + }; + +@@ -112,7 +112,7 @@ + {"address", store_str, ITEM(res_client.address), 0, ITEM_REQUIRED, 0}, + {"fdport", store_pint, ITEM(res_client.FDport), 0, ITEM_DEFAULT, 9102}, + {"password", store_password, ITEM(res_client.password), 0, ITEM_REQUIRED, 0}, +- {"enablessl", store_bit, ITEM(res_client.enable_ssl), 1, ITEM_DEFAULT, 0}, ++ {"enablessl", store_bool, ITEM(res_client.enable_ssl), 1, ITEM_DEFAULT, 0}, + {NULL, NULL, {0}, 0, 0, 0} + }; + +@@ -128,7 +128,7 @@ + {"sdaddress", store_str, ITEM(res_store.address), 0, 0, 0}, + {"password", store_password, ITEM(res_store.password), 0, ITEM_REQUIRED, 0}, + {"sdpassword", store_password, ITEM(res_store.password), 0, 0, 0}, +- {"enablessl", store_bit, ITEM(res_store.enable_ssl), 1, ITEM_DEFAULT, 0}, ++ {"enablessl", store_bool, ITEM(res_store.enable_ssl), 1, ITEM_DEFAULT, 0}, + {NULL, NULL, {0}, 0, 0, 0} + }; + +Index: src/tray-monitor/tray_conf.h +=================================================================== +--- src/tray-monitor/tray_conf.h (revision 7106) ++++ src/tray-monitor/tray_conf.h (working copy) +@@ -1,7 +1,7 @@ + /* + Bacula® - The Network Backup Solution + +- Copyright (C) 2004-2007 Free Software Foundation Europe e.V. ++ Copyright (C) 2004-2008 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. +@@ -67,7 +67,7 @@ + RES hdr; + int DIRport; /* UA server port */ + char *address; /* UA server address */ +- int enable_ssl; /* Use SSL */ ++ bool enable_ssl; /* Use SSL */ + }; + + /* +@@ -95,7 +95,7 @@ + int FDport; /* Where File daemon listens */ + char *address; + char *password; +- int enable_ssl; /* Use SSL */ ++ bool enable_ssl; /* Use SSL */ + }; + + /* +@@ -108,7 +108,7 @@ + int SDport; /* port where Directors connect */ + char *address; + char *password; +- int enable_ssl; /* Use SSL */ ++ bool enable_ssl; /* Use SSL */ + }; + + struct CONFONTRES { diff --git a/bacula/patches/2.4.0-recycle.patch b/bacula/patches/2.4.0-recycle.patch new file mode 100644 index 0000000000..e65808e08a --- /dev/null +++ b/bacula/patches/2.4.0-recycle.patch @@ -0,0 +1,76 @@ + + This patch should fix (not tested) the recycling bug #1106 when using + two autochangers. There is a much smaller chance that it also fixes + bug #1103 where a volume is recycled when it is full. + + Apply the patch to version 2.4.0 with: + + cd + patch -p0 <2.4.0-recycle.patch + ./configure + make + ... + make install + + + +Index: src/dird/autoprune.c +=================================================================== +--- src/dird/autoprune.c (revision 7178) ++++ src/dird/autoprune.c (working copy) +@@ -96,7 +96,7 @@ + POOL_MEM query(PM_MESSAGE); + UAContext *ua; + bool ok = false; +- char ed1[50], ed2[100]; ++ char ed1[50], ed2[100], ed3[50]; + POOL_DBR spr; + + Dmsg1(050, "Prune volumes PoolId=%d\n", jcr->jr.PoolId); +@@ -138,10 +138,18 @@ + * RecyclePoolId is the current pool or the scratch pool + */ + const char *select = "SELECT DISTINCT MediaId,LastWritten FROM Media WHERE " +- "(PoolId=%s OR RecyclePoolId IN (%s)) AND MediaType='%s' " ++ "(PoolId=%s OR RecyclePoolId IN (%s)) AND MediaType='%s' %s" + "ORDER BY LastWritten ASC,MediaId"; + +- Mmsg(query, select, ed1, ed2, mr->MediaType); ++ if (InChanger) { ++ char changer[100]; ++ /* Ensure it is in this autochanger */ ++ bsnprintf(changer, sizeof(changer), "AND InChanger=1 AND StorageId=%s ", ++ edit_int64(mr->StorageId, ed3)); ++ Mmsg(query, select, ed1, ed2, mr->MediaType, changer); ++ } else { ++ Mmsg(query, select, ed1, ed2, mr->MediaType, ""); ++ } + + Dmsg1(050, "query=%s\n", query.c_str()); + if (!db_get_query_dbids(ua->jcr, ua->db, query, ids)) { +Index: src/dird/recycle.c +=================================================================== +--- src/dird/recycle.c (revision 7178) ++++ src/dird/recycle.c (working copy) +@@ -83,12 +83,19 @@ + const char *select = + "SELECT MediaId,LastWritten FROM Media " + "WHERE PoolId=%s AND Recycle=1 AND VolStatus='Purged' " +- "AND Enabled=1 AND MediaType='%s' " ++ "AND Enabled=1 AND MediaType='%s' %s" + "ORDER BY LastWritten ASC,MediaId LIMIT 1"; + + Dmsg0(100, "Enter recycle_oldest_purged_volume\n"); + oldest.MediaId = 0; +- Mmsg(query, select, edit_int64(mr->PoolId, ed1), mr->MediaType); ++ if (InChanger) { ++ char changer[100]; ++ bsnprintf(changer, sizeof(changer), "AND InChanger=1 AND StorageId=%s ", ++ edit_int64(mr->StorageId, ed1)); ++ Mmsg(query, select, edit_int64(mr->PoolId, ed1), mr->MediaType, changer); ++ } else { ++ Mmsg(query, select, edit_int64(mr->PoolId, ed1), mr->MediaType, ""); ++ } + + if (!db_sql_query(jcr->db, query, oldest_handler, (void *)&oldest)) { + Jmsg(jcr, M_ERROR, 0, "%s", db_strerror(jcr->db)); diff --git a/bacula/patches/2.4.0-reschedule.patch b/bacula/patches/2.4.0-reschedule.patch new file mode 100644 index 0000000000..1ca45af393 --- /dev/null +++ b/bacula/patches/2.4.0-reschedule.patch @@ -0,0 +1,344 @@ + + This patch should fix bug #1094 where jobs that wrote bytes and are rescheduled + do not keep any Pool overrides that were specified in the Schedule Run + directives. The patch also simplifies the resource lock inc/dec. + + Apply it to 2.4.0 with: + + cd + patch -p0 <2.4.0-reschedule.patch + ./configure + make + ... + make install + + +Index: src/dird/jobq.c +=================================================================== +--- src/dird/jobq.c (revision 7178) ++++ src/dird/jobq.c (working copy) +@@ -1,7 +1,7 @@ + /* + Bacula® - The Network Backup Solution + +- Copyright (C) 2003-2007 Free Software Foundation Europe e.V. ++ Copyright (C) 2003-2008 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. +@@ -56,9 +56,10 @@ + + static int start_server(jobq_t *jq); + static bool acquire_resources(JCR *jcr); ++static bool reschedule_job(JCR *jcr, jobq_t *jq, jobq_item_t *je); ++static void dec_read_store(JCR *jcr); ++static void dec_write_store(JCR *jcr); + +- +- + /* + * Initialize a job queue + * +@@ -357,8 +358,8 @@ + pthread_t id; + + /* +- * if any threads are idle, wake one -- +- * actually we do a broadcast because on /lib/tls ++ * if any threads are idle, wake one. ++ * Actually we do a broadcast because on /lib/tls + * these signals seem to get lost from time to time. + */ + if (jq->idle_workers > 0) { +@@ -477,87 +478,17 @@ + * put into the ready queue. + */ + if (jcr->acquired_resource_locks) { +- if (jcr->rstore) { +- jcr->rstore->NumConcurrentJobs--; +- Dmsg1(200, "Dec rncj=%d\n", jcr->rstore->NumConcurrentJobs); +- } +- if (jcr->wstore) { +- jcr->wstore->NumConcurrentJobs--; +- Dmsg1(200, "Dec wncj=%d\n", jcr->wstore->NumConcurrentJobs); +- } ++ dec_read_store(jcr); ++ dec_write_store(jcr); + jcr->client->NumConcurrentJobs--; + jcr->job->NumConcurrentJobs--; + jcr->acquired_resource_locks = false; + } + +- /* +- * Reschedule the job if necessary and requested +- */ +- if (jcr->job->RescheduleOnError && +- jcr->JobStatus != JS_Terminated && +- jcr->JobStatus != JS_Canceled && +- jcr->JobType == JT_BACKUP && +- (jcr->job->RescheduleTimes == 0 || +- jcr->reschedule_count < jcr->job->RescheduleTimes)) { +- char dt[50], dt2[50]; ++ if (reschedule_job(jcr, jq, je)) { ++ continue; /* go look for more work */ ++ } + +- /* +- * Reschedule this job by cleaning it up, but +- * reuse the same JobId if possible. +- */ +- time_t now = time(NULL); +- jcr->reschedule_count++; +- jcr->sched_time = now + jcr->job->RescheduleInterval; +- bstrftime(dt, sizeof(dt), now); +- bstrftime(dt2, sizeof(dt2), jcr->sched_time); +- Dmsg4(2300, "Rescheduled Job %s to re-run in %d seconds.(now=%u,then=%u)\n", jcr->Job, +- (int)jcr->job->RescheduleInterval, now, jcr->sched_time); +- Jmsg(jcr, M_INFO, 0, _("Rescheduled Job %s at %s to re-run in %d seconds (%s).\n"), +- jcr->Job, dt, (int)jcr->job->RescheduleInterval, dt2); +- dird_free_jcr_pointers(jcr); /* partial cleanup old stuff */ +- jcr->JobStatus = -1; +- set_jcr_job_status(jcr, JS_WaitStartTime); +- jcr->SDJobStatus = 0; +- if (jcr->JobBytes == 0) { +- Dmsg2(2300, "Requeue job=%d use=%d\n", jcr->JobId, jcr->use_count()); +- V(jq->mutex); +- jobq_add(jq, jcr); /* queue the job to run again */ +- P(jq->mutex); +- free_jcr(jcr); /* release jcr */ +- free(je); /* free the job entry */ +- continue; /* look for another job to run */ +- } +- /* +- * Something was actually backed up, so we cannot reuse +- * the old JobId or there will be database record +- * conflicts. We now create a new job, copying the +- * appropriate fields. +- */ +- JCR *njcr = new_jcr(sizeof(JCR), dird_free_jcr); +- set_jcr_defaults(njcr, jcr->job); +- njcr->reschedule_count = jcr->reschedule_count; +- njcr->sched_time = jcr->sched_time; +- njcr->JobLevel = jcr->JobLevel; +- njcr->JobStatus = -1; +- set_jcr_job_status(njcr, jcr->JobStatus); +- if (jcr->rstore) { +- copy_rstorage(njcr, jcr->rstorage, _("previous Job")); +- } else { +- free_rstorage(njcr); +- } +- if (jcr->wstore) { +- copy_wstorage(njcr, jcr->wstorage, _("previous Job")); +- } else { +- free_wstorage(njcr); +- } +- njcr->messages = jcr->messages; +- Dmsg0(2300, "Call to run new job\n"); +- V(jq->mutex); +- run_job(njcr); /* This creates a "new" job */ +- free_jcr(njcr); /* release "new" jcr */ +- P(jq->mutex); +- Dmsg0(2300, "Back from running new job.\n"); +- } + /* Clean up and release old jcr */ + Dmsg2(2300, "====== Termination job=%d use_cnt=%d\n", jcr->JobId, jcr->use_count()); + jcr->SDJobStatus = 0; +@@ -671,6 +602,91 @@ + } + + /* ++ * Returns true if cleanup done and we should look for more work ++ */ ++static bool reschedule_job(JCR *jcr, jobq_t *jq, jobq_item_t *je) ++{ ++ /* ++ * Reschedule the job if necessary and requested ++ */ ++ if (jcr->job->RescheduleOnError && ++ jcr->JobStatus != JS_Terminated && ++ jcr->JobStatus != JS_Canceled && ++ jcr->JobType == JT_BACKUP && ++ (jcr->job->RescheduleTimes == 0 || ++ jcr->reschedule_count < jcr->job->RescheduleTimes)) { ++ char dt[50], dt2[50]; ++ ++ /* ++ * Reschedule this job by cleaning it up, but ++ * reuse the same JobId if possible. ++ */ ++ time_t now = time(NULL); ++ jcr->reschedule_count++; ++ jcr->sched_time = now + jcr->job->RescheduleInterval; ++ bstrftime(dt, sizeof(dt), now); ++ bstrftime(dt2, sizeof(dt2), jcr->sched_time); ++ Dmsg4(2300, "Rescheduled Job %s to re-run in %d seconds.(now=%u,then=%u)\n", jcr->Job, ++ (int)jcr->job->RescheduleInterval, now, jcr->sched_time); ++ Jmsg(jcr, M_INFO, 0, _("Rescheduled Job %s at %s to re-run in %d seconds (%s).\n"), ++ jcr->Job, dt, (int)jcr->job->RescheduleInterval, dt2); ++ dird_free_jcr_pointers(jcr); /* partial cleanup old stuff */ ++ jcr->JobStatus = -1; ++ set_jcr_job_status(jcr, JS_WaitStartTime); ++ jcr->SDJobStatus = 0; ++ if (jcr->JobBytes == 0) { ++ Dmsg2(2300, "Requeue job=%d use=%d\n", jcr->JobId, jcr->use_count()); ++ V(jq->mutex); ++ jobq_add(jq, jcr); /* queue the job to run again */ ++ P(jq->mutex); ++ free_jcr(jcr); /* release jcr */ ++ free(je); /* free the job entry */ ++ return true; /* we already cleaned up */ ++ } ++ /* ++ * Something was actually backed up, so we cannot reuse ++ * the old JobId or there will be database record ++ * conflicts. We now create a new job, copying the ++ * appropriate fields. ++ */ ++ JCR *njcr = new_jcr(sizeof(JCR), dird_free_jcr); ++ set_jcr_defaults(njcr, jcr->job); ++ njcr->reschedule_count = jcr->reschedule_count; ++ njcr->sched_time = jcr->sched_time; ++ njcr->JobLevel = jcr->JobLevel; ++ njcr->pool = jcr->pool; ++ njcr->run_pool_override = jcr->run_pool_override; ++ njcr->full_pool = jcr->full_pool; ++ njcr->run_full_pool_override = jcr->run_full_pool_override; ++ njcr->inc_pool = jcr->inc_pool; ++ njcr->run_inc_pool_override = jcr->run_inc_pool_override; ++ njcr->diff_pool = jcr->diff_pool; ++ njcr->JobStatus = -1; ++ set_jcr_job_status(njcr, jcr->JobStatus); ++ if (jcr->rstore) { ++ copy_rstorage(njcr, jcr->rstorage, _("previous Job")); ++ } else { ++ free_rstorage(njcr); ++ } ++ if (jcr->wstore) { ++ copy_wstorage(njcr, jcr->wstorage, _("previous Job")); ++ } else { ++ free_wstorage(njcr); ++ } ++ njcr->messages = jcr->messages; ++ njcr->spool_data = jcr->spool_data; ++ njcr->write_part_after_job = jcr->write_part_after_job; ++ Dmsg0(2300, "Call to run new job\n"); ++ V(jq->mutex); ++ run_job(njcr); /* This creates a "new" job */ ++ free_jcr(njcr); /* release "new" jcr */ ++ P(jq->mutex); ++ Dmsg0(2300, "Back from running new job.\n"); ++ } ++ return false; ++} ++ ++/* + * See if we can acquire all the necessary resources for the job (JCR) + * + * Returns: true if successful +@@ -681,11 +697,19 @@ + bool skip_this_jcr = false; + + jcr->acquired_resource_locks = false; ++ if (jcr->rstore == jcr->wstore) { /* deadlock */ ++ Jmsg(jcr, M_FATAL, 0, _("Job canceled. Attempt to read and write same device.\n" ++ " Read storage \"%s\" (From %s) -- Write storage \"%s\" (From %s)\n"), ++ jcr->rstore->name(), jcr->rstore_source, jcr->wstore->name(), jcr->wstore_source); ++ set_jcr_job_status(jcr, JS_Canceled); ++ return false; ++ } + if (jcr->rstore) { + Dmsg1(200, "Rstore=%s\n", jcr->rstore->name()); + if (jcr->rstore->NumConcurrentJobs < jcr->rstore->MaxConcurrentJobs) { ++// jcr->rstore->NumConcurrentReadJobs++; + jcr->rstore->NumConcurrentJobs++; +- Dmsg0(200, "Set rncj=1\n"); ++ Dmsg1(200, "Inc rncj=%d\n", jcr->rstore->NumConcurrentJobs); + } else { + Dmsg1(200, "Fail rncj=%d\n", jcr->rstore->NumConcurrentJobs); + set_jcr_job_status(jcr, JS_WaitStoreRes); +@@ -695,25 +719,11 @@ + + if (jcr->wstore) { + Dmsg1(200, "Wstore=%s\n", jcr->wstore->name()); +- if (jcr->rstore == jcr->wstore) { /* deadlock */ +- jcr->rstore->NumConcurrentJobs--; /* back out rstore */ +- Jmsg(jcr, M_FATAL, 0, _("Job canceled. Attempt to read and write same device.\n" +- " Read storage \"%s\" (From %s) -- Write storage \"%s\" (From %s)\n"), +- jcr->rstore->name(), jcr->rstore_source, jcr->wstore->name(), jcr->wstore_source); +- set_jcr_job_status(jcr, JS_Canceled); +- return false; +- } +- if (jcr->wstore->NumConcurrentJobs == 0 && +- jcr->wstore->NumConcurrentJobs < jcr->wstore->MaxConcurrentJobs) { +- /* Simple case, first job */ +- jcr->wstore->NumConcurrentJobs = 1; +- Dmsg0(200, "Set wncj=1\n"); +- } else if (jcr->wstore->NumConcurrentJobs < jcr->wstore->MaxConcurrentJobs) { ++ if (jcr->wstore->NumConcurrentJobs < jcr->wstore->MaxConcurrentJobs) { + jcr->wstore->NumConcurrentJobs++; + Dmsg1(200, "Inc wncj=%d\n", jcr->wstore->NumConcurrentJobs); + } else if (jcr->rstore) { +- jcr->rstore->NumConcurrentJobs--; /* back out rstore */ +- Dmsg1(200, "Fail wncj=%d\n", jcr->wstore->NumConcurrentJobs); ++ dec_read_store(jcr); + skip_this_jcr = true; + } else { + Dmsg1(200, "Fail wncj=%d\n", jcr->wstore->NumConcurrentJobs); +@@ -729,14 +739,8 @@ + jcr->client->NumConcurrentJobs++; + } else { + /* Back out previous locks */ +- if (jcr->wstore) { +- jcr->wstore->NumConcurrentJobs--; +- Dmsg1(200, "Dec wncj=%d\n", jcr->wstore->NumConcurrentJobs); +- } +- if (jcr->rstore) { +- jcr->rstore->NumConcurrentJobs--; +- Dmsg1(200, "Dec rncj=%d\n", jcr->rstore->NumConcurrentJobs); +- } ++ dec_write_store(jcr); ++ dec_read_store(jcr); + set_jcr_job_status(jcr, JS_WaitClientRes); + return false; + } +@@ -744,14 +748,8 @@ + jcr->job->NumConcurrentJobs++; + } else { + /* Back out previous locks */ +- if (jcr->wstore) { +- jcr->wstore->NumConcurrentJobs--; +- Dmsg1(200, "Dec wncj=%d\n", jcr->wstore->NumConcurrentJobs); +- } +- if (jcr->rstore) { +- jcr->rstore->NumConcurrentJobs--; +- Dmsg1(200, "Dec rncj=%d\n", jcr->rstore->NumConcurrentJobs); +- } ++ dec_write_store(jcr); ++ dec_read_store(jcr); + jcr->client->NumConcurrentJobs--; + set_jcr_job_status(jcr, JS_WaitJobRes); + return false; +@@ -760,3 +758,23 @@ + jcr->acquired_resource_locks = true; + return true; + } ++ ++static void dec_read_store(JCR *jcr) ++{ ++ if (jcr->rstore) { ++// jcr->rstore->NumConcurrentReadJobs--; /* back out rstore */ ++ jcr->rstore->NumConcurrentJobs--; /* back out rstore */ ++ Dmsg1(200, "Dec rncj=%d\n", jcr->rstore->NumConcurrentJobs); ++// ASSERT(jcr->rstore->NumConcurrentReadJobs >= 0); ++ ASSERT(jcr->rstore->NumConcurrentJobs >= 0); ++ } ++} ++ ++static void dec_write_store(JCR *jcr) ++{ ++ if (jcr->wstore) { ++ jcr->wstore->NumConcurrentJobs--; ++ Dmsg1(200, "Dec wncj=%d\n", jcr->wstore->NumConcurrentJobs); ++ ASSERT(jcr->wstore->NumConcurrentJobs >= 0); ++ } ++} diff --git a/bacula/patches/2.4.0-sd-deadlock.patch b/bacula/patches/2.4.0-sd-deadlock.patch new file mode 100644 index 0000000000..54ca518d93 --- /dev/null +++ b/bacula/patches/2.4.0-sd-deadlock.patch @@ -0,0 +1,35 @@ + + This patch should fix a volume locking deadlock condition in the + Storage daemon as reported in bug #1100. + + Apply it to version 2.4.0 with: + + cd + patch -p0 <2.4.0-sd-deadlock.patch + ./configure + make + ... + make install + + +Index: src/stored/mount.c +=================================================================== +--- src/stored/mount.c (revision 7204) ++++ src/stored/mount.c (working copy) +@@ -179,9 +179,13 @@ + } + Dmsg2(150, "Ask=%d autochanger=%d\n", ask, autochanger); + +- if (ask && !dir_ask_sysop_to_mount_volume(dcr, ST_APPEND)) { +- Dmsg0(150, "Error return ask_sysop ...\n"); +- goto bail_out; /* error return */ ++ if (ask) { ++ unlock_volumes(); ++ if (!dir_ask_sysop_to_mount_volume(dcr, ST_APPEND)) { ++ Dmsg0(150, "Error return ask_sysop ...\n"); ++ goto no_lock_bail_out; /* error return */ ++ } ++ lock_volumes(); + } + if (job_canceled(jcr)) { + goto bail_out; diff --git a/bacula/patches/2.4.1-sd-crash.patch b/bacula/patches/2.4.1-sd-crash.patch new file mode 100644 index 0000000000..6ac2e4c95a --- /dev/null +++ b/bacula/patches/2.4.1-sd-crash.patch @@ -0,0 +1,30 @@ + + This patch removes an unfortunate piece of debug code that crept into + the 2.4.1 release and causes it to purposely, but incorrectly seg fault + whenever a volume name error occurs. Typically this may happen if a + non-bacula tape is mounted at startup or at the end of volume during + restore. + + Apply the patch with: + + cd + patch -p0 <2.4.1-sd-crash.patch + ./configure + make + ... + make install + + + +Index: src/stored/acquire.c +=================================================================== +--- src/stored/acquire.c (revision 7405) ++++ src/stored/acquire.c (working copy) +@@ -266,7 +266,6 @@ + dev->close(); + } + dev->set_load(); +- ASSERT(0); + /* Fall through */ + default: + Jmsg1(jcr, M_WARNING, 0, "%s", jcr->errmsg); diff --git a/bacula/src/stored/acquire.c b/bacula/src/stored/acquire.c index 471a9a8282..15ce639176 100644 --- a/bacula/src/stored/acquire.c +++ b/bacula/src/stored/acquire.c @@ -266,7 +266,6 @@ bool acquire_device_for_read(DCR *dcr) dev->close(); } dev->set_load(); - ASSERT(0); /* Fall through */ default: Jmsg1(jcr, M_WARNING, 0, "%s", jcr->errmsg); diff --git a/bacula/src/version.h b/bacula/src/version.h index 05dbfba144..da8c98e241 100644 --- a/bacula/src/version.h +++ b/bacula/src/version.h @@ -4,8 +4,8 @@ #undef VERSION #define VERSION "2.5.2" -#define BDATE "18 July 2008" -#define LSMDATE "18Jul08" +#define BDATE "22 July 2008" +#define LSMDATE "22Jul08" #define PROG_COPYRIGHT "Copyright (C) %d-2008 Free Software Foundation Europe e.V.\n" #define BYEAR "2008" /* year for copyright messages in progs */ diff --git a/bacula/technotes-2.5 b/bacula/technotes-2.5 index ad3e964980..b596077fc7 100644 --- a/bacula/technotes-2.5 +++ b/bacula/technotes-2.5 @@ -32,6 +32,9 @@ separator in console (!$%&'()*+,-/:;<>?[]^`{|}~) General: +22Jul08 +kes Remove debug statement that crashes the SD at the end of + a tape during restore. Fixes bug #1125. 21Jul08 kes Implement Win32 bat changes made to Branch-2.4 20Jul08