]> git.sur5r.net Git - bacula/bacula/commitdiff
Apply 1.38.2 changes
authorKern Sibbald <kern@sibbald.com>
Mon, 21 Nov 2005 13:27:23 +0000 (13:27 +0000)
committerKern Sibbald <kern@sibbald.com>
Mon, 21 Nov 2005 13:27:23 +0000 (13:27 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@2609 91ce42f0-d328-0410-95d8-f526ca767f89

23 files changed:
bacula/ChangeLog
bacula/ReleaseNotes
bacula/kernstodo
bacula/kes-1.38
bacula/kes-1.39
bacula/patches/1.38.1-to-1.38.2.patch [new file with mode: 0644]
bacula/patches/patches-1.38.0 [deleted file]
bacula/patches/patches-1.38.1 [new file with mode: 0644]
bacula/projects
bacula/src/dird/catreq.c
bacula/src/dird/msgchan.c
bacula/src/dird/ua_restore.c
bacula/src/dird/ua_run.c
bacula/src/dird/ua_select.c
bacula/src/dird/ua_update.c
bacula/src/filed/acl.c
bacula/src/lib/bnet_server.c
bacula/src/stored/autochanger.c
bacula/src/stored/match_bsr.c
bacula/src/stored/status.c
bacula/src/stored/stored_conf.c
bacula/src/tray-monitor/tray-monitor.c
bacula/src/version.h

index 9c0a48ce2fcfaf0c4ac5f159ad32e0b0ce661451..edd6b404bd1d55ce82c36d1b91dd188c7a32afbc 100644 (file)
@@ -1,6 +1,42 @@
 
+Changes to 1.38.2:
+- Fix crash in tray-monitor when daemon disconnects. Bug #479.
+- Fix bnet-server bug found on OpenBSD. Bug #486
+- Fix cancel failure bug. Bug #481
+- Fix failure when Pool name has spaces. Bug #487   
+- Fix SD crash in autochanger code. Mutex failure. Bug #488
+- Fix a couple of free()s in src/filed/acl.c
+- Fix memory overrun in bfile.c in building OS X resource
+  fork filename. Bug #489 
+- Add Pool name to SD status output.
 
 Changes to 1.38.1:
+- Apply SunOS patch for ACLs submitted by David Duchscher.                  
+- Make sure to set storage before trying to set drive.
+- Add bacula_mail_summary.sh to examples directory. It makes
+  a single email summary of any number of jobs. Submitted
+  by Adrew J. Millar.
+- Make sure when we do a mount to unblock the device even
+  if the drive could not be opened.  
+- Merge Scott's new spec files.
+- Add doc on setting up Win32 environment variable supplied
+  by Kees van den Broek.               
+- Turn off API debug output unless debug set to avoid confusing
+  the user.
+- Add Solaris ACL detection in configure.in as supplied by
+  Attila Fulop. 
+- Implement "autochanger drives" protocol so that Dir knows
+  how many drives an autochanger has.
+- Do not request drive number in label, ... if only one drive.
+- Turn off debug code.
+- Fix update slots to clear slot number of every slot before
+  setting it.  This fixes (I believe) bug #471
+- Make unmount unload the autochanger slot.
+- Modify open() on mount to be read-only and non-blocking,      
+  otherwise the mount can block for a long time.
+- Make a few error message numbers unique.
+- Make a few error messages more correct.
+- Apply patch from Thorsten to fix Win98 stat() command.
 - Remove delete of CVS from all makefiles.
 - Fix seg fault when clicking on Add button in wx-console
   restore panel.  Bug #470.
index ec9badc5e8063d2c216980c63732818536aa8d62..d0efbc54d12433035329da9c9c7cb1927c200358 100644 (file)
@@ -1,12 +1,31 @@
 
-          Release Notes for Bacula 1.38.1
+          Release Notes for Bacula 1.38.2
 
   Bacula code: Total files = 420 Total lines = 138,440 (*.h *.c *.in)
-  20,440 additional lines of code since version 1.36.3
+      20,440 additional lines of code since version 1.36.3
 
-Changes since 1.38.0:
-- Fix autostart install for FreeBSD.
-- Fix several problems with PostgreSQL scripts.   
+Changes to 1.38.2:
+- Fix crash in tray-monitor when daemon disconnects. Bug #479.
+- Fix bnet-server bug found on OpenBSD. Bug #486
+- Fix cancel failure bug. Bug #481
+- Fix failure when Pool name has spaces. Bug #487   
+- Fix SD crash in autochanger code. Mutex failure. Bug #488
+- Fix a couple of free()s in src/filed/acl.c
+- Fix memory overrun in bfile.c in building OS X resource
+  fork filename. Bug #489 
+- Add Pool name to SD status output.
+
+Changes to 1.38.1:
+- Corrected ACL for Solaris (David Duchscher and Attila Fulop).
+- Add bacula_mail_summary.sh to examples directory. It makes
+  a single email summary of any number of jobs. Submitted
+  by Adrew J. Millar.
+- Unmount command now unloads autochanger.
+- Fix hang in FD (Martin Simmons)
+- Fix Win98 stat() problem in FD (Thorsten Engel)
+- Fix update slots which did not clear missing tapes.
+- Fix autostart install for FreeBSD (user reported)
+- Fix several problems with PostgreSQL scripts (Eric Bollinger)
 - Critical: allow restore of the first file of non-portable Win32 backup.
 - Important: with muliple concurrent jobs the autochanger could get
   confused because of a missing mutex.
index cf719e7f0be1f62c1cddaf6f71bd4b83a9d8eeb7..21af52086af85f6e7eabd0d00ce0d3857aa43141 100644 (file)
@@ -1,5 +1,5 @@
                     Kern's ToDo List
-                     03 November 2005
+                     21 November 2005
 
 Major development:      
 Project                     Developer
@@ -7,8 +7,6 @@ Project                     Developer
 Version 1.37                Kern (see below)
 ========================================================
 
-Final items for 1.37 before release:
-
 Document:
 - Does ClientRunAfterJob fail the job on a bad return code?
 - Document cleaning up the spool files:
@@ -18,6 +16,8 @@ Document:
 - Does WildFile match against full name?  Doc.
 
 For 1.39:
+- Make sure that all do_prompt() calls in Dir check for
+  -1 (error) and -2 (cancel) returns.
 - Look at -D_FORTIFY_SOURCE=2
 - Add Win32 FileSet definition somewhere
 - Look at fixing restore status stats in SD.
@@ -27,6 +27,12 @@ For 1.39:
   encountered, read many times (as it currently does), and if the
   block cannot be read, skip to the next block, and try again.  If
   that fails, skip to the next file and try again, ...
+- Add level table:
+  create table LevelType (LevelType binary(1), LevelTypeLong tinyblob);
+  insert into LevelType (LevelType,LevelTypeLong) values
+  ("F","Full"),
+  ("D","Diff"),
+  ("I","Inc");
 - Add ACL to restore only to original location.
 - Add a recursive mark command (rmark) to restore.
 - "Minimum Job Interval = nnn" sets minimum interval between Jobs
@@ -1246,219 +1252,4 @@ Block Position: 0
 ====
 
 
-=== Done
-- Save mount point for directories not traversed with onefs=yes.
-- Add seconds to start and end times in the Job report output.
-- if 2 concurrent backups are attempted on the same tape
-  drive (autoloader) into different tape pools, one of them will exit
-  fatally instead of halting until the drive is idle
-- Update StartTime if job held in Job Queue.
-- Look at www.nu2.nu/pebuilder as a helper for full windows
-  bare metal restore. (done by Scott)
-- Fix orphanned buffers:
-   Orphaned buffer:      24 bytes allocated at line 808 of rufus-dir job.c
-   Orphaned buffer:      40 bytes allocated at line 45 of rufus-dir alist.c
-- Implement Preben's suggestion to add
-  File System Types = ext2, ext3 
-  to FileSets, thus simplifying backup of *all* local partitions.
-- Try to open a device on each Job if it was not opened
-  when the SD started.
-- Add dump of VolSessionId/Time and FileIndex with bls.
-- If Bacula does not find the right tape in the Autochanger,
-  then mark the tape in error and move on rather than asking
-  for operator intervention.
-- Cancel command should include JobId in list of Jobs.
-- Add performance testing hooks
-- Bootstrap from JobMedia records.
-- Implement WildFile and WildDir to solve problem of 
-  saving only *.doc files.
-- Fix
-   Please use the "label"  command to create a new Volume for:
-       Storage:      DDS-4-changer
-       Media type:   
-       Pool:         Default
-   label
-   The defined Storage resources are:
-- Copy Changer Device and Changer Command from Autochanger
-  to Device resource in SD if none given in Device resource.
-- 1. Automatic use of more than one drive in an autochanger (done)
-- 2. Automatic selection of the correct drive for each Job (i.e.
-     selects a drive with an appropriate Volume for the Job) (done)
-- 6. Allow multiple simultaneous Jobs referencing the same pool write
-    to several tapes (some new directive(s) are are probably needed for
-    this) (done)
-- Locking (done)
-- Key on Storage rather than Pool (done)
-- Allow multiple drives to use same Pool (change jobq.c DIR) (done).
-- Synchronize multiple drives so that not more
-  than one loads a tape and any time (done)
-- 4. Use Changer Device and Changer Command specified in the
-     Autochanger resource, if none is found in the Device resource.
-    You can continue to specify them in the Device resource if you want
-    or need them to be different for each device.
-- 5. Implement a new Device directive (perhaps "Autoselect = yes/no") 
-    that can allow a Device be part of an Autochanger, and hence the changer
-    script protected, but if set to no, will prevent the Device from being 
-    automatically selected from the changer. This allows the device to
-    be directly accessed through its Device name, but not through the
-    AutoChanger name.
-#6   Select one from among Multiple Storage Devices for Job
-#5   Events that call a Python program 
-     (Implemented in Dir/SD)
-- Make sure the Device name is in the Query packet returned.
-- Don't start a second file job if one is already running.
-- Implement EOF/EOV labels for ANSI labels
-- Implement IBM labels.
-- When Python creates a new label, the tape is immediately
-  recycled and no label created. This happens when using   
-  autolabeling -- even when Python doesn't generate the name.
-- Scratch Pool where the volumes can be re-assigned to any Pool.
-- 28-Mar 23:19 rufus-sd: acquire.c:379 Device "DDS-4" (/dev/nst0) 
-  is busy reading. Job 6 canceled.
-- Remove separate thread for opening devices in SD.  On the other
-  hand, don't block waiting for open() for devices.
-- Fix code to either handle updating NumVol or to calculate it in
-  Dir next_vol.c
-- Ensure that you cannot exclude a directory or a file explicitly
-  Included with File.
-#4   Embedded Python Scripting 
-     (Implemented in Dir/SD/FD)
-- Add Python writable variable for changing the Priority,
-    Client, Storage, JobStatus (error), ...
-- SD Python
-  - Solicit Events
-- Add disk seeking on restore; turn off seek on tapes.
-  stored/match_bsr.c
-- Look at dird_conf.c:1000: warning: `int size' 
-  might be used uninitialized in this function
-- Indicate when a Job is purged/pruned during restore.
-- Implement some way to turn off automatic pruning in Jobs.
-- Implement a way an Admin Job can prune, possibly multiple
-  clients -- Python script?
-- Look at Preben's acl.c error handling code.
-- SD crashes after a tape restore then doing a backup. 
-- If drive is opened read/write, close it and re-open
-  read-only if doing a restore, and vice-versa.
-- Windows restore:
-  data-fd: RestoreFiles.2004-12-07_15.56.42 Error:
-  > ..\findlib\../../findlib/create_file.c:275 Could not open e:/: ERR=Der
-  > Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen
-  > Prozess verwendet wird.
-  Restore restores all files, but then fails at the end trying
-  to set the attributes of e:
-  from failed jobs.- Resolve the problem between Device name and Archive name,
-  and fix SD messages.
-- Tell the "restore" user when browsing is no longer possible.
-- Add a restore directory-x
-- Write non-optimized bsrs from the JobMedia and Media records,
-  even after Files are pruned.
-- Delete Stripe and Copy from VolParams to save space.
-- Fix option 2 of restore -- list where file is backed up -- require Client,
-  then list last 20 backups.
-- Finish implementation of passing all Storage and Device needs to
-  the SD.
-- Move test for max wait time exceeded in job.c up -- Peter's idea.
-##   Consider moving docs to their own project.
-##   Move rescue to its own project.
-- Add client version to the Client name line that prints in
-  the Job report.
-- Fix the Rescue CDROM.
-- By the way: on page http://www.bacula.org/?page=tapedrives , at the 
-  bottom, the link to "Tape Testing Chapter" is broken. It goes to 
-  /html-manual/... while the others point to /rel-manual/...
-- Device resource needs the "name" of the SD.
-- Specify a single directory to restore.
-- Implement MediaType keyword in bsr?   
-- Add a date and time stamp at the beginning of every line in the 
-  Job report (Volker Sauer).
-- Add level to estimate command.
-- Add "limit=n" for "list jobs"
-- Make bootstrap filename unique.
-- Make Dmsg look at global before calling subroutine.
-- From Chris Hull:
-   it seems to be complaining about 12:00pm which should be a valid 12
-   hour time.  I changed the time to 11:59am and everything works fine.
-   Also 12:00am works fine.  0:00pm also works (which I don't think
-   should).  None of the values 12:00pm - 12:59pm work for that matter.
-- Require restore via the restore command or make a restore Job
-  get the bootstrap file.
-- Implement Maximum Job Spool Size
-- Fix 3993 error in SD. It forgets to look at autochanger
-  resource for device command, ...
-- 3. Prevent two drives requesting the same Volume in any given
-     autochanger, by checking if a Volume is mounted on another drive
-     in an Autochanger.
-- Upgrade to MySQL 4.1.12 See:  
-  http://dev.mysql.com/doc/mysql/en/Server_SQL_mode.html
-- Add # Job Level date to bsr file
-- Implement "PreferMountedVolumes = yes|no" in Job resource.
-##   Integrate web-bacula into a new Bacula project with
-     bimagemgr.
-- Cleaning tapes should have Status "Cleaning" rather than append.
-- Make sure that Python has access to Client address/port so that
-  it can check if Clients are alive.
-- Review all items in "restore".
-- Fix PostgreSQL GROUP BY problems in restore.
-- Fix PostgreSQL sql problems in bugs.
-- After rename
-  04-Jul 13:01 MainSD: Rufus.2005-07-04_01.05.02 Warning: Director wanted Volume 
-     "DLT-13Feb04".
-  Current Volume "DLT-04Jul05" not acceptable because:
-  1997 Volume "DLT-13Feb04" not in catalog.
-  04-Jul 13:01 MainSD: Please mount Volume "DLT-04Jul05" on Storage Device 
-     "HP DLT 80" (/dev/nst0) for Job Rufus.2005-07-04_01.05.02
-##   Create a new GUI chapter explaining all the GUI programs.
--    Make "update slots" when pointing to Autochanger, remove
-     all Volumes from other drives.  "update slots all-drives"?
-     No, this is done by modifying mtx-changer to list what is
-     in the drives.
-- Finish TLS implementation.
-- Port limiting -m in iptables to prevent DoS attacks
-  could cause broken pipes on Bacula.
-6. Build and test the Volume Shadow Copy (VSS) for Win32. 
--  Allow cancel of unknown Job
--  State not saved when closing Win32 FD by icon
--  bsr-opt-test fails. bsr deleted. Fix.
--  Move Python daemon variables from Job to Bacula object.
-   WorkingDir, ConfigFile
-- Document that Bootstrap files can be written with cataloging
-  turned off.
-- Document details of ANSI/IBM labels
-- OS linux 2.4
-  1) ADIC, DLT, FastStor 4000, 7*20GB
-- Linux Sony LIB-D81, AIT-3 library works.
-- Doc the following
-  to activate, check or disable the hardware compression feature on my 
-  exb-8900 i use the exabyte "MammothTool" you can get it here:
-  http://www.exabyte.com/support/online/downloads/index.cfm
-  There is a solaris version of this tool. With option -C 0 or 1 you can 
-  disable or activate compression. Start this tool without any options for 
-  a small reference.
-- Document Heartbeat Interval in the dealing with firewalls section.
-- Document new CDROM directory.
-- On Win32 working directory must have drive letter ????
-- On Win32 working directory must be writable by SYSTEM to
-  do restores.
-- Document that ChangerDevice is used for Alert command.
-- Add better documentation on how restores can be done
-8. Take one more try at making DVD writing work (no go)
-7. Write a bacula-web document
-- Why isn't the DEVICE structure defined when doing
-  a reservation?
-- Multi-drive changer seems to only use drive 0
-  Multiple drives don't seem to be opened.
-- My database is growing
-- Call GetLastError() in the berrno constructor rather
-  than delaying until strerror.
-- Tape xxx in drive 0, requested in drive 1
-- The mount command does not work with drives other than 0.
-- A mount should cause the SD to re-examine what Slot is   
-  loaded.
-- The SD locks on to the first available drive then
-  wants a Volume that is released but in another drive --
-  chaos.
-- Run the regression scripts on Solaris and FreeBSD
--  Figure out how to package gui, and rescue programs.
-- Add a .dir command to restore tree code to eliminate the problem
-- Mount after manually unloading changer causes hang in SD
-- Fix JobACL with restore by JobId.
+=== Done -- see kernsdone
index e5b0f313e2873cf28b4b9df05ccb5fa63829c7da..ead3818bdae7c1f9c250c087c4d348b7429a0dd7 100644 (file)
@@ -3,6 +3,18 @@
 
 General:
 
+Changes to 1.38.2:
+20Oct05
+- Fix crash in tray-monitor when daemon disconnects. Bug #479.
+- Fix bnet-server bug found on OpenBSD. Bug #486
+- Fix cancel failure bug. Bug #481
+- Fix failure when Pool name has spaces. Bug #487   
+- Fix SD crash in autochanger code. Mutex failure. Bug #488
+- Fix a couple of free()s in src/filed/acl.c
+- Fix memory overrun in bfile.c in building OS X resource
+  fork filename. Bug #489 
+- Add Pool name to SD status output.
+
 Changes to 1.38.1:
 14Oct05
 - Apply SunOS patch for ACLs submitted by David Duchscher.                  
index 5b12fec13ca50282a552a8517fb44ac94801676b..35a3086a9879fbd4e7cbc57c93082f2587d7e3ab 100644 (file)
@@ -4,6 +4,24 @@
 General:
 
 Changes to 1.39.0:
+20Oct05
+- Fix crash in tray-monitor when daemon disconnects. Bug #479.
+- Fix bnet-server bug found on OpenBSD. Bug #486
+- Fix cancel failure bug. Bug #481
+- Fix failure when Pool name has spaces. Bug #487   
+- Fix SD crash in autochanger code. Mutex failure. Bug #488
+- Fix a couple of free()s in src/filed/acl.c
+- Fix memory overrun in bfile.c in building OS X resource
+  fork filename. Bug #489 
+- Add Pool name to SD status output.
+14Oct05
+- Apply SunOS patch for ACLs submitted by David Duchscher.                  
+- Make sure to set storage before trying to set drive.
+- Add bacula_mail_summary.sh to examples directory. It makes
+  a single email summary of any number of jobs. Submitted
+  by Adrew J. Millar.
+- Make sure when we do a mount to unblock the device even
+  if the drive could not be opened.  
 13Oct05
 - Remove the USE_WIN32STREAMEXTRACTION #defines (always on)
   and correct a few minor problems to make it build on Linux.
diff --git a/bacula/patches/1.38.1-to-1.38.2.patch b/bacula/patches/1.38.1-to-1.38.2.patch
new file mode 100644 (file)
index 0000000..3c8e9b6
--- /dev/null
@@ -0,0 +1,412 @@
+
+ This patch fixes the following bugs:
+
+- Fix crash in tray-monitor when daemon disconnects. Bug #479.
+- Fix bnet-server bug found on OpenBSD. Bug #486 (bug originator
+  says that this patch does not fix his problem)
+- Fix cancel failure bug. Bug #481
+- Fix failure when Pool name has spaces. Bug #487
+- Fix SD crash in autochanger code. Mutex failure. Bug #488
+- Fix a couple of free()s in src/filed/acl.c
+- Fix memory overrun in bfile.c in building OS X resource
+  fork filename. Bug #489
+
+This patch is applied to Bacula source version 1.38.1 and will
+produce Bacula source version 1.38.2.  Apply it with:
+
+   cd <bacula-1.38.1-source>
+   ./configure (your options) if not already done
+   patch -p0 <1.38.1-to-1.38.2.patch
+   make
+   make install
+
+Index: kes-1.38
+===================================================================
+RCS file: /cvsroot/bacula/bacula/kes-1.38,v
+retrieving revision 1.1.2.13
+diff -u -r1.1.2.13 kes-1.38
+--- kes-1.38   14 Nov 2005 20:20:38 -0000      1.1.2.13
++++ kes-1.38   21 Nov 2005 12:53:36 -0000
+@@ -3,6 +3,17 @@
+ General:
++Changes after release of 1.38.1:
++20Oct05
++- Fix crash in tray-monitor when daemon disconnects. Bug #479.
++- Fix bnet-server bug found on OpenBSD. Bug #486
++- Fix cancel failure bug. Bug #481
++- Fix failure when Pool name has spaces. Bug #487   
++- Fix SD crash in autochanger code. Mutex failure. Bug #488
++- Fix a couple of free()s in src/filed/acl.c
++- Fix memory overrun in bfile.c in building OS X resource
++  fork filename. Bug #489 
++
+ Changes to 1.38.1:
+ 14Oct05
+ - Apply SunOS patch for ACLs submitted by David Duchscher.                  
+Index: src/version.h
+===================================================================
+RCS file: /cvsroot/bacula/bacula/src/version.h,v
+retrieving revision 1.554.2.14
+diff -u -r1.554.2.14 version.h
+--- src/version.h      14 Nov 2005 14:21:58 -0000      1.554.2.14
++++ src/version.h      21 Nov 2005 12:53:37 -0000
+@@ -3,9 +3,9 @@
+  */
+ #undef  VERSION
+-#define VERSION "1.38.1"
+-#define BDATE   "14 November 2005"
+-#define LSMDATE "14Nov05"
++#define VERSION "1.38.2"
++#define BDATE   "20 November 2005"
++#define LSMDATE "20Nov05"
+ /* Debug flags */
+ #undef  DEBUG
+Index: src/dird/catreq.c
+===================================================================
+RCS file: /cvsroot/bacula/bacula/src/dird/catreq.c,v
+retrieving revision 1.77.2.1
+diff -u -r1.77.2.1 catreq.c
+--- src/dird/catreq.c  26 Oct 2005 14:02:04 -0000      1.77.2.1
++++ src/dird/catreq.c  21 Nov 2005 12:53:37 -0000
+@@ -10,7 +10,7 @@
+  *  Basic tasks done here:
+  *      Handle Catalog services.
+  *
+- *   Version $Id: catreq.c,v 1.77.2.1 2005/10/26 14:02:04 kerns Exp $
++ *   Version $Id: catreq.c,v 1.79 2005/10/11 20:40:52 kerns Exp $
+  */
+ /*
+    Copyright (C) 2001-2005 Kern Sibbald
+@@ -117,6 +117,7 @@
+    if (sscanf(bs->msg, Find_media, &Job, &index, &pool_name, &mr.MediaType) == 4) {
+       memset(&pr, 0, sizeof(pr));
+       bstrncpy(pr.Name, pool_name, sizeof(pr.Name));
++      unbash_spaces(pr.Name);
+       ok = db_get_pool_record(jcr, jcr->db, &pr);
+       if (ok) {
+          mr.PoolId = pr.PoolId;
+Index: src/dird/ua_restore.c
+===================================================================
+RCS file: /cvsroot/bacula/bacula/src/dird/ua_restore.c,v
+retrieving revision 1.101.2.1
+diff -u -r1.101.2.1 ua_restore.c
+--- src/dird/ua_restore.c      26 Oct 2005 14:02:04 -0000      1.101.2.1
++++ src/dird/ua_restore.c      21 Nov 2005 12:53:37 -0000
+@@ -10,7 +10,7 @@
+  *
+  *     Kern Sibbald, July MMII
+  *
+- *   Version $Id: ua_restore.c,v 1.101.2.1 2005/10/26 14:02:04 kerns Exp $
++ *   Version $Id: ua_restore.c,v 1.102 2005/10/25 17:06:42 kerns Exp $
+  */
+ /*
+    Copyright (C) 2002-2005 Kern Sibbald
+@@ -573,6 +573,7 @@
+          }
+          return 2;
++      case -2:                        /* Period entered to cancel */
+       case 11:                        /* Cancel or quit */
+          return 0;
+       }
+Index: src/dird/ua_run.c
+===================================================================
+RCS file: /cvsroot/bacula/bacula/src/dird/ua_run.c,v
+retrieving revision 1.71
+diff -u -r1.71 ua_run.c
+--- src/dird/ua_run.c  10 Aug 2005 16:35:19 -0000      1.71
++++ src/dird/ua_run.c  21 Nov 2005 12:53:38 -0000
+@@ -851,6 +851,8 @@
+             bsendmsg(ua, _("You must set the bootstrap file to NULL to be able to specify a JobId.\n"));
+          }
+          goto try_again;
++      case -1:                        /* error or cancel */
++         goto bail_out;
+       default:
+          goto try_again;
+       }
+Index: src/dird/ua_select.c
+===================================================================
+RCS file: /cvsroot/bacula/bacula/src/dird/ua_select.c,v
+retrieving revision 1.65.2.1
+diff -u -r1.65.2.1 ua_select.c
+--- src/dird/ua_select.c       12 Nov 2005 17:30:52 -0000      1.65.2.1
++++ src/dird/ua_select.c       21 Nov 2005 12:53:39 -0000
+@@ -4,7 +4,7 @@
+  *
+  *     Kern Sibbald, October MMI
+  *
+- *   Version  $Id: ua_select.c,v 1.65.2.1 2005/11/12 17:30:52 kerns Exp $
++ *   Version  $Id: ua_select.c,v 1.66 2005/11/12 17:31:19 kerns Exp $
+  */
+ /*
+    Copyright (C) 2001-2005 Kern Sibbald
+@@ -149,7 +149,9 @@
+       }
+    }
+    UnlockRes();
+-   do_prompt(ua, _("Storage"),  _("Select Storage resource"), name, sizeof(name));
++   if (do_prompt(ua, _("Storage"),  _("Select Storage resource"), name, sizeof(name)) < 0) {
++      return NULL;
++   }
+    store = (STORE *)GetResWithName(R_STORAGE, name);
+    return store;
+ }
+@@ -170,7 +172,9 @@
+       }
+    }
+    UnlockRes();
+-   do_prompt(ua, _("FileSet"), _("Select FileSet resource"), name, sizeof(name));
++   if (do_prompt(ua, _("FileSet"), _("Select FileSet resource"), name, sizeof(name)) < 0) {
++      return NULL;
++   }
+    fs = (FILESET *)GetResWithName(R_FILESET, name);
+    return fs;
+ }
+@@ -202,7 +206,9 @@
+          }
+       }
+       UnlockRes();
+-      do_prompt(ua, _("Catalog"),  _("Select Catalog resource"), name, sizeof(name));
++      if (do_prompt(ua, _("Catalog"),  _("Select Catalog resource"), name, sizeof(name)) < 0) {
++         return NULL;
++      }
+       catalog = (CAT *)GetResWithName(R_CATALOG, name);
+    }
+    return catalog;
+@@ -225,7 +231,9 @@
+       }
+    }
+    UnlockRes();
+-   do_prompt(ua, _("Job"), _("Select Job resource"), name, sizeof(name));
++   if (do_prompt(ua, _("Job"), _("Select Job resource"), name, sizeof(name)) < 0) {
++      return NULL;
++   }
+    job = (JOB *)GetResWithName(R_JOB, name);
+    return job;
+ }
+@@ -246,7 +254,9 @@
+       }
+    }
+    UnlockRes();
+-   do_prompt(ua, _("Job"), _("Select Restore Job"), name, sizeof(name));
++   if (do_prompt(ua, _("Job"), _("Select Restore Job"), name, sizeof(name)) < 0) {
++      return NULL;
++   }
+    job = (JOB *)GetResWithName(R_JOB, name);
+    return job;
+ }
+@@ -269,7 +279,9 @@
+       }
+    }
+    UnlockRes();
+-   do_prompt(ua, _("Client"),  _("Select Client (File daemon) resource"), name, sizeof(name));
++   if (do_prompt(ua, _("Client"),  _("Select Client (File daemon) resource"), name, sizeof(name)) < 0) {
++      return NULL;
++   }
+    client = (CLIENT *)GetResWithName(R_CLIENT, name);
+    return client;
+ }
+@@ -551,7 +563,9 @@
+       }
+    }
+    UnlockRes();
+-   do_prompt(ua, _("Pool"), _("Select Pool resource"), name, sizeof(name));
++   if (do_prompt(ua, _("Pool"), _("Select Pool resource"), name, sizeof(name)) < 0) {
++      return NULL;
++   }
+    pool = (POOL *)GetResWithName(R_POOL, name);
+    return pool;
+ }
+@@ -673,12 +687,16 @@
+  *  Returns: -1 on error
+  *            index base 0 on success, and choice
+  *               is copied to prompt if not NULL
++ *             prompt is set to the chosen prompt item string
+  */
+ int do_prompt(UAContext *ua, const char *automsg, const char *msg, char *prompt, int max_prompt)
+ {
+    int i, item;
+    char pmsg[MAXSTRING];
++   if (prompt) {
++      *prompt = 0;
++   }
+    if (ua->num_prompts == 2) {
+       item = 1;
+       if (prompt) {
+@@ -698,15 +716,11 @@
+       bsendmsg(ua, "%6d: %s\n", i, ua->prompt[i]);
+    }
+-   if (prompt) {
+-      *prompt = 0;
+-   }
+-
+    for ( ;; ) {
+       /* First item is the prompt string, not the items */
+       if (ua->num_prompts == 1) {
+          bsendmsg(ua, _("Selection is empty!\n"));
+-         item = 0;                    /* list is empty ! */
++         item = -1;                    /* list is empty ! */
+          break;
+       }
+       if (ua->num_prompts == 2) {
+@@ -741,7 +755,7 @@
+       free(ua->prompt[i]);
+    }
+    ua->num_prompts = 0;
+-   return item - 1;
++   return item>0 ? item-1 : item;
+ }
+Index: src/dird/ua_update.c
+===================================================================
+RCS file: /cvsroot/bacula/bacula/src/dird/ua_update.c,v
+retrieving revision 1.7
+diff -u -r1.7 ua_update.c
+--- src/dird/ua_update.c       28 Aug 2005 12:22:02 -0000      1.7
++++ src/dird/ua_update.c       21 Nov 2005 12:53:39 -0000
+@@ -590,7 +590,7 @@
+          update_all_vols_from_pool(ua);
+          return 1;
+       default:                        /* Done or error */
+-         bsendmsg(ua, _("Selection done.\n"));
++         bsendmsg(ua, _("Selection terminated.\n"));
+          return 1;
+       }
+    }
+Index: src/filed/acl.c
+===================================================================
+RCS file: /cvsroot/bacula/bacula/src/filed/acl.c,v
+retrieving revision 1.10.2.1
+diff -u -r1.10.2.1 acl.c
+--- src/filed/acl.c    14 Nov 2005 20:20:38 -0000      1.10.2.1
++++ src/filed/acl.c    21 Nov 2005 12:53:39 -0000
+@@ -26,7 +26,7 @@
+  *
+  *   Written by Preben 'Peppe' Guldberg, December MMIV
+  *
+- *   Version $Id: acl.c,v 1.10.2.1 2005/11/14 20:20:38 kerns Exp $
++ *   Version $Id: acl.c,v 1.11 2005/11/14 20:20:20 kerns Exp $
+  */
+ /*
+    Copyright (C) 2004-2005 Kern Sibbald
+@@ -140,7 +140,7 @@
+    if ((acl_text = acl_get(jcr->last_fname)) != NULL) {
+       len = pm_strcpy(jcr->acl_text, acl_text);
+-      free(acl_text);
++      actuallyfree(acl_text);
+       return len;
+    }
+    return -1;
+@@ -270,7 +270,7 @@
+    if ((n = getacl(jcr->last_fname, n, acls)) > 0) {
+       if ((acl_text = acltostr(n, acls, FORM_SHORT)) != NULL) {
+          len = pm_strcpy(jcr->acl_text, acl_text);
+-         free(acl_text);
++         actuallyfree(acl_text);
+          return len;
+       }
+    }
+Index: src/findlib/bfile.c
+===================================================================
+RCS file: /cvsroot/bacula/bacula/src/findlib/bfile.c,v
+retrieving revision 1.40
+diff -u -r1.40 bfile.c
+--- src/findlib/bfile.c        10 Aug 2005 16:35:19 -0000      1.40
++++ src/findlib/bfile.c        21 Nov 2005 12:53:39 -0000
+@@ -623,13 +623,10 @@
+ int bopen_rsrc(BFILE *bfd, const char *fname, int flags, mode_t mode)
+ {
+    POOLMEM *rsrc_fname;
+-   size_t fname_len;
+-   fname_len = strlen(fname);
+    rsrc_fname = get_pool_memory(PM_FNAME);
+-   bstrncpy(rsrc_fname, fname, fname_len + 1);
+-   bstrncpy(rsrc_fname + fname_len, _PATH_RSRCFORKSPEC,
+-      strlen(_PATH_RSRCFORKSPEC) + 1);
++   pm_strcpy(rsrc_fname, fname);
++   pm_strcat(rsrc_fname, _PATH_RSRCFORKSPEC);
+    bopen(bfd, rsrc_fname, flags, mode);
+    free_pool_memory(rsrc_fname);
+    return bfd->fid;
+Index: src/lib/bnet_server.c
+===================================================================
+RCS file: /cvsroot/bacula/bacula/src/lib/bnet_server.c,v
+retrieving revision 1.39
+diff -u -r1.39 bnet_server.c
+--- src/lib/bnet_server.c      18 Aug 2005 15:37:40 -0000      1.39
++++ src/lib/bnet_server.c      21 Nov 2005 12:53:39 -0000
+@@ -153,7 +153,6 @@
+          /* Error, get out */
+          foreach_dlist(fd_ptr, &sockfds) {
+             close(fd_ptr->fd);
+-            free((void *)fd_ptr);
+          }
+          Emsg1(M_FATAL, 0, _("Error in select: %s\n"), be.strerror());
+          break;
+Index: src/stored/autochanger.c
+===================================================================
+RCS file: /cvsroot/bacula/bacula/src/stored/autochanger.c,v
+retrieving revision 1.47.2.3
+diff -u -r1.47.2.3 autochanger.c
+--- src/stored/autochanger.c   12 Nov 2005 17:30:53 -0000      1.47.2.3
++++ src/stored/autochanger.c   21 Nov 2005 12:53:39 -0000
+@@ -4,7 +4,7 @@
+  *
+  *   Kern Sibbald, August MMII
+  *                            
+- *   Version $Id: autochanger.c,v 1.47.2.3 2005/11/12 17:30:53 kerns Exp $
++ *   Version $Id: autochanger.c,v 1.51 2005/11/12 17:31:19 kerns Exp $
+  */
+ /*
+    Copyright (C) 2002-2005 Kern Sibbald
+@@ -163,6 +163,7 @@
+             rtn_stat = -1;            /* hard error */
+          }
+          Dmsg2(400, "load slot %d status=%d\n", slot, status);
++         unlock_changer(dcr);
+       } else {
+          status = 0;                  /* we got what we want */
+          dev->Slot = slot;            /* set currently loaded slot */
+@@ -174,7 +175,6 @@
+    } else {
+       rtn_stat = 0;                   /* no changer found */
+    }
+-   unlock_changer(dcr);
+    free_pool_memory(changer);
+    return rtn_stat;
+Index: src/tray-monitor/tray-monitor.c
+===================================================================
+RCS file: /cvsroot/bacula/bacula/src/tray-monitor/tray-monitor.c,v
+retrieving revision 1.25.2.1
+diff -u -r1.25.2.1 tray-monitor.c
+--- src/tray-monitor/tray-monitor.c    1 Oct 2005 10:20:18 -0000       1.25.2.1
++++ src/tray-monitor/tray-monitor.c    21 Nov 2005 12:53:39 -0000
+@@ -4,7 +4,7 @@
+  *
+  *     Nicolas Boichat, August MMIV
+  *
+- *     Version $Id: tray-monitor.c,v 1.25.2.1 2005/10/01 10:20:18 kerns Exp $
++ *     Version $Id: tray-monitor.c,v 1.26 2005/09/28 19:24:57 kerns Exp $
+  */
+ /*
+@@ -881,7 +881,7 @@
+       }
+       if (item->D_sock == NULL) {
+-         g_slist_append(*list, (void *)_("Cannot connect to daemon.\n"));
++         g_slist_append(*list, g_string_new(_("Cannot connect to daemon.\n")));
+          changeStatusMessage(item, _("Cannot connect to daemon."));
+          item->state = error;
+          item->oldstate = error;
diff --git a/bacula/patches/patches-1.38.0 b/bacula/patches/patches-1.38.0
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/bacula/patches/patches-1.38.1 b/bacula/patches/patches-1.38.1
new file mode 100644 (file)
index 0000000..8e815b0
--- /dev/null
@@ -0,0 +1,14 @@
+20Nov05 1.38.1-to-1.38.2.patch
+ This patch fixes the following bugs:
+
+- Fix crash in tray-monitor when daemon disconnects. Bug #479.
+- Fix bnet-server bug found on OpenBSD. Bug #486 (bug originator
+  says this patch does not fix his problem)
+- Fix cancel failure bug. Bug #481
+- Fix failure when Pool name has spaces. Bug #487
+- Fix SD crash in autochanger code. Mutex failure. Bug #488
+- Fix a couple of free()s in src/filed/acl.c
+- Fix memory overrun in bfile.c in building OS X resource
+  fork filename. Bug #489
+                         
+  
index d0afba414c93bd7c02e377c3527f2ed47def5cbd..a671a88ee11eb6991efed937ab35edcee1607183 100644 (file)
@@ -361,6 +361,43 @@ Item 16:  Directive/mode to backup only file changes, not entire file
   Notes:  This would require the usage of disk-based volumes as comparing 
           files would not be feasible using a tape drive.
 
+Item 17:  Quick release of FD-SD connection
+  Origin: Frank Volf (frank at deze dot org)
+  Date:   17 november 2005
+  Status:
+
+   What:  In the bacula implementation a backup is finished after all data
+          and attributes are succesfully written to storage.  When using a
+          tape backup it is very annoying that a backup can take a day,
+          simply because the current tape (or whatever) is full and the
+          administrator has not put a new one in.  During that time the
+          system cannot be taken off-line, because there is still an open
+          session between the storage daemon and the file daemon on the
+          client.
+
+          Although this is a very good strategey for making "safe backups"
+          This can be annoying for e.g.  laptops, that must remain
+          connected until the bacukp is completed.
+
+          Using a new feature called "migration" it will be possible to
+          spool first to harddisk (using a special 'spool' migration
+          scheme) and then migrate the backup to tape.
+
+          There is still the problem of getting the attributes committed.
+          If it takes a very long time to do, with the current code, the
+          job has not terminated, and the File daemon is not freed up.  The
+          Storage daemon should release the File daemon as soon as all the
+          file data and all the attributes have been sent to it (the SD).
+          Currently the SD waits until everything is on tape and all the
+          attributes are transmitted to the Director before signalling
+          completion to the FD. I don't think I would have any problem
+          changing this.  The reason is that even if the FD reports back to
+          the Dir that all is OK, the job will not terminate until the SD
+          has done the same thing -- so in a way keeping the SD-FD link
+          open to the very end is not really very productive ...
+
+   Why:   Makes backup of laptops much easier.
+
 
 ============= Empty RFC form ===========
 Item n:   One line summary ...
@@ -376,33 +413,4 @@ Item n:   One line summary ...
 ============== End RFC form ==============
 
 
-Items completed for release 1.38.0:
-#4   Embedded Python Scripting (implemented in all Daemons)
-#5   Events that call a Python program (Implemented in all
-       daemons, but more cleanup work to be done).
-#6   Select one from among Multiple Storage Devices for Job.
-       This is already implemented in 1.37.
-#7   Single Job Writing to Multiple Storage Devices. This is
-       currently implemented with a Clone feature.
-#-   Full multiple drive Autochanger support (done in 1.37)
-#-   Built in support for communications encryption (TLS) 
-       done by Landon Fuller.
-#    Support for Unicode characters
-       (via UTF-8) on Win32 machines thanks to Thorsten Engel.
-Item  8:  Break the one-to-one Relationship between a Job and a
-          Specific Storage Device (or Devices if #10 is implemented).
-
-Completed items from last year's list:
-Item 1:   Multiple simultaneous Jobs. (done)
-Item 3:   Write the bscan program -- also write a bcopy program (done).
-Item 5:   Implement Label templates (done).
-Item 6:   Write a regression script (done)
-Item 9:   Add SSL to daemon communications (done by Landon Fuller)
-Item 10:  Define definitive tape format (done)
-Item 3:   GUI for interactive restore. Partially Implemented in 1.34
-          Note, there is now a complete Webmin plugin, a partial
-          GNOME console, and an excellent wx-console GUI.
-Item 4:   GUI for interactive backup
-Item 2:   Job Data Spooling.
-    Done: Regular expression matching.
-Item 10:  New daemon communication protocol (this has been dropped).
+Items completed for release 1.38.0 -- see kernsdone
index 93d1e3143bfb58ad056ce8a4138aa6858c18d4e5..2f6a34053aae6b4bc95f08e2a22b7aedf174ee6f 100644 (file)
@@ -117,6 +117,7 @@ void catalog_request(JCR *jcr, BSOCK *bs)
    if (sscanf(bs->msg, Find_media, &Job, &index, &pool_name, &mr.MediaType) == 4) {
       memset(&pr, 0, sizeof(pr));
       bstrncpy(pr.Name, pool_name, sizeof(pr.Name));
+      unbash_spaces(pr.Name);
       ok = db_get_pool_record(jcr, jcr->db, &pr);
       if (ok) {
          mr.PoolId = pr.PoolId;
index 9da9150771622c76305603fcbdca15b57bf555cd..fbe9d5e13607daf8986b990705a610f6a75dc3e7 100644 (file)
@@ -180,10 +180,8 @@ int start_storage_daemon_job(JCR *jcr, alist *store, int append)
     *  associated with each Storage. It selects the first
     *  available one.
     *
-    * Note, the outer loop is not yet implemented.
     */
    foreach_alist(storage, store) {
-//    storage = (STORE *)store->first();
       pm_strcpy(store_name, storage->hdr.name);
       bash_spaces(store_name);
       pm_strcpy(media_type, storage->media_type);
index b2cf3b58d135600a5ece0572b3250863ae4fed08..e1578c1eba854d0425a419c2cadab9ca9a30cb50 100644 (file)
@@ -409,7 +409,7 @@ static int user_select_jobids_or_files(UAContext *ua, RESTORE_CTX *rx)
       }
       done = true;
       switch (do_prompt(ua, "", _("Select item: "), NULL, 0)) {
-      case -1:                        /* error */
+      case -1:                        /* error or cancel */
          return 0;
       case 0:                         /* list last 20 Jobs run */
          gui_save = ua->jcr->gui;
index 2373114527d2c16cce9bdff8084e010c355cde8b..189bb48c34e5f04af7c88bc36bfd667b633076a1 100644 (file)
@@ -851,6 +851,8 @@ try_again:
             bsendmsg(ua, _("You must set the bootstrap file to NULL to be able to specify a JobId.\n"));
          }
          goto try_again;
+      case -1:                        /* error or cancel */
+         goto bail_out;
       default:
          goto try_again;
       }
index dd529eac4b3384b0b4057d9f1588f9292275b836..1a5df789aa4da96a7fb368c76dee693c4365e835 100644 (file)
@@ -149,7 +149,9 @@ STORE *select_storage_resource(UAContext *ua)
       }
    }
    UnlockRes();
-   do_prompt(ua, _("Storage"),  _("Select Storage resource"), name, sizeof(name));
+   if (do_prompt(ua, _("Storage"),  _("Select Storage resource"), name, sizeof(name)) < 0) {
+      return NULL;
+   }
    store = (STORE *)GetResWithName(R_STORAGE, name);
    return store;
 }
@@ -170,7 +172,9 @@ FILESET *select_fileset_resource(UAContext *ua)
       }
    }
    UnlockRes();
-   do_prompt(ua, _("FileSet"), _("Select FileSet resource"), name, sizeof(name));
+   if (do_prompt(ua, _("FileSet"), _("Select FileSet resource"), name, sizeof(name)) < 0) {
+      return NULL;
+   }
    fs = (FILESET *)GetResWithName(R_FILESET, name);
    return fs;
 }
@@ -202,7 +206,9 @@ CAT *get_catalog_resource(UAContext *ua)
          }
       }
       UnlockRes();
-      do_prompt(ua, _("Catalog"),  _("Select Catalog resource"), name, sizeof(name));
+      if (do_prompt(ua, _("Catalog"),  _("Select Catalog resource"), name, sizeof(name)) < 0) {
+         return NULL;
+      }
       catalog = (CAT *)GetResWithName(R_CATALOG, name);
    }
    return catalog;
@@ -225,7 +231,9 @@ JOB *select_job_resource(UAContext *ua)
       }
    }
    UnlockRes();
-   do_prompt(ua, _("Job"), _("Select Job resource"), name, sizeof(name));
+   if (do_prompt(ua, _("Job"), _("Select Job resource"), name, sizeof(name)) < 0) {
+      return NULL;
+   }
    job = (JOB *)GetResWithName(R_JOB, name);
    return job;
 }
@@ -246,7 +254,9 @@ JOB *select_restore_job_resource(UAContext *ua)
       }
    }
    UnlockRes();
-   do_prompt(ua, _("Job"), _("Select Restore Job"), name, sizeof(name));
+   if (do_prompt(ua, _("Job"), _("Select Restore Job"), name, sizeof(name)) < 0) {
+      return NULL;
+   }
    job = (JOB *)GetResWithName(R_JOB, name);
    return job;
 }
@@ -269,7 +279,9 @@ CLIENT *select_client_resource(UAContext *ua)
       }
    }
    UnlockRes();
-   do_prompt(ua, _("Client"),  _("Select Client (File daemon) resource"), name, sizeof(name));
+   if (do_prompt(ua, _("Client"),  _("Select Client (File daemon) resource"), name, sizeof(name)) < 0) {
+      return NULL;
+   }
    client = (CLIENT *)GetResWithName(R_CLIENT, name);
    return client;
 }
@@ -551,7 +563,9 @@ POOL *select_pool_resource(UAContext *ua)
       }
    }
    UnlockRes();
-   do_prompt(ua, _("Pool"), _("Select Pool resource"), name, sizeof(name));
+   if (do_prompt(ua, _("Pool"), _("Select Pool resource"), name, sizeof(name)) < 0) {
+      return NULL;
+   }
    pool = (POOL *)GetResWithName(R_POOL, name);
    return pool;
 }
@@ -673,12 +687,16 @@ void add_prompt(UAContext *ua, const char *prompt)
  *  Returns: -1 on error
  *            index base 0 on success, and choice
  *               is copied to prompt if not NULL
+ *             prompt is set to the chosen prompt item string
  */
 int do_prompt(UAContext *ua, const char *automsg, const char *msg, char *prompt, int max_prompt)
 {
    int i, item;
    char pmsg[MAXSTRING];
 
+   if (prompt) {
+      *prompt = 0;
+   }
    if (ua->num_prompts == 2) {
       item = 1;
       if (prompt) {
@@ -698,15 +716,11 @@ int do_prompt(UAContext *ua, const char *automsg, const char *msg, char *prompt,
       bsendmsg(ua, "%6d: %s\n", i, ua->prompt[i]);
    }
 
-   if (prompt) {
-      *prompt = 0;
-   }
-
    for ( ;; ) {
       /* First item is the prompt string, not the items */
       if (ua->num_prompts == 1) {
          bsendmsg(ua, _("Selection is empty!\n"));
-         item = 0;                    /* list is empty ! */
+         item = -1;                    /* list is empty ! */
          break;
       }
       if (ua->num_prompts == 2) {
@@ -741,7 +755,7 @@ done:
       free(ua->prompt[i]);
    }
    ua->num_prompts = 0;
-   return item - 1;
+   return item>0 ? item-1 : item;
 }
 
 
index 1cd40e8e162250719475795cd1bbc38bba04774c..ffc795eb2311805bfc19ec4c797f42772d8404a9 100644 (file)
@@ -590,7 +590,7 @@ static int update_volume(UAContext *ua)
          update_all_vols_from_pool(ua);
          return 1;
       default:                        /* Done or error */
-         bsendmsg(ua, _("Selection done.\n"));
+         bsendmsg(ua, _("Selection terminated.\n"));
          return 1;
       }
    }
index b8f98bcb455942d5dc56d8bb8bee0156d68cb166..39646a544382f45c5c7b653e754e1ea366778439 100644 (file)
@@ -140,7 +140,7 @@ int bacl_get(JCR *jcr, int acltype)
 
    if ((acl_text = acl_get(jcr->last_fname)) != NULL) {
       len = pm_strcpy(jcr->acl_text, acl_text);
-      free(acl_text);
+      actuallyfree(acl_text);
       return len;
    }
    return -1;
@@ -270,7 +270,7 @@ int bacl_get(JCR *jcr, int acltype)
    if ((n = getacl(jcr->last_fname, n, acls)) > 0) {
       if ((acl_text = acltostr(n, acls, FORM_SHORT)) != NULL) {
          len = pm_strcpy(jcr->acl_text, acl_text);
-         free(acl_text);
+         actuallyfree(acl_text);
          return len;
       }
    }
index ef3c2df6df20359ce30479ae93c2de480473e903..d0d5957a4b6e27164a77326c5a4eb4bdced8b668 100644 (file)
@@ -153,7 +153,6 @@ bnet_thread_server(dlist *addrs, int max_clients, workq_t *client_wq,
          /* Error, get out */
          foreach_dlist(fd_ptr, &sockfds) {
             close(fd_ptr->fd);
-            free((void *)fd_ptr);
          }
          Emsg1(M_FATAL, 0, _("Error in select: %s\n"), be.strerror());
          break;
index 008cc228aa2c86ca2f122772e627f293389ba017..63c2feea354c105cf83b594c3eff728186d58277 100644 (file)
@@ -163,6 +163,7 @@ int autoload_device(DCR *dcr, int writing, BSOCK *dir)
             rtn_stat = -1;            /* hard error */
          }
          Dmsg2(400, "load slot %d status=%d\n", slot, status);
+         unlock_changer(dcr);
       } else {
          status = 0;                  /* we got what we want */
          dev->Slot = slot;            /* set currently loaded slot */
@@ -174,7 +175,6 @@ int autoload_device(DCR *dcr, int writing, BSOCK *dir)
    } else {
       rtn_stat = 0;                   /* no changer found */
    }
-   unlock_changer(dcr);
    free_pool_memory(changer);
    return rtn_stat;
 
index 122d3228240fec99e6cc639d6e7c7700bf0127a9..b4aa6831c30ba403f32a1762c7fe46d1dccd9640 100755 (executable)
@@ -169,7 +169,7 @@ BSR *find_next_bsr(BSR *root_bsr, DEVICE *dev)
       Dmsg2(300, "No nxt_bsr use_pos=%d repos=%d\n", root_bsr->use_positioning, root_bsr->reposition);
       return NULL;
    }
-   Dmsg2(100, "use_pos=%d repos=%d\n", root_bsr->use_positioning, root_bsr->reposition);
+   Dmsg2(300, "use_pos=%d repos=%d\n", root_bsr->use_positioning, root_bsr->reposition);
    root_bsr->mount_next_volume = false;
    for (bsr=root_bsr; bsr; bsr=bsr->next) {
       if (bsr->done || !match_volume(bsr, bsr->volume, &dev->VolHdr, 1)) {
@@ -252,7 +252,7 @@ static BSR *find_smallest_volfile(BSR *found_bsr, BSR *bsr)
 bool match_set_eof(BSR *bsr, DEV_RECORD *rec)
 {
    BSR *rbsr = rec->bsr;
-   Dmsg1(100, "match_set %d\n", rbsr != NULL);
+   Dmsg1(300, "match_set %d\n", rbsr != NULL);
    if (!rbsr) {
       return false;
    }
@@ -261,7 +261,7 @@ bool match_set_eof(BSR *bsr, DEV_RECORD *rec)
    if (rbsr->count && rbsr->found >= rbsr->count) {
       rbsr->done = true;
       rbsr->root->reposition = true;
-      Dmsg2(100, "match_set_eof reposition count=%d found=%d\n",
+      Dmsg2(500, "match_set_eof reposition count=%d found=%d\n",
          rbsr->count, rbsr->found);
       return true;
    }
@@ -284,19 +284,19 @@ static int match_all(BSR *bsr, DEV_RECORD *rec, VOLUME_LABEL *volrec,
       goto no_match;
    }
    if (!match_volfile(bsr, bsr->volfile, rec, 1)) {
-      Dmsg2(100, "Fail on file. bsr=%d rec=%d\n", bsr->volfile->efile,
+      Dmsg2(300, "Fail on file. bsr=%d rec=%d\n", bsr->volfile->efile,
          rec->File);
       goto no_match;
    }
    if (!match_sesstime(bsr, bsr->sesstime, rec, 1)) {
-      Dmsg2(100, "Fail on sesstime. bsr=%d rec=%d\n",
+      Dmsg2(300, "Fail on sesstime. bsr=%d rec=%d\n",
          bsr->sesstime->sesstime, rec->VolSessionTime);
       goto no_match;
    }
 
    /* NOTE!! This test MUST come after the sesstime test */
    if (!match_sessid(bsr, bsr->sessid, rec)) {
-      Dmsg2(100, "Fail on sessid. bsr=%d rec=%d\n",
+      Dmsg2(300, "Fail on sessid. bsr=%d rec=%d\n",
          bsr->sessid->sessid, rec->VolSessionId);
       goto no_match;
    }
@@ -449,7 +449,7 @@ static int match_volfile(BSR *bsr, BSR_VOLFILE *volfile, DEV_RECORD *rec, bool d
    if (!(rec->state & REC_ISTAPE)) {
       return 1;                       /* All File records OK for this match */
    }
-// Dmsg3(100, "match_volfile: sfile=%d efile=%d recfile=%d\n",
+// Dmsg3(300, "match_volfile: sfile=%d efile=%d recfile=%d\n",
 //             volfile->sfile, volfile->efile, rec->File);
    if (volfile->sfile <= rec->File && volfile->efile >= rec->File) {
       return 1;
@@ -466,7 +466,7 @@ static int match_volfile(BSR *bsr, BSR_VOLFILE *volfile, DEV_RECORD *rec, bool d
    if (volfile->done && done) {
       bsr->done = true;
       bsr->root->reposition = true;
-      Dmsg2(100, "bsr done from volfile rec=%d volefile=%d\n",
+      Dmsg2(300, "bsr done from volfile rec=%d volefile=%d\n",
          rec->File, volfile->efile);
    }
    return 0;
@@ -503,7 +503,7 @@ static int match_sesstime(BSR *bsr, BSR_SESSTIME *sesstime, DEV_RECORD *rec, boo
    if (sesstime->done && done) {
       bsr->done = true;
       bsr->root->reposition = true;
-      Dmsg0(100, "bsr done from sesstime\n");
+      Dmsg0(300, "bsr done from sesstime\n");
    }
    return 0;
 }
@@ -549,7 +549,7 @@ static int match_findex(BSR *bsr, BSR_FINDEX *findex, DEV_RECORD *rec, bool done
    if (findex->done && done) {
       bsr->done = true;
       bsr->root->reposition = true;
-      Dmsg1(100, "bsr done from findex %d\n", rec->FileIndex);
+      Dmsg1(300, "bsr done from findex %d\n", rec->FileIndex);
    }
    return 0;
 }
index 9ea2d3a41daa0487f5066ff5f49e11ccd6bf0a15..de80fd34b048d93cbee6311e11defd7956e5ca7c 100644 (file)
@@ -264,6 +264,7 @@ static void list_running_jobs(BSOCK *user)
    bool found = false;
    int bps, sec;
    JCR *jcr;
+   DCR *dcr;
    char JobName[MAX_NAME_LENGTH];
    char b1[30], b2[30], b3[30];
 
@@ -273,7 +274,8 @@ static void list_running_jobs(BSOCK *user)
          bnet_fsend(user, _("%s Job %s waiting for Client connection.\n"),
             job_type_to_str(jcr->JobType), jcr->Job);
       }
-      if (jcr->dcr && jcr->dcr->device) {
+      dcr = jcr->dcr;
+      if (dcr && dcr->device) {
          bstrncpy(JobName, jcr->Job, sizeof(JobName));
          /* There are three periods after the Job name */
          char *p;
@@ -282,13 +284,16 @@ static void list_running_jobs(BSOCK *user)
                *p = 0;
             }
          }
-         bnet_fsend(user, _("%s %s job %s JobId=%d Volume=\"%s\" device=\"%s\"\n"),
+         bnet_fsend(user, _("%s %s job %s JobId=%d Volume=\"%s\"\n"
+                            "    pool=\"%s\" device=\"%s\"\n"),
                    job_level_to_str(jcr->JobLevel),
                    job_type_to_str(jcr->JobType),
                    JobName,
                    jcr->JobId,
-                   jcr->dcr->VolumeName,
-                   jcr->dcr->device->device_name);
+                   dcr->VolumeName,
+                   dcr->pool_name,
+                   dcr->dev?dcr->dev->print_name(): 
+                            dcr->device->device_name);
          sec = time(NULL) - jcr->run_time;
          if (sec <= 0) {
             sec = 1;
index c833add8de55bb6ce04818148b0321523b242903..2f00de4b58abb062e57084692f38b2da2241caad 100644 (file)
@@ -222,16 +222,16 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm
          res->res_dev.hdr.name,
          res->res_dev.media_type, res->res_dev.device_name,
          res->res_dev.label_type);
-      sendit(sock, "        rew_wait=%d min_bs=%d max_bs=%d\n",
+      sendit(sock, "        rew_wait=%d min_bs=%d max_bs=%d chgr_wait=%d\n",
          res->res_dev.max_rewind_wait, res->res_dev.min_block_size,
-         res->res_dev.max_block_size);
+         res->res_dev.max_block_size, res->res_dev.max_changer_wait);
       sendit(sock, "        max_jobs=%d max_files=%" lld " max_size=%" lld "\n",
          res->res_dev.max_volume_jobs, res->res_dev.max_volume_files,
          res->res_dev.max_volume_size);
       sendit(sock, "        max_file_size=%" lld " capacity=%" lld "\n",
          res->res_dev.max_file_size, res->res_dev.volume_capacity);
-      sendit(sock, "         spool_directory=%s\n", NPRT(res->res_dev.spool_directory));
-      sendit(sock, "         max_spool_size=%" lld " max_job_spool_size=%" lld "\n",
+      sendit(sock, "        spool_directory=%s\n", NPRT(res->res_dev.spool_directory));
+      sendit(sock, "        max_spool_size=%" lld " max_job_spool_size=%" lld "\n",
          res->res_dev.max_spool_size, res->res_dev.max_job_spool_size);
       if (res->res_dev.changer_res) {
          sendit(sock, "         changer=%p\n", res->res_dev.changer_res);
index c77f6e327f14cecb474be34b1d71b7abbb446cc9..69a41059e877175786a9f9fce9444ba1a6a81a76 100644 (file)
@@ -881,7 +881,7 @@ int docmd(monitoritem* item, const char* command, GSList** list) {
       }
 
       if (item->D_sock == NULL) {
-         g_slist_append(*list, (void *)_("Cannot connect to daemon.\n"));
+         g_slist_append(*list, g_string_new(_("Cannot connect to daemon.\n")));
          changeStatusMessage(item, _("Cannot connect to daemon."));
          item->state = error;
          item->oldstate = error;
index f8c64a1678be93171987a5c65b54fa2a1d356338..c308c8273e62e4f6c93b43f2908411d89ac9375a 100644 (file)
@@ -4,8 +4,8 @@
 
 #undef  VERSION
 #define VERSION "1.39.0"
-#define BDATE   "13 November 2005"
-#define LSMDATE "13Nov05"
+#define BDATE   "20 November 2005"
+#define LSMDATE "20Nov05"
 
 /* Debug flags */
 #undef  DEBUG